1. 程式人生 > >三分鐘看懂Snmp協議分析

三分鐘看懂Snmp協議分析

Snmp協議分析

關鍵點 :BER編碼

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 :  同上