我正在使用this code尝试多播。
我在 LAN 中的另一台 PC 上运行wireshark,我正在尝试查看通过网络发送的数据包。
如果数据包发送到 IP 地址 224.0.0.1
,它们就会被正确接收,如果我将它们发送到地址 239.255.255.250
,它们就会被正确接收。
我的路由表中有此条目
224.0.0.0/4 dev eth0.100 src 192.0.0.1
我知道 192.0.0.1 看起来很奇怪,但它是正确的接口(interface)地址
你知道为什么没有发送数据包吗?
最佳答案
您 try catch 多播流量的电脑很可能启用了多播过滤,并且未启用 239.255.255.250 组的接收。
任何进行多播通信的主机设备都会加入 224.0.0.1(所有主机组),因此发送到该组的数据包会通过过滤器,但发送到 239.255.255.250 的数据包不会通过。
多播过滤通常在网络接口(interface)中实现,接收到的未通过过滤器的帧将在硬件中丢弃,而不是传递到内核驱动程序。如果帧没有传递到内核,则 Wireshark 无法捕获它们。
您可以使用 netstat 验证每个接口(interface)的事件多播组。我假设您使用的是 Linux 系统,因为您用“Linux”标记了问题
netstat -g
当套接字启用 IP_ADD_MEMBERSHIP 时,就会加入多播组。套接字选项。为了加入捕获设备上的组,您需要一个程序来创建套接字并使用 IP_ADD_MEMBERSHIP 套接字选项加入多播组
关于linux - 如果我使用不同于 224.0.0.1 的地址,则不会发送多播数据包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29607953/