黃巖濤阮軍洲
(1中國電子科技集團公司第五十四研究所河北石家莊050081)
(2中國人民解放軍75660部隊廣西桂林541002)
技術論壇
基于NET-SNMP的代理擴展實現
黃巖濤1阮軍洲2
(1中國電子科技集團公司第五十四研究所河北石家莊050081)
(2中國人民解放軍75660部隊廣西桂林541002)
針對網絡中不同設備的高效管理問題,對NET-SNMP技術進行了簡要介紹。NET-SNMP是一個開源的軟件包,選擇NET-SNMP開發網管系統既便于移植,也利于代理的擴展。介紹了NET-SNMP開發工具的工作原理,詳細描述了在Linux環境下使用NET-SNMP開發工具擴展代理的流程和注意事項。代理軟件采用模塊化的結構,可根據需要擴展所支持的管理信息庫模塊,實現新的應用。結尾提出了NET-SNMP技術是一種實現遠程管理功能的有效可行的方法。
NET-SNMP簡單網絡管理協議代理管理信息庫
隨著網絡技術的發展,越來越多的設備接入到網絡。如何對網絡中的設備進行高效的管理成為一個重要課題。簡單網絡管理協議(SNMP)是應用最廣泛的網管協議,已經成為網絡管理系統的行業標準。SNMP是以TCP轅IP的協議為基礎[1],采用管理者-代理者的管理模型。SNMP的管理信息主要包括以下關鍵元素:管理信息結構(SMI)、管理信息庫(MIB)和抽象語法表示(ASN.1)[2,3]。SNMP為不同種類的設備、不同廠商的設備和不同型號的設備定義一個統一的接口和協議,可以提高網絡管理效率,簡化管理員的工作。
SNMP包括一系列協議組和規范,提供了從網絡設備中收集和配置管理信息的方法,也提供了網絡設備向管理站報告問題和錯誤的方法。這些網絡設備都包含標準的SNMP代理模塊,包括MIBⅡ及其相關組件。但是,由于不同設備廠商的設備存在差異,所以根據自身設備的特點擴展了標準MIB,定義了私有MIB,使網絡設備的可管理性大大提高。在Linux環境下的SNMP代理的開發方式有很多種,由于NETSNMP具有開源、移植性好、功能強大和便于維護等優點,所以受到了開發人員的歡迎,成為開發人員開發網管代理的很好選擇。
NET-SNMP是一個開源的軟件開發工具,可由官方網站下載源碼。使用比較穩定的5.7.1版本,NET-SNMP軟件包主要包括以下內容[4]:①為SNMP應用開發者提供完整的API,包括C和Perl的API;②可擴展的SNMP代理程序snmpd,開發者可以開發動態模塊擴展snmpd;③MIB管理,提供了典型MIB庫,并可以將MIB庫映射到進程內部,按MIB所定義的層次結構組織數據;④提供眾多命令行工具,包括snmpget、snmpgetnext、snmpwalk、snmpbulkget、snmpbulkwalk、snmptable、snmpset、snmptrap、snmpinform、snmpdelta、snmptest、snmptranslate和snmpstatus等;⑤Trap接收進程,用于接收、顯示和記錄Trap;⑥標準Unix命令netstat的SNMP版本srunpnetstat;⑦基于Tk/perl的圖形化MIB瀏覽工具tkmib。
3.1 安裝配置軟件包
3.1.1 NET-SNMP安裝
以RedHat為例介紹安裝過程,由于某些程序的需要,需要以root身份登陸linux。安裝NET-SNMP的具體步驟如下:
把net-snmp-5.7.1.tar.gz復制到Linux任何目錄下,運行以下命令解壓:tar zxvf net-snmp-5.7.1.tar.gz;執行./configure --prefix=/usr/net-snmp/;執行make;執行make install。
3.1.2 perl模塊安裝
由于mib2c使用perl語言編寫的,為了使用mib2c擴展snmp代理,所以必須安裝perl模塊。安裝perl模塊具體步驟如下:
在/root中找到隱藏文件.bash_profile,打開文件,加入路徑/usr/net-snmp/bin和usr/net-snmp/sbin,執行source./. bash_profile;進入net-snmp-5.7.1/perl/SNMP下執行命令perl Makefile.PL;執行make;執行make install。
3.1.3 配置NET-SNMP
軟件包安裝完成后,需要在snmpd.conf文件中配置NETSNMP,包括:啟動運行和進程進入循環后所需的信息、共同體(community)權限、trap上報的網管地址。該文件主要配置內容包括:①rocommunity public//共同體名驗證讀訪問控制;②rwcommunity private//共同體名驗證寫訪問控制;③trapsink xxx.xxx.xxx.xxx//snmp vl trap發送地址;④trap2sink xxx.xxx. xxx.xxx//snmp v2 trap發送地址。
在snmpd.conf文件中“#”開頭的行表示注釋行。只讀共同體名為public,即get的訪問口令。讀寫的共同體名為private,即set的訪問口令。Trapsink表示snmpv1的trap發送的管理站地址為xxx.xxx.xxx.xxx。Trap2sink表示snmpv2的trap發送的管理站地址為xxx.xxx.xxx.xxx。
3.2 生成代理擴展代碼
NET-SNMP提供了mib2c工具,mib2c是一個功能強大的工具,可以滿足開發人員對標量和表的各種需求。mib2c可以將mib文件轉化成C語言的框架代碼,開發人員需要在相應位置填充少量自己的代碼即可實現功能。mib2c工具將mib文件(例如:myMib.txt)轉化為.c和.h文件的步驟如下[5]:
將myMib.txt文件拷貝到/usr/net-snmp/share/snmp/mibs目錄;執行(env MIBS="+myMib"mib2c-f demo節點名)命令,輸入不同的選項,生成不同框架的.c和.h文件。
3.3 擴展代理實現
擴展代理的實現可以在mib2c生成的程序框架基礎上修改[6],也可以參照NET-SNMP提供的例子example.c和example.h,在其基礎上進行修改,選擇在mib2c生成的標量程序框架demoScalar.c和demoScalar.h基礎上分析如何實現標量的get和set功能。
3.3.1 init模塊
init_scalarDemo主要完成擴展代理的初始化功能。init_scalarDemo模塊用const oid intType_oid[]={1,3,6,1,4,1,1,1}定義了需要擴展的MIB在MIB樹中的位置。netsnmp_register_scalar模塊的主要功能是注冊需要擴展的MIB。
3.3.2 get模塊
get功能是代理的基本功能,下面以demoScalar.c文件為例,介紹get功能的實現。get功能的框架程序主要在case MODE_GET的分支中,開發人員需要在該程序分支中得到要返回的數據,然后使用snmp_set_var_typed_value函數,將數據返回[7]。
3.3.2 set模塊
set功能的實現原理,如圖1所示。
set功能包括RESERVE1、RESERVE2、FREE、ACTION、UNDO和COMMIT6個狀態,分別對應圖中的保留1、保留2、釋放資源、實現設置、取消操作和提交設置。其中,RESERVE1、RESERVE2和FREE分別用于合法性檢查、分配資源和釋放資源。ACTION是要實現set功能的狀態,但是只保存在內存中。UNDO是取消上一次操作狀態。COMMIT是把ACTION操作提交狀態。

