使用Python搜索具有MAC地址的主机

时间:2008-09-17 17:23:23

标签: python network-programming

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

9 个答案:

答案 0 :(得分:11)

您需要ARP。 Python的标准库不包含任何代码,因此您需要调用外部程序(您的操作系统可能具有'arp'实用程序)或者您需要自己构建数据包(可能使用{{3}之类的工具}。

答案 1 :(得分:2)

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

答案 2 :(得分:1)

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

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

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

答案 3 :(得分:1)

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

答案 4 :(得分:1)

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

答案 5 :(得分:0)

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

答案 6 :(得分:0)

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

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

答案 7 :(得分:0)

Mark Pilgrim介绍了如何在Windows上为Netbios模块here的当前计算机执行此操作。您可以将Netbios模块作为python.org上提供的Win32软件包的一部分。不幸的是,目前我无法在模块上找到文档。

答案 8 :(得分:-1)

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

在unix中,命令为ifconfig

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

import os
myPipe = os.popen2("/sbin/ifconfig","a")
print(myPipe[1].read())