我想從arpUbuntu上的命令行輸出中獲取mac地址和相應的IP地址(例如,以mac地址作為鍵和ip地址的字典)作為值。$ arpAddress HWtype HWaddress Flags Mask IfaceXX.X.X.X(XX) ether XX:XX:XX:XX:XX:XX C eth0<host name> ether XX:XX:XX:XX:XX:XX C eth0ip地址(?P<ip>\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})的正則表達式和macs的正則表達式(?P<mac>[0-9a-f]{2}[:]){5}([0-9a-f]{2})單獨工作就可以了。我如何才能將兩者結合起來而忽略IP地址和Mac之間的所有內容?如何改善ip地址正則表達式以匹配主機名?如果有更好的替代方法arp來同時獲取IP地址和Mac,我很樂意使用此命令。
3 回答

長風秋雁
TA貢獻1757條經驗 獲得超7個贊
要加入它們并忽略中間信息,只需在中間添加“。*”,它就可以匹配任何內容,但不會分配給一個組:
(?P<ip>\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}).*([0-9a-f]{2}[:]){5}([0-9a-f]{2})
為了說明主機名,最好在不嘗試確保它是正確的IP或主機名的情況下捕獲第一個字段。只需捕獲第一個字段,直到空格:
^(?P<ip>[^\s]+)
因此,第一個帶有空洞和MAC的字段最終是:
^(?P<ip>[^\s]+).*(?P<mac>(?:[0-9a-f]{2}:){5}[0-9a-f]{2})

嗶嗶one
TA貢獻1854條經驗 獲得超8個贊
您也可以使用Python Scapy模塊獲取Mac
from scapy.all import *
def get_mac(ip_address):
responses,unanswered = srp(Ether(dst="ff:ff:ff:ff:ff:ff")/ARP(pdst=ip_address),timeout=2,retry=10)
# return the MAC address from a response
for s,r in responses:
return r[Ether].src
return None
print(get_mac("192.168.31.14"))
添加回答
舉報
0/150
提交
取消