摘要:局域網管理的主要內容就是對網絡計算機的工作性能、配置和安全進行管理。為了能讓管理員更加方便迅速的獲取信息,我們需要為網絡管理提供出一個簡單、便捷、界面友好的操作工具。文章主要分析了如何利用簡單網絡管理協議來實現對網絡流量的監控。首先研究了如何實現對網絡流量的管理,接著設計出滿足這些要求的基于SNMP的網絡管理系統。文章針對當前管理系統中存在的不足進行了深入的研究,對網絡流量的監控提出了一些新的見解。
關鍵詞:網絡管理;流量分析;配置管理;控件
中圖分類號:TP393文獻標識碼:A文章編號:1009-3044(2009)27-7621-03
Design and Implementation of Lab Network Surveillance System
MA Ke1, WU Zhen-yu2, LI Zheng2
(1.Naval Aeronautical Ordnance Repair Institute, Shanghai 200436, China; 2 Unit 91321 of PLA, Shanghai 200436, China)
Abstract: The main wok of network management is the monitoring of performance, configuration and security-accounting. For the purpose of making managing person more easier of understanding and operation, more convenient and more faster to obtain the information they need , What is needed desperately is a set of simple, convenient and interface-friendly tools for managing networks. This paper focuses on the use of SNMP protocol for the purposes of network traffic monitoring. We first examine the requirements for network traffic monitoring, and then design a monitoring system that satisfy for those requirements.
Key words: network surveillance; traffic analysis; configuration management; control
隨著各部門內部網的迅猛發展,網絡變得越來越普遍,但結構卻越來越復雜,而且現在涌現出大量的各種各樣網絡的應用、硬件、平臺和協議,使得各個企業或部門不得不投入一個或多個網絡管理者去維護和控制這些網絡[1]。如何將企業從具體、繁瑣的網絡管理中解脫出來,同時提高網絡的經濟效益就顯得非常迫切和重要,這要求在加強網絡建設的同時加強網絡管理建設。對網絡系統管理員來說,最大挑戰就是怎樣才能快速、高效的進行網絡管理。因此,研制出一種易學易操作的管理工具迫在眉睫。
1 系統需求分析
現有的網絡管理系統往往比較復雜,并且難于掌握。給管理者帶來了查詢、獲取信息的不方便。列如現有系統為HP的SNMP++,屬于比較老的網絡管理系統,完全按SNMP編程,點擊MIB樹獲得OID(對象標識符),再進行get、getnext等操作,才能得到網絡設備相應的數據。其缺點如下[2]:
1) 不容易讓管理員理解操作,管理人員需要掌握MIB表的每一個標識符所對應表示的N個標識符,所以管理員要想能夠全部掌握需要很長一段時間。
2) SNMP++的編程很死,獲取信息的方式比較呆板。
但是SNMP++的源代碼很有層次,所以很容易對它進行擴展[3]。
2 目標系統功能描述
由于現有系統存在的諸多弊端,為了能讓管理員快速的理解操作,更加方便迅速的獲取信息,本系統設計的主要功能如下:
1) 能直觀的查詢出網絡設備的各項數值,從而快速的給出網絡的運行情況。
2) 查詢網絡設備及相關軟件的配置情況,通過對關鍵網絡設備的流量等參數的實時采集,給出網絡的運行情況。并將采集的數據存入文本文件,作為日志文件以備以后查詢。
3) 方便快捷地完成數據查詢工作及數據轉換工作。
4) 同時要求設計所生成的網絡管理系統是一個簡潔的網管系統,有著直觀友好的用戶界面,管理員能夠很方便、快捷的對整個局域網進行全面監控,及時發現網絡中服務器、工作站等信息點的故障。不需要太多的專業知識,非專業管理者也能很快掌握使用。
3 系統功能設計
3.1 系統工作原理
網絡管理系統是基于SNMP協議實現的,其編程的重點就是如何實現SNMP的編程。
這一部分是系統取值的核心,解決這一步之后就可以考慮管理窗口的設計了,管理窗口控制著各個功能的實現(包括與代理取得聯系,查看網絡參數,將網絡流量存入日志文件等),這是系統設計的大模塊。
然后就是自己定義MIB表,網絡參數都對應唯一的對象標識符,在網絡管理中對網絡運行的情況分析是非常重要的,這些網絡數值都存在唯一的標識符,需要開發者自己定義。
系統工作原理圖如圖1所示。
3.2 系統數據處理流程
大多數的現代網絡設備都由管理代理配備,比如:我們設計所用的Cisco router和Switch在內部都有智能代理,SNMP負責計算機網絡設備,CMIP負責網絡設備之間通信的管理代理以及監視,維持管理信息庫(MIB)的一致,這些管理信息庫包括發送的信息和接受的信息。這些數據信息是我們的網絡管理系統利用相關的網絡管理通信協議(SNMP),通過產生的數據采集單元(PDU)采集的[4]。
這些從管理代理收集而來的信息數據必須存儲在系統中,這就要求系統必須擁有一個管理信息的寄存器,系統定期收集日志和信息以便數據分析,用來統計一個時期的最大輸入、輸出量以及平均輸入輸出量。這些分析數據能夠產生流量的圖形和曲線,還能用來統計網絡的管理意圖。這些分析數據會作為日志存入管理信息寄存器以備日后分析。
管理系統的另一個需求就是產生監控網絡設備的報道,報道被監測到的代理問題,這涉及到局域網的部分或多部門的交流信息,這些信息被報道給管理員,管理員再通過這些信息適時動態的了解和掌握網絡上信息點的工作狀態信息,對于特別的信息能判斷出哪里發生了故障。它們還可以在局域網由于突發問題需要更新或為以后阻止病毒入侵提供備份數據。
為了實現動態的監控,就得將重要的網絡流量變化顯示出來,這些重要的參數都存在于MIB中。圖2是MIB的層次結構圖[5]。
網絡管理系統將接收到的SNMP包譯碼之后,再以表格的形式顯示出來,在SNMP++中,系統并沒有提供這種功能,它只是簡單的顯示出OID值,這就需要管理人員自己了解各個OID值對應的每一項,對于剛剛涉及網絡管理的人員來說,這樣的任務是比較艱巨的,在查看網絡狀態時需要備一份詳細的MIB表,而且要一個一個的找出OID,這樣的設計其實是不太友好的。同時,SNMP++每次都需要點擊MIB樹才能取值,對于經常要查看的數據,這是非常不方便的。因此需要對SNMP++進行第二次開發,將對判斷網絡運行狀態有幫助的參數要能一次性的顯示出來,使得用戶不需要再看MIB表就能直接知道網絡傳輸的各種狀態,這樣的界面就友好多了,管理人員同時也不需要花太長的時間來掌握一套網絡管理工具,整個操作過程變得簡單了許多。
系統數據處理流程圖如圖3所示。
4 系統實現
4.1 用VC實現SNMP
整個SNMP編程要經過一個創建、執行、銷毀的過程[6]。通俗點說就是要做準備。初始化SNMP環境即加載SNMP的功能,接著就要執行所進行的操作,SNMP是基于消息機制的,所以消息傳遞與管理是在編程過程中所必須注意的問題,最后要進行銷毀和回收資源。
SNMP主要工作是發送消息和接受消息,下面以接收消息為里來詳細介紹編程實現過程。
1) 接收消息,用函數
SNMPAPI_STATUS SnmpRecvMsg
(HSNMP_SESSION session,// SNMP會話句柄
LPHSNMP_ENTITY srcEntity,//資源實體句柄
LPHSNMP_ENTITY dstEntity, // 目標實體句柄
LPHSNMP_CONTEXT context,//上下文句柄
LPHSNMP_PDU PDU //PDU句柄
);
2) 提取數據報,用函數SNMPAPI_STATUS SnmpGetPduData();
3) 計算返回列表數目,用函數
SNMPAPI_STATUS SnmpCountVbl();
4) 取得返回結果,用函數
SNMPAPI_STATUS SnmpGetVb();
在上一步已經得到了結果,用一個簡單的for循環一次就能將結果取出。該函數有四個參數,第一個在第三步已得到,第二個是for循環中的變量值,取得變量是從0開始的。在前面我們把它們都設置為空,現在SNMP代理將返回值添了進去,然后就可以坐享其成了,定義兩個變量,直接接收就行。在這里需要提醒的是對IP地址的接收會有點不同,因為返回值將其封裝為一個指針數組了,我們需要一個一個的取出來。
前面我們提到過5個重要的句柄,只有會話句柄是在發送和接收消息時都用到的,所以在發送和接收消息以后,要將其它四個句柄釋放掉,那么會話句柄何時釋放呢?應該在應用程序退出的過程中釋放掉,進而要知道創建會話句柄的位置,那是在構造函數里。以上這些釋放句柄資源的函數SNMP API都有提供,如SnmpFreeEntity,SnmpFreeContext,SnmpFreeVbl,SnmpFreePdu,SnmpClose,它們的參數只有一個,就是要釋放的句柄。最后清理整個現場,用函數SnmpCleanup()解決。
4.2 創建變量捆綁列表Vb
系統通過SNMP發送PDU數據包,當目標機器回應時,就需要接收PDU數據包返回的值。所以要對Vb獲取數據進行相應的程序編寫,前面已經提到Vb就是綁定列表,要返回一個Vb就必須有一個有效的OID和返回值,所以一開始就要判斷是否是有效的取值,對于取值我們用到的是get_value()函數,而SNMP實體中包含了很多種數據類型,而在網絡編程中,表示層對數據格式的要求是特別嚴格的,所以我們要分別定義取值函數。
通過get_printable_value()我們就能獲得各種網絡設備的參數值,但是這需要建立在PDU的發送的基礎上。
4.3 PDU的創建
PDU是我們程序中真正的工作者,這些數據包能夠帶回我們需要的網絡參數。所以它的實現非常重要,PDU的實現包括產生PDU、檢驗PDU的有效性、以及匹配的應答和請求PDU。
產生PDU:要確認PDU是否為SNMP3版本,PDU要與Vb進行捆綁,調用free()函數釋放。
檢驗PDU的有效性:一個PDU數據成份(或稱域)的值可能各自有效,但和其它域的值組合在一起后或許就是無效的。
匹配的應答和請求PDU:應用程序接收SNMP應答的順序或許不匹配此應用程序提交SNMP操作請求的順序。為了匹配應答和請求,應用程序必須使用應答的請求標識符域(request_id)。request_id域是一個標識PDU的唯一的數字值。
4.4 界面設計
以上部分都屬于后臺的操作,我們的最終目的就是將數據顯示出來,也就是要進行前臺操作,所以在這里把它單獨拿出來作為一個模塊。系統主要界面組成關系如圖4所示。
這里以目標機器編輯界面為例,介紹界面設計思路。目標機器的屬性分為超時時間、重傳次數、版本信息、IP地址等。要想獲取目標機器的各項網絡參數,首先就必須要知道目標機器的IP地址,這樣才能與機器連接。目標機器編輯界面如圖5所示。
5 結論
本設計是在對目前市場上存在應用于網絡管理的系統軟件進行分析,在得出它們存在的或多或少的缺陷之后,確定了我們要對它們進行改進和升級的目標。先是可行性工作分析,發現目標系統是否值得開發的,同時是否能力開發,也能否符合用戶的操作方式。然后理清目標系統的設計思路及其實現拓撲結構,在明白目標系統的工作原理圖和主模塊數據流圖之后,根據設計流程,我們設計了目標操作系統并最終達到了預期的目的。
參考文獻:
[1] 武孟軍.簡單網絡管理協議(SNMP) [M].北京:人民郵電出版社,2006.
[2] 張楠,張振國.客戶端/服務器模式中傳輸層協議的比較與選擇[J].網絡與通信,2006,22(9-3):200-202.
[3] 王紹斌,王昭順.信息系統攻擊與防御[M].北京:電子工業出版社,2007.
[4] 尹建璋.無線局域網網絡安全措施改進[J].計算機工程與設計,2008, 29(11):2745-2747.
[5] 欒昌海.異構網絡下的Web監控系統設計研究[J].微計算機信,2008,24(7-3): 81, 101-102.
[6] 吳媛,陳正軍,李雄德.基于SNMP校園網網絡管理系統設計與實現[J].電腦知識與技術,2009,5(15):3925-3926.