在具有多个接口的服务器上接收多播(linux)

要在我的非默认网卡(dvb)上接收多播,请执行以下操作:

  • 打开一个套接字(AF_INET,SOCK_DGRAM)
  • 在dvb接口上join带有IP_ADD_MEMBERSHIP的多播地址
  • 绑定多播地址(注意,一个常见的错误是绑定“0.0.0.0”,然后在该套接字上接收,甚至你不感兴趣的多播)和端口

此时接收所需多播数据包的唯一方法是在路由表中添加一条规则,通过dvb到达发送者所在的networking(另一个networking),就好像dvb需要回复多播发送者; 让我们说一个源发送者多播模式。 任何人都知道发生了什么事? 这个问题对我来说很烦,因为原则上我不知道发件人的IP地址。

Solutions Collecting From Web of "在具有多个接口的服务器上接收多播(linux)"

你似乎被rp_filter反向路径过滤蜇伤。 如果数据包到达没有源地址路由的接口,则会丢弃数据包。

您可以使用sysctl /proc/sys/net/ipv4/conf/<if>/rp_filter以每个接口为基础禁用它。

绑定多播地址

这是绝对错误的。 您必须绑定到实际适配器的实际IP地址,或0.0.0.0。

注意一个常见的错误是绑定“0.0.0.0”

这不是一个错误。 这是正确的程序,除非你只想听一个IP地址。

然后在那个套接字上接收,甚至你不感兴趣的多播

我不知道这是什么意思。

原则上我不知道发件人的IP地址

任何UDP数据报的发送者的IP地址都可以通过套接字API获得。