摘 要:該文介紹了對SNMP MIB變量進行編譯和瀏覽的一組計算機網(wǎng)絡(luò)管理的底層工具,包括一個MIB編譯器、一個MIB瀏覽器和MIB樹的通用數(shù)據(jù)庫實現(xiàn)。該組MIB工具的特點在于簡單實用,并在某些方面具有特色與創(chuàng)新。
關(guān)鍵詞:計算機網(wǎng)絡(luò)管理 SNMP MIB編譯器 MIB瀏覽器
中圖分類號:TP319文獻標(biāo)識碼:A文章編號:1674-098X(2013)05(c)-0072-01
管理信息庫(MIB)是SNMP標(biāo)準(zhǔn)的重要組成部分,它是由許多MIB變量組成的一個樹型結(jié)構(gòu),定義了網(wǎng)絡(luò)設(shè)備可以被管理的內(nèi)容。除了SNMP標(biāo)準(zhǔn)定義的MIB變量以外,設(shè)備廠家為了更好地管理自己的設(shè)備,常常需要定義大量擴充的MIB變量。設(shè)備廠家一般提供給用戶若干正文形式的MIB文件,這些文件中按照ASN.1的文法給出了該設(shè)備支持的所有MIB變量,包括SNMP標(biāo)準(zhǔn)定義的和廠家擴充的。因此,要想管理一個網(wǎng)絡(luò)設(shè)備,首先必須了解該設(shè)備支持哪些MIB變量。
1 MIB編譯器
MIB編譯器接受按ASN.1語法編寫的MIB文本文件(包括標(biāo)準(zhǔn)RFC和廠家擴充的),識別MIB文件中定義的對象,包括其類型、對象標(biāo)識符(OID)、訪問權(quán)限、狀態(tài)、缺省值等屬性,檢查文件中的語法和語義錯誤,如果沒發(fā)現(xiàn)錯誤就生成網(wǎng)絡(luò)管理平臺可以使用的MIB樹內(nèi)部結(jié)構(gòu)。
MIB編譯器的外部接口主要功能包括:對輸入的MIB文本文件進行詞法、語法和語義分析,產(chǎn)生MIB樹內(nèi)部結(jié)構(gòu);為上層網(wǎng)管應(yīng)用程序提供MIB樹內(nèi)部結(jié)構(gòu)的調(diào)用接口;通過轉(zhuǎn)換器將MIB樹內(nèi)部結(jié)構(gòu)轉(zhuǎn)換為通用數(shù)據(jù)庫實現(xiàn)。
MIB編譯器的功能結(jié)構(gòu)可以分成詞法分析、語法分析、MIB樹構(gòu)造和錯誤處理四個部分。詞法分析:對輸入的MIB文本文件進行預(yù)處理,去掉注釋和空白字符;識別輸入文件中的一個個單詞,構(gòu)造相應(yīng)的屬性字序列。語法分析:對屬性字序列進行上下文分析,檢查是否符合SMIv1和SMIv2語法規(guī)則,識別出一個個的結(jié)點對象及其屬性。MIB樹的構(gòu)造:對輸入的MIB結(jié)點序列進行處理,根據(jù)結(jié)點的OID,識別每個結(jié)點的父結(jié)點、子結(jié)點和兄弟結(jié)點,設(shè)置結(jié)點相應(yīng)指針以形成一個二叉樹結(jié)構(gòu)。
MIB文件經(jīng)過編譯,其中定義的MIB變量就被加入到MIB樹內(nèi)部結(jié)構(gòu)中。當(dāng)某個MIB文件/模塊過期了(一個MIB文件中可能定義了多個MIB模塊),需要用更新的MIB模塊來替代時,需要將原先編譯的MIB文件/模塊從MIB樹內(nèi)部結(jié)構(gòu)中卸載下來。
2 MIB瀏覽器
MIB瀏覽器一般提供給高級網(wǎng)絡(luò)管理人員使用,主要完成兩件工作:(1)查看已經(jīng)編譯的MIB對象的定義信息,(2)直接利用SNMP協(xié)議機讀/寫被管設(shè)備所支持的MIB對象的當(dāng)前值。
2.1 查看MIB變量的定義信息
MIB瀏覽器首先讀入存儲在數(shù)據(jù)庫中的、由MIB編譯器編譯生成的MIB定義信息,根據(jù)MIB變量的OID確定變量之間的父子關(guān)系,生成一棵完整的MIB樹并顯示在界面上。
用戶通過鼠標(biāo)點擊可以瀏覽這棵MIB樹,選擇需要查看的MIB變量。另外,用戶也可以直接輸入需要查看的MIB變量的OID,后一種方法適合于用戶已知MIB變量的OID或者查看一個尚未編譯的MIB變量的當(dāng)前值的情況。
為了查看一個MIB變量的定義信息,如變量的名字、OID、定義宏、數(shù)據(jù)類型、存取控制和描述信息等,MIB瀏覽器根據(jù)選中MIB變量的OID,在MIB數(shù)據(jù)庫的第一級表中查找對應(yīng)的記錄。根據(jù)記錄中定義宏字段的值,在相應(yīng)的數(shù)據(jù)庫表格中查找對應(yīng)的記錄,取得MIB變量的各種定義信息。
2.2 讀寫MIB變量的當(dāng)前值
通過指定設(shè)備的IP地址、MIB變量實例以及讀或?qū)慍ommunity,調(diào)用SNMP協(xié)議引擎提供的API函數(shù),采用SNMPv1協(xié)議的Get、GetNext、Set以及SNMPv2的GetBulk操作與設(shè)備上的SNMP代理交互,讀寫設(shè)備所支持的MIB變量的當(dāng)前值??梢酝瑫r讀寫多個MIB變量實例。
2.3 遍歷Agent實現(xiàn)的MIB對象樹
方法如下:對于GetNext操作返回的下一個變量實例的標(biāo)識符,從后向前進行分析。首先看整個標(biāo)識符是否代表一個已識別的MIB變量,如果不能認識,就去掉標(biāo)識符最后一個分量再重復(fù)上述過程,直到得到一個能夠認識的標(biāo)識符為止。按照這種方法,如果GetNext操作返回的標(biāo)識符代表一個已識別的MIB變量的實例,那么能夠認識的標(biāo)識符就是該MIB變量的OID,去掉的分量拼接起來就是該變量實例的索引。如果GetNext操作返回的標(biāo)識符代表一個尚未認識的MIB變量實例,那么識別出來的標(biāo)識符就是實際MIB變量的祖先變量的OID,并不影響下一次的GetNext操作。
3 MIB樹的數(shù)據(jù)庫實現(xiàn)
SNMP有關(guān)RFC定義的和廠家擴充的MIB文本文件需要經(jīng)過MIB編譯器的編譯才能為網(wǎng)管平臺和SNMP代理所用。MIB編譯器產(chǎn)生的輸出一般有兩種:C源程序和文本文件,C源程序可以直接為SNMP代理所用,文本文件一般提供給網(wǎng)管平臺使用。這個文本文件雖然經(jīng)過了編譯分析,但由于SNMPv2提供了9種ASN.1 MACRO類型,大多數(shù)的MACRO定義都比較復(fù)雜,所以MIB編譯器產(chǎn)生的文本文件一般都對原始的MIB定義文件進行了較大的簡化,丟失了相當(dāng)多的信息。另外,網(wǎng)管平臺還不能直接使用這個文本文件,還需要開發(fā)一個程序來讀入和理解它。
采用通用的關(guān)系型數(shù)據(jù)庫來實現(xiàn)SNMP MIB定義信息的存儲具有諸多好處,包括可以將一個復(fù)雜的MACRO定義分解成多個數(shù)據(jù)庫表格,在這些表格之間建立關(guān)聯(lián)信息;可以利用數(shù)據(jù)庫系統(tǒng)提供的關(guān)鍵字特征來保證MIB變量OID的唯一性;MIB數(shù)據(jù)庫實現(xiàn)對上層的網(wǎng)管應(yīng)用程序提供統(tǒng)一的數(shù)據(jù)庫表格接口,不限制這些應(yīng)用程序采用的語言以及與MIB數(shù)據(jù)庫的連接方式。
MIB樹數(shù)據(jù)庫的表結(jié)構(gòu)主要分成三級,不同級別的表之間通過OID相關(guān)聯(lián),三級表格構(gòu)成一棵完整的MIB樹。
第一級表MIBTREE中包含了所有MIB結(jié)點的OID、名字、定義結(jié)點的MIB模塊名、以及結(jié)點之間的父子和兄弟關(guān)系。
第二級表包括了Object Type、Notification Type和Object Identity等8張表格,每張表格中包含了一個特定ASN.1 MACRO的一些特殊的屬性。Object Identifier類型的MIB結(jié)點的屬性已經(jīng)包括在MIBTREE表格中,所以第二級表格中沒有出現(xiàn)Object Identifier。
第三級表包括了Object Type Index和Notification Type Object等14張表,這些表格反映了某個特定MACRO中定義的一些包含了不定數(shù)目對象的屬性。
除了這個完整的MIB樹外,SNMPv1還定義了一些Trap,SNMP v2還定義了一些Textual Convention,這些Trap和Textual Convention都沒有OID,因此游離于MIB樹之外。