圖1 set功能實現原理圖
3.4編譯擴展代理到NET-SNMP代理
用mib2c工具生成C語言的框架代碼后,開發人員要根據實際需要在框架代碼中填充代碼。填充代碼完成后,需要將擴展代碼編譯到NET-SNMP代理。編譯可以有多種方式,例如靜態編譯和動態加載庫等[8]。文章采用的是靜態編譯的方式,即通過修改配置頭文件,在相應位置包含新引入的mib模塊的.c和.h文件,最后重新編譯代理。擴展代碼編譯到NETSNMP代理的步驟如下:

3.5 NET-SNMP V3的配置
在配置NET-SNMP V3前,需要先將snmpd進程結束。在命令行輸入net-snmp-create-v3-user命令,顯示以下配置信息:


在上面的注釋處分別輸入用戶名、鑒權密碼和加密密碼,完成NET-SNMP V3配置。
隨著網絡技術和網絡應用的飛速發展,網絡的復雜度大大增加,如何有效的管理網絡,確保網絡穩定運行已經成為一個迫切需要解決的問題。因此網絡管理技術顯得越來越重要。網絡管理使得各通信網絡能夠穩定、高效和持續地運轉,已經成為網絡技術研究的重要領域。介紹了利用NET-SNMP開發工具擴展開發網管代理的方法,詳細介紹了NET-SNMP軟件包的組成和工作原理,描述了NET-SNMP軟件包的安裝和配置過程,分析了擴展代理的開發和編譯流程,使開發者不需要關心NET-SNMP實現細節,就能開發出具有移植性和擴展性的網管代理軟件。
[1]DRAKE P.Using SNMP to manage networks[C].London: Designing Resilient Architectures,IEE Colloquium on,1991: 2/1-2/4.
[2]RFC1157,Simple Network Management Protocol(SNMP)[S].
[3]RFC1901,Introduction to Community-based SNMPv2[S].
[4]劉明,陳磊,宋佳.NET-SNMP網管代理在ARM9上實現的技術[J].計算機系統應用,2011,20(10):232-235.
[5]葛化敏,楊利青,鄭靜.基于NET-SNMP的嵌入式網絡管理代理的開發[J].通信技術,2009,42(11):138-140.
[6]呂鋒,閔笛.嵌入式Power PC Linux環境下基于Net-SNMP的代理開發[J].武漢理工大學學報,2006,28(5): 51-54.
[7]孫曉艷.SNMP擴展代理的設計與實現[J].現代電子技術, 2011,34(22):116-119.
[8]付強,王玥.基于NET-SNMP的代理擴展開發[J].工業控制計算機,2011,24(7):56-57.
Implementation of Agent Extension Based on NET-SNMP
HUANG Yan-tao1RUAN Jun-zhou2
(1 The 54th Research Institute of CETC,Shijiazhuang Hebei 050081,China)
(2 Unit 75660,PLA,Guilin Guangxi 541002,China)
Aiming at the effective management of different devices in network,this paper briefly introduces the NET-SNMP technology.The NET-SNMP is an open source software package.The selection of NET-SNMP for developing the network management system is convenient for migration and agent extension.This paper introduces the operating principle of NET-SNMP development tool,describes in detail the processes and precautions of extension agent of NET-SNMP development tool used in Linux environment.The agent software uses modular structure,so that the supported management information base module can be extended according to the requirements,in order to realize the new application.The conclusion shows that the NET-SNMP technology is an effective method for implementing the remote management function.
NET-SNMP;simple network management protocol;agent;management information base
TP391.4
:A
:1008-1739(2014)08-54-3