【发布时间】:2018-12-17 10:59:18
【问题描述】:
我正在开发一个 c++ 代码项目,该项目应该能够发现网络上的所有 snmp 设备,然后如果设备名称与我正在寻找的传感器名称之一匹配(我有 2 个不同的以太网上的温度传感器),然后我想发送一个返回值(温度)的 snmpGet 请求。
我对 snmpGet 部分没有任何问题,但我无法找出正确的 snmp 发现代码。我目前正在使用snmp++ 库,我更喜欢net-snmp,因为它易于使用并且支持C++。但我愿意接受任何建议来完成这项工作。
在 snmp++ 中使用 snmpDiscovery 代码不会为我返回任何信息。所以我使用带有广播地址的 snmpGet,它很少为每个 snmpGet 调用返回一个 snmp 设备的信息,但不是一次返回所有 snmp 设备的信息。所以它是不可预测的,因为即使我的一个温度传感器在网络中可用,我也不知道我的启用 snmp 的打印机是否会返回。无论如何围绕这个?另外我没有使用 snmp 版本 3。如果我这样做会有帮助吗?
感谢支持!
【问题讨论】:
-
设备发现默认不可靠。在大多数情况下,您应该手动将设备添加到监控系统中。
-
我知道我使用的 2 个温度传感器设备。我也知道他们的 Oid 以及通过 snmp 检索临时值。但从客户方面来看,始终插入这两个传感器并不是强制性的。所以首先我想知道他们是否在线,也许他们有哪些IP。当网络中存在其他一些 snmp 设备时,我无法确定这一点,这些设备会 ping 回我的 snmpget 广播消息。
-
如果传感器配置在您的控制之下,您可以考虑在它们上使用非标准 upd 端口范围进行 snmp,以减少“错误”发现的机会。或者如果可能的话,在发现中使用一些特定于传感器的私有 mib oid。检查对广播的 arp 回复中的 mac-addresses 也可用于快速限制发现范围,但这不是 snmp。
标签: snmp net-snmp service-discovery snmpd