使用IP_ADD_MEMBERSHIP加入新创建的接口上的组播组

时间:2018-06-12 12:39:34

标签: networking udp multicast mdns

我有一个mDNS响应器,它必须响应所有接口上的多播查询。

例如,在启动时,它使用ethernet接口将其套接字添加到多播组。

然后我连接到VPN并出现一个新的ppp接口。如何将我的套接字添加到新创建的接口,以便能够对它们做出响应?

示例:

  1. 我启动了我的mDNS响应程序应用程序。它创建一个UDP套接字并将其绑定到INADDR_ANY (0.0.0.0)。然后套接字加入ethernet接口上的mDNS多播组 - 例如地址224.0.0.251,界面192.168.0.102

  2. 我运行dig @224.0.0.251 hedgaron-debian-test.local -p 5353并收到答案。

  3. 我连接到VPN并且正在创建新的tun0界面。

  4. 我再次运行dig @224.0.0.251 hedgaron-debian-test.local -p 5353并且我的查询无法通过,因为(我猜)响应者的套接字未加入新创建的接口上的组播组。 Ofc,这次挖掘从新界面进行查询。

  5. 注意:我听说l2tp/ipsec VPN与ethernet不兼容。也许这也是一个问题。

    如何让套接字接受所有接口上的组播数据包?

1 个答案:

答案 0 :(得分:0)

我找到了解决方案。 l2tp/ipsec没问题。

套接字必须在每个接口上(而不只是在0.0.0.0上)与多组连接。要在后台加入新创建的接口,应用程序必须启动一个线程,该线程每N秒在所有接口上重新加入。

它允许套接字接受来自所有网络的多播数据包。