解释 SNMP GET REQUEST 消息的 OID 部分的十六进制

Explain the hex of the OID portion of an SNMP GET REQUEST message

所以我一直在编写 linux 上 SNMPGET 请求的 C 版本。我打开一个 UDP 套接字,形成消息,然后将其发送出去,只是为了不断收到说找不到 OID 的回复。我使用的 OID 是:

1.3.6.1.2.1.1.1.0 十六进制: 00 03 06 01 02 01 01 01 00

在对 snmpget 发送的数据包进行 运行 tcpdump 之后,我意识到即使使用相同的 OID,发送的数据包实际上包含十六进制:

2B 06 01 02 01 01 01 00

当我用我的程序尝试十六进制时,它起作用了。那么,问题来了,为什么是 2B 而不是 01 03?我到处都看过,但我无法理解它的逻辑。似乎每个 SNMP get 消息都是以这种方式发送的,其中 iso.org 转换为 2B,但我还没有看到原因。

前两个数字(在您的情况下为 1.3)编码不同。计算结果为:

1*40 + 3 = 43(十进制) = 2B(十六进制).

这就是你 2B 的原因。

阅读 this 了解更多信息。 here 是 encode/decode 的在线工具。