大家。 我是新来的snmp并面临以下问题。 我有代理人的snmp表。它仅适用于标志-Cb(通过getnext命令请求新行)。当我使用net-snmp int ubuntu时,我得到了这个表。
它在java snmp4j中的表现如何: 它是通过发送getnext请求逐步获取每一行来执行的。 但是我没有指向表OID,而是指向了我希望得到的列的OID。 getnext返回结果和将在下一个请求中的下一个递增的OID。 正如我研究的那样,在snmpgetnext查询期间没有获得增量值。我收到"从GETNEXT或GETBULK返回的OID小于或等于所请求的(SNMP不允许)"。所以我无法在那里得到它。 我想net-snmp通过在获取此错误时在内部执行增量来避免此错误。
我也尝试通过ubuntu中的net-snmp而不是snmptable手动执行getnext,但是我得到的一些列只是第一个递增值,就是这样,有些根本没有增加。
但是对增值工作的嗤之以鼻
这是snmp代理的错误吗?那么在获取snmp表时net-snmp会自行增加吗?
答案 0 :(得分:0)
事实上,在我看来,你手上有一个错误的SNMP代理。 您应该将此情况报告给代理商。您的第一个屏幕截图中的数据应足以证明他们可以将其作为错误报告使用。
在RFC 1157 section 4.1.3中为SNMPv1指定了正确的行为,并为后续的SNMP版本指定了一些其他RFC。但是,它的要点在v2和v3中保持不变。
我不确定snmptable
命令是如何工作的,但它可能会像你说的那样尝试猜测后继OID,但更有可能snmptable
在后台使用SNMP GetBulkRequest-PDUs ,代理的GetBulk实现优于GetNext。即处理GetBulk的代码中不存在表遍历错误,它为您提供了整个表。
尝试使用snmpwalk
遍历表,我认为只使用GetNext操作。我的猜测是snmpwalk
将停止或循环,就像你的snmpgetnext
命令一样!