如何通过Python正则表达式从arp输出获取ip地址和mac地址?

我想从arpUbuntu上的命令行输出中获取mac地址和相应的IP地址(例如,以mac地址作为键和ip地址的字典)作为值。


$ arp

Address                  HWtype  HWaddress           Flags Mask            Iface

XX.X.X.X(XX)                ether   XX:XX:XX:XX:XX:XX   C                     eth0

<host name>                 ether   XX:XX:XX:XX:XX:XX   C                     eth0

ip地址(?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,我很乐意使用此命令。


慕森王
浏览 354回答 3
3回答

长风秋雁

要加入它们并忽略中间信息,只需在中间添加“。*”,它就可以匹配任何内容,但不会分配给一个组:(?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

您也可以使用Python Scapy模块获取Macfrom scapy.all import *def get_mac(ip_address):&nbsp; &nbsp; 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&nbsp; &nbsp; for s,r in responses:&nbsp; &nbsp; &nbsp; &nbsp; return r[Ether].src&nbsp; &nbsp; return Noneprint(get_mac("192.168.31.14"))
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python