姚楠+康京山
摘 要
本文首先概要介紹了簡單網絡管理協議(SNMP)和NET-SNMP軟件包。在此基礎上介紹了如何利用NET-SNMP軟件開發包在Linux系統上實現嵌入式SNMP網絡管理軟件的基本流程。為種類繁多的網絡設備提供了一種簡單、快速的嵌入式網管開發方法。
【關鍵詞】Linux NET-SNMP SNMP 網絡管理
【關鍵詞】Linux NET-SNMP SNMP 網絡管理
隨著下一代網絡技術的廣泛應用,網絡設備的可管可控性呈現出越來越重要的意義。然而,當前的電信網絡和業務系統設備軟硬件平臺大多采用封閉私有技術,影響了電信網絡的可管理性和可擴展性,同時各設備之間也不能有效的實現應用共享及協同工作,新業務開發速度慢,造成電信網絡投資和運營成本較高,開發和部署速度遲緩,不能快速滿足用戶大量快速多變的數據業務開發需求。
針對上述問題,本文提出基于Linux平臺的嵌入式網絡管理軟件的快速開發方案,通過SNMP協議對被管網絡設備進行管控操作。具有實現簡單,開發速度快等特點,很好地實現了網絡管控設備的敏捷開發。
1 嵌入式網管軟件簡介
隨著網絡的規模迅速增加,節點數隨之大幅增多,不同廠家,不同類型的大量網絡設備加入網絡后,增加了網絡的復雜度。由于這些網絡設備大多采用了封閉的配置管理手段,因此給傳統上集中式的網絡管理帶來極大不便。以思科、華為、中興等廠家的路由器為例,其配置手段雖然多種多樣,但都存在操作繁瑣等缺點。為此,需要培訓大量的網絡維護人員來維護著網絡的快速開通和通暢。目前在網絡控制管理方面,集中式與分布式相結合的方式已經成為必然趨勢。然而單純增加分布式網絡管控設備的數量又不利于降低系統整體功耗。
為減少分布式網管設備的功耗,加快網絡開通速度,在此利用嵌入式系統低功耗、高效率的特點,以及各網絡設備大多支持SNMP協議的特點,把嵌入式技術與網絡管理技術相結合進行研究,設計并實現嵌入式網管系統,以達到高效率、低功耗和分布式的目的。
嵌入式網管軟件基于Intel i7硬件平臺和RHEL 6.3 Linux操作系統,與管控設備上的其它軟件模塊處于同一平臺。采用NET-SNMP軟件包開發網絡管控設備與被管設備之間的接口軟件,并為管控設備的上層軟件模塊提供開放的API接口。上層應用軟件通過調用API函數向被管設備下發管控命令,從而實現網管管理。
2 SNMP協議
簡單網絡管理協議(Simple Network Management Protocol, SNMP)是很著名的網絡管理協議,被廣泛應用于數據通訊領域以及用于監視應用。SNMP在最初設計時首要的目的是簡單——即對于被管設備(硬件資源有限)而言,在其上面易于實現代理。
SNMP到目前為止有三個版本,其中SNMP vl是SNMP的經典版本,其后的版本均是在此版本之上進行的升級和改進,但在實際應用中SNMP v2c使用最多。
SNMP定義了5種報文:get-request操作:從代理進程處提取一個或多個參數值。get-next-request操作:從代理進程處提取一個或多個參數的下一個參數值。set-request操作:設置代理進程的一個或多個參數值。get-response操作:返回的一個或多個參數值。這個操作是由代理進程發出的。它是前面3中操作的響應操作。trap操作:代理進程主動發出的報文,通知管理進程有某些事情發生。前面的3個操作是由管理進程向代理進程發出的。后面兩個是代理進程發給管理進程的。
3 NET-SNMP軟件包介紹
NET-SNMP是一套優秀的開源snmp工具包,使用它可以開發snmp代理程序,也可以開發snmp管理程序,目前最新的版本已經支持snmp v3。
NET-SNMP源于卡耐基梅隆大學的SNMP軟件包CMU snmp 2.1.2.1,后由加州大學Davis分校(UniversityofCalifoniaatDavis)開發與維護,被命名為UCD-SNMP。2000年11月UCD-SNMP項目轉到由SourceForge(www.sourceforge.net)管理,并更名為NET-SNMP。UCD-SNMP4.2是以UCD-SNMP命名的最后的一個主要版本。也就是說,以后發布的UCD-SNMP 4.2.x只是修改軟件包中的Bugs;而大的修改版本以NET-SNMP命名,并發布為NET-SNMP 5.x。NET-SNMP 5.7.1是目前較新版本。
NET-SNMP的主要內容包括:
(1)完整的API用于SNMP(支持V1、V2、V3版本)應用開發(包括c、perl、Python等的API);
(2)一個可擴展的SNMP代理程序(snmpd);開發員可以擴展自己的代理程序;
(3)一套工具命令集(snmpget、snmpset、snmptrap、snmpwalk、snmp等);
(4)一個trap接收進程,用于接收和顯示trap。并可以將trap記錄到日志文件里;
(5) 一個圖形化的MIB瀏覽工具(tkmib:基于Tk/Perl的)。
使用NET-SNMP軟件包開發代理端軟件比較常用,互聯網上可以查到很多相關資料,本文不再重復。這里主要介紹應用NET-SNMP開發管理端軟件的方法。
4 嵌入式網管軟件的實現
嵌入式網管軟件在Linux操作系統上進行應用開發,根據功能不同可分為三個軟件模塊:網管通信模塊、控制命令處理模塊及控制管理模塊。如圖1所示。
其中控制管理模塊負責生成管控命令,并通過內部消息將之下發給控制命令處理模塊,等待接收響應結果。endprint
控制命令處理模塊負責管控命令的解析與網管通信命令的封裝,能從控制管理模塊獲取的管控指令解析出具體信息,并通過調用網管通信模塊的API函數實現查詢和配置管理。
網管通信模塊主要負責與管理站進行SNMP協議通信及與控制命令處理模塊通信,能將控制命令處理模塊的指令封裝成SNMP協議報文轉發給被管設備。
下面分別介紹嵌入式網管軟件的實現方法。
4.1 安裝NET-SNMP軟件包
之所以要先安裝一個可運行的NET-SNMP系統,是因為我們開發程序運行環境需要使用SNMP協議的配置文件;另外,還可以利用NET-SNMP提供的命令工具來測試程序。
NET-SNMP包目前可以移植的版本包括各種UNIX(基于SYSTEM V內核及基于BSD內核)、Linux、Windows版本。目前NET-SNMP包的安裝主要有程序編譯安裝與二進制文件安裝兩種方式,源程序安裝可以從NET-SNMP的官網下載。
Linux系統下安裝net-snmp-5.7.1步驟:
(1)下載net-snmp-5.7.1.tar.gz文件
(2)使用命令tar –xvf net-snmp-5.7.1.tar.gz解壓
(3)進入net-snmp-5.7.1文件夾,執行./configure --prefix=/usr/net-snmp/ --enable-embedded-perl --enable-shared --with-perl-modules
(4)執行make
(5)執行make install
4.2 配置NET-SNMP
使用NET-SNMP之前需要進行環境設置,否則無法查詢到希望的結果。配置NET-SNMP重要的是配置snmpd.conf文件,其中最重要的是配置共同體(community)。因為共同體定義了認證、訪問控制和代理的特性,每個共同體擁有一個唯一的名字,共同體中的管理端必須使用該共同體的community進行GET和SET操作。所以,共同體也是訪問口令。還有就是trap/notification的發送地址,即trapsink或trap2sink項,trapsink對應snmp vl的trap,trap2sink對應snmp v2的notification。
配置snmpd.conf文件,可以直接手動修改/usr/net-snmp/share/snmp路徑下的同名文件。將文件中rwcommunity、rocommunity所對應的讀寫、只讀團體名修改為系統所需字段即可。其余修改內容可參考NET-SNMP相關幫助自行決定。
4.3 編寫網管通信模塊API函數
為了實現SNMP協議通信,網管通信模塊需要利用net-snmp-5.7.1實現管理端的三個功能,get,getnext,set。
下面以set命令為例,簡單說明函數的實現方式。
首先編寫網管通信模塊程序需包含以下三個頭文件:
#include
#include
#include
實現set命令的基本步驟:
(1)調用init_snmp("set")函數初始化snmp;
(2)調用snmp_sess_init( &session )初始化結構session,然后用一些賦值語句設置session;
(3)調用snmp_open(&session),打開SNMP session;
(4)調用snmp_pdu_create(SNMP_MSG_SET)創建snmp pdu;
(5)調用snmp_parse_oid根據mib分析parse oid;
(6)調用snmp_add_var為SET request添加對象名及值;
(7)調用snmp_synch_response發送SET request報文。
函數中的session字段是名為netsnmp_session的結構,在其中定義了SNMP協議的版本、團體名及發送UDP端口號等內容,需特別注意。
5 結束語
本文首先介紹了嵌入式網管軟件的意義和特點;然后給出了SNMP協議本身的管理模型和基本原理。在此基礎上結合NET-SNMP軟件包詳細地介紹了在嵌入式網管軟件在Linux平臺下的開發過程。
參考文獻
[1]胡方煒.基于嵌入式Linux系統的SNMP代理開發研究[D].浙江工業大學,2004.
[2]IETF.RFCll57 A Simple Network Management Protocol(SNMP).May 1990.
[3]IETF.RFCl901.Introduction to Comm-unity·based SNMPv2.January 1996.
[4]Net-Snmp官方網站:http://www.source-forge.net.
作者簡介
姚楠(1979-),男,現為中國電科第五十四所通信系統與網絡專業部工程師。主要研究方向為通信系統與網絡。
作者單位
中國電子科技集團公司第五十四研究所 河北省石家莊市 050081
控制命令處理模塊負責管控命令的解析與網管通信命令的封裝,能從控制管理模塊獲取的管控指令解析出具體信息,并通過調用網管通信模塊的API函數實現查詢和配置管理。
網管通信模塊主要負責與管理站進行SNMP協議通信及與控制命令處理模塊通信,能將控制命令處理模塊的指令封裝成SNMP協議報文轉發給被管設備。
下面分別介紹嵌入式網管軟件的實現方法。
4.1 安裝NET-SNMP軟件包
之所以要先安裝一個可運行的NET-SNMP系統,是因為我們開發程序運行環境需要使用SNMP協議的配置文件;另外,還可以利用NET-SNMP提供的命令工具來測試程序。
NET-SNMP包目前可以移植的版本包括各種UNIX(基于SYSTEM V內核及基于BSD內核)、Linux、Windows版本。目前NET-SNMP包的安裝主要有程序編譯安裝與二進制文件安裝兩種方式,源程序安裝可以從NET-SNMP的官網下載。
Linux系統下安裝net-snmp-5.7.1步驟:
(1)下載net-snmp-5.7.1.tar.gz文件
(2)使用命令tar –xvf net-snmp-5.7.1.tar.gz解壓
(3)進入net-snmp-5.7.1文件夾,執行./configure --prefix=/usr/net-snmp/ --enable-embedded-perl --enable-shared --with-perl-modules
(4)執行make
(5)執行make install
4.2 配置NET-SNMP
使用NET-SNMP之前需要進行環境設置,否則無法查詢到希望的結果。配置NET-SNMP重要的是配置snmpd.conf文件,其中最重要的是配置共同體(community)。因為共同體定義了認證、訪問控制和代理的特性,每個共同體擁有一個唯一的名字,共同體中的管理端必須使用該共同體的community進行GET和SET操作。所以,共同體也是訪問口令。還有就是trap/notification的發送地址,即trapsink或trap2sink項,trapsink對應snmp vl的trap,trap2sink對應snmp v2的notification。
配置snmpd.conf文件,可以直接手動修改/usr/net-snmp/share/snmp路徑下的同名文件。將文件中rwcommunity、rocommunity所對應的讀寫、只讀團體名修改為系統所需字段即可。其余修改內容可參考NET-SNMP相關幫助自行決定。
4.3 編寫網管通信模塊API函數
為了實現SNMP協議通信,網管通信模塊需要利用net-snmp-5.7.1實現管理端的三個功能,get,getnext,set。
下面以set命令為例,簡單說明函數的實現方式。
首先編寫網管通信模塊程序需包含以下三個頭文件:
#include
#include
#include
實現set命令的基本步驟:
(1)調用init_snmp("set")函數初始化snmp;
(2)調用snmp_sess_init( &session )初始化結構session,然后用一些賦值語句設置session;
(3)調用snmp_open(&session),打開SNMP session;
(4)調用snmp_pdu_create(SNMP_MSG_SET)創建snmp pdu;
(5)調用snmp_parse_oid根據mib分析parse oid;
(6)調用snmp_add_var為SET request添加對象名及值;
(7)調用snmp_synch_response發送SET request報文。
函數中的session字段是名為netsnmp_session的結構,在其中定義了SNMP協議的版本、團體名及發送UDP端口號等內容,需特別注意。
5 結束語
本文首先介紹了嵌入式網管軟件的意義和特點;然后給出了SNMP協議本身的管理模型和基本原理。在此基礎上結合NET-SNMP軟件包詳細地介紹了在嵌入式網管軟件在Linux平臺下的開發過程。
參考文獻
[1]胡方煒.基于嵌入式Linux系統的SNMP代理開發研究[D].浙江工業大學,2004.
[2]IETF.RFCll57 A Simple Network Management Protocol(SNMP).May 1990.
[3]IETF.RFCl901.Introduction to Comm-unity·based SNMPv2.January 1996.
[4]Net-Snmp官方網站:http://www.source-forge.net.
作者簡介
姚楠(1979-),男,現為中國電科第五十四所通信系統與網絡專業部工程師。主要研究方向為通信系統與網絡。
作者單位
中國電子科技集團公司第五十四研究所 河北省石家莊市 050081
控制命令處理模塊負責管控命令的解析與網管通信命令的封裝,能從控制管理模塊獲取的管控指令解析出具體信息,并通過調用網管通信模塊的API函數實現查詢和配置管理。
網管通信模塊主要負責與管理站進行SNMP協議通信及與控制命令處理模塊通信,能將控制命令處理模塊的指令封裝成SNMP協議報文轉發給被管設備。
下面分別介紹嵌入式網管軟件的實現方法。
4.1 安裝NET-SNMP軟件包
之所以要先安裝一個可運行的NET-SNMP系統,是因為我們開發程序運行環境需要使用SNMP協議的配置文件;另外,還可以利用NET-SNMP提供的命令工具來測試程序。
NET-SNMP包目前可以移植的版本包括各種UNIX(基于SYSTEM V內核及基于BSD內核)、Linux、Windows版本。目前NET-SNMP包的安裝主要有程序編譯安裝與二進制文件安裝兩種方式,源程序安裝可以從NET-SNMP的官網下載。
Linux系統下安裝net-snmp-5.7.1步驟:
(1)下載net-snmp-5.7.1.tar.gz文件
(2)使用命令tar –xvf net-snmp-5.7.1.tar.gz解壓
(3)進入net-snmp-5.7.1文件夾,執行./configure --prefix=/usr/net-snmp/ --enable-embedded-perl --enable-shared --with-perl-modules
(4)執行make
(5)執行make install
4.2 配置NET-SNMP
使用NET-SNMP之前需要進行環境設置,否則無法查詢到希望的結果。配置NET-SNMP重要的是配置snmpd.conf文件,其中最重要的是配置共同體(community)。因為共同體定義了認證、訪問控制和代理的特性,每個共同體擁有一個唯一的名字,共同體中的管理端必須使用該共同體的community進行GET和SET操作。所以,共同體也是訪問口令。還有就是trap/notification的發送地址,即trapsink或trap2sink項,trapsink對應snmp vl的trap,trap2sink對應snmp v2的notification。
配置snmpd.conf文件,可以直接手動修改/usr/net-snmp/share/snmp路徑下的同名文件。將文件中rwcommunity、rocommunity所對應的讀寫、只讀團體名修改為系統所需字段即可。其余修改內容可參考NET-SNMP相關幫助自行決定。
4.3 編寫網管通信模塊API函數
為了實現SNMP協議通信,網管通信模塊需要利用net-snmp-5.7.1實現管理端的三個功能,get,getnext,set。
下面以set命令為例,簡單說明函數的實現方式。
首先編寫網管通信模塊程序需包含以下三個頭文件:
#include
#include
#include
實現set命令的基本步驟:
(1)調用init_snmp("set")函數初始化snmp;
(2)調用snmp_sess_init( &session )初始化結構session,然后用一些賦值語句設置session;
(3)調用snmp_open(&session),打開SNMP session;
(4)調用snmp_pdu_create(SNMP_MSG_SET)創建snmp pdu;
(5)調用snmp_parse_oid根據mib分析parse oid;
(6)調用snmp_add_var為SET request添加對象名及值;
(7)調用snmp_synch_response發送SET request報文。
函數中的session字段是名為netsnmp_session的結構,在其中定義了SNMP協議的版本、團體名及發送UDP端口號等內容,需特別注意。
5 結束語
本文首先介紹了嵌入式網管軟件的意義和特點;然后給出了SNMP協議本身的管理模型和基本原理。在此基礎上結合NET-SNMP軟件包詳細地介紹了在嵌入式網管軟件在Linux平臺下的開發過程。
參考文獻
[1]胡方煒.基于嵌入式Linux系統的SNMP代理開發研究[D].浙江工業大學,2004.
[2]IETF.RFCll57 A Simple Network Management Protocol(SNMP).May 1990.
[3]IETF.RFCl901.Introduction to Comm-unity·based SNMPv2.January 1996.
[4]Net-Snmp官方網站:http://www.source-forge.net.
作者簡介
姚楠(1979-),男,現為中國電科第五十四所通信系統與網絡專業部工程師。主要研究方向為通信系統與網絡。
作者單位
中國電子科技集團公司第五十四研究所 河北省石家莊市 050081