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