snmpd pass_persist 函数无法与 snmpwalk 一起使用

snmpd pass_persist 函数无法与 snmpwalk 一起使用

我有一个程序处理来自 snmpd 的 pass_persist。它对于 get 和 getnext 请求运行良好。

对 0.0 获取将返回 0.0,对 0.0 获取下一步将返回 0.1:

user@debianbase:~$ sudo snmpget -v 2c -c public localhost 1.3.6.1.3.0.0
iso.3.6.1.3.0.0 = STRING: "192.168.153.0"
user@debianbase:~$ sudo snmpgetnext -v 2c -c public localhost 1.3.6.1.3.0.0
iso.3.6.1.3.0.1 = Gauge32: 0

但是,如果我尝试遍历我正在处理的 OID,它的行为就会很奇怪。我期望看到来自客户端的一系列 getnext 请求,但我看到的并不是这样。snmpwalk on 0.0 的输出只是 Get on 0.0 的结果:

user@debianbase:~$ sudo snmpwalk -v 2c -c public localhost 1.3.6.1.3.0.0
iso.3.6.1.3.0.0 = STRING: "192.168.153.0"

如果我执行数据包捕获,看起来我的应用程序响应正确,但客户端在初始响应后执行的是 Get,而不是 GetNext

获取 0.0 上的下一个:

10:38:37.238144 IP (tos 0x0, ttl 64, id 29006, offset 0, flags [DF], proto UDP (17), length 69)
    localhost.43142 > localhost.snmp: [bad udp cksum 0xfe44 -> 0x6c7c!]  { SNMPv2c { GetNextRequest(26) R=607525872  X:0.0 } }

代理对 0.1 的响应:

10:38:37.238892 IP (tos 0x0, ttl 64, id 29007, offset 0, flags [DF], proto UDP (17), length 70)
    localhost.snmp > localhost.43142: [bad udp cksum 0xfe45 -> 0x673b!]  { SNMPv2c { GetResponse(27) R=607525872  X:0.1=0 } }

现在我希望看到 0.1 上的 GetNext,但是 snmpwalk 客户端却对 0.0 执行了 Get:

10:38:37.239027 IP (tos 0x0, ttl 64, id 29008, offset 0, flags [DF], proto UDP (17), length 69)
    localhost.43142 > localhost.snmp: [bad udp cksum 0xfe44 -> 0x6b7d!]  { SNMPv2c { GetRequest(26) R=607525873  X:0.0 } }

我的代理使用 0.0 值正确响应:

10:38:37.240000 IP (tos 0x0, ttl 64, id 29009, offset 0, flags [DF], proto UDP (17), length 82)
    localhost.snmp > localhost.43142: [bad udp cksum 0xfe51 -> 0x07f4!]  { SNMPv2c { GetResponse(39) R=607525873  X:0.0="192.168.153.0" } }

如果我对不在 1.3.6.1.3 中的任何 OID 执行遍历,则遍历将按预期运行并执行一系列 GetNextRequests,但会跳过我正在使用代理处理的 1.3.6.1.3 oid 树。

相关内容