資源描述:
《snmp報(bào)文分析》由會(huì)員上傳分享,免費(fèi)在線(xiàn)閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫(kù)。
1、SNMP報(bào)文格式分析1.SNMP報(bào)文格式1.1snmp簡(jiǎn)介1.1.1snmp工作原理SNMP采用特殊的客戶(hù)機(jī)/服務(wù)器模式,即代理/管理站模型。對(duì)網(wǎng)絡(luò)的管理與維護(hù)是通過(guò)管理工作站與SNMP代理間的交互工作完成的。每個(gè)SNMP從代理負(fù)責(zé)回答SNMP管理工作站(主代理)關(guān)于MIB定義信息的各種查詢(xún)。管理站和代理端使用MIB進(jìn)行接口統(tǒng)一,MIB定義了設(shè)備中的被管理對(duì)象。管理站和代理都實(shí)現(xiàn)相應(yīng)的MIB對(duì)象,使得雙方可以識(shí)別對(duì)方的數(shù)據(jù),實(shí)現(xiàn)通信。管理站向代理請(qǐng)求MIB中定義的數(shù)據(jù),代理端識(shí)別后,將管理設(shè)備提供的相關(guān)狀態(tài)或參數(shù)等數(shù)據(jù)轉(zhuǎn)換成MI
2、B定義的格式,最后將該信息返回給管理站,完成一次管理操作。?1.1.2snmp報(bào)文類(lèi)型SNMP中定義了五種消息類(lèi)型:Get-Request、Get-Response、Get-Next-Request、Set-Request和Trap。?1.Get-Request、Get-Next-Request與Get-Response?SNMP管理站用Get-Request消息從擁有SNMP代理的網(wǎng)絡(luò)設(shè)備中檢索信息,而SNMP代理則用Get-Response消息響應(yīng)。Get-Next-Request用于和Get-Request組合起來(lái)查詢(xún)特定
3、的表對(duì)象中的列元素。2.Set-Request?SNMP管理站用Set-Request可以對(duì)網(wǎng)絡(luò)設(shè)備進(jìn)行遠(yuǎn)程配置(包括設(shè)備名、設(shè)備屬性、刪除設(shè)備或使某一個(gè)設(shè)備屬性有效/無(wú)效等)。?3.Trap?SNMP代理使用Trap向SNMP管理站發(fā)送非請(qǐng)求消息,一般用于描述某一事件的發(fā)生,如接口UP/DOWN,IP地址更改等。?上面五種消息中Get-Request、Get-Next-Request和Set-Request是由管理站發(fā)送到代理側(cè)的161端口的;后面兩種Get-Response和Trap是由代理進(jìn)程發(fā)給管理進(jìn)程的,其中Trap消
4、息被發(fā)送到管理進(jìn)程的162端口,所有數(shù)據(jù)都是走UDP封裝。1.1.3snmp報(bào)文格式圖SNMP報(bào)文的形式大致如下圖所示。1.2snmp報(bào)文編碼格式SNMP(簡(jiǎn)單網(wǎng)絡(luò)管理協(xié)議)是目前在計(jì)算機(jī)網(wǎng)絡(luò)中用得最廣泛的網(wǎng)絡(luò)管理協(xié)議,它使用ASN.1(AbstractSyntaxNotationOne抽象語(yǔ)法表示法.1)來(lái)定義SNMP報(bào)文格式和MIB(ManagementInformationBase管理信息庫(kù))變量的名稱(chēng)。1.2.1ASN.1ASN.1是一種描述數(shù)據(jù)和數(shù)據(jù)特征的正式語(yǔ)言,它和數(shù)據(jù)的存儲(chǔ)及編碼無(wú)關(guān)。根據(jù)ASN.1標(biāo)準(zhǔn)定義,數(shù)據(jù)
5、類(lèi)型分為:a.簡(jiǎn)單數(shù)據(jù)類(lèi)型:?boolean布爾值null空integer整型real實(shí)數(shù)octerstring八進(jìn)制字符串objectidentifier對(duì)象標(biāo)識(shí)ipaddressIP地址timeticks時(shí)刻值等。b.構(gòu)造數(shù)據(jù)類(lèi)型:sequence序列sequenceofsetsetofchoice等。構(gòu)造數(shù)據(jù)類(lèi)型提供一種或多種簡(jiǎn)單數(shù)據(jù)類(lèi)型進(jìn)行復(fù)合的方法。1.2.2基本編碼規(guī)則BER在具體系統(tǒng)中,我們需要用具體的編碼規(guī)則將ASN.1語(yǔ)法表示的抽象數(shù)據(jù)轉(zhuǎn)換成具體的比特流。SNMP使用的編碼方法是BER(BasicEncodin
6、gRule)。BER的數(shù)據(jù)都由三個(gè)域構(gòu)成:標(biāo)識(shí)域(tag)+長(zhǎng)度域(length)+值域(value)。1.標(biāo)識(shí)域Tag表示:數(shù)據(jù)類(lèi)型編碼十六進(jìn)制表示數(shù)據(jù)類(lèi)型編碼十六進(jìn)制表示BOOL0x01INT0x02OCTSTR0x04NULL0x05OBJID0x06ENUM0x0ASEQ0x30SETOF0x31IPADDR0x40COUNTER0x41GAUGE0x42TIMETICKS0x43OPAQUE0x44GET0xA0GETNEXT0xA1GETResp0xA2SET0xA3TRAP0xA42.長(zhǎng)度域length表示長(zhǎng)度域用
7、于指示后續(xù)的值域value的字節(jié)數(shù)。但是這個(gè)長(zhǎng)度域自身多長(zhǎng)怎么確定呢?SNMP使用的是變長(zhǎng)表示法,這有點(diǎn)類(lèi)似與UTF8的編碼方式。具體表示方法如下:(1)如果值域的長(zhǎng)度在0到127字節(jié)之間,那么就是一個(gè)字節(jié)來(lái)表示,即第一個(gè)最高位為0的時(shí)候,其值就代表了值域的長(zhǎng)度。(2)如果值域的長(zhǎng)度在127字節(jié)以上,那么第一個(gè)字節(jié)的第一個(gè)bit位(為1)就用于指示值域的長(zhǎng)度在127字節(jié)以上,后7個(gè)bit位(實(shí)際值)以及后續(xù)用于表示值域長(zhǎng)度的字節(jié)數(shù)。例如:值域長(zhǎng)度(十進(jìn)制)編碼表示(十六進(jìn)制)解釋160x10在0到127之間,直接表示1600x8
8、10xA00x81的二進(jìn)制為10000001第一位表示其超過(guò)127,低7位表示后續(xù)還有一個(gè)字節(jié)來(lái)表示值域字節(jié)數(shù)。0xA0表示值域的長(zhǎng)度為160個(gè)字節(jié)。15000x820x050xDC第一個(gè)字節(jié)0x82表示后續(xù)還有兩個(gè)字節(jié)表示值域長(zhǎng)度,0x05DC的十進(jìn)制值為15