为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕森王 2021-04-02 14:11:45
我想从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})


查看完整回答
反对 回复 2021-04-27
?
哔哔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"))


查看完整回答
反对 回复 2021-04-27
  • 3 回答
  • 0 关注
  • 352 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信