【问题标题】:Snmp device discovery using a C++ library使用 C++ 库的 Snmp 设备发现
【发布时间】: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


【解决方案1】:

他们围绕设备发现建立了整个公司,所以问题并不容易。

作为捷径,如果您知道设备的网络地址,则可以 遍历一个范围,例如。如果你知道他们在 10.0.0/24 网络中,你可以 查询例如。 sysDescr 用于 10.0.0.1 到 10.0.0.254。

【讨论】:

  • 如你所说,我确实查询了已知的本地网络范围。问题仍然是有时临时。传感器 ping 回来,但有时打印机也会 ping 回来。如果他们两个都ping回来了,那没关系,因为这样我就可以通过收到的值信息过滤掉。但事实并非如此。只有一个回复。我无法预测是哪一个。而且我无法编写代码,因此我本地网络中的所有 snmp 设备都将 ping 回 snmpGet 广播。感谢您的支持!
  • 不要使用广播,而是单播到范围内的每个目标,即查询 10.0.0.1,然后是 10.0.0.2 等。商业产品并行执行此操作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多