9

我想在我的网络上搜索给定的 MAC 地址,所有这些都来自 Python 脚本。我已经有了网络中所有活动 IP 地址的映射,但我不知道如何收集 MAC 地址。有任何想法吗?

4

8 回答 8

12

你需要ARP。Python 的标准库不包含任何代码,因此您要么需要调用外部程序(您的操作系统可能有一个“arp”实用程序),要么您需要自己构建数据包(可能使用像Scapy这样的工具。

于 2008-09-17T17:28:21.520 回答
1

我认为没有内置的方法可以从 Python 本身获取它。

我的问题是,您如何从网络中获取 IP 信息?

要从本地计算机获取它,您可以轻松解析 ifconfig (unix) 或 ipconfig (windows)。

于 2008-09-17T17:27:49.760 回答
1

如果你想要一个纯 Python 解决方案,你可以看看Scapy来制作数据包(你需要发送 ARP 请求,并检查回复)。或者,如果您不介意调用外部程序,您可以使用arping(在 Un*x 系统上,我不知道 Windows 等效程序)。

于 2008-09-17T17:30:54.277 回答
1

似乎没有使用 Python 执行此操作的本地方法。最好的办法是在 Windows 上解析“ipconfig /all”的输出,或者在 Linux 上解析“ifconfig”的输出。考虑将 os.popen() 与一些正则表达式一起使用。

于 2008-09-17T17:31:18.223 回答
0

取决于你的平台。如果您使用 *nix,您可以使用“arp”命令查找给定 IP(假设为 IPv4)地址的 mac 地址。如果这不起作用,您可以 ping 地址然后查看,或者如果您可以访问原始网络(使用 BPF 或其他机制),您可以发送自己的 ARP 数据包(但这可能是矫枉过正)。

于 2008-09-17T17:29:29.913 回答
0

您可能想要解析“arp”的输出,但内核 ARP 缓存将仅包含那些 IP 地址(如果这些主机已与运行 Python 脚本的主机通信)。

ifconfig 可用于显示本地接口的 MAC 地址,但不能显示 LAN 上的 MAC 地址。

于 2008-09-17T17:32:21.917 回答
0

Mark Pilgrim 描述了如何在 Windows 上使用 Netbios 模块在 Windows 上执行此操作。您可以从 python.org 获取 Netbios 模块作为 Win32 包的一部分。不幸的是,目前我找不到模块上的文档。

于 2008-09-17T17:38:25.007 回答
-1

由于 python 并不意味着处理特定于操作系统的问题(它应该被解释和跨平台),我会执行一个外部命令来这样做:

在 unix 中,命令是ifconfig

如果您将其作为管道执行,您将获得所需的结果:

import os
myPipe = os.popen2("/sbin/ifconfig","a")
print(myPipe[1].read())
于 2008-09-17T19:13:45.543 回答