使用 IP_ADD_MEMBERSHIP 在新创建的接口上加入多播组
Joining to multicast groups on newly created interfaces with IP_ADD_MEMBERSHIP
我有一个 mDNS 响应器,它必须响应所有接口上的多播查询。
例如,在启动时,它使用 ethernet
接口将其套接字添加到多播组。
然后我连接到一个 VPN,一个新的 ppp
界面出现了。如何将我的套接字添加到新创建的接口以便能够响应它们?
示例:
我启动了我的 mDNS 响应程序。它创建一个 UDP 套接字并将其绑定到 INADDR_ANY (0.0.0.0)
。然后套接字在 ethernet
接口上加入 mDNS 多播组 - 例如地址 224.0.0.251
,接口 192.168.0.102
.
我 运行 dig @224.0.0.251 hedgaron-debian-test.local -p 5353
并收到答复。
我连接到 VPN,正在创建一个新的 tun0
接口。
我再次 运行 dig @224.0.0.251 hedgaron-debian-test.local -p 5353
我的查询没有通过,因为(我猜)响应者的套接字没有加入多播组新创建的界面。 Ofc,这次dig从新界面进行查询。
注意:我听说 l2tp/ipsec
VPN 不能与 ethernet
一起使用。也许这也是一个问题。
如何让套接字在所有接口上接受多播数据包?
我找到了解决办法。 l2tp/ipsec
不是问题。
套接字必须在 每个 接口上加入多组,而不仅仅是在 0.0.0.0
上。要在后台加入新创建的接口,应用程序必须启动一个线程,每 N 秒重新加入所有接口。
它允许套接字接受来自所有网络的多播数据包。
我有一个 mDNS 响应器,它必须响应所有接口上的多播查询。
例如,在启动时,它使用 ethernet
接口将其套接字添加到多播组。
然后我连接到一个 VPN,一个新的 ppp
界面出现了。如何将我的套接字添加到新创建的接口以便能够响应它们?
示例:
我启动了我的 mDNS 响应程序。它创建一个 UDP 套接字并将其绑定到
INADDR_ANY (0.0.0.0)
。然后套接字在ethernet
接口上加入 mDNS 多播组 - 例如地址224.0.0.251
,接口192.168.0.102
.我 运行
dig @224.0.0.251 hedgaron-debian-test.local -p 5353
并收到答复。我连接到 VPN,正在创建一个新的
tun0
接口。我再次 运行
dig @224.0.0.251 hedgaron-debian-test.local -p 5353
我的查询没有通过,因为(我猜)响应者的套接字没有加入多播组新创建的界面。 Ofc,这次dig从新界面进行查询。
注意:我听说 l2tp/ipsec
VPN 不能与 ethernet
一起使用。也许这也是一个问题。
如何让套接字在所有接口上接受多播数据包?
我找到了解决办法。 l2tp/ipsec
不是问题。
套接字必须在 每个 接口上加入多组,而不仅仅是在 0.0.0.0
上。要在后台加入新创建的接口,应用程序必须启动一个线程,每 N 秒重新加入所有接口。
它允许套接字接受来自所有网络的多播数据包。