我试图编写一个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的数量。
答案 0 :(得分:-1)
根据您正在行走的根OID检查响应PDU中的每个OID。如果找到匹配项,那么您就知道停止遍历树。如果找不到匹配项,请发送下一个GET_MSG_BULK请求PDU。