【发布时间】:2008-09-17 17:23:23
【问题描述】:
我想在我的网络上搜索给定的 MAC 地址,所有这些都来自 Python 脚本。我已经有了网络中所有活动 IP 地址的映射,但我不知道如何收集 MAC 地址。有什么想法吗?
【问题讨论】:
-
This article,“在 Python 中发送手工制作的以太网帧(例如 ARP)”,似乎正是您要找的。span>
标签: python network-programming
我想在我的网络上搜索给定的 MAC 地址,所有这些都来自 Python 脚本。我已经有了网络中所有活动 IP 地址的映射,但我不知道如何收集 MAC 地址。有什么想法吗?
【问题讨论】:
标签: python network-programming
我认为没有内置的方法可以从 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 模块 here 为当前机器执行此操作。您可以在 python.org 上获取 Netbios 模块作为 Win32 包的一部分。不幸的是,目前我找不到模块上的文档。
【讨论】:
由于 python 不是为了处理特定于操作系统的问题(它应该被解释和跨平台),我会执行一个外部命令来这样做:
在 unix 中,命令是ifconfig
如果你将它作为管道执行,你会得到想要的结果:
import os
myPipe = os.popen2("/sbin/ifconfig","a")
print(myPipe[1].read())
【讨论】: