三分钟看懂Snmp协议分析

Snmp协议分析

 

关键点 :BER编码

1.协议字段

三分钟看懂Snmp协议分析_第1张图片


2.PDU类型对应编号表

PDU类型

名称

0

get-request

1

get-next-request

2

get-response

3

set-request

4

trap

 

 

 

3.BER编码

  BER的数据都由三个域构成:

             标识域(tag)+长度域(length)+值域(value)。 

 

   注意: xx 表示标识域 xx 标识长度域 xx 表示值域


4.一些解答

     为什么需要request-id字段?


                   snmp协议是采用UDP作为下一层的承载协议,而我们都知道UDP并不像TCP一样是一种流,报文是按照顺序到达的,所以需要request-id来做顺序判定。

   

     常见的类型(标识域)有哪些及其对应的值?


          BOOL(0x01);INT(0x02);OCTSTR(0x04);NULL(0x05);OBJID(0x06);ENUM(0x0A);EQ(0x30);SETOF(0x31);IPADDR (0x40);COUNTER (0x41);GAUGE(0x42);

TIMETICKS(0x43);OPAQUE(0x44);GET(0xA0);GETNEXT(0xA1);GETResp(0xA2);SET(0xA3);TRAP(0xA4);


   如何转化长度域十六进制数据?

        长度域指明值域的长度,不定长,一般为一到三个字节。其格式可分为短格式和长格式.长度域采用短/长指示器(Short/Long Form)来标明长度指示符是否是单个字节,指示器在bit8上。如果短/长指示器是0,则为短限定格式,低7位包含的就是数据的长度值,长度值在0到127之间;如果短/长指示器是1,则为长限定格式,其低7位的值表示后面紧跟的长度指示值的字节数,而后续字节拼接起来的值就是数据字段的长度,即数据长度。


      举例:

     length:30 => 1E 

     length:169 => 81 A9 (a9 == 169 ,81 中的1 表示一个字节 ,8作为标识)

     length:1500 => 82 05 DC ( 05dc == 1500 82 中的 表示两个字节,8作为标识)


5.抓包分析

0000   30 4b 02 01 00 04 06 70 75 62 6c 69 63 a0 3e 02

0010   01 48 02 01 00 02 01 00 30 33 30 0f 06 0b 2b 06

0020   01 02 01 19 03 02 01 05 01 05 00 30 0f 06 0b 2b

0030   06 01 02 01 19 03 05 01 01 01 05 00 30 0f 06 0b

0040   2b 06 01 02 01 19 03 05 01 02 01 05 00

 

30 4b :表示整个snmp报文的编码方式为30 ,即是SEQUENCE类型表示snmp报文的长度为4b,即为75

 

02 01 00 :02表示该字段是INTERGER类型,01表示该字段占用一个字节,00表示版本号为1

 

04 06 70 75 62 6c 69 63 :04表示该字段为OCTET STRING 类型,06表示该字段的长度 ,70 75 62 6c 69 63 表示 “public

 

a0 3e :a是该字段的固定值,0表示这是一个get-request报文,3e 表示PUD还有 62 个字节

 

02 01 48 : 02表示该字段是INTERGER类型 ,01 表示该字段占用一个字节,48表示request-id 72

 

02 01 00 02表示该字段是INTERGER类型 ,01 表示该字段占用一个字节,00 表示报文的差错状态为 0

 

02 01 00 :02表示该字段是INTERGER类型 ,01 表示该字段占用一个字节,00 表示报文的差错索引为 0

 

30 33 : 30 表示编码类型为 30 ,即是SEQUENCE类型33表示后续 键 区域占用 51 个字节

 

30 0f 06 0b 2b 06 01 02 01 19 03 02 01 05 01 05 0030 表示编码类型为 30 ,即是SEQUENCE类型0f 表示该字段共有15个字节,06 表示第一个变量为键,0b表示键长为11个字节,2b 06 01 02 01 19 03 02 01 05 01 表示 1.3.6.1.2.1.25.3.2.1.5.1 , 00 表示该值的字段的长度为0,即为空

 

30 0f 06 0b 2b 06 01 02 01 19 03 05 01 01 01 05 00 :同上

 

30 0f 06 0b 2b 06 01 02 01 19 03 05 01 02 01 05 00 :  同上

 

你可能感兴趣的:(snmp)