我想从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
提交
取消