Python 如何从主机windows PC到VM Centos7获取多播数据包?
我正在用多播进行测试,我有几个问题要问我如何才能做到这一点 首先,如果两个系统位于同一子网(即10.10.1.10和10.10.1.12)下,我是否绝对有必要使用路由器来完成多播,或者我可以只使用交换机,甚至点对点连接?我会说不,因为我已经进行了一些测试,但如果能确定的话,那就太好了 第二,如果可能的话,我如何在我的Windows 10 PC和在同一台PC上运行CentOS7的VMWare之间建立多播连接 我现在拥有的: 一个与我的外部连接具有桥接网络并运行CentOS7的VMWare。 VM的IP为10.10.1.12,网络掩码为255.255.255.0,windows的IP为10.10.1.10,网络掩码为255.255.255.0 我根据在VM上运行的一个脚本编写了一个接收python脚本Python 如何从主机windows PC到VM Centos7获取多播数据包?,python,networking,vmware,centos7,multicast,Python,Networking,Vmware,Centos7,Multicast,我正在用多播进行测试,我有几个问题要问我如何才能做到这一点 首先,如果两个系统位于同一子网(即10.10.1.10和10.10.1.12)下,我是否绝对有必要使用路由器来完成多播,或者我可以只使用交换机,甚至点对点连接?我会说不,因为我已经进行了一些测试,但如果能确定的话,那就太好了 第二,如果可能的话,我如何在我的Windows 10 PC和在同一台PC上运行CentOS7的VMWare之间建立多播连接 我现在拥有的: 一个与我的外部连接具有桥接网络并运行CentOS7的VMWare。 VM的
import socket
import struct
MCAST_GRP = '224.0.0.71'
MCAST_PORT = 1000
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
sock.bind(('', MCAST_PORT))
mreq = struct.pack("4sl", socket.inet_aton(MCAST_GRP), socket.INADDR_ANY)
sock.setsockopt(socket.IPPROTO_IP, socket.IP_ADD_MEMBERSHIP, mreq)
while True:
print sock.recv(10240)
以及从我的主机PC发送python脚本
import socket
MCAST_GRP = '224.0.0.71'
MCAST_PORT = 1000
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP)
sock.setsockopt(socket.IPPROTO_IP, socket.IP_MULTICAST_TTL, 2)
sock.sendto("robot", (MCAST_GRP, MCAST_PORT))
在我的CentOS7虚拟机上,我可以看到接收脚本正在通过运行
netstat -g
我还可以通过运行
sudo tcpdump -i <NIC> host 224.0.0.0/4
我也可以在Wireshark中将其视为传入的UDP消息,但我运行的python接收脚本没有接收到它
我还将net.ipv4.all.rp_filter设置为0,这是我在进行研究时看到的,但没有设置
但是,我可以在Windows PC上运行发送和接收脚本,并且可以很好地接收它们。我甚至可以在Wireshark中看到它们,它们显示为IP 10.10.1.101到224.0.0.71 IPV4mcast
我还可以从虚拟机向主机PC发送消息。我就是无法在虚拟机上接收 您不应该使用保留的链接本地多播地址。如果你想尝试多播,你可能应该在组织本地范围内使用一些东西(
239.0.0/8
)。@RonMaupin I尝试了239.0.0.71,但仍然没有成功地从pc发送到vm,但从vm发送到pc仍然有效。
14:28:03.111837 IP 10.10.1.101.60007 > 224.0.0.71.cadlock2: UDP, length 26