Linux 如何在Openwrt中解析DHCP租约文件中的特定MAC地址?

Linux 如何在Openwrt中解析DHCP租约文件中的特定MAC地址?,linux,shell,mac-address,openwrt,dhcp,Linux,Shell,Mac Address,Openwrt,Dhcp,我正试图编写一个脚本,用相应的地址解析Openwrt中DHCP租约文件中的一些设备。我正在维护一个带有供应商MAC地址的列表。当我将设备连接到路由器时,我希望使用DHCP租约文件中的供应商MAC获取该设备的IP地址、MAC地址和名称 例如,如果我维护了供应商MAC地址列表,如 MAC LIST = {"00:01:0A","00:00:1A","00:00:39"} where , 00:01:0A - CISCO 00:00:1A - AMD 00:00:39 -

我正试图编写一个脚本,用相应的地址解析Openwrt中DHCP租约文件中的一些设备。我正在维护一个带有供应商MAC地址的列表。当我将设备连接到路由器时,我希望使用DHCP租约文件中的供应商MAC获取该设备的IP地址、MAC地址和名称

例如,如果我维护了供应商MAC地址列表,如

MAC LIST =  {"00:01:0A","00:00:1A","00:00:39"}
where ,
    00:01:0A - CISCO
    00:00:1A - AMD  
    00:00:39 - Toshiba TOSHIBA CORPORATION
并且在Openwrt dhcp租约文件中包含不同的设备,例如:

这里我得到一个思科设备,MAC地址从00:01:0A开始。我想在openwrt/Unix中编写一个bash脚本,从/tmp/dhcp.leases文件中获取与MAC列表相关的所有设备的相应IP地址、名称和MAC地址。如果找不到重置为MAC列表的设备,脚本应返回NULL。如何使用脚本解析此地址列表?有什么建议吗

更新:

我想将供应商MAC地址的前3位数字与dhcp文件进行比较。例如,我的列表在MAC.txt文件中包含以下3位供应商MAC地址:

/usr/MAC.txt
---------

     00:01:0A
     00:00:1A
     00:00:39
和dhcp.0文件包含:

root@OpenWrt:/cat/tmp/dhcp

1568953482  70:B3:D5:14:D0:31 192.168.3.51 device1 01:70:B3:D5:14:D0:31
2867821468  38:B8:EB:10:00:22 192.168.5.93 device2 01:38:B8:EB:10:00:22
8984532873  00:01:0A:33:11:33 192.168.5.44 CISCOee1 01:00:01:0A:33:11:33
8984532874  00:01:0A:34:12:34 192.168.5.44 CISCOee2 01:00:01:0A:34:12:34
现在我想比较MAC.txt文件和dhcp.leaves文件中的dhcp租约文件MAC地址。如果前3位匹配,那么我想返回匹配设备的IP地址、MAC地址和名称

Sample output :

         00:01:0A:33:11:33 192.168.5.44 CISCOee1
         00:01:0A:34:12:34 192.168.5.44 CISCOee2

如果未找到任何内容,则发送NULL作为输出。

不确定这是否是您要查找的内容,但:

MAC文件内容:

MAC LIST =  {"00:01:0A","00:00:1A","00:00:39"}
where ,
   00:01:0A - CISCO
   00:00:1A - AMD  
   00:00:39 - Toshiba TOSHIBA CORPORATION 
解决方案:

awk -F\" '/MAC LIST/ { for (i=2;i<=NF-1;i++) { maccie=gensub(",","","g",$i);if ( maccie != "") { macs[maccie]="" } } } FNR==1 && NR != 1 { STRT=1 } STRT==1 { for (i in macs) { FS=" ";if ($2 ~ i) { print $2" - "$3;found[i]=1 } } } END { for (i in macs) { if ( found[i]!=1 ) { print i" - NULL"} } }' MAC dhcp.leases

这里我们让awk处理维护列表和dhcp.leaves中的两个文件。我们将分隔符设置为,然后构建一个mac地址数组,当行中遇到字符串mac列表时,将它们放置在mac中。一旦到达dhcp.leases文件FNR-文件编号记录为1,但两个文件的编号记录都不是一个,我们设置一个变量STRT=1,以表示对dhcp.leases文件的处理。当STRT=1时,我们在dhcp.leases文件中,我们将字段分隔符FS更改为并循环通过mac阵列模式中的每个mac地址,该mac地址与行上的第二个分隔数据段相匹配。如果完整mac地址匹配,我们打印数据并设置一个使用mac地址找到的数组。最后,我们再次循环检查mac中的每个mac地址,并对照找到的数组进行检查。如果find中的条目等于1,则忽略,否则打印NULL。

我清楚地更新了我的问题。请确保你完成了这个。谢谢你的宝贵建议。脚本中的最后一行是什么?是文件路径吗?因此,我可以更改为MAC/tmp/dhcp.leasemac是您维护的文件,其中包含文本MAC列表dhcp.leases是dhcp租赁文件。Awk正在处理这两个文件。好的。但是我的dhcp租约文件位于/tmp/dhcp.leases文件中。那么我可以更改代码的结尾,比如/user/MAC.txt/tmp/dhcp.txt吗?或者我可以用MAC列表作为地址数组将此代码写入bash/shell脚本吗?不,只需将MAC和dhcp.lease更改为您想要的任何文件名和路径即可。
awk -F\" '/MAC LIST/ { for (i=2;i<=NF-1;i++) { maccie=gensub(",","","g",$i);if ( maccie != "") { macs[maccie]="" } } } FNR==1 && NR != 1 { STRT=1 } STRT==1 { for (i in macs) { FS=" ";if ($2 ~ i) { print $2" - "$3;found[i]=1 } } } END { for (i in macs) { if ( found[i]!=1 ) { print i" - NULL"} } }' MAC dhcp.leases
00:01:0A:33:11:33 - 192.168.5.44
00:00:1A - NULL
00:00:39 - NULL