版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第8章網(wǎng)絡(luò)管理開發(fā)Page1
本章將在前文詳細(xì)分析典型網(wǎng)絡(luò)管理系統(tǒng)功能和使用的基礎(chǔ)上,具體介紹Windows系統(tǒng)下網(wǎng)絡(luò)管理軟件開發(fā)的流程和方法。28.1網(wǎng)絡(luò)管理開發(fā)概述
通用的網(wǎng)絡(luò)管理應(yīng)用程序通常稱做網(wǎng)絡(luò)管理平臺(tái),它提供一組通用的網(wǎng)絡(luò)管理功能,也提供實(shí)現(xiàn)專用管理程序的工具,支持基本的管理功能。3
無(wú)論使用什么管理平臺(tái),設(shè)計(jì)網(wǎng)絡(luò)管理應(yīng)用程序都要首先確定以下內(nèi)容:確定被管理節(jié)點(diǎn)的網(wǎng)絡(luò)地址(IP地址,IPX地址,DNS主機(jī)名);確定遠(yuǎn)程目標(biāo)的端口號(hào)(UDP161,專用端口號(hào)大于1024);確定接收陷入的端口號(hào)(UDP162,專用端口號(hào)大于1024);4
確定團(tuán)體名(通常為public,如果使用兩個(gè)團(tuán)體名,則read-only團(tuán)體名為public,read-write團(tuán)體名為private);確定響應(yīng)定時(shí)器等待時(shí)間間隔;確定重復(fù)請(qǐng)求次數(shù);確定輪詢時(shí)間間隔。58.1.1網(wǎng)絡(luò)管理應(yīng)用程序的基本功能
網(wǎng)絡(luò)管理應(yīng)用程序的基本功能是輔助管理員監(jiān)視網(wǎng)絡(luò),發(fā)現(xiàn)活動(dòng)的網(wǎng)絡(luò)設(shè)備,排除網(wǎng)絡(luò)故障,具體包括以下內(nèi)容:網(wǎng)絡(luò)發(fā)現(xiàn)管理站輪詢MIB編譯器和數(shù)據(jù)庫(kù)MIB瀏覽器MIB搜索器陷入信息記錄
6
網(wǎng)絡(luò)發(fā)現(xiàn)
網(wǎng)絡(luò)發(fā)現(xiàn)通常包含兩部分內(nèi)容。首先是探測(cè)活動(dòng)站點(diǎn),這可以通過向子網(wǎng)中的所有站點(diǎn)發(fā)送ICMP報(bào)文,把收到應(yīng)答的站點(diǎn)標(biāo)記為活動(dòng)站點(diǎn);或者讀取ARP緩沖區(qū)以及本地路由器和管理主機(jī)的接口表,發(fā)現(xiàn)可連接的設(shè)備,然后有選擇的發(fā)送ICMP報(bào)文。其次是標(biāo)識(shí)SNMP管理站點(diǎn),這可以通過向活動(dòng)站點(diǎn)發(fā)送GetRequest報(bào)文,獲取有關(guān)信息。
根據(jù)收集的信息可以建立網(wǎng)絡(luò)發(fā)現(xiàn)數(shù)據(jù)庫(kù),視其復(fù)雜性可用Text文件、Windows注冊(cè)表或?qū)嶋H的數(shù)據(jù)庫(kù)引擎(如MicrosoftACCESS等)實(shí)現(xiàn)。最后還要建立網(wǎng)絡(luò)拓?fù)溆诚?,把發(fā)現(xiàn)的各個(gè)子網(wǎng)拓?fù)浣Y(jié)構(gòu)用圖形表示出來,也可用多個(gè)窗口分別顯示。7
管理站輪詢。
定期輪詢活動(dòng)站點(diǎn),可以用ICMP報(bào)文檢查站點(diǎn)活動(dòng)狀態(tài),或者利用SNMP收集管理信息。8
MIB編譯器和數(shù)據(jù)庫(kù)
MIB模塊以ASN.1編寫,以ASCⅡ文件存儲(chǔ),經(jīng)編譯后轉(zhuǎn)換成代理可利用的格式。MIB數(shù)據(jù)庫(kù)是MIB模塊的集合。簡(jiǎn)單的應(yīng)用可以不使用MIB數(shù)據(jù)庫(kù),這種情況下管理員發(fā)送請(qǐng)求時(shí)要手工輸入變量的OID、數(shù)據(jù)類型和數(shù)據(jù)值,同時(shí)要記住常用的OID,解釋需要的MIB模塊。復(fù)雜的應(yīng)用通過MIB數(shù)據(jù)庫(kù)把對(duì)象描述符變換成OID(數(shù)字形式的子標(biāo)識(shí)符),確定存儲(chǔ)的數(shù)據(jù)類型和訪問方式。9
MIB瀏覽器
該程序的功能是用搜索目錄樹的方法,定位和顯示MIB中的被管理對(duì)象的值,可以通過向某個(gè)MIB對(duì)象發(fā)送GetNextRequest請(qǐng)求,接收和顯示變量綁定表中的內(nèi)容。10
MIB搜索器該程序是比較簡(jiǎn)單的瀏覽器,用于發(fā)現(xiàn)被管理對(duì)象的MIB。在SNMP中沒有標(biāo)準(zhǔn)的方法使得被管理節(jié)點(diǎn)公布其名字、版本號(hào)、MIB模塊的內(nèi)容及其支持的對(duì)象。MIB搜索器可以動(dòng)態(tài)的發(fā)現(xiàn)各個(gè)站點(diǎn)中可以訪問的對(duì)象,但只能檢索存儲(chǔ)在變量中的MIB信息,其他MIB模塊數(shù)據(jù),如對(duì)象標(biāo)識(shí)符、訪問模式等不能檢索。因而MIB搜索器不能替代經(jīng)過編譯的MIB模塊。11
陷入信息記錄
管理應(yīng)用接收到一個(gè)陷入報(bào)文后,可以在拓?fù)浣Y(jié)構(gòu)圖上顯示一個(gè)圖標(biāo),或彈出一個(gè)消息窗口,甚至發(fā)出聲音告警。同時(shí)把陷入數(shù)據(jù)及其時(shí)間和地址寫入陷入記錄文件。128.1.2SNMP編程任務(wù)
SNMP是網(wǎng)絡(luò)管理程序和SNMP代理之間的通信協(xié)議,主要用來管理網(wǎng)絡(luò)設(shè)備,到目前為止幾乎所有的網(wǎng)絡(luò)產(chǎn)品都要為其提供支持,以方便管理員的管理和軟件開發(fā)人員的開發(fā)。
SNMP編程主要包括兩大部分:網(wǎng)絡(luò)管理程序的開發(fā)和SNMP代理軟件的開發(fā)。網(wǎng)絡(luò)管理程序主要運(yùn)行在管理端,代理軟件則運(yùn)行在特定的網(wǎng)絡(luò)被管設(shè)備上。131.SNMP編程內(nèi)容 從客戶機(jī)/服務(wù)器的角度分析,網(wǎng)絡(luò)管理程序和SNMP代理既是客戶機(jī),同時(shí)又充當(dāng)服務(wù)器的角色。作為服務(wù)器,網(wǎng)絡(luò)管理程序監(jiān)聽UDP端口162,接收SNMP代理發(fā)送的陷阱消息;SNMP代理監(jiān)聽UDP端口161,接收網(wǎng)絡(luò)管理程序發(fā)送的各種查詢請(qǐng)求。作為客戶機(jī),網(wǎng)絡(luò)管理程序可以隨時(shí)向SNMP代理發(fā)送查詢請(qǐng)求,而SNMP代理則可以隨時(shí)向網(wǎng)絡(luò)管理程序發(fā)送陷阱信息。14
開發(fā)基于SNMP的網(wǎng)絡(luò)管理程序,和開發(fā)其他基于客戶機(jī)/服務(wù)器模式的網(wǎng)絡(luò)應(yīng)用程序沒有本質(zhì)的區(qū)別。如果程序不準(zhǔn)備處理陷阱信息,那么網(wǎng)絡(luò)管理程序?qū)嶋H上就是一個(gè)普通的客戶端程序。開發(fā)主要包括以下內(nèi)容:構(gòu)造正確的PDU,組成SNMP報(bào)文;對(duì)發(fā)送(接收)的SNMP報(bào)文進(jìn)行BER編碼(解碼);接收并處理陷阱信息。BER編碼處理后的SNMP報(bào)文,使用UDP進(jìn)行封裝,并設(shè)置服務(wù)器端(SNMP代理)IP地址和端口號(hào)161。接收到返回的應(yīng)答包后,再對(duì)SNMP報(bào)文進(jìn)行解碼處理。15
SNMPv1的報(bào)文由SNMP版本號(hào)、共同體字符串和一個(gè)附加的PDU結(jié)構(gòu)組成。BER編碼的對(duì)象是整個(gè)報(bào)文,而不僅僅是PDU部分。UDP報(bào)文的數(shù)據(jù)部分,就是一個(gè)經(jīng)過BER編碼處理的完整SNMP報(bào)文。圖8-1所示是網(wǎng)絡(luò)管理程序發(fā)送的SNMP請(qǐng)求報(bào)文使用的UDP報(bào)文格式。162.SNMP變量
SNMP變量是運(yùn)行期間SNMP代理維護(hù)的被管理對(duì)象實(shí)例。網(wǎng)絡(luò)管理程序通過查詢SNMP變量的值,獲知被管理設(shè)備的網(wǎng)絡(luò)運(yùn)行狀態(tài);通過設(shè)置SNMP變量值,達(dá)到遠(yuǎn)程配置網(wǎng)絡(luò)參數(shù)的目的。無(wú)論是查詢還是設(shè)置操作,都離不開SNMP變量。17
表產(chǎn)生的SNMP變量可以看作一個(gè)多維動(dòng)態(tài)數(shù)組,如表中有n個(gè)列對(duì)象,就產(chǎn)生一個(gè)n維動(dòng)態(tài)數(shù)組。變量標(biāo)識(shí)符就是列對(duì)象實(shí)例標(biāo)識(shí)符。
SNMP變量對(duì)網(wǎng)絡(luò)管理程序的開發(fā)十分重要,管理過程的實(shí)質(zhì)是程序?qū)τ赟NMP變量的操作。SNMP代理中有些SNMP變量是由代理所實(shí)現(xiàn)的MIB所決定的。MIB中的標(biāo)量對(duì)象只有一個(gè)實(shí)例,因此一個(gè)標(biāo)量對(duì)象在代理中只產(chǎn)生一個(gè)SNMP變量。列對(duì)象的情況相對(duì)復(fù)雜。雖然列對(duì)象可以有多個(gè)對(duì)象實(shí)例,但運(yùn)行期間,同一個(gè)表中列對(duì)象的實(shí)例數(shù)是相等的。由MIB中表產(chǎn)生的SNMP變量數(shù)要根據(jù)實(shí)際情況而定。183.MIB表的操作
MIB表結(jié)構(gòu)中的列對(duì)象往往包含著一組相關(guān)的網(wǎng)絡(luò)信息,程序中經(jīng)常需要對(duì)表進(jìn)行操作,有時(shí)是獲取一個(gè)列對(duì)象的所有實(shí)例,有時(shí)是獲取幾個(gè)列對(duì)象的所有實(shí)例。根據(jù)表的結(jié)構(gòu)以及SNMPGetNext操作特點(diǎn),使用GetNext完成表的檢索。
只要產(chǎn)生的應(yīng)答PDU不超過大小限制,一次操作中可以綁定多個(gè)SNMP變量,即一次取回多個(gè)列對(duì)象實(shí)例。因此,在對(duì)表進(jìn)行檢索操作時(shí),有兩種選擇,可以在一次SNMPGetNext操作中取回所有相關(guān)列對(duì)象的實(shí)例,即一次取回一行中的所有實(shí)例;或者每次取回列對(duì)象的一個(gè)實(shí)例,循環(huán)操作直至取回所有相關(guān)的SNMP變量。198.1.3基于SNMP的網(wǎng)絡(luò)管理應(yīng)用開發(fā)方法
在Windows下實(shí)現(xiàn)SNMP的編程,可以采用Winsock接口,在161和162端口通過UDP傳送信息。
WinSNMPAPI函數(shù)實(shí)現(xiàn)了基本的SNMP功能,使用SNMP消息完成SNMP實(shí)體間的通信。使用如UCDSNMP、PowerT、SNMP++等的支持SNMP功能的第三方軟件包能夠大大簡(jiǎn)化Windows環(huán)境下的SNMP編程。208.2
WindowsSNMP服務(wù)
基于Windows的SNMP服務(wù)采用由管理系統(tǒng)、代理和其他相關(guān)組件組成的分布式體系結(jié)構(gòu),Windows計(jì)算機(jī)既可以是SNMP管理者,也可以是安裝SNMP代理的被管對(duì)象。當(dāng)Windows計(jì)算機(jī)發(fā)生重大事件,SNMP服務(wù)就會(huì)把狀態(tài)信息發(fā)送給一個(gè)或多個(gè)管理主機(jī)。218.2.1WindowsSNMP服務(wù)基本概念
Windows32系統(tǒng)支持并發(fā)的系統(tǒng)服務(wù),一個(gè)Windows32系統(tǒng)服務(wù)可以在后臺(tái)運(yùn)行,它的開始和停止無(wú)須系統(tǒng)重啟動(dòng)。服務(wù)是一種特殊的Windows
32應(yīng)用軟件,它通過Windows
32API與WindowsNT的服務(wù)控制管理器(SCM)連接,一般運(yùn)行在后臺(tái),作用是監(jiān)視硬件設(shè)備和其他系統(tǒng)進(jìn)程,提供訪問外圍設(shè)備和操作系統(tǒng)輔助功能的能力。
系統(tǒng)服務(wù)在系統(tǒng)啟動(dòng)時(shí)或用戶登錄時(shí)自動(dòng)開始運(yùn)行,當(dāng)用戶退出或系統(tǒng)關(guān)機(jī)時(shí)停止運(yùn)行。SNMP就是運(yùn)行于Windows32系統(tǒng)之上的一個(gè)服務(wù)軟件,支持SNMP管理站和代理功能,包括發(fā)送和接收陷入的能力。22
Windows2000系統(tǒng)的SNMP服務(wù)包括兩個(gè)應(yīng)用程序。一個(gè)是SNMP代理服務(wù)程序Snmp.exe,另一個(gè)是SNMP陷入服務(wù)程序Snmptrap.exe。
Snmp.exe接收SNMP請(qǐng)求報(bào)文,根據(jù)要求發(fā)送響應(yīng)報(bào)文,能對(duì)SNMP報(bào)文進(jìn)行語(yǔ)法分析,ASN.1表示和BER編碼/譯碼,也能發(fā)送陷入報(bào)文,并處理與WinSockAPI的接口。
Snmptrap.exe監(jiān)聽發(fā)送給NT主機(jī)的陷入報(bào)文,然后把其中的數(shù)據(jù)傳送給SNMP管理API。Windows95/98中沒有陷入處理程序。WindowsServer2003中SNMP的內(nèi)部體系結(jié)構(gòu)由管理端函數(shù)庫(kù)和代理端函數(shù)庫(kù)兩大部分實(shí)現(xiàn),其中部分函數(shù)功能出現(xiàn)交迭,既用于管理端,也用于代理端。圖8-3所示為WindowsServer2003SNMP服務(wù)體系結(jié)構(gòu)。2324
Windows的SNMP代理服務(wù)是可擴(kuò)展的,即允許動(dòng)態(tài)地加入或減少M(fèi)IB信息。這意味著程序員不必修改和重新編譯代理程序,只需增加或刪除一個(gè)能處理指定信息的子代理就可以了。Microsoft把這種子代理叫做擴(kuò)展代理,它處理私有的MIB對(duì)象和特定的陷入條件。當(dāng)SNMP代理服務(wù)接收到一個(gè)請(qǐng)求報(bào)文時(shí),它就把變量綁定表的有關(guān)內(nèi)容送給對(duì)應(yīng)的擴(kuò)展代理,擴(kuò)展代理根據(jù)SNMP的規(guī)劃對(duì)其私有的變量進(jìn)行處理,形成響應(yīng)信息。
編寫擴(kuò)展代理程序是開發(fā)網(wǎng)絡(luò)管理系統(tǒng)的程序員的責(zé)任,程序員可根據(jù)需要隨時(shí)增加或刪除系統(tǒng)的擴(kuò)展代理程序。SNMP代理服務(wù)和擴(kuò)展代理以及陷入服務(wù)與Windows32操作系統(tǒng)的關(guān)系如圖8-4所示。
2526
WinSNMPAPI是Microsoft為SNMP開發(fā)的應(yīng)用程序接口,是一組用于構(gòu)造SNMP服務(wù)和擴(kuò)展代理和SNMP管理系統(tǒng)的庫(kù)函數(shù)。圖8-5所示為SNMP代理與SNMPAPI交互作用的詳細(xì)過程。
27
SNMP報(bào)文通過UDP/IP服務(wù)經(jīng)WinSockAPI傳送到SNMP代理。
SNMP代理調(diào)用SNMPAPI對(duì)報(bào)文譯碼和認(rèn)證檢查,然后把變量信息傳送給有關(guān)的擴(kuò)展代理,經(jīng)擴(kuò)展代理處理形成響應(yīng)信息后又返回給SNMP代理,再由SNMP代理裝配成GetResponse報(bào)文,交給WinSockAPI回送給發(fā)出請(qǐng)求的管理站。如果請(qǐng)求的MIB對(duì)象沒有得到任何擴(kuò)展代理的支持,則返回noSuchName錯(cuò)誤。
陷入服務(wù)監(jiān)視從WinSockAPI傳來的陷入報(bào)文,然后把陷入數(shù)據(jù)通過命名管道傳送給SNMP的管理API。管理API是Microsoft為開發(fā)SNMP管理應(yīng)用提供的動(dòng)態(tài)鏈接庫(kù),是SNMPAPI的一部分。圖8-6所示為SNMP陷入、管理應(yīng)用、管理API及WinSockAPI間的關(guān)系。2829
管理應(yīng)用程序從管理API接收數(shù)據(jù),向管理API發(fā)送管理信息,并通過管理API與WinSock通信,實(shí)現(xiàn)網(wǎng)絡(luò)管理功能。
管理者向代理請(qǐng)求的信息包含在MIB中。MIB是一組可管理的對(duì)象,這些對(duì)象代表了與網(wǎng)絡(luò)設(shè)備有關(guān)的各種類型的信息。
WindowsSNMP服務(wù)支持InternetMIB-2、LANManagerMIB-2、DHCPMIB、HTTPMIB等。
308.2.2
WindowsSNMP服務(wù)的安裝配置測(cè)試
WindowsSNMP服務(wù)的安裝方法同其他服務(wù)的安裝方法類似,但安裝之前必須首先安裝TCP/IP。在Windows2000/XP/2003中安裝和配置SNMP服務(wù)的方法一致。311.安裝SNMP服務(wù)
StartControl
PanelAddOrRemoveProgramsAdd/RemoveWindowsComponentsWindows組件向?qū)anagementAndMonitoringTools,但不要選中該復(fù)選框,僅僅選擇該入口即可。單擊“Details(詳細(xì))”按鈕打開窗口,然后選中在“SimpleNetworkManagementProtocol(簡(jiǎn)單網(wǎng)絡(luò)管理協(xié)議)”旁邊的復(fù)選框。最后單擊“OK(確定)”按鈕返回“Windows組件向?qū)А贝翱凇螕簟癗ext(下一步)”按鈕,如果出現(xiàn)了相關(guān)提示,則插入Windows的安裝光盤。322.配置SNMP服務(wù)
完成了上述步驟之后,打開服務(wù)控制面板,并找到SNMP服務(wù),然后使用正確的通訊字符串來配置SNMP。雙擊該服務(wù),就可以打開服務(wù)的屬性頁(yè)面,如圖8-9所示,用戶可以在“SNMPService的屬性”對(duì)話框中完成服務(wù)設(shè)置,具體配置情況不再贅述。注意在“安全”選項(xiàng)卡中可設(shè)置訪問團(tuán)體號(hào)及主機(jī)地址,通常情況下使用系統(tǒng)默認(rèn)的配置即可(默認(rèn)情況下團(tuán)體名為public)。3334353.測(cè)試SNMP服務(wù)
SNMPUTIL(Snmptuil.exe)是微軟Windows2000資源工具中的一個(gè)實(shí)用程序,也是網(wǎng)絡(luò)管理系統(tǒng)中的管理進(jìn)程,可用于測(cè)試SNMP服務(wù),也可以測(cè)試用戶開發(fā)的擴(kuò)展代理。SNMPUTIL是MS-DOS程序,是基于微軟公司的管理API編寫的,但在Windows98系統(tǒng)中沒有管理API,所以該程序只能運(yùn)行在WindowsNT/2000/XP/2003及更高版本的操作系統(tǒng)中,具體使用語(yǔ)法如下。36
usage:snmputil[get|getnext|walk]agentcommunityoid[oid...]
snmputiltrap
其中agent表示代理進(jìn)程的IP地址,community表示團(tuán)體名,oid表示MIB對(duì)象ID。使用SNMPUTIL發(fā)送GetRequest或GetNextRequest報(bào)文,可以遍歷整個(gè)MIB子樹,可以完成查看本地計(jì)算機(jī)系統(tǒng)信息、連續(xù)開機(jī)時(shí)間、聯(lián)系人、用戶列表、運(yùn)行的進(jìn)程等功能,實(shí)現(xiàn)對(duì)SNMP服務(wù)的測(cè)試。37
SNMPUTIL還有一個(gè)trap的參數(shù),主要用來陷阱捕捉,它可以接受代理進(jìn)程上主動(dòng)發(fā)來的信息。如果在命令行下面輸入snmputiltrap后按“Enter”鍵,然后用錯(cuò)誤的團(tuán)體名來訪問代理進(jìn)程,這時(shí)候就能收到代理進(jìn)程主動(dòng)發(fā)回的報(bào)告。
使用SNMPUTIL可以實(shí)現(xiàn)對(duì)SNMP基本服務(wù)的測(cè)試,但由于Snmptuil.exe只是一個(gè)簡(jiǎn)單的工具,沒有包含Set命令,因此不能實(shí)現(xiàn)設(shè)置操作。此外,在Win2000/XP安裝光盤中附帶了一個(gè)圖形界面的測(cè)試程序Snmputilg.exe,用戶可以啟動(dòng)光盤中/support/tools/setup.exe安裝此測(cè)試程序。該程序使用方法與Snmputil.exe類似,具體不再贅述。388.3Windows網(wǎng)絡(luò)管理應(yīng)用程序開發(fā)
在Windows系統(tǒng)中開發(fā)網(wǎng)絡(luò)管理應(yīng)用程序需要使用系統(tǒng)提供的API函數(shù),主要包括4部分,即擴(kuò)展代理API、管理API、使用程序API和WinSNMPAPI。編寫擴(kuò)展代理和SNMP管理應(yīng)用程序都要使用這些庫(kù)函數(shù)。398.3.1WindowsSNMP應(yīng)用程序接口1.SNMP擴(kuò)展代理API函數(shù)
SNMP擴(kuò)展代理API函數(shù)定義SNMP服務(wù)和第三方SNMP擴(kuò)展代理DLL間的接口。應(yīng)用程序使用這些函數(shù)來解析由引入的SNMPPDU指定的變量綁定。擴(kuò)展代理AP共包括6個(gè)API函數(shù):SnmpExtensionClose
SnmpExtensionInit
SnmpExtensionInitEx
SnmpExtensionQuery
SnmpExtensionQueryEx
SnmpExtensionTrap
402.SNMP管理API函數(shù)
SNMP管理API函數(shù)定義第三方SNMP管理端應(yīng)用程序與管理函數(shù)動(dòng)態(tài)鏈接庫(kù)MGMTAPI.dll間的接口。此DLL與SNMP陷入服務(wù)(Snmptrap.exe)一起工作,并能與一個(gè)或多個(gè)第三方管理端應(yīng)用程序相結(jié)合。第三方管理端應(yīng)用程序可以調(diào)用這些管理API函數(shù)實(shí)現(xiàn)發(fā)送SNMP請(qǐng)求報(bào)文,接收響應(yīng)等管理操作。SNNP管理API由7個(gè)函數(shù)組成。SnmpMgrClose
SnmpMgrGetTrap
SnmpMgrOidToStr
SnmpMgrOpen
SnmpMgrRequest
SnmpMgrStrToOid
SnmpMgrTrapListen
413.SNMP實(shí)用API函數(shù)
SNMP實(shí)用API函數(shù)簡(jiǎn)化SNMP數(shù)據(jù)結(jié)構(gòu)的操作并提供在SNMP應(yīng)用程序開發(fā)過程非常有用的函數(shù)集。4.WinSNMPAPI函數(shù)
WinSNMPAPI為在Windows下開發(fā)基于SNMP的網(wǎng)絡(luò)管程序提供解決方案,為SNMP網(wǎng)管開發(fā)者提供了必須遵循的開放式單一接口規(guī)范,定義了過程調(diào)用、數(shù)據(jù)類型、數(shù)據(jù)結(jié)構(gòu)和相關(guān)的語(yǔ)法。42WinSNMPAPI具有以下特點(diǎn):為基于SNMP開發(fā)網(wǎng)絡(luò)管理應(yīng)用程序提供接口;支持SNMPv1和SNMPv2C;除支持SNMP管理端功能外,WinSNMPAPI2.0還支持SNMP代理功能;支持32位應(yīng)用程序和多線程;適應(yīng)于Windows2000及后續(xù)操作系統(tǒng);比SNMP管理API提供更多功能的函數(shù)。
WinSNMPAPI以函數(shù)的形式封裝了SNMP的各部分,且針對(duì)SNMP是使用UDP的特點(diǎn)而設(shè)置了消息重傳和超時(shí)機(jī)制等?;赪inSNMP的應(yīng)用程序必須通過WSNMP32.DLL訪問WinSNMPAPI函數(shù)。WinSNMPAPI提供了7大類,約50多個(gè)API函數(shù)。438.3.2
WinSNMP編程概念1.SNMP消息與異步模式
Win32編程模式的一個(gè)很大特點(diǎn)就是消息驅(qū)動(dòng)。WinSNMP采用了異步消息驅(qū)動(dòng)模式,主要基于兩個(gè)原因:異步消息驅(qū)動(dòng)模式適合于面向?qū)ο罄碚?、SNMP分布式管理模型以及Windows編程、運(yùn)行環(huán)境。
SNMP在管理站和代理間基于數(shù)據(jù)報(bào)傳送數(shù)據(jù),沒有在遠(yuǎn)程實(shí)體之間建立實(shí)際通道(虛電路)。44
消息驅(qū)動(dòng)程序必須響應(yīng)各種重要事件,有些則完全依賴于異步關(guān)系。、WinSNMPAPI中幾乎所有函數(shù)都含有異步因素,有些則是完全異步的。有3個(gè)非常重要的異步函數(shù):
SnmpSendMsg
SnmpRecvMsg
SnmpRegiste
WinSNMP的整個(gè)編程模式就是基于異步的。
簡(jiǎn)單網(wǎng)絡(luò)管理協(xié)議使用消息來通信,并在遠(yuǎn)程SNMP實(shí)體間交換信息。SNMP消息包含協(xié)議數(shù)據(jù)單元及相關(guān)RFC定義的附加消息頭元素。PDU是包含SNMP數(shù)據(jù)成分(或域)的數(shù)據(jù)包。SNMP消息的格式對(duì)SNMPv1和SNMPv2都相同。但是,SNMPv2支持更多的PDU類型。452.WinSNMP支持級(jí)別
WinSNMP實(shí)現(xiàn)提供SNMP通信支持的多個(gè)級(jí)別:
Level0:只支持消息編碼與解碼,不支持SnmpSendMsg
SnmpRecvMsg
SnmpRegister。
Level1:支持0級(jí)通信和在SNMPv1框架下與SNMP代理實(shí)體相互操作。
Level2:支持1級(jí)通信和在SNMPv2C框架下與SNMP代理實(shí)體相互操作。
Level3:支持2級(jí)通信和與其他SNMPv2管理站通信。46
SNMP支持SNMPv1與SNMPv2的共存,所以WinSNMP提供對(duì)兩個(gè)版本協(xié)議的支持。
SnmpStartup函數(shù)能夠返回當(dāng)前WinSNMP實(shí)現(xiàn)支持的SNMP通信的最大級(jí)別。如果WinSNMP管理應(yīng)用程序使用此實(shí)現(xiàn)只是SNMP消息編碼和解碼,則應(yīng)用程序必須進(jìn)行由實(shí)現(xiàn)執(zhí)行的需要轉(zhuǎn)換。473.協(xié)議數(shù)據(jù)單元(PDU)
一個(gè)PDU包括一個(gè)變量綁定列表,PDU的結(jié)構(gòu)受限于WinSNMP服務(wù)。WinSNMP管理器應(yīng)用程序用HSNMP_PDU類型句柄可以存取PDU。
WinSNMP管理器應(yīng)用程序在它調(diào)用SnmpSendMsg函數(shù)或SnmpEncodeMsg函數(shù)以前必須產(chǎn)生一個(gè)PDU。
應(yīng)用程序可以提取或修改PDU的數(shù)據(jù)元素,釋放為PDU分配的資源。為了執(zhí)行這些操作,管理器應(yīng)用程序使用WinSNMPPDU函數(shù)。484.陷入從SNMPv1轉(zhuǎn)換到SNMPv2C
當(dāng)WinSNMP實(shí)現(xiàn)從SNMPv1框架下的實(shí)體操作中收到陷入時(shí),它把此陷入轉(zhuǎn)換到SNMPv2C格式。因此,當(dāng)SnmpRecvMsg傳送陷入時(shí)它總是用SNMPv2C格式。RFC1908詳細(xì)說明從SNMPv1到SNMPv2C轉(zhuǎn)換陷入格式的規(guī)則。
WinSNMP管理器應(yīng)用程序可以檢查變量綁定列表中的最后一個(gè)變量綁定入口來決定入口是否是從SNMPv1轉(zhuǎn)換到SNMPv2C格式的陷入。495.本地?cái)?shù)據(jù)庫(kù)
WinSNMP服務(wù)本地?cái)?shù)據(jù)庫(kù)存儲(chǔ)以下信息。50(1)網(wǎng)絡(luò)協(xié)議信息和版本號(hào):依據(jù)該信息決定傳輸中使用的傳輸協(xié)議和SNMP版本。(2)實(shí)體和上下文轉(zhuǎn)換模式:依據(jù)該信息向用戶提供界面友好的SNMP實(shí)體和上下文。(3)重發(fā)策略:依據(jù)該信息決定是否進(jìn)行重發(fā),并存儲(chǔ)每一個(gè)目的連接實(shí)體的超時(shí)期限和重發(fā)次數(shù)。6.重發(fā)策略
WinSNMP管理器應(yīng)用程序可以用各種方式進(jìn)行SNMP操作請(qǐng)求。應(yīng)用程序可以給SNMP代理發(fā)送幾個(gè)請(qǐng)求但不等待應(yīng)答,或發(fā)送單個(gè)的請(qǐng)求并等待應(yīng)答。由于SNMP可以在多個(gè)傳輸協(xié)議上執(zhí)行,故傳送機(jī)制和可靠性會(huì)改變。50
當(dāng)編寫WinSNMP管理器應(yīng)用程序時(shí),必須決定基于應(yīng)用程序發(fā)布操作請(qǐng)求的方式和通信操作需要的可靠等級(jí),然后,必須選擇重發(fā)策略并實(shí)現(xiàn)此重發(fā)政策。517.實(shí)體和上下文轉(zhuǎn)換模式
WinSNMP管理應(yīng)用程序通過設(shè)定實(shí)體和上下文轉(zhuǎn)換模式可以指定實(shí)體和上下文參數(shù)的解釋和翻譯。WinSNMP實(shí)現(xiàn)保存此模式于數(shù)據(jù)庫(kù)中。8.WinSNMP數(shù)據(jù)管理概念
使用WinSNMP管理器API進(jìn)行編程時(shí),采用的主要數(shù)據(jù)管理概念包括:對(duì)象標(biāo)識(shí)符
WinSNMP描述符資源句柄對(duì)象
C類型串分配WinSNMP內(nèi)存對(duì)象。529.陷入和通知
WinSNMP管理器應(yīng)用程序必須用SNMPAPI_ON調(diào)用SnmpRegister函數(shù)注冊(cè)接收陷入和通知。應(yīng)用程序可以通過用SNMPAPI_OFF調(diào)用此函數(shù)卸載和使其不能進(jìn)行陷入和通知。538.3.3
WinSNMP編程模式
WinSNMP程序主要由WinSNMP應(yīng)用程序、WinSNMP會(huì)話、WinSNMP服務(wù)3部分組成。WinSNMP服務(wù)為應(yīng)用程序提供以下服務(wù)。
實(shí)現(xiàn)管理實(shí)體間的管理通信。管理實(shí)體可以處于本地計(jì)算機(jī),也可以是通過局域網(wǎng)、廣域網(wǎng)或者Internet連接。隱藏SNMP、ASN.1語(yǔ)法及BER編碼在傳輸過程中的具體細(xì)節(jié)。驗(yàn)證接收到的SNMPPDU的正確性,并拒絕接收無(wú)效的PDU。依據(jù)相關(guān)RFC規(guī)定轉(zhuǎn)換SNMPv2PDU類型。為使SNMPv2能夠向下兼容SNMPv1,在發(fā)送SNMPv1陷入時(shí),將該陷入轉(zhuǎn)換為SNMPv2陷入。應(yīng)用程序重發(fā)策略服務(wù)。設(shè)定實(shí)體和上下文轉(zhuǎn)換模式。54
打開WinSNMP應(yīng)用程序;打開一個(gè)或多個(gè)WinSNMP會(huì)話;注冊(cè)接收陷入或通知;產(chǎn)生一個(gè)或多個(gè)變量綁定列表結(jié)合到一個(gè)PDU中;提交一個(gè)或多個(gè)SNMP操作請(qǐng)求;檢取SNMP操作請(qǐng)求的應(yīng)答;處理請(qǐng)求應(yīng)答;關(guān)閉每一個(gè)WinSNMP會(huì)話;關(guān)閉WinSNMP應(yīng)用程序。
WinSNMP一般編程任務(wù)包括管理對(duì)象標(biāo)識(shí)符、釋放WinSNMP描述符、設(shè)定實(shí)體和上下文轉(zhuǎn)換模式、管理重發(fā)政策。使用WinSNMP開發(fā)網(wǎng)絡(luò)管理應(yīng)用的基本編程步驟如下:55由于WinSNMPAPI按照SNMP封裝了各種操作,包括PDU、VarBindList以及協(xié)議操作的各項(xiàng)函數(shù)。在具體開發(fā)WinSNMP應(yīng)用時(shí),可以按照SNMP的描述調(diào)用WinSNMP相關(guān)函數(shù),完成一次完整的SNMP。下面將具體介紹WinSNMP的一般編程模式,分為發(fā)送請(qǐng)求消息與接受響應(yīng)消息兩部分來實(shí)現(xiàn)。561.WinSNMP發(fā)送請(qǐng)求消息
WinSNMP發(fā)送請(qǐng)求消息的過程可以分為4個(gè)部分,主要有:
WinSNMP的初始化協(xié)議數(shù)據(jù)單元的創(chuàng)建發(fā)送信息資源的釋放。57(1)WinSNMP的初始化
初始化的具體過程如下:
調(diào)用SnmpStartup函數(shù)啟動(dòng)WinSNMP。調(diào)用SnmpOpen或SnmpCreateSession函數(shù)創(chuàng)建一個(gè)會(huì)話。調(diào)用SnmpSetTranslateMode設(shè)置傳輸模式。調(diào)用SnmpStrToEntity創(chuàng)建實(shí)體。調(diào)用SnmpSetRetransmitMode函數(shù)設(shè)置重傳模式。調(diào)用SnmpSetRetry函數(shù)設(shè)置重傳次數(shù)。調(diào)用SnmpSetTimeout函數(shù)設(shè)置超時(shí)時(shí)間。調(diào)用SnmpStrToContext創(chuàng)建上下文句柄。58(2)創(chuàng)建協(xié)議數(shù)據(jù)單元在創(chuàng)建PDU之前,必須先創(chuàng)建變量綁定表。調(diào)用SnmpStrToOid函數(shù)創(chuàng)建讀取對(duì)象的對(duì)象標(biāo)識(shí)符。調(diào)用SnmpCreateVbl函數(shù)創(chuàng)建變量綁定表。調(diào)用SnmpSetVb函數(shù)往變量綁定表中添加變量綁定。59(3)發(fā)送信息
首先調(diào)用SnmpStrToContext和SnmpStrToEntity函數(shù)創(chuàng)建共同體字符串和代理實(shí)體,然后,調(diào)用SnmpSendMsg
函數(shù)發(fā)送信息。SnmpSendMsg(session,NULL,hAgent,hView,m_hpdu);60(4)釋放資源最后調(diào)用SnmpFreeVbl、SnmpFreePdu、SnmpFreeEntity、SnmpClose等函數(shù)釋放所有分配的資源。612.WinSNMP接收響應(yīng)消息
SnmpCreateSession函數(shù)請(qǐng)求WinSNMP為WinSNMP管理應(yīng)用程序打開一個(gè)會(huì)話,應(yīng)用程序可以指定如何通告WinSNMP會(huì)話發(fā)來的消息和異步時(shí)間,實(shí)現(xiàn)WinSNMP異步消息驅(qū)動(dòng)模式,函數(shù)原型為62HSNMP_SESSIONSnmpCreateSession(HWNDhWnd,
//通知窗口的句柄UINTwMsg,
//窗口通知消息SNMPAPI_CALLBACKpfnCallback,
//通知回調(diào)函數(shù)LPVOIDlpClientData
); //指向回調(diào)函數(shù)數(shù)據(jù)的指針63下面為WinSNMP接受響應(yīng)消息的步驟。(1)調(diào)用SnmpRecvMsg函數(shù)接收數(shù)據(jù)。(2)調(diào)用SnmpGetPduData函數(shù)從PDU中析取出數(shù)據(jù)。(3)調(diào)用SnmpCountVbl獲得變量綁定列表中變量綁定的個(gè)數(shù)。(4)調(diào)用SnmpGetVb函數(shù)取得PDU變量綁定表中每個(gè)變量綁定的對(duì)象標(biāo)識(shí)符及其對(duì)應(yīng)的值。(5)調(diào)用SnmpOidToStr函數(shù)將Oid轉(zhuǎn)換為字符串,并將接收到的Oid與發(fā)送數(shù)據(jù)包的各OID做比較,以決定各自值的歸屬。648.4
SNMP++軟件包
SNMP++是HP公司用C++語(yǔ)言開發(fā)的一個(gè)開源類庫(kù),可以在下載到最新的版本。本書中介紹的版本為V3.2.18。SNMP++軟件包充分利用了面向?qū)ο蟮木幊碳夹g(shù),所涉及的數(shù)據(jù)結(jié)構(gòu)全部封裝在相應(yīng)的類中。底層操作細(xì)節(jié)完全透明,使用者只需設(shè)置好相應(yīng)參數(shù),采用調(diào)用對(duì)象成員的方法,就可完成SNMP操作。658.4.1
SNMP++簡(jiǎn)介1.SNMP++組成文件(1)*.cpp文件。(2)
*.h文件。2.SNMP++特點(diǎn)(1)內(nèi)存管理。(2)可移植性強(qiáng)。(3)提供超時(shí)和重傳機(jī)制。(4)阻塞模式與非阻塞模式的網(wǎng)絡(luò)請(qǐng)求。(5)支持Trap的發(fā)送和接收。
663.編譯SNMP++軟件包由于下載得到是源文件,開發(fā)使用時(shí)可將文件加入到程序中,也可將SNMP++類編譯成鏈接庫(kù),直接在程序中調(diào)用。下面將介紹在VC++6.0環(huán)境中如何將SNMP++軟件包編譯成靜態(tài)連接庫(kù)。
678.4.2
SNMP++軟件包中的類介紹如同MFC是對(duì)Win32API進(jìn)行的再封裝一樣,Windows下的SNMP++是在WinSNMP的基礎(chǔ)上進(jìn)行的二次封裝。圖8-11所示為SNMP++在程序開發(fā)環(huán)境中的層次
溫馨提示
- 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 南朝山水詩(shī)課件
- 【課件】理財(cái)牛金融工程及程序化交易平臺(tái)
- 宏觀經(jīng)濟(jì)研究:2025年1月大類資產(chǎn)配置報(bào)告
- 單位管理制度展示合集【人員管理篇】十篇
- 中國(guó)清潔套裝行業(yè)投資潛力分析及行業(yè)發(fā)展趨勢(shì)報(bào)告
- 單位管理制度展示匯編【職工管理】
- 2024年上海市《消防員資格證之二級(jí)防火考試題庫(kù)》必刷1000題及參考答案【考試直接用】
- 單位管理制度品讀選集人力資源管理篇
- 《課程概述教學(xué)》課件
- 2025出租車司機(jī)勞動(dòng)合同書范本
- 超星爾雅學(xué)習(xí)通《中華傳統(tǒng)文化之戲曲瑰寶(中國(guó)戲曲音樂學(xué)會(huì))》2024章節(jié)測(cè)試答案
- TB 10012-2019 鐵路工程地質(zhì)勘察規(guī)范
- 肺結(jié)節(jié)診治指南
- 2024年濟(jì)南歷城區(qū)九年級(jí)中考化學(xué)一??荚囋囶}(含答案)
- 2024年山東能源集團(tuán)大方綠塘煤礦有限公司招聘筆試參考題庫(kù)含答案解析
- GB/T 19923-2024城市污水再生利用工業(yè)用水水質(zhì)
- 2024年生開心果市場(chǎng)需求分析報(bào)告
- 修理廠環(huán)保規(guī)定匯總
- 現(xiàn)代材料分析測(cè)試技術(shù)課件
- 2022-2023學(xué)年北京市海淀區(qū)高一(上)期末地理試卷
- 血液透析室護(hù)士長(zhǎng)年終總結(jié)報(bào)告
評(píng)論
0/150
提交評(píng)論