我发誓这是最近工作,但似乎停止了,我想不出它可能是什么 .
我正在使用UdpClient将SNMP数据包广播到本地/ 24子网上的端口161,然后侦听响应 . 在c#中它如下(我正在使用SnmpSharpNet)
SnmpV2Packet packet = new SnmpV2Packet("public");
packet.Pdu.VbList.Add("1.3.6.1.2.1.1.1.0"); //System Description OID
packet.Pdu.VbList.Add("1.3.6.1.2.1.1.2.0"); //sysObjectId
packet.Pdu.VbList.Add("1.3.6.1.2.1.1.5.0"); //sysName*
byte[] data = packet.encode();
UdpClient udpClient = new UdpClient();
// udpClient.Client.Bind(new IPEndPoint(IPAddress.Parse("192.168.2.xx"), 161));
udpClient.Client.Bind(new IPEndPoint(IPAddress.Any, 161));
IPEndPoint ip = new IPEndPoint(IPAddress.Parse("255.255.255.255"), 161);
udpClient.Send(data, data.Length, ip);
...我有一个在后台线程中运行的监听器,它监听响应并打印IP地址和snmp信息 . 我已经在远程服务器上运行它,只有Windows防火墙和udp / 161打开入站和出站,它按预期工作 .
以前,我在我的域连接机器上运行它,它也工作正常,但现在它没有...意味着我只得到169.254.xx.xx地址的响应,而不是我的局域网上的其他设备 .
如果我在绑定上切换注释并绑定到我的本地计算地址,它再次按预期运行 .
我意识到必须改变的东西,但不能为我的生活弄清楚有什么不同 . 我已经尝试发送到本地广播地址(192.168.2.255),这实际上是有效的 .
我也尝试打开端口161进行发送和接收(Udp),并尝试打开我在Windows防火墙中使用的测试应用程序的所有端口 .
我希望有人能够帮助我理解如何正确地正确地向本地网络广播,因为我可能误解了广播地址可能会受到防火墙和/或绑定的影响 .
干杯
克雷格