6

我的 OID 为 1.3.6.1.2.1.2.2.1.8.4096 (ifOperStatus)

在我的代码中,我有:

MIB[0]=0x2b
MIB[1]=0x06
MIB[2]=0x01
MIB[3]=0x02
MIB[4]=0x01
MIB[5]=0x02    
MIB[6]=0x02
MIB[7]=0x01
MIB[8]=0x08
MIB[9]=0xA0
MIB[10]=0x00

其中 A0 00 表示 4096。

十六进制中的 4096 是 1000。将其分成 2 个字节会给我 10 00。SNMP 数据应该以单字节格式发送。因此,对于大数字需要一个特殊的规则,因为一个字节(八位)只能表示 0-255 之间的数字。规则是将最高位用作标志,让接收者知道这个数字跨越一个字节以上。

我已将这些位向左移动并将 1 添加到第 8 位。

左移:20 00
位 8 变为 1:A0 00

参考:【OID 编码】(http://www.rane.com/note161.html

我是否正确编码了 4096?

将数据字符串解码为原始 OID 怎么样?

示例将有助于我理解这个概念。

4

1 回答 1

5

是的,您已正确编码 OID(就内容而言)。完整的编码(带有 OID 和长度的标签,已省略)将是 06 0b 2b 06 01 02 01 02 02 01 08 a0 00。

关于 OID 中的编码/解码字符串(可能是一个 INDEX),规则取决于所讨论的值是否用于定义为固定长度或可变长度字符串的对象,以及 IMPLIED 关键字是否是用于定义 INDEX。

如果它是一个固定长度的字符串,或者是带有 IMPLIED 关键字的可变长度字符串(它必须是最后一个 INDEX 对象),那么它被简单地编码为每个字符串字节的一个子标识符。否则,可变长度字符串用一个子标识符编码以指示字符串的长度,然后每个字节在单个子标识符中编码,与固定长度一样。

RFC 2578 第 7.7 节详细说明了在 OID 中对 INDEX 对象的值进行编码的规则。

于 2013-08-12T03:27:10.850 回答