我正在尝试在 OSX 上用 c 编写代码(如果更容易,也可以使用objective-c)来确定当前机器(机器连接到的路由器)上是否启用了多播。为此,我正在尝试以下步骤:
- 打开一个端口并通过多播发送数据。
- 监听所有活动适配器的响应。
- 过滤掉“环回”适配器。
- 如果没有回复,多播可能被禁用。
作为网络编程的新手,我不明白如何通过发送随机数据从任何活动适配器获得响应,除非我在正在侦听的机器上安装了软件。是否有某个保留的多播 IP 总是会引起响应,或者是否有更好的方法来执行此操作?
我正在尝试在 OSX 上用 c 编写代码(如果更容易,也可以使用objective-c)来确定当前机器(机器连接到的路由器)上是否启用了多播。为此,我正在尝试以下步骤:
作为网络编程的新手,我不明白如何通过发送随机数据从任何活动适配器获得响应,除非我在正在侦听的机器上安装了软件。是否有某个保留的多播 IP 总是会引起响应,或者是否有更好的方法来执行此操作?
要确定一台机器是否有 IP 多播地址处于活动状态(我认为您的意思是“启用多播”),请查看路由表并查看是否在 224.0.0.0 到 239.255 范围内找到一个或多个 IP v4 地址.255.255。
多播由 DHCP 实现,它不是您的本地计算机。DHCP 分配与连接到该 DHCP 服务器的多个客户端相对应的地址。当您制作多播消息时,您将其发送到此 DHCP 服务器,然后该服务器获取数据包,找到映射到该多播地址的客户端,然后将其发送到路由器自动复制的特殊数据包中(因此,如果您有 2组的一部分人连接到 1 个路由器,并且该路由器连接到另一个路由器(称为路由器 2),路由器 2 不会发送两个数据包,它将发送一个,然后路由器 1 将发送两个副本给它的客户端。这样做的目的是加快交付时间并且不发送重复数据)。就客户端而言,客户端不是“设置”以允许多播,而是路由器设置它们,其余的对客户是透明的。您必须找出客户端是否连接到多播组的方法是查看 DHCP 服务器是否已创建多播组,然后从映射到多播组的 IP 地址中查找计算机名称。
通过监听所有活动的适配器,除了数据包,你什么也得不到,它不会告诉你它是否是多播网络的一部分,因为它们看起来像所有其他数据包(因为路由器会在您看到数据包之前将多播地址更改为您的 IP 地址)。这就是多播的美妙之处。