直接根据WireShark工具抓取的实际报文来分析(事实上WireShark已经解析过了,在项目中可以根据理解直接分析),如下图
06 0d是代表Object Name行的类型+长度,06是Object Identifier的编号,0d=13是后面字节的长度(【2b 06 01 04 01 82 ba 13 0b 01 01 04 00】13个字节)
02 01是代表Value行的类型+长度,02是Integer32的编号,01是后面字节的长度(【02】1个字节)
对于OID编码规则,整理过后,有以下规定:
1)ISO规定前两级格式为:第一级 * 40 + 第二级,即为 1*40 + 3 = 43,十六进制为 2b.
2)大于128的,每个字首先被分割为最少数量的没有头零数字的7位数字,并且一个接一个地组合成字节. 除了编码的最后一个字节外, 其他所有字节的最高位都为1.
例如:40211=2*128²+58*128¹+19*128º,即{2, 58, 19},最后一个字节19不用管,保持;前面的字节高位不为1,需要加上128让其高位为1,即{128+2, 58+128, 19},也就是{130, 186, 19},直接转换16进制编码{82, ba, 13}
3)后面小于128的直接转换:{6.1.4.1.} 即6-->06 1-->01 4-->04 1-->01
综合以上转换,OID 【1.3.6.1.4.1.40211.11.1.1.4.0】即为【2b 06 01 04 01 82 ba 13 0b 01 01 04 00】
附上类型编号表
Integer | 0x02 |
Octet String | 0x04 |
Null | 0x05 |
Object Identifier | 0x06 |
Sequence Object | 0x30 |
Ip Address | 0x40 |
Counter | 0x41 |
Gauge | 0x42 |
TimeTicks | 0x43 |