接上文,能够自动收集网络设备MAC地址表和ARP表后,根据MAC地址的前缀是能够判断该网卡的制造厂商的,就此引出了本文。
本文将介绍利用logstash 中translate插件,实现MAC地址前缀到厂商名称的自动翻译。
MAC地址中OUI的概念
在任何一块网卡(NIC)中烧录的6字节MAC地址中,前3个字节体现了OUI,其表明了NIC的制造组织。通常情况下,该标识符是唯一的。
以太网采用介质访问控制(Media Access Control,MAC)地址进行寻址,MAC地址被烧入每个以太网网卡(Network Interface Card,NIC)中。MAC地址也叫做硬件地址,它采用48位(6字节)的十六进制格式。
48位的MAC地址包括两部分:24位组织唯一标志符(OUI)和剩下的24位由厂家分配的代码
组织唯一标志符(OUI)是由电器和电子工程师协会(IEEE)分配给单位组织的,它包含了24位(3字节)。各个单位组织依次被分配一个全局管理地址(24位,或3个字节),对于厂家生产的每一块网卡来说,这个地址是唯一的。
在24位OUI中,最高位是 Individual/Group(I/G)位,当它的值为0时,就可以认为这个地址实际上是设备的MAC地址,它可能出现在MAC报头的源地址部分。当它的值为1时,就可以认为这个地址表示以太网中的广播地址或组播地址,或者表示TR和FDDI中的广播地址或功能地址。下一位是G/L位(也称U/L,这里的U表示全局)。当它的值为0时,就表示一个全局管理地址(由IEEE分配)。当它的值为1时,就表示一个在管理上通统治本地得地址(就像在DECnet中一样)。
以太网的后24位地址表示本地管理的或厂商分配的代码。厂家制造的第一块网卡的这一部分地址通常以24个0开头,最后一块网卡则以24个1结束(共有16,777,216块网卡)。在实际中发现,许多厂商使用同样的6个十六进制数字作为同一块网卡上需六号的最后6个数字。
首先要搞到一个合适的MAC前缀列表
实际上已经有人专门为logstash编写了插件
https://github.com/Vigilant-LLC/logstash-filter-ieee_oui
我没有直接装这个插件,这个项目很长时间已经没有更新了。
这个开源插件上有个小东西还是可以很好的利用的
https://github.com/Vigilant-LLC/logstash-oui-scraper
usage: ls-oui-scraper -d /tmp
这条命令可以把IEEE里的OUI列表直接取回来,而且还可以自动进行格式处理
处理后的格式是下面这样的:
下面就利用这个列表简单处理后,直接利用logstash translate实现功能
列表处理后的样子:
一定注意key和value都要用双引号,冒号后有个空格,格式如果有问题时,有时候查询的结果不准确
logstash filter中的关键内容:
##用grok将MAC地址前三段分别取出来,在连在一起,方法有点笨,如果有人知道更简单的方法可以共同探讨
grok {
match => { "MACaddress" => "(?<MAC1>[A-Fa-f0-9]{2}):(?<MAC2>[A-Fa-f0-9]{2}):(?<MAC3>[A-Fa-f0-9]{2})" }
add_field => { "MACprefix" => "%{MAC1}%{MAC2}%{MAC3}"}
remove_field => ["MAC1","MAC2","MAC3"]
}
##要将MAC地址前缀改成大写
mutate { uppercase => ["MACprefix"]}
##下面就是自动翻译了
translate {
field => "MACprefix"
destination => "MACoui"
##没查到就标一个no_match
fallback => "no_match"
##下面标一下字典文件的位置
dictionary_path => "/nhserear/MACoui.yml"
##字典文件可以更新后可以直接覆盖,logstash会间隔时间过来看看该文件是否发生改变了
refresh_interval => 300
##如果发现文件变了就重新加载,默认动作是merge合并,本例中我们用replace,要确保该文件始终是最全的
refresh_behaviour => "replace"
}
下面是处理后的可视化截图:
最后说一句,translate这个插件能力还是很强的,我尝试过超过10万条(15MB)记录直接加载,运行还很顺畅。
最后把我处理好的这个文件共享给大家,OUI这个列表还是会更新的,这个更新是2021-1-23日。
https://drive.weixin.qq.com/s?k=AA0AYwdwAAYi2bmMrBAJwAGgaAACE