recvfrom()错误地报告来自parallels vm的UDP中的发件人信息

时间:2016-05-10 05:13:04

标签: python sockets udp multicast parallels

当我从Windows vm(Parallels)发送UDP多播并使用recvfrom在我的OS X El Capitan主机上读取它时,"发送者" recvfrom返回的信息与它在mac上接收的适配器匹配,而不是它在Windows机器上发送的适配器,就像它应该的那样。

此外,如果我运行相同的代码从OS X发送UDP数据包,他们将无法在Windows vm上收到。但是,两台Windows VM之间的发送工作非常完美,并且"发送方"信息正确返回。

也许我需要将OS X发送方绑定到特定接口?如果可能的话,最好发送所有接口。我不确定这是网络问题,还是相似问题,还是其他一些问题。

Windows::10.211.5.8

OS X: 192.168.1.65,10.211.55.2,10.37.129.2

发件人:

import socket, struct
addrinfo = socket.getaddrinfo('225.0.0.250', None)[0]
s = socket.socket(addrinfo[0], socket.SOCK_DGRAM)
ttl_bin = struct.pack('@i', MYTTL)
s.setsockopt(socket.IPPROTO_IP, socket.IP_MULTICAST_TTL, ttl_bin)
data = repr(time.time()) + '\0'
s.sendto(data.encode('utf-8'), (addrinfo[4][0], MYPORT))

接收器:

import socket, struct
addrinfo = socket.getaddrinfo('225.0.0.250', None)[0]
s = socket.socket(addrinfo[0], socket.SOCK_DGRAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.bind(('', MYPORT))
group_bin = socket.inet_pton(addrinfo[0], addrinfo[4][0])
mreq = group_bin + struct.pack('=I', socket.INADDR_ANY)
s.setsockopt(socket.IPPROTO_IP, socket.IP_ADD_MEMBERSHIP, more)
data, sender = s.recvfrom(1500)
print(str(sender) + '  ' + repr(data))

Windows vm sender - > OS X接收器(' 192.168.1.65'是接收器):

('192.168.1.65', 62958)  b'1462856664.784149\x00'
('192.168.1.65', 62958)  b'1462856665.7842436\x00'
('192.168.1.65', 62958)  b'1462856666.7843592\x00'
('192.168.1.65', 62958)  b'1462856667.7846606\x00'

Windows vm sender - > Windows vm接收器(' 10.211.55.3'是发件人):

('10.211.55.3', 54936)  b'1462856959.228\x00'
('10.211.55.3', 54936)  b'1462856960.242\x00'
('10.211.55.3', 54936)  b'1462856961.256\x00'
('10.211.55.3', 54936)  b'1462856962.27\x00'

谢谢!

0 个答案:

没有答案