![](/img/trans.png)
[英]How to extract IP address ,MAC address and name from dhcp.lease file with a shell script?
[英]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.