【问题标题】:Obtain IP Address from MAC using python使用python从MAC获取IP地址
【发布时间】:2016-11-06 01:58:54
【问题描述】:

我的本​​地网络中有一个设备并且知道它的 MAC 地址。它通过 DHCP 自动获取它的 IP 地址。我要获取这个IP。

我不想使用 nmap,但 scapy 会很好,因为我是从 kivy 应用程序导入的。

我找到了:

from scapy.all import srp, Ether, ARP
ans,unans=srp(Ether(dst="ff:ff:ff:ff:ff:ff")/ARP(pdst="192.168.1.0/24"),timeout=2)

与

ans.summary()

我得到以下输出:

Ether / ARP who has 192.168.43.1 says 192.168.43.92 ==> Ether / ARP is at 3e:f8:d9:45:1b:3d says 192.168.43.1

我的两个问题是:

1:我必须使用 sudo python 运行脚本,我不确定 kivy 中的权限。

2:有没有一种简单的方法可以从 .summary() 中获取 IP/MAC 的变量?

【问题讨论】:

    标签: python ip scapy mac-address


    【解决方案1】:

    是的,你可以使用 scapy 来做到这一点。下面是一个 ARP is-at 数据包的示例:

    ###[ Ethernet ]###
      dst= 08:00:27:fa:25:8e
      src= 08:00:27:b1:af:68
      type= 0x806
        ###[ ARP ]###
         hwtype= 0x1
         ptype= 0x800
         hwlen= 6
         plen= 4
         op= is-at
         hwsrc= 08:00:27:b1:af:68
         psrc= 192.168.56.102
         hwdst= 08:00:27:fa:25:8e
         pdst= 192.168.56.101
            ###[ Padding ]###
                load= '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 \x00\x00\x00\x00'
    

    您可以将 hwsrc 和 psrc 值分配给这样的变量

    srcMAC = pkt[ARP].hwsrc
    srcIP = pkt[ARP].psrc
    

    或者像这样打印它们

    print pkt[ARP].hwsrc
    print pkt[ARP].psrc
    

    希望对您有所帮助。

    【讨论】:

    • 抱歉,我无法为您的答案投票。我的名声很小:D
    【解决方案2】:

    如果摘要的结构始终相同(我假设),那么您可以import re 并使用正则表达式来提取 IP 地址。

    应该是这样的:

    re.sub(r'.* says (.*) ==> Ether / ARP is.*', r'\1', ans.summary())
    

    这对我有用:

    >>> import re
    >>> x = "Ether / ARP who has 192.168.43.1 says 192.168.43.92 ==> Ether / ARP is at 3e:f8:d9:45:1b:3d says 192.168.43.1"
    >>> re.sub(r'.* says (.*) ==> Ether / ARP is.*', r'\1', x)
    '192.168.43.92'
    

    【讨论】:

    • 谢谢你!我试过了,但 ans.summary() 不返回字符串或缓冲区:
    • Traceback(最近一次调用最后):文件“”,第 1 行,在 re.sub(r'.* 说 (.*) ==> Ether / ARP 是.*', r'\1', ans.summary()) 文件“/usr/lib/python2.7/re.py”,第 155 行,在 sub return _compile(pattern, flags).sub(repl, string , count) TypeError: 预期的字符串或缓冲区
    • ans.summary() 是什么数据类型?
    • 它是一个无类型。输出是否来自子流程?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-27
    • 1970-01-01
    • 2010-12-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多