計(jì)算機(jī)網(wǎng)絡(luò)管理_第1頁(yè)
計(jì)算機(jī)網(wǎng)絡(luò)管理_第2頁(yè)
計(jì)算機(jī)網(wǎng)絡(luò)管理_第3頁(yè)
計(jì)算機(jī)網(wǎng)絡(luò)管理_第4頁(yè)
計(jì)算機(jī)網(wǎng)絡(luò)管理_第5頁(yè)
已閱讀5頁(yè),還剩44頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

計(jì)算機(jī)網(wǎng)絡(luò)管理-第6章Windows和SNMP第6章Windows和SNMP6.1WindowsSNMP服務(wù)的基本概念6.2SNMP應(yīng)用程序接口6.3擴(kuò)展代理的實(shí)現(xiàn)6.4陷入的實(shí)現(xiàn)6.5SNMP管理應(yīng)用程序接口6.6網(wǎng)絡(luò)管理應(yīng)用程序設(shè)計(jì)SNMP在90年代初剛剛開始應(yīng)用,那是Windows3.0/3.1/3.2是16位操作系統(tǒng),微軟還沒有制定16位的網(wǎng)絡(luò)管理標(biāo)準(zhǔn);WindowsNT操作系統(tǒng)出現(xiàn)后,微軟制定了遠(yuǎn)程過程調(diào)用和系統(tǒng)管理服務(wù)(SMS)標(biāo)準(zhǔn),作為公司專用的網(wǎng)絡(luò)管理平臺(tái).由于SNMP在TCP/IP網(wǎng)絡(luò)上廣泛應(yīng)用,微軟推出TCP/IP32位協(xié)議簇時(shí)包含了一個(gè)SNMP選件,可以安裝在NT的服務(wù)器和工作站上,接收和發(fā)送SNMP請(qǐng)求/響應(yīng)/陷入等.本章從windows中的SNMP服務(wù)的安裝/測(cè)試/應(yīng)用開發(fā)方面進(jìn)行介紹.6.1.1Windows的SNMP服務(wù)WindowsNT是SNMP理想的開發(fā)平臺(tái),它支持SNMPV1管理站和代理功能,包括發(fā)送和接收陷入的功能.SNMP服務(wù)完全集成在windowsNT系統(tǒng)中,是NT軟件包的一部分.(在安裝NT時(shí)可選裝)Windows95/98只支持SNMP的代理功能,不支持管理站的功能.(Windows95/98是被管的對(duì)象)服務(wù)的概念:是一種特殊的32位應(yīng)用軟件,它通過win32API與WindowsNT的服務(wù)控制管理器(SCM)接口,一般后臺(tái)運(yùn)行;它作用是監(jiān)視硬件設(shè)備和其它的系統(tǒng)進(jìn)程,提供訪問外圍設(shè)備和操作系統(tǒng)輔助功能的能力.(系統(tǒng)服務(wù)在系統(tǒng)啟動(dòng)或用戶登錄時(shí)可以自動(dòng)運(yùn)行,用戶退出或系統(tǒng)關(guān)機(jī)停止運(yùn)行.)WindowsSNMP的服務(wù)包括:SNMP代理服務(wù)程序snmp.exe和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編碼/譯碼SNMPtrap.exe:監(jiān)聽發(fā)送給NT主機(jī)的陷入報(bào)文,然后把其中的數(shù)據(jù)傳送給SNMP管理API.(windows95/98沒有陷入服務(wù))6.1WindowsSNMP服務(wù)的基本概念Winsock控件對(duì)用戶來說是不可見的,它提供了訪問TCP和UDP網(wǎng)絡(luò)服務(wù)的方便途徑。MicrosoftAccess、VisualBasic、VisualC++或VisualFoxPro的開發(fā)人員都可使用它。為編寫客戶或服務(wù)器應(yīng)用程序,不必了解TCP的細(xì)節(jié)或調(diào)用低級(jí)的WinsockAPIs。通過設(shè)置控件的屬性并調(diào)用其方法就可輕易連接到一臺(tái)遠(yuǎn)程機(jī)器上去,并且還可雙向交換數(shù)據(jù)。

如果創(chuàng)建客戶應(yīng)用程序,就必須知道服務(wù)器計(jì)算機(jī)名或者IP地址(RemoteHost屬性),還要知道進(jìn)行“偵聽”的端口(RemotePort屬性),然后調(diào)用Connect方法。如果創(chuàng)建服務(wù)器應(yīng)用程序,就應(yīng)設(shè)置一個(gè)收聽端口(LocalPort屬性)并調(diào)用Listen方法。當(dāng)客戶計(jì)算機(jī)需要連接時(shí)就會(huì)發(fā)生ConnectionRequest事件。為了完成連接,可調(diào)用ConnectionRequest事件內(nèi)的Accept方法。

