您好,登錄后才能下訂單哦!
SNMP協(xié)議入門
1、引言
基于TCP/IP的網(wǎng)絡(luò)管理包含3個組成部分:
1) 一個管理信息庫MIB(Management Information Base)。管理信息庫包含所有代理進(jìn)程的所有可被查詢和修改的參數(shù)。RFC1213[McCloghrie and Rose 1991]定義了第二版的MIB,叫做MIB-II。
2) 關(guān)于MIB的一套公用的結(jié)構(gòu)和表示符號。叫做管理信息結(jié)構(gòu)SMI(Structure of Management Information)。這個在RFC 1155 [Rose and McCloghrie 1990] 中定義。例如:SMI定義計數(shù)器是一個非負(fù)整數(shù),它的計數(shù)范圍是 0~4294967295,當(dāng)達(dá)到最大值時,又從0開始計數(shù)。
3) 管理進(jìn)程和代理進(jìn)程之間的通信協(xié)議,叫做簡單網(wǎng)絡(luò)管理協(xié)議SNMP(Simple Network Management Protocol)。在RFC 1157 [Case et al. 1990]中定義。SNMP包括數(shù)據(jù)報交換的格式等。盡管可以在傳輸層采用各種各樣的協(xié)議,但是在SNMP中,用得最多的協(xié)議還是UDP。
2、SNMP協(xié)議概述
簡單網(wǎng)絡(luò)管理協(xié)議(SNMP:Simple Network Management Protocol)是由互聯(lián)網(wǎng)工程任務(wù)組(IETF:Internet Engineering Task Force )定義的一套網(wǎng)絡(luò)管理協(xié)議。該協(xié)議基于簡單網(wǎng)關(guān)監(jiān)視協(xié)議(SGMP:Simple Gateway Monitor Protocol)。利用SNMP,一個管理工作站可以遠(yuǎn)程管理所有支持這種協(xié)議的網(wǎng)絡(luò)設(shè)備,包括監(jiān)視網(wǎng)絡(luò)狀態(tài)、修改網(wǎng)絡(luò)設(shè)備配置、接收網(wǎng)絡(luò)事件警告等。雖然SNMP開始是面向基于IP的網(wǎng)絡(luò)管理,但作為一個工業(yè)標(biāo)準(zhǔn)也被成功用于電話網(wǎng)絡(luò)管理。
3、SNMP的發(fā)展史
SNMP經(jīng)過了一個相對較長的發(fā)展過程,到目前為止一共經(jīng)歷了三個版本。當(dāng)下使用最廣泛是SNMPv2。
l 1989年發(fā)布了第一個版本的SNMP,稱為SNMPv1。
l 1991年發(fā)布SNMP的一個補充---RMON(Remote Network Monitoring,遠(yuǎn)程網(wǎng)絡(luò)監(jiān)視)。RMON擴充了SNMP的功能,包括對LAN的管理以及對依附于這些網(wǎng)絡(luò)設(shè)備的管理。注:RMON沒有修改和增加SNMP協(xié)議本身以及SMI,只是增加了SNMP監(jiān)視子網(wǎng)的能力,把整個子網(wǎng)當(dāng)成一個個體來監(jiān)視,提供了新的MIB庫及相關(guān)的MIB行為。
l 1993年SNMPv1的升級版被提出,SNMPv2。
l 1995年SNMPv2正式發(fā)布,v2增加了SNMPv1的功能,并規(guī)定了如何在基于OSI的網(wǎng)絡(luò)中使用SNMP。同時RMON于本年度擴展為RMONv2
l 1998年SNMPv3發(fā)布,一系列文檔定義了SNMP的安全性,并定義了將來改進(jìn)的總體結(jié)構(gòu)。SNMPv3可以和v2、v1一起使用。
4、SNMP的工作原理
SNMP采用特殊的客戶機/服務(wù)器模式,即代理/管理站模型。對網(wǎng)絡(luò)的管理與維護(hù)是通過管理工作站與SNMP代理間的交互工作完成的。每個SNMP從代理負(fù)責(zé)回答SNMP管理工作站(主代理)關(guān)于MIB定義信息的各種查詢。
SNMP的應(yīng)用場景如圖1所示:
管理站和代理端使用MIB進(jìn)行接口統(tǒng)一,MIB定義了設(shè)備中的被管理對象。管理站和代理都實現(xiàn)相應(yīng)的MIB對象,使得雙方可以識別對方的數(shù)據(jù),實現(xiàn)通信。管理站向代理請求MIB中定義的數(shù)據(jù),代理端識別后,將管理設(shè)備提供的相關(guān)狀態(tài)或參數(shù)等數(shù)據(jù)轉(zhuǎn)換成MIB定義的格式,最后將該信息返回給管理站,完成一次管理操作。
5、SNMP的報文類型
SNMP中定義了五種消息類型: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組合起來查詢特定的表對象中的列元素。
(2)Set-Request SNMP管理站用Set-Request 可以對網(wǎng)絡(luò)設(shè)備進(jìn)行遠(yuǎn)程配置(包括設(shè)備名、設(shè)備屬性、刪除設(shè)備或使某一個設(shè)備屬性有效/無效等)。
(3)Trap SNMP代理使用Trap向SNMP管理站發(fā)送非請求消息,一般用于描述某一事件的發(fā)生,如接口UP/DOWN,IP地址更改等。
上面五種消息中Get-Request、Get-Next-Request和Set-Request是由管理站發(fā)送到代理側(cè)的161端口的;后面兩種Get-Response和Trap 是由代理進(jìn)程發(fā)給管理進(jìn)程的,其中Trap消息被發(fā)送到管理進(jìn)程的162端口,所有數(shù)據(jù)都是走UDP封裝。
SNMP工作流程如圖2:
6、SNMP的報文格式
SNMP代理和管理站通過SNMP協(xié)議中的標(biāo)準(zhǔn)消息進(jìn)行通信,每個消息都是一個單獨的數(shù)據(jù)報。SNMP使用UDP(用戶數(shù)據(jù)報協(xié)議)作為第四層協(xié)議(傳輸協(xié)議),進(jìn)行無連接操作。SNMP消息報文包含兩個部分:SNMP報頭和協(xié)議數(shù)據(jù)單元PDU。
在實際網(wǎng)絡(luò)傳輸環(huán)境下,SNMP報文的長度取決于其所采用的編碼方式。SNMP統(tǒng)一采用BER(Basic Encoding Rule)的編碼規(guī)則,同時在正式SNMP規(guī)范中使用的是ASN.1語法,Abastract Syntax Notation v1,即抽象語法描述語言。這兩個概念在后面實踐環(huán)節(jié)再做進(jìn)一步介紹,這里只要稍微了解一下即可,不妨礙我們對協(xié)議本身的分析。這里我們簡單解釋一下BER編碼規(guī)則:
BER作為ANS.1的基本編碼規(guī)則,描述具體的ANS.1對象如何編碼為比特流在網(wǎng)絡(luò)上進(jìn)行傳輸。BER編碼規(guī)則由三部分組成:
SNMP中定義了幾種基本的數(shù)據(jù)類型,其中v1和v2版有些改動,具體參見相應(yīng)的RFC文檔。這里我們只介紹幾種最常見的類型:
l INTEGER:一個整數(shù)
l OCTER STRING: 0或多個8bit字節(jié),每個字節(jié)在0~255之間取值
l DisplayString:0或多個8bit字節(jié),每個字節(jié)必須是ASCII碼。在MIB-II中,所有該類型變量不能超過255個字符(0個字符可以)
l NULL:代表相關(guān)的變量沒有值
l IpAddress:4字節(jié)長的OCTER STRING,以網(wǎng)絡(luò)字節(jié)序表示IP地址
l PhyAddress:6字節(jié)長的OCTER STRING,代表物理地址
l Counter:非負(fù)整數(shù),可以從0遞增到232-1()。達(dá)到最大值后歸0
l TimeTicks:時間計數(shù)器,以0.01秒為單位遞增,不同的變量可以有不同的遞增幅度。所以在定義這種類型的變量時需要制定遞增幅度
l SEQUENCE:與C語言中的結(jié)構(gòu)體類似
l SEQUENCE OF:一個向量,參見后面ANS.1語法詳細(xì)介紹章節(jié)
SNMP報文在傳輸層是封裝在UDP報文中的,而UDP又是基于IP網(wǎng)絡(luò)的,因此,我們可以得到完整的報文描述結(jié)構(gòu),如下圖所示:
PDU類型其實包含兩個字節(jié),第一個字節(jié)表示真實的PDU的類型;第二個字節(jié)表示后面報文所占的字節(jié)總數(shù)。針對SNMPv1,這個字段取值如下:
表1 PDU類型
PDU類型 | 名稱 |
0 | get-request |
1 | get-next-request |
2 | get-response |
3 | set-request |
4 | trap |
也就是說,trap的類型是4。但是在數(shù)據(jù)報文中,該字段一般表示為ax,其中x取[0,4],即a0~a3表示相應(yīng)的get、set等操作,a4表示trap報文。這里除了類型字段意外,其他字段均采用BER編碼方式:
實戰(zhàn)演練之報文格式分析
Trap報文格式和上述圖5所展示的結(jié)構(gòu)有些差別,這里我們只分析SNMPv1和SNMPv2的Trap報文格式。trap報文前面的部分都一樣,區(qū)別在PDU協(xié)議數(shù)據(jù)單元部分。
SNMPv1 Trap報文
SNMPv1的Trap報文格式如下所示:
注意:除了PDU類型和PDU長度字段外,后面的每個字段都是BER編碼方式。
trap類型”可以取以下值,其中0~6是已定義的特定trap,7及其以后的類型由供應(yīng)商自定義
表2 trap類型、名稱及描述信息
trap類型 | 名稱 | 描述信息 |
0 | coldStart | 代理進(jìn)程對自己初始化 |
1 | warmStart | 代理進(jìn)程對自己重新初始化 |
2 | linkDown | 一個接口已從工作狀態(tài)變?yōu)楣收蠣顟B(tài)(報文中的第一個變量標(biāo)識此接口) |
3 | linkUp | 一個接口已從故障狀態(tài)變?yōu)楣ぷ鳡顟B(tài)(報文中的第一個變量標(biāo)識此接口) |
4 | authenticationFailure | 從SNMP管理進(jìn)程收到無效共同體的報文 |
5 | egpNeighborLoss | 一個EGP鄰站已變?yōu)楣收蠣顟B(tài)(報文中的第一個變量包含鄰站IP地址) |
6 | enterpriseSpecific | 在這個特定的代碼段中查找trap信息 |
通過wireshark抓包工具,捕獲一條如下的SNMP報文,接下來對其進(jìn)行仔細(xì)分析。
SNMPv1原始報文內(nèi)容:
00 23 5a 9e 58 b9 00 4c41 49 50 55 08 0045 00 00 48 00 00 40 00 40 11 a54e c0 a8 0a 01 c0 a8 0a 05 0c 00 00 a2 00 34 ff e0 30 2a 02 01 00 04 06 70 75 62 6c 69 63 a4 1d 06 0a 2b 06 01 04 01 bf 08 03 02 0a 40 04 c0 a8 0a 01 02 01 00 02 01 00 4301 0e 30 00
目的MAC:00 23 5a 9e 58 b9
源MAC:00 4c 41 49 50 55
協(xié)議類型:08 00,為IP數(shù)據(jù)報
IP頭:45 00 00 48 00 00 40 00 40 11 a5 4e c0a8 0a 01 c0 a8 0a 05 0c
UDP頭:0c 00 00 a2 00 34 ff e0
其余部分都為SNMP報文,接下來我們對照前面的報文結(jié)構(gòu)體來逐個分析一下。
n 30 表示SNMP消息是ASN.1的SEQUENCE類型;
n 2a 表示該SNMP報文的總長度是42(0x2a)個字節(jié),該字段所表示的報文長度起始于它后面的第一個字節(jié)直到報文結(jié)束;
n 02 01 00 表示版本號,可見其確實為BER編碼方式。02表示該字段是INTEGER類型;01表示該字段占1個字節(jié);00表示版本號,該值為“版本號-1”;
n 04 06 70 75 62 6c 69 63表示團體名,04表示該字段為OCTET STRING類型;06表示該字段占6個字節(jié);70 75 62 6c 69 63 表示團體名的ANSII碼的十六進(jìn)制形式,這里是“public”;
n a4 1d 其中a4中的“4”表示這是一個trap報文,a4又叫報文的標(biāo)簽標(biāo)記;1d表示后面還有29(0x1d)個字節(jié)的數(shù)據(jù);
n 06 0a 2b 06 01 04 01 bf 08 03 02 0a企業(yè)OID標(biāo)識。06表示該字段是個對象標(biāo)識符,OBJECT IDENTIFIER;0a表示該字段占10(0x0a)個字節(jié);關(guān)于SNMP的OID的編碼方式有些奇特:例如1.3.6.1.2…. 取前兩個數(shù)字分別記為x和y。編碼時40*x+y,這里x=1,y=3,因此結(jié)果為40*1+3=43,即表示十六進(jìn)制的2b。因此,這里的企業(yè)OID編碼即為1.3.6.1.4.1.8072.3.2.10;
n 40 04 c0 a8 0a 01 同樣40表示該字段為OCTET STRING 類型;04表示IP地址占4個字節(jié);IP地址為192.168.10.1;
n 02 01 00 其中00表示trap類型為coldStart;
n 02 01 00 其中00表示我們指定的trap即specific-trap也為coldStart類型;
n 43 01 0e 43表示為TimeTicks類型;01表示該字段占1個字節(jié);0e即十進(jìn)制的14表示時間標(biāo)簽為0.14秒,這里時間計數(shù)器以0.01秒遞增;
n 30 00 30表示“鍵-值”值對的編碼類型為SEQUENCE;00表示該字段占0個字節(jié),即沒有該字段。
SNMPv2 Trap報文
SNMPv2的Trap報文格式如圖8所示:
同樣的,這里除了trap類型和報文長度是標(biāo)準(zhǔn)網(wǎng)絡(luò)字節(jié)序之外,其余協(xié)議字段也均為BER編碼方式??梢钥吹?/span>v2版的trap報文正在向統(tǒng)一的報文格式發(fā)展,已經(jīng)非常類似普通的SNMP請求、響應(yīng)報文了。
SNMPv2原始報文內(nèi)容:
00 23 5a 9e 58 b9 00 4c41 49 50 55 08 00 45 0000 7b 00 00 40 00 40 11 a5 1b c0 a8 0a 01 c0 a8 0a 05 0c 01 00 a2 00 67 04 bb 30 5d 02 0101 04 06 70 75 62 6c 69 63 a7 50 02 04 17 73 2c fb 02 01 00 02 01 00 3042 30 0d 06 08 2b 06 01 02 01 01 03 00 43 01 0e 30 17 06 0a2b 06 01 06 03 01 01 04 0100 06 09 2b 06 01 06 03 01 01 05 01 30 18 06 0a 2b 06 01 06 03 01 01 04 03 0006 0a 2b 06 01 04 01 bf 08 03 02 0a
目的MAC:00 23 5a 9e 58 b9
源MAC:00 4c 41 49 50 55
協(xié)議類型:08 00,IP報文
IP頭:45 00 00 7b 00 00 40 00 40 11 a5 1b c0a8 0a 01 c0 a8 0a 05
UDP頭:0c 01 00 a2 00 67 04 bb
余下部分全為SNMP報文內(nèi)容,這里我們做一下簡單的約定:
xx標(biāo)注類型;xx標(biāo)注長度;xx標(biāo)注真正的數(shù)據(jù)。
這樣一來上面這串原始數(shù)據(jù)就好分析多了J
n 30 5d 整個SNMP報文的編碼方式為30,即SEQUENCE類型,報文長度93(0x5d)字節(jié);
n 02 01 01 版本號01即v2版本;
n 04 06 70 75 62 6c 69 63 團體名70 75 62 6c 69 63 即英文的“public”;
n a7 50 a7表示trap類型為7,即廠商自定義trap;50表示PDU區(qū)段占80(0x50)字節(jié);
n 02 04 17 73 2c fb 請求ID為17 73 2c fb十進(jìn)制的393424123;
n 02 01 00 錯誤狀態(tài)0;
n 02 01 00 錯誤索引0;
n 30 42 “變量名-值”對編碼類型30即SEQUENCE類型;“變量名-值”所占總字節(jié)0x42,即66字節(jié);
n 30 0d 06 08 2b 06 01 02 01 01 03 00 43 01 0e 第一個“名-值”對區(qū)段編碼方式30即SEQUENCE類型;第一個“名-值”對總長度0x0d,13字節(jié);第一個變量名的編碼類型0x06,時間標(biāo)簽;第一個變量名占0x08個字節(jié);第一個變量名2b 06 01 02 01 01 0300,為1.3.6.1.2.1.1.3.0;第一個變量值為0x0e,即14;
n 30 17 06 0a 2b 06 01 06 03 01 01 04 01 0006 09 2b 06 01 06 03 01 01 05 01 第二個“名-值”對;變量名1.3.6.1.6.3.1.1.4.1.0;變量值1.3.6.1.6.3.1.1.5.1;
n 30 18 06 0a 2b 06 01 06 03 01 01 04 03 0006 0a 2b 06 01 04 01 bf 08 03 02 0a第三個“名-值”對;變量名1.3.6.1.6.3.1.1.4.3.0;變量值1.3.6.1.4.1.8072.3.2.10;
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。