SNMP協議 PDU報文格式分析(BER編碼)

2021-06-18 08:06:54 字數 2645 閱讀 9430

簡單網路管理協議(snmp)是目前在計算機網路中用得最廣泛的網路管理協議,它使用asn.1(abstract syntax notation one)來定義snmp報文格式和mib(management information base)變數的名稱。

asn.1是一種描述資料和資料特徵的正式語言,它和資料的儲存及編碼無關。根據asn.1標準定義,資料型別分為:簡單資料型別: boolean、null、integer、real、octerstring、object identifier、ipaddress、time ticks等。構造資料型別:sequence、sequence of set、set ofchoice等。構造資料型別提供一種或多種簡單資料型別進行復合的方法。

基本編碼規則ber

在具體系統中,我們需要用具體的編碼規則將asn.1語法表示的抽象資料轉換成具體的位元流。

snmp

使用的編碼方法是ber(basic encoding rule)。ber的資料都由三個域構成:標識域(tag)+長

度域(length)+值域(value)。

標識域

標識域指明資料的型別,占用1個位元組,常見的

型別有:

bool(0x01);

int(0x02);

octstr(0x04);

null(0x05);

objid(0x06);

enum(0x0a);

seq(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

length:1500 => 82 05 dc 值域

值域儲存的是資料的實際編碼。雖然asn.1定義了很多資料型別,但大多數型別可由整形、物件標

識、空、串等基本資料型別和sequence構造型別表示。例如有符號整數和無符號整數、timeticks、gauge、counter統一用整數表示。

整型integer

integer::=0x02 length *

(*表示重複)

整型資料值域用補碼表示,去掉多餘的零(正數)或一(負數)。值域最高位為符號位。例:

1500 => 02 02 05 dc

-1500 => 02 02 fa 24

物件標識objectid

snmp伺服器維護的所有管理資訊庫(mib)物件採用objectid表示,如,1.3.6.1.2.1.1.1表示mib庫

中的裝置描述sysdesc變數,其編碼規則如下:

objectid::=0x06 length *

(1)

subidentifier::=* lastbyte (2)

leadingbyte::=1 7bitvalue (3)

lastbyte::=0 7bitvalue (4)

首兩個id被合併為乙個位元組x*40+y (5)

雖然規則很多,但由於大多數子物件標識在0~127,只需按規則(1)、(5)即可;當子物件標識大於127,則按規則(2)、(3)、(4)將其分解為多個位元組,最後乙個位元組的高位為零,其餘位元組的高位為一。

如:1.3.6.1.810.1,根據規則(5),首兩個子物件

標識1.3被合併為2b(1*40+3=43);子物件標識810超過127 ,根據規則(2)、(3)、(4)將其拆分為兩個

位元組86 2a(810=11 0010 1010 ==> 1000 0110 00101010);整個mib被編碼為:0x06 0x06 0x2b 0x06 0x010x86 0x2a 0x01。

sequence

組合型別

sequence::=0x30 length *

如:30 05 02 01 10 05 00表示乙個sequence結構,內含兩個成員,其中乙個為整型,另乙個為空型別(null)。

其它型別

null::=0x05 0x00

string::=0x04 length *

snmp報文

snmp報文格式

snmp共有五種報文,分別為get_request(0xa0)、get_next_request(0xa1)、get_response(0xa2)、set_request(0xa3)和trap(0xa4),其結構如下:

snmp_message::=sequence

pdu::=sequence

**自網路)

SNMP報文格式分析

snmp定義了在客戶和伺服器之間交換的snmp報文的語法和語義。它使用asn.1 抽象語言 abstract syntax notation one 來定義snmp報文格式和mib變數的名稱。因此與絕大多數udp協議不同,snmp報文不含固定字段,也不能用固定的結構來定義。在iso osi參考模型中...

HTTP協議報文格式

接下來我們看看http協議 hypertext transfer protocol 超文字傳輸協議 瀏覽器端 客戶端 向web伺服器端訪問頁面的過程和http協議報文的格式。基於http協議的客戶機訪問包括4個過程,分別是建立tcp套接字連線 傳送http請求報文 接收http應答報文和關閉tcp套...

HTTP協議報文格式

http協議 hypertext transfer protocol 超文字傳輸協議 瀏覽器端 客戶端 向web伺服器端訪問頁面的過程和http協議報文的格式。基於http協議的客戶機訪問包括4個過程,分別是建立tcp套接字連線 傳送http請求報文 接收http應答報文和關閉tcp套接字連線 1....