我正在编写一个 C# 程序,使用开源#SNMP 库(https://github.com/lextm/sharpsnmplib)通过 SNMP 监控 LAN 上的所有打印机。
它用于发现 SNMP 设备的方法是通过 UDP 广播到整个网络(IPAddress.Broadcast = 255.255.255.255)。
我听到并阅读了网络管理员关于广播是一种不好的做法的抱怨,应该通过各种方式避免,因为网络配置不当,可能会使网络泛滥成灾。
因此,作为一种替代方法,我在循环中尝试了同一个库的 Messenger.Get 方法,向本地子网范围内的每个 ip 发送单播请求。在那里我还遇到了一个问题——在循环中使用非异步 Get 方法花费的时间太长。并且该方法的异步兄弟 GetAsync 永远挂起,等待来自所有空 IP 的响应,无法取消任务或指定超时。
我会感谢任何能给我指明正确方向的人。
编辑:
我目前使用 Ping.SendPingAsync 快速连续 ping 子网中的所有 ip,然后向响应 ping 的人发送 SNMP Get。但我不确定我是否可以相信所有打印机都能响应 ping。任何人都可以澄清这一点吗?