我目前正在编写一个python程序,需要在LAN上发现自己的其他实例。它使用UDP广播进行发现(255.255.255.255
)。
问题是如果计算机有多个网络适配器(连接到多个网络),那么这些网络中只有一个将接收广播。我最初的想法是枚举分配给本地网络的所有网络地址,并为每个网络地址发送一个广播数据包(例如192.168.0.255
和192.168.1.255
)。但是,似乎没有可靠的方法来检测所有本地网络地址,因为我发现和尝试的所有内容都依赖于仅使用python-2的库或仅在我的linux虚拟机上返回127.0.1.1
(其{{1}和其他一些)。
在这种情况下,如何向所有可用网络广播?
我正在使用Python 3,并且正在寻找与平台无关的方法来实现它,并且没有大型第三方库。 192.168.0.100
显示所有网络接口的库将完成这项工作。
答案 0 :(得分:0)
试试nmap
。这里有python-nmap
https://pypi.python.org/pypi/python-nmap符合您的需求
注意:0.2.7版本号用于python-nmap
,而不是python本身,因此它适用于python3)。
答案 1 :(得分:0)
有趣的问题。但是:
您可以尝试使用以下代码获取本地地址:
import socket
myips = socket.gethostbyname_ex(socket.gethostname())[2]
[ip for ip in myips if not ip.startswith("127.")][:1]
检测到该IP的网络掩码集的问题仍然存在。
同时使用 pypi 上提供的netifaces模块。页面上的示例足以说明如何使用该模块。