簡體   English   中英

如何從Openwrt的DHCP租約文件中解析特定的MAC地址?

[英]How to parse a particular MAC address from DHCP lease file in Openwrt?

我正在嘗試編寫一個腳本,以解析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租約文件中包含不同的設備,例如

root@OpenWrt:/# cat /tmp/dhcp.leases

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
8984532872  00:01:0A:33:11:33 192.168.5.44 CISCOee 01:00:01:0A:33:11:33

Where, 2nd column - MAC address , 3rd column - IP address and 4th column- Name

在這里,我得到的MAC地址從00:01:0A開始的CISCO設備。 我想在openwrt / Unix中編寫一個bash腳本,以從/tmp/dhcp.leases文件獲取相對於MAC LIST的所有設備的相應IP地址,名稱和MAC地址。 如果未找到重置為MAC LIST ,則腳本應返回NULL 如何使用腳本解析此地址列表? 有什么建議么 ?

更新:

我想將供應商MAC地址的前3位與dhcp租約文件進行比較。 例如,我的列表在MAC.txt文件中包含以下供應商MAC地址( 3位數字 ):

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

     00:01:0A
     00:00:1A
     00:00:39

並且dhcp.leases包含:

root @ OpenWrt:/#cat /tmp/dhcp.leases

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租約文件MAC地址和dhcp.leases文件。 如果前三個數字匹配 ,那么我想返回匹配設備的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

輸出量

00:01:0A:33:11:33 - 192.168.5.44
00:00:1A - NULL
00:00:39 - NULL

在這里,我們用awk來處理文件MAC(已維護列表)和dhcp.leases。 我們將定界符設置為“”,然后在該行中遇到字符串“ MAC LIST”時,構建將其放置在“ macs”中的mac地址數組。一旦我們到達dhcp.leases文件(FNR-文件號記錄是1,但兩個文件的數字記錄都不是1),我們設置了一個變量STRT = 1來表示dhcp.leases文件的處理。當STRT = 1(我們在dhcp.leases文件中)時,我們更改了字段定界符( FS)到“”並循環遍歷macs陣列模式中的每個mac地址,使其與該行上的第二個定界數據段(完整的MAC地址)匹配(如果匹配),我們打印出數據並設置一個數組“ found”最后,我們再次遍歷“ mac”中的每個mac地址,再次檢查數組“ found”。如果found中的條目存在(等於1),則忽略,否則打印NULL。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM