我想在我的网络上搜索给定的 MAC 地址,所有这些都来自 Python 脚本。我已经有了网络中所有活动 IP 地址的映射,但我不知道如何收集 MAC 地址。有任何想法吗?
8 回答
我认为没有内置的方法可以从 Python 本身获取它。
我的问题是,您如何从网络中获取 IP 信息?
要从本地计算机获取它,您可以轻松解析 ifconfig (unix) 或 ipconfig (windows)。
如果你想要一个纯 Python 解决方案,你可以看看Scapy来制作数据包(你需要发送 ARP 请求,并检查回复)。或者,如果您不介意调用外部程序,您可以使用arping
(在 Un*x 系统上,我不知道 Windows 等效程序)。
似乎没有使用 Python 执行此操作的本地方法。最好的办法是在 Windows 上解析“ipconfig /all”的输出,或者在 Linux 上解析“ifconfig”的输出。考虑将 os.popen() 与一些正则表达式一起使用。
取决于你的平台。如果您使用 *nix,您可以使用“arp”命令查找给定 IP(假设为 IPv4)地址的 mac 地址。如果这不起作用,您可以 ping 地址然后查看,或者如果您可以访问原始网络(使用 BPF 或其他机制),您可以发送自己的 ARP 数据包(但这可能是矫枉过正)。
您可能想要解析“arp”的输出,但内核 ARP 缓存将仅包含那些 IP 地址(如果这些主机已与运行 Python 脚本的主机通信)。
ifconfig 可用于显示本地接口的 MAC 地址,但不能显示 LAN 上的 MAC 地址。
Mark Pilgrim 描述了如何在 Windows 上使用 Netbios 模块在 Windows 上执行此操作。您可以从 python.org 获取 Netbios 模块作为 Win32 包的一部分。不幸的是,目前我找不到模块上的文档。
由于 python 并不意味着处理特定于操作系统的问题(它应该被解释和跨平台),我会执行一个外部命令来这样做:
在 unix 中,命令是ifconfig
如果您将其作为管道执行,您将获得所需的结果:
import os
myPipe = os.popen2("/sbin/ifconfig","a")
print(myPipe[1].read())