要在我的非默认NIC(dvb)上接收多播,请执行以下操作:
-
打开一个套接字(AF_INET,SOCK_DGRAM)
-
在dvb接口上使用IP_ADD_MEMBERSHIP加入多播地址
-
绑定多播地址(注意常见的错误是绑定"0.0.0.0",然后在该套接字上接收甚至对您不感兴趣的多播)和端口
此时,接收所需多播数据包的唯一方法是在路由表中添加一条规则,通过dvb到达发送方所在的网络(另一个网络),就像dvb需要回复多播发送方一样;让我们说一种源发送器组播模式 . 谁知道发生了什么事?这个问题让我讨厌,因为原则上我不知道发送者的ip .
2 回答
这绝对是错误的 . 您必须绑定到实际适配器的实际IP地址,或0.0.0.0 .
那不是错误 . 这是正确的过程,除非您只想听一个IP地址 .
我不知道这意味着什么 .
任何UDP数据报的发送方的IP地址都可以通过套接字API获得 .
您似乎被
rp_filter
反向路径过滤蜇了 . 如果数据包到达没有源地址路由的接口,则会丢弃数据包 .您可以使用sysctl
/proc/sys/net/ipv4/conf/<if>/rp_filter
在每个接口的基础上禁用它 .