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

有帮助吗?

解决方案

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

其他提示

本文, ,“用 Python 发送手工制作的以太网帧(例如 ARP)”,似乎正是您正在寻找的内容。

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

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

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

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

Python 似乎没有一种本地方法可以做到这一点。最好的选择是在 Windows 上解析“ipconfig /all”的输出,或在 Linux 上解析“ifconfig”的输出。考虑将 os.popen() 与一些正则表达式一起使用。

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

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

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

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

由于 python 并不是要处理特定于操作系统的问题(它应该被解释和跨平台),我将执行一个外部命令来执行此操作:

在unix中命令是 ifconfig

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

import os
myPipe = os.popen2("/sbin/ifconfig","a")
print(myPipe[1].read())
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top