You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SNMP pass_persist 自定义程序无法配合snmpwalk正常遍历OID树

SNMP pass_persist 自定义程序无法配合snmpwalk正常遍历OID树

我写了一个处理snmpd中pass_persist的程序,目前处理Get和GetNext请求都正常,但用snmpwalk遍历我维护的OID树时却出现了异常。具体情况如下:

正常情况:Get与GetNext请求表现符合预期

  • 对OID 1.3.6.1.3.0.0 执行Get请求,返回正确值:
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"
  • 对OID 1.3.6.1.3.0.0 执行GetNext请求,返回下一个OID 1.3.6.1.3.0.1 的值:
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

异常情况:snmpwalk遍历OID时行为不符合预期

我本以为snmpwalk会通过连续发送GetNext请求来遍历整个OID树,但实际并非如此。当我对1.3.6.1.3.0.0执行snmpwalk时,输出仅停留在该OID的Get结果,没有继续遍历后续OID:

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"

抓包分析结果

我通过抓包发现,我的程序响应是正确的,但snmpwalk客户端在收到第一个响应后,没有发送预期的GetNext请求,反而发送了一个针对1.3.6.1.3.0.0的Get请求:

  1. 初始GetNext请求(目标OID 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 } }

  1. 我的程序正确返回OID 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 } }

  1. 异常行为:客户端没有发送针对OID 0.1的GetNext请求,反而发送了OID 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 } }

  1. 程序正常返回OID 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执行snmpwalk,客户端会正常发送连续的GetNext请求遍历,只是会跳过我维护的1.3.6.1.3 OID树。

我现在困惑的是,为什么snmpwalk在处理我的自定义OID树时会出现这种异常行为?明明我的程序对GetNext请求的响应是正确的,但客户端却没有继续发起后续的遍历请求。

备注:内容来源于stack exchange,提问作者John Moffitt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.20 12:38:03