使用python从MAC获取IP地址

Seb*_*lzl 3 python ip mac-address scapy

我的本地网络中有一个设备并且知道它的 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)
Run Code Online (Sandbox Code Playgroud)

ans.summary()
Run Code Online (Sandbox Code Playgroud)

我得到以下输出:

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
Run Code Online (Sandbox Code Playgroud)

我的两个问题是:

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

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

Noo*_*123 6

是的,您可以使用 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'
Run Code Online (Sandbox Code Playgroud)

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

srcMAC = pkt[ARP].hwsrc
srcIP = pkt[ARP].psrc
Run Code Online (Sandbox Code Playgroud)

或者像这样打印它们

print pkt[ARP].hwsrc
print pkt[ARP].psrc
Run Code Online (Sandbox Code Playgroud)

希望有帮助。