Windows/Python UDP 广播被阻止没有防火墙
Windows/Python UDP Broadcast Blocked No Firewall
OS: Windows 10
我使用以太网交换机通过 Python 3.4.4 同时将 UDP 数据包发送到另外两个系统(直接连接到同一交换机)。相同的代码适用于另外两台 dev/testing PC,所以我知道它不是 Python 代码,但出于某种原因,它不适用于我希望系统被其使用的 PC。
当我使用 Wireshark 查看 169.254.255.255(发送 UDP 数据包的目标 IP)的 UDP 流量时,没有任何显示。但是,将数据包发送到 169.X.X.1 是可行的。另一方面,发送到 169.X.X.255 的数据包已发送,但我在 return 中收到超过生存时间的消息。 我仅限于那个目标 IP,所以更改 IP 不是解决方案。我也有它在 端口 6000(任意)上发送,我试过改端口号,没用。也不让我发送到 169.254.255.1
我关闭了防火墙。
感谢您的帮助。
同样的问题,
解决方案是将套接字绑定到正在发送多播的适配器
示例:
msg = \
'M-SEARCH * HTTP/1.1\r\n' \
'HOST:239.255.255.250:1900\r\n' \
'ST:upnp:rootdevice\r\n' \
'MX:2\r\n' \
'MAN:"ssdp:discover"\r\n' \
'USER-AGENT:Python\r\n\r\n'
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.setsockopt(socket.IPPROTO_IP, socket.IP_MULTICAST_TTL, 2)
s.bind(('ip of interface',1901))
s.settimeout(10)
print msg,len(msg)
print s.sendto(msg, ('239.255.255.250', 1900) )
resp, (addr, port) = s.recvfrom(1024)
print resp
s.close()
来自这个 post Can't send multicast over non-default NIC
的解决方案
关于我的问题的奇怪之处在于,这个确切的代码以前在有问题的计算机(和两台开发计算机)上工作,但在我发布这个问题时没有工作。
Wireshark 没有引导我找到答案(只是告诉我 UDP 数据包没有发送),所以我决定通过命令提示符 ping IP。我收到了两个错误之一(目标主机无法访问,或请求超时)。这些错误导致我将我想要的目标 IP (169.254.255.255) 添加到 ARP 缓存,我的问题就解决了。
感谢您提出可能的解决方案。
OS: Windows 10
我使用以太网交换机通过 Python 3.4.4 同时将 UDP 数据包发送到另外两个系统(直接连接到同一交换机)。相同的代码适用于另外两台 dev/testing PC,所以我知道它不是 Python 代码,但出于某种原因,它不适用于我希望系统被其使用的 PC。
当我使用 Wireshark 查看 169.254.255.255(发送 UDP 数据包的目标 IP)的 UDP 流量时,没有任何显示。但是,将数据包发送到 169.X.X.1 是可行的。另一方面,发送到 169.X.X.255 的数据包已发送,但我在 return 中收到超过生存时间的消息。 我仅限于那个目标 IP,所以更改 IP 不是解决方案。我也有它在 端口 6000(任意)上发送,我试过改端口号,没用。也不让我发送到 169.254.255.1
我关闭了防火墙。
感谢您的帮助。
同样的问题, 解决方案是将套接字绑定到正在发送多播的适配器
示例:
msg = \
'M-SEARCH * HTTP/1.1\r\n' \
'HOST:239.255.255.250:1900\r\n' \
'ST:upnp:rootdevice\r\n' \
'MX:2\r\n' \
'MAN:"ssdp:discover"\r\n' \
'USER-AGENT:Python\r\n\r\n'
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.setsockopt(socket.IPPROTO_IP, socket.IP_MULTICAST_TTL, 2)
s.bind(('ip of interface',1901))
s.settimeout(10)
print msg,len(msg)
print s.sendto(msg, ('239.255.255.250', 1900) )
resp, (addr, port) = s.recvfrom(1024)
print resp
s.close()
来自这个 post Can't send multicast over non-default NIC
的解决方案关于我的问题的奇怪之处在于,这个确切的代码以前在有问题的计算机(和两台开发计算机)上工作,但在我发布这个问题时没有工作。
Wireshark 没有引导我找到答案(只是告诉我 UDP 数据包没有发送),所以我决定通过命令提示符 ping IP。我收到了两个错误之一(目标主机无法访问,或请求超时)。这些错误导致我将我想要的目标 IP (169.254.255.255) 添加到 ARP 缓存,我的问题就解决了。
感谢您提出可能的解决方案。