SNMP OID树步行

时间:2012-07-02 20:41:28

标签: snmp net-snmp

我试图编写一个SNMP代理,坦率地说,整个过程就像阅读翻译过的立体声指令一样。但我关闭了,除了一个问题:实施GETNEXT操作。

考虑以下系统OID空间块:

.1.3.6.1.2.1 .1.5.0
             .1.6.0
             .1.8.0
             .1.9.1 .2.1
                    .2.2
                    .2.3

为了明确,让我们说我想做

 $ snmpwalk -On -v 2c -c public localhost .1.3.6.1.2.1.1.8.0

net-snmp通过首先在.1.8.0上执行GET,然后执行GETNEXT来实现此功能。 GETNEXT应该从.1.8.0到.1.9.1.2.1,然后是.1.9.1.2.2等等。

我认识到这在概念上仅仅是深度探索,但出于某种原因 - 也许是年龄 - 当我必须找到GET节点时,我无法找到实现该搜索的干净方法,然后备份下一个电话,找到" next"节点

随意告诉我它愚蠢的简单。

更新

我在26小时的编程回合之后写了这篇文章,所以我可以想象它不清楚。这是个问题:

我需要一个函数 successor ,它将OID作为输入并返回下一个OID - 其次是深度优先顺序,由SNMP工具实现。我已经有了几个解决方案,通过按深度优先顺序枚举OID并等待合适的OID来解决问题。我正在寻找一个优于O(l + n)的优雅的,其中l是OID的长度,n是OID的数量。

1 个答案:

答案 0 :(得分:-1)

根据您正在行走的根OID检查响应PDU中的每个OID。如果找到匹配项,那么您就知道停止遍历树。如果找不到匹配项,请发送下一个GET_MSG_BULK请求PDU。