【问题标题】:Search for host with MAC-address using Python使用 Python 搜索具有 MAC 地址的主机
【发布时间】:2008-09-17 17:23:23
【问题描述】:

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

【问题讨论】:

  • This article,“在 Python 中发送手工制作的以太网帧(例如 ARP)”,似乎正是您要找的。​​span>

标签: python network-programming


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          【解决方案5】:

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

          【讨论】:

            【解决方案6】:

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

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

            【讨论】:

              【解决方案7】:

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

              【讨论】:

                【解决方案8】:

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

                在 unix 中,命令是ifconfig

                如果你将它作为管道执行,你会得到想要的结果:

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

                【讨论】:

                • Python 具有特定于操作系统的模块,因此我认为您的回答具有误导性。处理这个问题的pythonic方法是一个模块,它有一个独立于操作系统的接口,可以被操作系统特定的插件子类化。
                猜你喜欢
                • 2023-02-15
                • 1970-01-01
                • 2020-05-14
                • 2022-06-14
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2020-01-06
                相关资源
                最近更新 更多