无法接收其他设备UDP组播消息的问题排查求助
无法接收外部设备UDP组播消息,本地脚本流量走虚拟网卡而非物理网卡
我在Windows 10本机上运行两套UDP组播收发脚本(分别用C语言和Python3实现),其中Python3版本的脚本如下:
sender.py
import socket MCAST_GRP = '239.1.1.1' MCAST_PORT = 1234 sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP) sock.setsockopt(socket.IPPROTO_IP, socket.IP_MULTICAST_TTL, 2) print("Sending") sock.sendto(bytearray("str()", "utf-8"), (MCAST_GRP, MCAST_PORT)) data, address = sock.recvfrom(1024) print('received %s bytes from %s' % (len(data), address)) print(data)
receiver.py
import socket import struct import sys multicast_group = '239.1.1.1' server_address = ('', 1234) # Create the socket sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # Bind to the server address sock.bind(server_address) # Tell the operating system to add the socket to the multicast group # on all interfaces. group = socket.inet_aton(multicast_group) mreq = struct.pack('4sL', group, socket.INADDR_ANY) sock.setsockopt(socket.IPPROTO_IP, socket.IP_ADD_MEMBERSHIP, mreq) # Receive/respond loop while True: print('\nwaiting to receive message') data, address = sock.recvfrom(1024) print('received %s bytes from %s' % (len(data), address)) print(data) print('sending acknowledgement to', address) sock.sendto(bytearray("ack", "utf-8"), address)
现在遇到的问题是:这台Windows 10机器连接了一台未知系统的物理设备,我无法通过上述脚本接收该设备发来的组播消息,但Wireshark可以捕获到该设备通过eth0接口发送到239.1.1.1:1234的组播消息。我发现脚本生成的流量走的是VirtualBox Host-Only Network接口,我没对这个接口做过相关配置,不确定是不是因为这个导致无法接收外部设备的UDP组播消息。
另外我在最新版Kali Linux机器上也做了相同测试,同样无法接收该外部设备的组播消息。
补充信息:我给Windows 10的物理网口eth0分配了IP地址192.168.1.100,可以通过指定软件使用该接口与外部设备传输以太网、TCP及IPv4数据包。本地脚本运行时的收发示例输出如下:
sender输出
Sending received 3 bytes from ('192.168.56.1', 3000) b'ack' Process finished with exit code 0
receiver输出
waiting to receive message received 5 bytes from ('192.168.56.1', 55132) b'robot' sending acknowledgement to ('192.168.56.1', 55132) waiting to receive message
如果有需要补充的信息,请告诉我。
内容的提问来源于stack exchange,提问作者JRsz
相关产品推荐
相关产品推荐

