Python 如何从主机windows PC到VM Centos7获取多播数据包?

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的

我正在用多播进行测试,我有几个问题要问我如何才能做到这一点

首先,如果两个系统位于同一子网(即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脚本

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