receiving multicast on a server with multiple interfaces (linux)

南笙酒味 提交于 2019-12-20 14:43:44

问题


To receive a multicast on my not default NIC (dvb) I do the following:

  • open a socket (AF_INET, SOCK_DGRAM)
  • join the multicast address with IP_ADD_MEMBERSHIP on the dvb interface
  • bind the multicast address (note that a common error is to bind "0.0.0.0" and then receive on that socket even multicast you are not interested in) and the port

at this point the only way to receive the needed multicast packets is to add in the routing table a rule to reach the network where the sender is (another network) trough the dvb, as if the dvb needs to reply to the multicast sender; let say a sort of source sender multicast mode. Anyone knows what is going on? The problem is annoying to me because in principle I don't know the ip of sender.


回答1:


You appear to be being stung by rp_filter reverse-path filtering. This drops packets if they arrive on an interface that doesn't have a route for the source address.

You can disable it on a per-interface basis with the sysctl /proc/sys/net/ipv4/conf/<if>/rp_filter.




回答2:


bind the multicast address

That is definitely wrong. You must bind to an actual IP address of a real adapter, or 0.0.0.0.

note that a common error is to bind "0.0.0.0"

That's not an error. THat is correct procedure unless you only want to listen to one IP address.

and then receive on that socket even multicast you are not interested in

I don't know what this means.

in principle I don't know the ip of sender

The IP address of the sender of any UDP datagram is available via the sockets API.



来源:https://stackoverflow.com/questions/5483779/receiving-multicast-on-a-server-with-multiple-interfaces-linux

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!