建立連接后,任何一方計(jì)算機(jī)都可以收發(fā)數(shù)據(jù)。為了發(fā)送數(shù)據(jù),可調(diào)用SendData方法。當(dāng)接收數(shù)據(jù)時(shí)會(huì)發(fā)生DataArrival事件。調(diào)用DataArrival事件內(nèi)的GetData方法就可獲取數(shù)據(jù)。SNMP服務(wù)和擴(kuò)展代理WinSockAPI擴(kuò)展代理DLL擴(kuò)展代理DLL擴(kuò)展代理DLLSNMP代理服務(wù)(SNMP.EXE)SNMP陷入服務(wù)(SNMPTRP.EXE)UDPPort162UDPPort161SNMPRequestSNMPResponseSNMPTrap擴(kuò)展代理:SNMP代理服務(wù)是可擴(kuò)展,允許動(dòng)態(tài)地加入和減少M(fèi)IB信息(程序員不必修改和重編譯代理程序,只要添加和刪除子代理就可以,該子代理稱擴(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)信息)SNMP代理服務(wù)與SNMPAPI的交互作用SNMPAPI:是Microsoft為SNMP協(xié)議開發(fā)的應(yīng)用程序接口,是一組用于構(gòu)造SNMP服務(wù),擴(kuò)展服務(wù)和SNMP管理系統(tǒng)的庫(kù)函數(shù)。上圖表示了SNMP代理與SNMPAPI交互作用的過程。SNMP報(bào)文通過UDP/IP服務(wù)經(jīng)WinSockAPI傳送到SNMP代理,SNMP代理對(duì)報(bào)文譯碼,并進(jìn)行認(rèn)證檢查,這個(gè)過程通過SNMPAPI(SNMPAPI.DLL交互作用,然后把變量綁定表的內(nèi)容傳送到有關(guān)擴(kuò)展代理,經(jīng)擴(kuò)展代理處理形成響應(yīng)信息又送回SNMP代理,再由SNMP代理裝配成GetResponse報(bào)文,交給WinSockAPI送回發(fā)送請(qǐng)求的管理站)SNMPAPI(SNMPAPI..DLL)擴(kuò)展代理(MIB-2).2.1擴(kuò)展代理(LANManager).2.1擴(kuò)展代理(MicrosoftWINS).2.1SNMP代理服務(wù)(SNMP.EXE)WinsockAPIGetRequestGetNextRequestSetRequestGetResponseTrapSNMP陷入服務(wù)與SNMPAPI的交互作用SNMP陷入:陷入服務(wù)監(jiān)視從WinSockAPI傳來的陷入報(bào)文,然后把陷入數(shù)據(jù)通過命名的管道傳送給SNMP的管理API(MGNTAPI.DLL)。管理API是Microsoft為開發(fā)SNMP管理應(yīng)用提供動(dòng)態(tài)連接庫(kù),是SNMPAPI的一部分。管理應(yīng)用程序從管理API接收數(shù)據(jù),向API發(fā)送管理信息,并通過管理API與WinSock通信,實(shí)現(xiàn)網(wǎng)絡(luò)的管理。SNMPAPI(SNMPAPI..DLL)SNMP管理應(yīng)用SNMP陷入服務(wù)(SNMPREAP.EXE)SNMP管理API(MGNTAPI.DLL)WinsockAPIGetRequestGetNextRequestSetRequestGetResponsetTrapTrapTrap6.1.2SNMP服務(wù)的安裝、配置和測(cè)試安裝SNMP服務(wù)象安裝WindowsNT其它服務(wù)一樣,唯一要注意的是,它必須先‘安裝TCP/IP協(xié)議。文件解釋INETMIB1.DLL實(shí)現(xiàn)MIB-2(.2.1)擴(kuò)展代理LMMIB2.DLL實(shí)現(xiàn)LANManagerMIB-2的擴(kuò)展代理MGMTAPI.DLLSNMP管理APIMIB.BIN經(jīng)過編譯的MIB數(shù)據(jù),由管理API使用SNMP.EXESNMP代理服務(wù)可執(zhí)行程序SNMPTRAP.EXESNMP陷入服務(wù)可執(zhí)行程序可安裝的SNMP文件Microsoft的有關(guān)MIB模塊“WindowsInternet名稱服務(wù)(WINS)”:提供了動(dòng)態(tài)復(fù)制數(shù)據(jù)庫(kù)服務(wù),此服務(wù)可以將NetBIOS名稱注冊(cè)并解析為網(wǎng)絡(luò)上使用的IP地址。它啟用服務(wù)器計(jì)算機(jī)來充當(dāng)NetBIOS名稱服務(wù)器并注冊(cè)和解析網(wǎng)絡(luò)上啟用WINS客戶的名稱,就像TCP/IP上的NetBIOS標(biāo)準(zhǔn)中描述的一樣動(dòng)態(tài)主機(jī)配置協(xié)議(DHCP):是一種TCP/IP標(biāo)準(zhǔn),旨在通過服務(wù)器計(jì)算機(jī)來集中管理網(wǎng)絡(luò)上使用的IP地址和其他相關(guān)配置詳細(xì)信息,以減少管理地址配置的復(fù)雜性。提供了DHCP服務(wù),它允許服務(wù)器計(jì)算機(jī)履行DHCP服務(wù)器的職責(zé)并且如DHCP草案標(biāo)準(zhǔn)RFC2131中所述在您的網(wǎng)絡(luò)上配置啟用DHCP的客戶機(jī)文件解釋W(xué)INS.MIB實(shí)現(xiàn)WINS服務(wù)MIB(.1.311.1.2)的擴(kuò)展代理WINSMIB.DLL實(shí)現(xiàn)WINS服務(wù)MIB(.1.311.1.2)的擴(kuò)展代理DHECMIB.DDL實(shí)現(xiàn)DHEC服務(wù)MIB(.1.311.1.3)的擴(kuò)展代理DHEC.MIB實(shí)現(xiàn)DHEC服務(wù)MIB(.1.311.1.3)的擴(kuò)展代理INETSRV.MIBMicrosoftIISMIB(..7.2.1)FTP.MIBMicrosoftIISFTP服務(wù)器MIB(..7.2.1)HTTP.MIBMicrosoftIISHTTP服務(wù)器MIB(..7.3.1)Internet信息服務(wù)(IIS)是Web服務(wù),它使得在Intranet或Internet上發(fā)布信息很容易GOPHERD.MIBMicrosoftIISGopher服務(wù)器MIB(..7.4.1)SNMP在WindowsNT中的安裝和配置:[1]安裝:1)登錄到具有授權(quán)安裝的帳戶2)雙擊控制面板的網(wǎng)絡(luò)圖標(biāo)3)點(diǎn)擊服務(wù)4)點(diǎn)擊添加5)點(diǎn)擊網(wǎng)絡(luò)服務(wù)隊(duì)列中的SNMP服務(wù)選項(xiàng)6)確定開始安裝(一般安裝完畢,重新安裝windowsNT的SP4以上版本)[2]配置:1)SNMP服務(wù)的屬性中的代理:包含變量sysContact(聯(lián)系人)、sysLocation(位置)、sysServices(服務(wù))2)陷入:最多可以設(shè)置5個(gè)網(wǎng)絡(luò)地址(IP地址,或IPX或DNS主機(jī)名)3)陷入報(bào)文的團(tuán)體名:區(qū)分大小寫,是為了發(fā)送需要認(rèn)證的陷入報(bào)文用,如果不設(shè)置,則任何的團(tuán)體名都是有效的.如果要使代理只接收某些特定的管理主機(jī)發(fā)來的陷入,則可以在“安全性”中鍵入對(duì)應(yīng)主機(jī)地址。SNMP在WindowsWindows9X中的安裝和配置:[1]SNMP的安裝:[2]策略編輯器的安裝[3]SNMP的配置:[4]修改注冊(cè)表:[5]安裝擴(kuò)展代理DLL[6]測(cè)試SNMP服務(wù)[1]SNMP應(yīng)用程序接口SNMPAPI由4部分組成:擴(kuò)展API管理API實(shí)用程序API服務(wù)API在編寫擴(kuò)展API代理和SNMP管理應(yīng)用程序都使用這些函數(shù)。[2]常用幾個(gè)數(shù)據(jù)類型(在SNMP頭文件SNMP.H中定義)Typedefstruct{BYTE *stream;//字節(jié)流指針 UINT length;//字節(jié)數(shù) BOOL dynamic//如果動(dòng)態(tài)分配存儲(chǔ)器則為“true”}AsnOctetString6.2SNMP應(yīng)用程序接口Typedefstruct{UNIT idlength//在oid中的整數(shù)個(gè)數(shù) UINT *ids;//指向整數(shù)流的指針}AsnObjectIdentifierTypedefstruct{ BYTE asnTypeunion{ AsnInteger number; AsnOctetString String; ASnObjectIdentifier Object; AsnSequence sequence; AsnIpAddress Address AsnCounter Counter; AsnCauge gauge; AsnTimeticks ticks; AsnOpaque arbitrary;//(未知類) }}AsnAnyTypedefAsnObjectIdentifierAsnObjectname;TypedefAsnanyObjectSyntax;Typedefstructvb{AsnObjectName name; AsnObjectSyntax value;}RFC1157VarBindTypedefstruct{ RFC1157VarBind *list; UINT len;}RFC1157VarBindList6.2.1擴(kuò)展API的概念擴(kuò)展API是4個(gè)函數(shù)的集合。SNMP服務(wù)和擴(kuò)展代理DLL使用這些函數(shù)交換數(shù)據(jù)。這些函數(shù)的原型在SNMP.H頭文件中,函數(shù)代碼用在每個(gè)擴(kuò)展代理中。函數(shù)用途SnmpExtensionInit實(shí)現(xiàn)擴(kuò)展代理初始化和MIB對(duì)象注冊(cè)SnmpExtensionInitEx提供多個(gè)MIB對(duì)象注冊(cè)SnmpExtensionQuery處理Get,GetNext,Set請(qǐng)求SnmpExtensionTrap從擴(kuò)展代理收集Trap數(shù)據(jù)1)SnmpExtensionInit原型:BOOLWINAPISnmpExtensionInit( DWORDdwTimeZeroReference,//擴(kuò)展代理存儲(chǔ)的時(shí)間(百分之一秒) HANDLE*phPollForTrapEvent,//擴(kuò)展代理發(fā)送Trap時(shí)獲取的事件句柄

AsnObjectIdentifier*pSupportedView;//MIB子樹的對(duì)象標(biāo)識(shí)符 )2)SnmpExtensionInitEx原型:BOOLWINAPISnmpExtensionInitEx(

AsnObjectIdentifier*pSupportedView;//MIB子樹的對(duì)象標(biāo)識(shí)符 )3)SnmpExtensionQuery原型:BOOLWINAPISnmpExtensionQuery( BYTE nRequestType,//Get160,GetNext161,Set163 RFC1157VarBindList*pVariableBinding,//變量綁定表指針

AsnInteger *pnErrorStatus,//tooBig1,noSuchName2,badValue3,//readOnly4,genErr5 AsnInteger *pnErrorIndex;)4)SnmpExtensionTrap原型:BOOLWINAPISnmpExtensionTrap( AsnObjectIdentifier *penterprise, AsnInteger *pdwGenericTrap,//coldStart0,warmStart1,... AsnIngeter *pdwSpecificTrap, AsnTimeticks *pdwtimeStamp, RFC1157VarBindList *pVaribleBindings;)6.2.2管理API的概念管理API(MGMTAPI.DLL)是7個(gè)函數(shù)的集合。管理應(yīng)用程序調(diào)用這些函數(shù)發(fā)送請(qǐng)求,接收響應(yīng)和陷入。把OBJECTIDENTIFIER轉(zhuǎn)換成AsnObjectIdentifierSnmpMgrStrToOid把AsnObjectIdentifier轉(zhuǎn)換成OBJECTIDENTIFIERSnmpMgrOidToStr接收代理發(fā)來的Trap數(shù)據(jù)SnmpMgrGetTrap注冊(cè)接收Trap的管理應(yīng)用SnmpMgrTrapListen向代理發(fā)送Get,GetNext和Set請(qǐng)求SnmpMgrRequest關(guān)閉到代理的管套SnmpMgrClose打開到代理的管套SnmpMgrOpen用途函數(shù)MicrosoftSNMP管理API有一定的局限性:1)只能運(yùn)行在Win32操作系統(tǒng)。2)陷入操作調(diào)用命名管道服務(wù),而Windows95/98不支持命名管道,因此不能支持陷入服務(wù)。3)發(fā)出請(qǐng)求和接收響應(yīng)都調(diào)用SnmpMgrRequest,而SnmpMgrRequest函數(shù)是同步操作。不支持異步操作。4)只能使用C,C++,因?yàn)閮蓚€(gè)頭文件SNMP.H和MGMTAPI.H的很多數(shù)據(jù)類型是AsnAny(包含大量的union的結(jié)構(gòu)),所以大量使用指針。Java和VB很難勝任。6.2.3實(shí)用程序API實(shí)用API包含14個(gè)函數(shù),分為存儲(chǔ)器分配和數(shù)據(jù)管理兩個(gè)組,函數(shù)原型在SNMP.H中,函數(shù)代碼在SNMPAPI.DLL和SNMPAPI.LIB中。函數(shù)用途SnmpUtilMenAlloc分配內(nèi)存SnmpUtilMenREAlloc重新分配內(nèi)存SnmpUtilMenFree釋放內(nèi)存SnmpUtilOidAppend把兩個(gè)對(duì)象放在一起SnmpUtilOilCmp比較兩個(gè)AsnObjectIdentifier對(duì)象的值SnmpUtilOidNCmp比較兩個(gè)AsnObjectIdentifier對(duì)象的前N個(gè)值SnmpUtilOidCpy拷貝一個(gè)AsnObjectIdentifier對(duì)象SnmpUtilOidFree釋放AsnObjectIdentifier對(duì)象分配的存儲(chǔ)器SnmpUtilVarBindCpy拷貝一個(gè)RFC1157VarBind對(duì)象SnmpUtilVarBindFree釋放RFC1157VarBind對(duì)象動(dòng)態(tài)分配的存儲(chǔ)器SnmpUtilVarBindListCpy拷貝一個(gè)RFC1157VarBindList對(duì)象SnmpUtilVarBindListFree釋放RFC1157VarBindList對(duì)象動(dòng)態(tài)分配的存儲(chǔ)器SnmpUtilDbgPrint在LOG文件中寫入Debug消息SnmpUtilPrintAsnAny在標(biāo)準(zhǔn)打印機(jī)存儲(chǔ)在AsnAny對(duì)象中的值[1]存儲(chǔ)器分配函數(shù)注意:1)SnmpUtilMen*函數(shù)為SNMP應(yīng)用和管理API分配和回收存儲(chǔ)器。2)擴(kuò)展代理不能調(diào)用Win32的存儲(chǔ)管理(LocalAlloc或GlobalAllo),也不能調(diào)用(編譯支持)標(biāo)準(zhǔn)的C的存儲(chǔ)管理(malloc,remalloc,free).3)為了防止存儲(chǔ)器泄漏(由于分配在不同的堆中而不能釋放),要求所有的動(dòng)態(tài)的對(duì)象都使用SnmpUtilMen*分配在同一存儲(chǔ)堆中。4)這些函數(shù)的參數(shù)和返回值與標(biāo)準(zhǔn)的C的存儲(chǔ)管理函數(shù)(malloc,remalloc,free)相同,即返回的是指針而不是存儲(chǔ)句柄。3個(gè)函數(shù):1)SnmpUtilMenAlloc:該函數(shù)的作用是分配內(nèi)存。例子:為一個(gè)字節(jié)串os分配內(nèi)存的。AsnOctetStringos;charszString[]=“AnOctetString”;os.Length=lstrlen(szString);os.stream=(BYTE*)SnmpUtilMenAlloc(sizeof(BYTE)*os.Length);if(os.stream) mencpy(os.stream.szString,os.Length);2)SnmpUtilMenReAlloc:重新分配內(nèi)存,即改變以前分配的存儲(chǔ)對(duì)象的大小。該函數(shù)有兩個(gè)參數(shù):一個(gè)指針指向已有的存儲(chǔ)對(duì)象;另一個(gè)參數(shù)表示存儲(chǔ)對(duì)象的新的字節(jié)數(shù)。如:如果字節(jié)數(shù)增加,則分配存儲(chǔ)器,反之如果字節(jié)數(shù)減少,則收回一部分存儲(chǔ)器。重新分配成功時(shí),返回新存儲(chǔ)的對(duì)象指針,否則返回NULL。SnmpUtilMenReAlloc(VarBinds.list,sizeof(RFC1157VarBind)*VarBinds.len);3)SnmpUtilMenFree:這個(gè)函數(shù)的作用是釋放內(nèi)存。例子:AsnOctetStringos;os.Length=10;os.stream=(BYTE*)SnmpUtilMenAlloc(sizeof(BYTE)*os.Length);if(os.stream) { SnmpUtilMenFree(os.stream); os.stream=(BYTE*)NULL}[2]數(shù)據(jù)管理函數(shù)1)SnmpUtilOidAppend:把兩個(gè)對(duì)象放在一起。SNMPAPISNMP_FUNC_TYPESnmpUtilOidAppend(AsnObjectIdentifier*pOidDst,//目標(biāo)對(duì)象AsnObjectIdentifier*pOidSrc//加到目標(biāo)對(duì)象的源對(duì)象);2)SnmpUtilOidCmp比較兩個(gè)AsnObjectIdentifier對(duì)象值SNMPAPISNMP_FUNC_TYPESnmpUtilOidCmp(AsnObjectIdentifier*pOid1,AsnObjectIdentifier*pOid2);3)SnmpUtilOidNCmp比較兩個(gè)AsnObjectIdentifier對(duì)象值前N子標(biāo)識(shí)符SNMPAPISNMP_FUNC_TYPESnmpUtilOidNCmp(AsnObjectIdentifier*pOid1,AsnObjectIdentifier*pOid2,UINTnSubIds//需要比較的子標(biāo)識(shí)符個(gè)數(shù));4)SnmpUtilOidCpy:拷貝一個(gè)AsnObjectIdentifier對(duì)象,源拷貝到目標(biāo)SNMPAPISNMP_FUNC_TYPESnmpUtilOidNCpy(AsnObjectIdentifier*pDstObjId,AsnObjectIdentifier*pSrcObjId);5)SnmpUtilOidFree:釋放為AsnObjectIdentifier對(duì)象動(dòng)態(tài)分配的存儲(chǔ)器。VOIDSNMP_FUNC_TYPESnmpUtilOidFree(AsnObjectIdentifier*pOid);6)SnmpUtilVarBindCpy:拷貝一個(gè)SnmpVarBind對(duì)象。SNMPAPISNMP_FUNC_TYPESnmpUtilVarBindCpy(SnmpVarBind*pVbDst,SnmpVarBind*pVbSrc);7)SnmpUtilVarBindFre:釋放為SnmpVarBind對(duì)象動(dòng)態(tài)分配的存儲(chǔ)器VOIDSNMP_FUNC_TYPESnmpUtilVarBindFree(SnmpVarBind*pVb);8)SnmpUtilVarBindListCpy:拷貝SnmpVarBindList對(duì)象SNMPAPISNMP_FUNC_TYPESnmpUtilVarBindListCpy(SnmpVarBindList*pVblDst,SnmpVarBindList*pVblSrc);9)SnmpUtilVarBindListFree:釋放為SnmpVarBindList對(duì)象動(dòng)態(tài)分配的存儲(chǔ)器VOIDSNMP_FUNC_TYPESnmpUtilVarBindListFree(SnmpVarBindList*pVbl);10)SnmpUtilDbgPrint:在LOG文件中寫入Debug信息BOOLWINAPISnmpUtilDbgPrint( INT nLogLevel,//錯(cuò)誤級(jí)別LPSTRszFormat,//打印格式 … //其它打印參數(shù));11)SnmpUtiPrintAsnAny:打印存儲(chǔ)在AsnAny對(duì)象中的值。6.2.4服務(wù)API服務(wù)API(SNMPAPI.DLL)包含19個(gè)函數(shù),這些函數(shù)用在SNMP.EXE中。在windows2000中正式公布見P181-182擴(kuò)展API的4個(gè)函數(shù)用在擴(kuò)展代理中。其中SnmpExtensionInit,SnmpExtensionQuery,SnmpExtensionTrap,應(yīng)該出現(xiàn)在每個(gè)擴(kuò)展代理中,另一個(gè)函數(shù)SnmpExtensionInitEx是任選,根據(jù)擴(kuò)展代理的需要;每個(gè)擴(kuò)展代理是通過這些函數(shù)與SNMP通信的,一般不需要執(zhí)行其它的線程。6.3.1擴(kuò)展代理動(dòng)態(tài)連接庫(kù)擴(kuò)展代理被SNMP服務(wù)裝入后,首先調(diào)“入口函數(shù)”,然后調(diào)用SnmpExtensionInit(或SnmpExtensionInitEx),完成必要的初始化工作。(例如:變量運(yùn)行時(shí)間賦值;為緩沖區(qū)分配內(nèi)存;進(jìn)程,線程和事件生成等)1)DLL入口函數(shù)dwReason的值為DDL-PROCESS-ATTACH,則DllMain被調(diào)用后完成初始化dwReason的值為DDL-PROCESS-DEATTACH,則DllMain被調(diào)用后,進(jìn)行卸載,完成關(guān)閉句柄,釋放內(nèi)存,通知主進(jìn)程等。見書182-1832)初始化函數(shù)1DLL轉(zhuǎn)入成功就調(diào)用SnmpExtensionInit函數(shù)進(jìn)行初始化操作。見書P183-1846.3擴(kuò)展代理的實(shí)現(xiàn)3)初始化函數(shù)2(提供多個(gè)MIB子樹登記)如果DllMain和SnmpExtensionInit調(diào)用成功,SNMP服務(wù)就檢查擴(kuò)展代理中是否有SnmpExtensionInitEx函數(shù).如果有,發(fā)付調(diào)用,把所有的擴(kuò)展代理支持的MIB子樹登記完畢.即直到該函數(shù)返回FALSE為止.見P185-186頁(yè)4)SnmpExtensionQuery函數(shù)作用:處理請(qǐng)求報(bào)文(Get,GetNext,Set)報(bào)文中的變量綁定表,生成應(yīng)答報(bào)文GetResponse中的變量綁定表,并決定錯(cuò)誤狀態(tài)。注意1:由于每個(gè)擴(kuò)展代理只處理自己管理的那部分MIB變量,所以SNMP服務(wù)收到一個(gè)請(qǐng)求報(bào)文后,必須把變量綁定表的內(nèi)容按照各個(gè)已裝入的擴(kuò)展代理的管轄范圍分成若干部分,交給相應(yīng)的擴(kuò)展代理處理。注意2:ResolveVarBind處理變量綁定表對(duì)見P186-1876.3.2MIB數(shù)據(jù)庫(kù)的實(shí)現(xiàn)MIB數(shù)據(jù)庫(kù)文件(*.mib)組織成一維數(shù)組,每個(gè)元素是結(jié)構(gòu)類型MIBVARS1)MIBVARS結(jié)構(gòu)定義:Typedefstruct-MibVars{ AsnObjectIdentifier Oid;/*mib變量的對(duì)象子標(biāo)識(shí)符*/ void *pStroage;/*本地存儲(chǔ)器地址指針*/ void *ptempVar;/*緩沖變量指針,set命令用*/ BOOL fModified;/*指示變量的值是否被改變過*/ BYTE bType;/*變量類型*/ DWORD dwMinVal;/*變量最小值*/ DWORD dwMaxVal;/*變量最大值*/ UINT uAccess;/*訪問模式*/ UINT (MinFunc)(UINT,struct-MibVars*,RFC1157VarBind*)/*實(shí)現(xiàn)變量操作函數(shù),參數(shù)為:操作類型,變量元素 指針,變量綁定表指針*/ struct-MibVars MibNext;/*指向下一個(gè)指針*/}MIBVARS2)MIB的定義:見P188-1893)搜索MIBVARS的數(shù)據(jù)庫(kù)見P190-1914)搜索的結(jié)果見P191-1926.4陷入的實(shí)現(xiàn)實(shí)現(xiàn)陷入的擴(kuò)展函數(shù)是SnmpExtensionTrap.6.4.1陷入設(shè)計(jì):1)代理的作用:檢測(cè)陷入事件,收集陷入數(shù)據(jù),發(fā)送陷入消息。2)單狀態(tài)事件:用戶擊鍵,輸入口令,SNMP報(bào)文認(rèn)證失敗等事件,通常用計(jì)數(shù)器跟蹤單狀態(tài)事件出現(xiàn)的次數(shù),達(dá)到一定的門限即觸發(fā)陷入。3)多狀態(tài)事件:被監(jiān)視的變量值在多個(gè)狀態(tài)之間轉(zhuǎn)換,例如:指示燈ON/OFF轉(zhuǎn)換,主機(jī)電源開、關(guān)等,這類事件用整型變量指示其所處的狀態(tài)。4)陷入決策問題:決定那些事件可以引起陷入;另外陷入的報(bào)文應(yīng)該包含那些數(shù)據(jù)。如果陷入是基于MIB,則可陷入的事件就已經(jīng)確定了,甚至可以寫到文檔中;如果基于企業(yè)的MIB,則要根據(jù)企業(yè)的標(biāo)準(zhǔn)或設(shè)備的特點(diǎn)決定那些事件可以引入陷入。(陷入一般分為不同的優(yōu)先級(jí))5)陷入的管理模式:陷入制導(dǎo)輪詢(見P37):管理站啟動(dòng)或每隔一定時(shí)間,用Get操作輪詢一遍所有代理,得到某些關(guān)鍵的信息或基本性能統(tǒng)計(jì)數(shù)據(jù),得到數(shù)據(jù)后停止輪詢;而代理進(jìn)程負(fù)責(zé)在必要的時(shí)間向管理站報(bào)告異常事件,并通過陷入操作傳給管理站,得到異常事件的報(bào)告,管理站可以查詢有關(guān)的代理,以便得到更具體的信息,對(duì)事件的原因作進(jìn)一步的分析。6)陷入的記錄:記錄信息;信息收集時(shí)可能有延遲。6.4.2擴(kuò)展代理支持的陷入1)擴(kuò)展代理實(shí)現(xiàn)陷入的兩個(gè)函數(shù):SnmpExtensionInit,SnmpExtensionTrap.例子(P194):主要功能:調(diào)用CreatEvent函數(shù)產(chǎn)生一個(gè)事件,用于支持的陷入句柄通知SNMP服務(wù);如果產(chǎn)生事件失敗則函數(shù)SnmpExtensionInit返回FALSE,表示無(wú)法初始化;函數(shù)SnmpExtensionTrap為一個(gè)陷入收集數(shù)據(jù),這些數(shù)據(jù)來自全局變量,經(jīng)該函數(shù)的參數(shù)傳遞給SNMP服務(wù);靜態(tài)變量fCleanUp的作用是區(qū)分兩種操作:提供陷入數(shù)據(jù)或清除前次發(fā)送陷入占用的緩沖區(qū)。6.4.3陷入檢測(cè)陷入檢測(cè)主要包括:用什么檢測(cè)陷入和怎樣檢測(cè)陷入。1)事件檢測(cè)和數(shù)據(jù)收集擴(kuò)展代理完成事件檢測(cè)和數(shù)據(jù)收集外部進(jìn)程完成事件檢測(cè),擴(kuò)展代理完成數(shù)據(jù)收集擴(kuò)展代理完成事件檢測(cè),外部進(jìn)程完成數(shù)據(jù)收集,然后通過進(jìn)程間通信機(jī)制把數(shù)據(jù)傳送給擴(kuò)展代理。外部進(jìn)程完成事件檢測(cè)和數(shù)據(jù)收集,然后通過進(jìn)程間通信機(jī)制把數(shù)據(jù)傳送給擴(kuò)展代理。2)事件檢測(cè)方法:通常的檢測(cè)方法是主動(dòng)輪詢。擴(kuò)展代理生成一個(gè)線程,經(jīng)常檢查特殊條件是否出現(xiàn),檢測(cè)到一個(gè)事件后就收集有關(guān)數(shù)據(jù),并通知擴(kuò)展代理發(fā)送陷入。主動(dòng)輪詢:由SetTimer或SetWaitableTimer生成的定時(shí)器,擴(kuò)展代理在一定時(shí)間間隔上檢查陷入事件。(可能會(huì)有延遲,輪詢信息可能占用大量的網(wǎng)絡(luò)帶寬,影響正常的網(wǎng)絡(luò)通信)被動(dòng)等待:有一種觸發(fā)機(jī)制,在可陷入事件時(shí)由監(jiān)視線程發(fā)出通知。喚醒擴(kuò)展代理發(fā)送陷入報(bào)文。(必須支持通知機(jī)制)Microsoft的管理應(yīng)用程序接口(MGMTAPI.DLL)有7各函數(shù)它們的功能見P177.6.5.1MicrosoftMIB編譯器:MicrosoftMIB編譯器MIBCC.EXE是支持管理應(yīng)用的附屬工具,它的作用是把人工可讀的數(shù)據(jù)格式,產(chǎn)生二進(jìn)制文件MIB.BIN,由管理應(yīng)用程序使用。其基本格式見P197-198.6.5.2管理API頭文件1)頭文件:管理API使用的常數(shù)和數(shù)據(jù)類型包含在頭文件MGMTAPI.H中:#include<snmp.h>#include<winsock.h>#ifdef–cplusplus…#endif6.5SNMP管理應(yīng)用程序接口2)數(shù)據(jù)類型定義:Typedefstruct–SNMP_MGR_SESSION{ SockDesc fd;//由WinsockAPI返回的網(wǎng)絡(luò)管套描述符 struct sockaddrdestAddr,//網(wǎng)絡(luò)連接的遠(yuǎn)方地址 LPSTR community,//團(tuán)體名 INT timeout,//打開管套或等待響應(yīng)超值 INT retries,//重新發(fā)送次數(shù) AsnInteger requestID,//請(qǐng)求標(biāo)識(shí) char recvBuf[RECVBUFSIZE],//用于存儲(chǔ)響應(yīng)報(bào) 文的緩沖區(qū) }SNMP-MGR-SESSION,*LPSNMP-MGR-SESSION; 6.5.3管理API功能管理API由7個(gè)函數(shù)組成:1)SnmpMgrOpen:在發(fā)送請(qǐng)求之前調(diào)用該函數(shù),打開與SNMP代理的連接。LPSNMP_MGR_SESSIONSNMP_FUNC_TYPESnmpMgrOpen(INLPSTRlpAgentAddress,//Name/addressoftargetagentINLPSTRlpAgentCommunity,//CommunityfortargetagentININTnTimeOut,//Commtime-outinmillisecondsININTnRetries//Commtime-out/retrycount);如果建立連接成功,函數(shù)返回指針LPSNMP_MGR_SESSION結(jié)構(gòu)指針;如果失敗,返回空指針。2)SnmpMgrClose:這個(gè)函數(shù)關(guān)閉到SNMP代理的連接管套BOOLSNMP_FUNC_TYPESnmpMgrClose(INLPSNMP_MGR_SESSIONsession//SNMPsessionpointer);如果連接關(guān)閉,該函數(shù)返回TRUE,否則返回FALSE.3)SnmpMgrRequest:用這個(gè)函數(shù)可以發(fā)送Get,GetNext和Set請(qǐng)求報(bào)文。該函數(shù)是異步操作,在接收到響應(yīng)或超時(shí)后才返回結(jié)果。SNMPAPISNMP_FUNC_TYPESnmpMgrRequest( LPSNMP_MGR_SESSIONsession,//SNMPsessionpointerINBYTErequestType,//Get,GetNext,orSetINOUTRFC1157VarBindList*variableBindings,//Variblebindings AsnInteger*errorStatus,//Resulterrorstatus AsnInteger*errorIndex//Resulterrorindex);如果請(qǐng)求成功,函數(shù)返回TRUE,并接受到響應(yīng)報(bào)文;否則返回FALSE。注意:P176typedefAsnObjectIdentifierAsnObjectName;typedefAsnAnyAsnObjectSyntax;4)SnmpMgrStrToOid:該函數(shù)利用MIB.BIN中的數(shù)據(jù)把對(duì)象標(biāo)識(shí)符轉(zhuǎn)變成等價(jià)的AsnObjectIdentifier類型。函數(shù)的原型是:BOOLSNMP_FUNC_TYPESnmpMgrStrToOid( LPSTRstring,//OIDstringtobeconverted AsnObjectIdentifier*oid//OIDinternalepresentation);例如:設(shè):*pString=“system.sysdescr”,或“..”,或“..2.1.system.sysDescr”則snmpMgrStrToOid(pString,&oid),則結(jié)果是:iod.idlength=9;oid.ids=1361211105)SnmpMgrOidToStr:該函數(shù)利用MIB.BIN中的數(shù)據(jù)把AsnObjectIdentifier類型轉(zhuǎn)變成等價(jià)對(duì)象標(biāo)識(shí)符類型。函數(shù)的原型是:SnmpMgrOidToStr( AsnObjectIdentifier*oid,//OIDtobeconverted LPSTRstring//OIDstringrepresentation);例如:設(shè):iod.idlength=9;oid.ids=136121110則snmpMgrOidToStr(&oid,pString),則結(jié)果是:*pString=“system.sysdescr”6)SnmpMgrGetTrap:SNMP接收的陷入數(shù)據(jù)都交給

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論