向所有网络发送广播

时间:2013-06-17 08:51:35

标签: python networking python-3.x udp broadcast

我目前正在编写一个python程序,需要在LAN上发现自己的其他实例。它使用UDP广播进行发现(255.255.255.255)。

问题是如果计算机有多个网络适配器(连接到多个网络),那么这些网络中只有一个将接收广播。我最初的想法是枚举分配给本地网络的所有网络地址,并为每个网络地址发送一个广播数据包(例如192.168.0.255192.168.1.255)。但是,似乎没有可靠的方法来检测所有本地网络地址,因为我发现和尝试的所有内容都依赖于仅使用python-2的库或仅在我的linux虚拟机上返回127.0.1.1(其{{1}和其他一些)。

在这种情况下,如何向所有可用网络广播?

我正在使用Python 3,并且正在寻找与平台无关的方法来实现它,并且没有大型第三方库。 192.168.0.100显示所有网络接口的库将完成这项工作。

2 个答案:

答案 0 :(得分:0)

试试nmap。这里有python-nmap https://pypi.python.org/pypi/python-nmap符合您的需求

注意:0.2.7版本号用于python-nmap,而不是python本身,因此它适用于python3)。

答案 1 :(得分:0)

有趣的问题。但是:

  1. 在每个节点上安装应用程序之前,不要期望网络中的每台计算机都能应答。出于安全原因,在某些类型的设备和系统中禁止回答广播。
  2. 您可以尝试使用以下代码获取本地地址:

    import socket
    myips = socket.gethostbyname_ex(socket.gethostname())[2]
    [ip for ip in myips if not ip.startswith("127.")][:1]
    

    检测到该IP的网络掩码集的问题仍然存在。

  3. 同时使用 pypi 上提供的netifaces模块。页面上的示例足以说明如何使用该模块。