2017-07-18 264 views
0

我想寫一個腳本來解析Openwrt中的DHCP租約文件的一些設備與相應的地址。我維護一個供應商MAC地址列表。當我將設備連接到路由器時,我想從DHCP租賃文件中使用供應商MAC獲取該設備的IP地址,MAC地址和名稱。如何在Openwrt中解析來自DHCP租約文件的特定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租用文件包含不同的設備例如

[email protected]:/# 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 

我在這裏得到一個CISCO設備的MAC地址從00:01:0A開始。我想在openwrt/Unix中編寫一個bash腳本,以便從/tmp/dhcp.leases文件中獲取與MAC LIST相關的所有設備的相應IP地址,名稱和MAC地址。如果找不到重置爲MAC LIST的設備,則該腳本應返回NULL。我怎樣才能解析這個地址列表使用腳本?有什麼建議麼 ?

更新:

我想將第一3位商MAC地址的DHCP與比較租賃文件。例如我的列表中包含的文件MAC.txt下列供應商的MAC地址(3位):

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

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

和dhcp.leases包含:

根@的OpenWrt:/#貓的/ 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 

現在我想比較dhcp租賃文件的MAC地址從MAC.txt文件與dhcp.leases文件。如果前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作爲輸出。

回答

1

不知道這是你在找什麼,但:

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來處理博th文件MAC(維護的列表)和dhcp.leases。我們將分隔符設置爲「,然後在行中遇到字符串」MAC LIST「時,構建一組將mac地址放入」mac「的mac地址。一旦我們到達dhcp.leases文件(FNR - 文件編號記錄是1但兩個文件的數字記錄不是一個)我們設置一個變量STRT = 1來表示對dhcp.leases文件的處理。當STRT = 1時(我們在dhcp中。租用文件)我們將字段分隔符(FS)更改爲「」,並通過macs數組模式中的每個mac地址進行循環,匹配該行上的第二個分隔數據段(完整MAC地址)。如果匹配,我們會打印出數據並用MAC地址設置「找到」數組。然後,我們再次遍歷「mac」中的每個mac地址,再次檢查「found」數組。如果找到的條目存在(等於1),則忽略,否則打印NULL。

+0

我更新了我的問題。請確保你完成了這個。感謝您的寶貴建議。 –

+0

腳本中最後一行'MAC dhcp.leases'是什麼?它是文件路徑嗎?所以我可以更改爲'MAC/tmp/dhcp.leases' –

+0

MAC是您維護的文件(包含文本MAC LIST)dhcp.leases是dhcp租約文件。 Awk正在處理這兩個文件。 –