我正在尝试使用此 python 2.7 代码在 Windows 上接收 IPv6 多播数据包(发送到 ff02::1 地址)
import socket
import win_inet_pton
import struct
socket.IPPROTO_IPV6=41 #because using python 2.7 on wondows
PORT = 1234
UDP_BROADCAST_IPv6 = "ff02::1"
sock = socket.socket(socket.AF_INET6, socket.SOCK_DGRAM, socket.IPPROTO_UDP)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
sock.bind(("",PORT)) # not working with "::" either
# Join multicast group
addrinfo = socket.getaddrinfo(UDP_BROADCAST_IPv6, None)[0]
group = socket.inet_pton(addrinfo[0], addrinfo[4][0])
mreq = group + struct.pack('@I', 0)
sock.setsockopt(socket.IPPROTO_IPV6, socket.IPV6_JOIN_GROUP, mreq)
while True:
msg=sock.recv(1024)
print msg
我从连接到我的计算机的另一台计算机发送数据包通过以太网;另外,我的电脑还有一个WiFi接口。虽然我在使用 Wireshark 嗅探以太网连接时能够看到相关数据包,但此代码并未接收到这些数据包。
然而,当我禁用 WiFi网卡,收到数据包。
这让我觉得当 WiFi 接口启用时,代码只监听来自该接口的数据包。
我读到该绑定""
应该能够从所有网络接口接收数据包,但由于某种原因它对我不起作用。
有人知道我忘记做的事情吗?或者有不同的方法来解决这个问题?
Thanks!