【发布时间】:2013-06-13 04:20:57
【问题描述】:
我目前正在编写一个 python 程序,该程序需要在 LAN 上发现其自身的其他实例。它使用 UDP 广播进行发现 (255.255.255.255)。
问题在于,如果计算机有多个网络适配器(连接到多个网络),那么只有其中一个网络会接收到广播。我最初的想法是枚举分配给本地网络的所有网络地址,并为每个地址发送一个广播数据包(例如192.168.0.255 和192.168.1.255)。但是,似乎没有可靠的方法来检测所有本地网络地址,因为我发现和尝试的所有内容要么依赖于 python-2-only 库,要么在我的 linux 虚拟机上仅返回 127.0.1.1(其中有 192.168.0.100 和一些其他)。
在这种情况下如何向所有可用网络广播?
我正在使用 Python 3,并且正在寻找独立于平台的方法,并且没有大型第三方库。 correctly 显示所有网络接口的库可以完成这项工作。
【问题讨论】:
-
抱歉,我不知道有任何 Python 库可以为您执行此操作。值得一提的是:在 Windows 上,您可以解析
ipconfig /all的输出,在 Linux 上查看ip addr和ip link。 -
您能给出的最糟糕的建议。有用于工作的模块。始终避免启动外部命令 - 这是不好的做法。
-
如果你向
255.255.255.255发送一个UDP数据包,默认情况下它应该被发送到所有网络接口,尽管在Windows中应该有some issues的实现。 -
如果您找不到工作的跨平台库,您可以使用
ctypes直接点击getifaddrs(3)或GetIpAddrTable()(取决于平台)。另请参阅this forum thread。
标签: python networking python-3.x udp broadcast