如何让System.ServiceModel.DiscoveryClient使用IGMP

本文关键字:DiscoveryClient 使用 IGMP ServiceModel System | 更新日期: 2023-09-27 18:04:32

我有一个带有两个VLAN的D-Link DGS-1210-10P (10.104.)。和192.168..)我在每个网络上都有一个摄像机,在我的计算机上每个网络上都有两个网卡。

在D-Link上关闭IGMP后,我可以使用Microsoft DiscoveryClient和一些允许我指定发送多播消息的NIC的自定义端点来发现这两个相机。打开IGMP后,我只能看到10.104网络。

foreach (string id in getAdapterIds())
{
   DiscoveryClient dc = new DiscoveryClient(new UdpDiscoveryEndpointByNIC(DiscoveryVersion.WSDiscoveryApril2005, id));
   dc.FindProgressChanged += _real_FindProgressChanged;
   dc.FindAsync();
}

我确实在Wireshark中看到IGMP消息(两个源都是我的计算机,目的地是正确的多播地址)

Source        Destination     Protocol Length Info
10.104.128.37 239.255.255.250 IGMPv2   60     Membership Report Group
192.168.1.1   239.255.255.250 IGMPv2   60     Membership Report Group

我的问题归结为:DiscoveryClient是否自动加入IGMP组并且应该正常工作?我怀疑我只是缺少了一些基本的IGMP理解,或者是一些D-Link路由器设置。

如何让System.ServiceModel.DiscoveryClient使用IGMP

像往常一样,我问完问题就能找到答案:

问题是路由器上的IGMP没有正确设置。

企业VLAN

1)禁用"查询器状态",因为公司交换机已经是一个查询器

2)启用"快速离开"

孤立VLAN

1)使能"Querier State",因为每个VLAN需要一个Querier

2)启用快捷离开