【问题标题】:snmptrap unsigned type not working as expectedsnmptrap 无符号类型未按预期工作
【发布时间】:2015-01-29 18:02:29
【问题描述】:

我正在使用 snmpV3 适配器并使用以下命令将 V2 陷阱传递给它。看起来 u 类型(即无符号)的范围高达 (2^31) - 1(即 2147483647)。我期待它是 (2^32) - 1(即 4294967295)。

snmptrap -c public -v 2c clm-pun-009642 '' 1.3.6.1.4.1.20006.1.0.5 1.3.6.1.4.1.12345.1 u 2147483647

以上命令生成如下日志:

trace: ..\..\snmplib\snmp_api.c, 5293: dumph_recv: Value dumpx_recv: 42 04 7F FF FF FF dumpv_recv: UInteger: 2147483647 (0x7FFFFFFF)

在哪里:

snmptrap -c public -v 2c clm-pun-009642 '' 1.3.6.1.4.1.20006.1.0.5 1.3.6.1.4.1.12345.1 u 2147483648

以上命令生成如下日志:

enter code heretrace: ..\..\snmplib\snmp_api.c, 5293: dumph_recv: Value dumpx_recv: 42 05 00 80 00 00 00 dumpv_recv: UInteger: -2147483648 (0x80000000)

参考: http://www.net-snmp.org/docs/man/snmptrap.html

我正在使用 net-snmp v5.5。

这是正确的行为还是我遗漏了什么?

【问题讨论】:

  • net-snmp v5.5 已经很老了。尝试最新版本,看看是否已修复。

标签: snmp net-snmp


【解决方案1】:

多年来,我发现了 net-snmp 的各种问题。这显然是另外一个。标准非常明确。 RFC 2578 对 Unsigned32 的定义如下:

-- 一个无符号的 32 位量 -- 与 Gauge32 Unsigned32 无法区分 ::= [应用2] 隐式整数 (0..4294967295)

如前所述,这与 Gauge32 相同,与 SNMPv1 (RFC 1155) 中的 Gauge 相同:

仪表 ::= [应用2] 隐式整数 (0..4294967295)

编码正确; SNMP 中的所有整数都被编码为带符号的,这意味着大于 2^31-1 的值必须以 5 个字节编码。因此,编码的正确翻译是:

42               Type: Gauge32 or Unsigned32
05               Length: 5 bytes
00 80 00 00 00   Value: 2^31

net-snmp 错误地解码了值。

【讨论】:

  • 42 是从哪里来的?我在整个互联网上进行了搜索,似乎无法找到定义这些数字的任何地方。规范也没有定义 42。是否有任何文档将 SNMP 类型(自定义 asn 扩展)映射到这些幻数?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-06-10
  • 1970-01-01
  • 2016-10-22
  • 1970-01-01
  • 2017-02-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多