![SNMP4J介紹_計(jì)算機(jī)軟件及應(yīng)用_IT計(jì)算機(jī)_專業(yè)資料_第1頁](http://file2.renrendoc.com/fileroot_temp3/2021-11/22/eed99833-03ba-4c86-8448-a99225c16164/eed99833-03ba-4c86-8448-a99225c161641.gif)
![SNMP4J介紹_計(jì)算機(jī)軟件及應(yīng)用_IT計(jì)算機(jī)_專業(yè)資料_第2頁](http://file2.renrendoc.com/fileroot_temp3/2021-11/22/eed99833-03ba-4c86-8448-a99225c16164/eed99833-03ba-4c86-8448-a99225c161642.gif)
![SNMP4J介紹_計(jì)算機(jī)軟件及應(yīng)用_IT計(jì)算機(jī)_專業(yè)資料_第3頁](http://file2.renrendoc.com/fileroot_temp3/2021-11/22/eed99833-03ba-4c86-8448-a99225c16164/eed99833-03ba-4c86-8448-a99225c161643.gif)
![SNMP4J介紹_計(jì)算機(jī)軟件及應(yīng)用_IT計(jì)算機(jī)_專業(yè)資料_第4頁](http://file2.renrendoc.com/fileroot_temp3/2021-11/22/eed99833-03ba-4c86-8448-a99225c16164/eed99833-03ba-4c86-8448-a99225c161644.gif)
![SNMP4J介紹_計(jì)算機(jī)軟件及應(yīng)用_IT計(jì)算機(jī)_專業(yè)資料_第5頁](http://file2.renrendoc.com/fileroot_temp3/2021-11/22/eed99833-03ba-4c86-8448-a99225c16164/eed99833-03ba-4c86-8448-a99225c161645.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、snmp4j介紹一、snmp4j 介紹snmp4j是一個(gè)用java來實(shí)現(xiàn)snmp(簡單網(wǎng)絡(luò)管理協(xié)議)協(xié)議的開源項(xiàng)目.它支持以命令 行的形式進(jìn)行管理與響應(yīng)osnmp4j是純面向?qū)ο笤O(shè)計(jì)與snmp+(用c+實(shí)現(xiàn)snmpvl/v2c/v3) 相類似。snmp4j api提供以f下特性:支持 md5 和 sha 驗(yàn)證,des, 3des,aes128、aes192 和 aes256 加密的 snmpv30支持mpvl,mpv2c和mpv3,帶執(zhí)行的可阻塞的信息處理模塊。全部pdu格式??勺枞膫鬏斖?fù)?。支持upd、tcp、tls o可阻塞的超吋模塊。同步和異步請求。命令發(fā)生器以及命令應(yīng)答器的支持?;?/p>
2、apache license的開源免費(fèi)。java 1.4.1或更高版本(2.0或更高版本需要jdkl.6及以上的支持)。基于log4j記錄日志。使用getbulk實(shí)現(xiàn)row-based的冇效的異步表格獲取。支持多線程。二、snmp4j重要的類和接口介紹2.1 snmp 類snmp類:該類是snmp4j中最為核心的類。負(fù)責(zé)snmp報(bào)文的接受和發(fā)送。它提供了 發(fā)送和接收pdu的方法,所冇的pdu類型都nj以采川同步或者異步的方式被發(fā)送2.2、pdu 類和 scopedpdu 類該類是snmp報(bào)文單元的抽象,其中pdu類適用于snmpvl和snmpv2c。scopedpdu 類繼承于pdu類,適用于
3、snmpv3o2.3 target 接口和 communitytarget 類以及 usertarget 類對應(yīng)于snmp代理的地址信息,包括ip地址和端口號(hào)(161)。其中target接口適用于 snmpvl 和 snmpv2co communitytarget 類實(shí)現(xiàn)了 target 接口 ,用于 snmpvl 和 snmpv2c 這 兩個(gè)版本,usertarget類實(shí)現(xiàn)了 target接口,適用于snmpv3®2.4、transportmapping 接口該接口代表了 snmp4j所使用的傳輸層協(xié)議。這也是snmp4j -大特色的地方。按照rfc 的規(guī)定,snmp是只使川udp
4、作為傳輸層協(xié)議的。而snmp4j支持管理端和代理端使用udp或者tcp進(jìn)行傳輸。該接口冇兩個(gè)了接口。2.5、snmp、target、pdu 三者的關(guān)系target代表遠(yuǎn)程設(shè)備或者遠(yuǎn)程實(shí)體、pdu代表管理端同target通信的數(shù)據(jù),snmp就代 表管理者管理功能(其實(shí)就是數(shù)據(jù)的收發(fā))的具體執(zhí)行者。打個(gè)比方:target就是你遠(yuǎn)方的戀人,pdu就是你們之間傳遞的情書、而snmp就是負(fù) 責(zé)幫你寄信收信的郵差。三、snmp4j的兩種消息發(fā)送模式snmp4j支持兩種消息發(fā)送模式:同步發(fā)送模式和異步發(fā)送模式。同步發(fā)送模式也稱阻塞模式。當(dāng)管理端發(fā)送出一條消息之后,線程會(huì)被阻塞,豈到收到 對方的回應(yīng)或者時(shí)間超
5、時(shí)。同步發(fā)送模式編程較為簡單,但是不適用于發(fā)送廣播消息。界步發(fā)送模式也稱非阻塞模式。當(dāng)程序發(fā)送一條消息之后,線程將會(huì)繼續(xù)執(zhí)行,當(dāng)收到 消息的回應(yīng)的時(shí)候,程序會(huì)對消息作出相應(yīng)的處理。要實(shí)現(xiàn)界步發(fā)送模式,需要實(shí)例化一個(gè) 實(shí)現(xiàn)了 responselistener 接口的類的對象。responselistener 接口 屮有一個(gè)名為 on response 的函數(shù)。這是一個(gè)回調(diào)函數(shù),當(dāng)程序收到響應(yīng)的時(shí)候,會(huì)自動(dòng)調(diào)用該函數(shù)。由該函數(shù)完成對 響應(yīng)的處理。四、使用snmp4j實(shí)現(xiàn)管理端的步驟該部分說明了利用snmp4j編寫snmp管理端的人致過程,讀者在閱讀z后會(huì)對snmp4j 有一個(gè)宏觀上的認(rèn)識(shí)。在附錄部
6、分,作者給出了一個(gè)用snmp4j 發(fā)管理站的樣例程序,如 果有進(jìn)一步的需要,請參考附錄部分。4.1、初始化 、明確snmp在傳輸層所使用的協(xié)議一般情況卜我們都使用使用udp協(xié)議作為snmp的傳輸層協(xié)議,所以我們需要 實(shí)例化的是個(gè) defaultudptransportmapping 接口對象; 、實(shí)例化一個(gè)snmp對象在此過程中,我們需要將1中實(shí)例化的defaultudptransportmapping接口的對彖作 為參數(shù),穿snmp類的構(gòu)造函數(shù)屮。另外,如果實(shí)現(xiàn)的snmpv3協(xié)議,我們還需要設(shè)置安全 機(jī)制,添加安全用戶等等; 、監(jiān)聽snmp消息在此,我們可以調(diào)用剛剛實(shí)例化的defaultud
7、ptransportmapping的接口對象的listen 方法,讓程序監(jiān)聽snmp消息:4.2、構(gòu)造發(fā)送冃標(biāo)如果實(shí)現(xiàn)的是snmpv2c或者說snmpvl,需要實(shí)例化一個(gè)communitytarget對象。如果 實(shí)現(xiàn)的是snmpv3程序,則需要實(shí)例化一個(gè)usertarget對象。之后,我們還需要對實(shí)例化的對象做一些設(shè)直。如果是communitytarget的對象,則需 要設(shè)置使用的snmp版木,重傳時(shí)間和等待時(shí)延。如果是usertarget對象,我們不僅需要設(shè) 置版本、重傳時(shí)間、等待時(shí)延,還需要設(shè)置安全級別和安全名稱。4.3、構(gòu)造發(fā)送報(bào)文如果發(fā)送的是snmpv2c或者說snmpvl的報(bào)文,我們
8、需要實(shí)例化一個(gè)pdu類的對象。 如果發(fā)送的是snmpv3的報(bào)文,我們則需要實(shí)例化一個(gè)scopedpdu類的對象。z后,我們 還需要生成一個(gè)oid對象,其屮包含了我們所需要獲取的snmp對象在mib庫中的id。然 后我們需要將oid和之前牛成的pdu対象或者是scopedpdu對象綁定,并且設(shè)置pdu的報(bào) 文類型(五種snmp報(bào)文類型之一)。4.4、構(gòu)造響應(yīng)監(jiān)聽對象(異步模式)當(dāng)使用界步模式的時(shí)候,我們需要實(shí)例化一個(gè)實(shí)現(xiàn)了 responselistener接口的對象,作 為響應(yīng)消息的監(jiān)聽對彖。在構(gòu)造該對彖的過程中,我們需耍重寫responselistener的 onresponse函數(shù),該函數(shù)是
9、一個(gè)回調(diào)函數(shù),用來處理程序收到響應(yīng)后的一些操作。4.5、發(fā)送消息當(dāng)所有上述操作都設(shè)置完畢之后,就可以發(fā)送消息了。同步模式和異步模式發(fā)送消息調(diào) 用的函數(shù)名字均為send,但是兩個(gè)函數(shù)所需參數(shù)不一樣。同步模式的參數(shù)僅為4.2和4.3屮 構(gòu)造的目標(biāo)對象和報(bào)文對象,而異步模式還需要4.4中構(gòu)造的監(jiān)聽對象。同步模式發(fā)送消息后便等待響應(yīng)的到達(dá),至ij達(dá)之后會(huì)返回一個(gè)responseevent対象,該 對象中包含了響應(yīng)的相應(yīng)信息。異步模式發(fā)送消息z后便會(huì)繼續(xù)執(zhí)行,當(dāng)收到響應(yīng)消息時(shí)便會(huì)調(diào)用監(jiān)聽對象的 onresponse函數(shù)。該函數(shù)中的語句便是我們對響應(yīng)的處理五、使用snmp4j實(shí)現(xiàn)管理端的編程實(shí)現(xiàn) 、設(shè)定遠(yuǎn)
10、程實(shí)體snmp4j中,用communitytarget 象來表示遠(yuǎn)程實(shí)體(要進(jìn)行snmp消息通信的遠(yuǎn) 程主機(jī),使用snmp的v2版本) 、指定遠(yuǎn)程實(shí)體的地址snmp4j中使用address接口對彖來表示,address對象需要通過實(shí)現(xiàn)該接口的類的 對象向上轉(zhuǎn)型來實(shí)例化 、通過communitytarget以及其父接口中提供的setxx方法來設(shè)定遠(yuǎn)程實(shí)體的屬性, 如設(shè)定遠(yuǎn)程實(shí)體的snmp共同體屬性、遠(yuǎn)程實(shí)體的地址、超時(shí)時(shí)間、重傳次數(shù)、snmp版本 等 、設(shè)定使用的傳輸協(xié)議snmp4j中,川transportmapping接口的對彖來表示傳輸協(xié)議(tcp/udp) 、調(diào)用transportmapp
11、ing中的listen。方法,啟動(dòng)監(jiān)聽進(jìn)程,接收消息,由于該監(jiān)聽進(jìn) 程是守護(hù)進(jìn)程,最后應(yīng)調(diào)用close()方法來釋放該進(jìn)程 、創(chuàng)建snmp対象,用于發(fā)送請求pdua、創(chuàng)建請求pdu,即創(chuàng)建pdu類的對象,調(diào)用pdu類中的add()方法綁定要查詢 的oid,調(diào)用pdu中的settype()方法來確定該pdu的類型(與snmp中五種操作想對應(yīng))b、通過 pdu 的構(gòu)造方法 public snmp(transportmapping transportingmapping),或 者其他構(gòu)造方法來生成 pdu,z后調(diào)用 resopnseevent send(pdu pdu,target target)發(fā)
12、送 pdu, 該方法返冋一個(gè)responseevent對象 、通過responseevent對彖來獲得snmp請求的應(yīng)答pdu,方法:public pdu getresp on se() 、通過應(yīng)答pdu獲得mib信息(之前綁定的oid的值),方法:variblebinding get (int index)5.1. 獲取遠(yuǎn)程計(jì)算機(jī)的名稱復(fù)制代碼1 package me.gacl.snmp;22 import java.iooexception;3 import org.snmp4j.communitytarget;4 import org.snmp4j.pdu;5 import org.sn
13、mp4j.scopedpdu;6 import org.snmp4j.snmp;7 import org.snmp4j.target;8 import org.snmp4j.transportmapping;10 import org.snmp4j.usertarget;11 import org.snmp4j.event.responseevent;12 import org.snmp4j.event.responselistener;13 import org.snmp4jmpmpv3;14 import org.snmp4j.mp.snmpconstants;15 import org.
14、snmp4j.security.authmd5;16 import org.snmp4j.security.privdes;17 import org.snmp4j.security.securitylevel;18 import org.snmp4jsecuritysecuritymodels;19 import org.snmp4j.security.securityprotocols;20 import org.snmp4j.security.usm;21 import org.snmp4j.security.usmuser;22 import org.snmp4jsmiaddress;
15、23 import org.snmp4j.smi.genericaddress;24 import org.snmp4j.smi.oid;25 import org.snmp4j.smi.octetstring;26 import org.snmp4j.smi.variablebinding;27 import org.snmp4j.transport.defaultudptransportmapping;2829 public class snmp4jfirstdemo 3031 private snmp snmp = null;32 private int version ;3334 pu
16、blic snmp4jfirstdemo(jnt version) 35try 3637383940this.version = versi on;transportmapping transport = new defaultudptransportmapping(); snmp = new sn mp(tra nsport);if (version = snmpconstants.version3) /設(shè)置安全模式41usm usm = new usm(securityprotocols.getlnstance(),newoctetstring(mpv3.createlocalengine
17、ld(), 0);424344454647484950securitymodels.getlnstance().addsecuritymodel(usm);/開始監(jiān)聽消息tran sportisten(); catch (loexception e) e.printstacktrace();51 public void sendmessage(boolean syn, final boolean bro, pdu pdu, string addr)52 throws loexception 535455565758/生成冃標(biāo)地址對象address target address = gen er
18、icaddress.parse(addr);target target = null;if (version = snmpconstants.version3) /添加用戶snmpgetusm().adduser(new octetstring(,md5des,),new usmuser(newoctetstring(”md5des”),authmd5.id,new octetstring(”md5desuserauthpassword”),privdes.id, new octetstring("md5desuserrrivpassword");5960616263646
19、56667686970717273747576777879808182838485868788899091target = new usertarget();設(shè)置安全級別(usertarget) target).setsecuritylevel(securitylevel.auth_priv);(usertarget) target).setsecurityname(new octetstring("md5des"); target.setversion(s nmpc on stants.versio n3); else target = new communitytarg
20、et();if (version = snmpconstants.version 1) target.setversion (snmpconstants.versionl); (communitytarget) target).setcommunity(new octetstring("public"); else target.setversi on(sn mpc onstan ts.versi on 2c);(communitytarget) target).setcommunity(new octetstring("public");/目標(biāo)對象相關(guān)
21、設(shè)置 target.setaddress(targetaddress); target.setretries(s);target.settimeout(looo);if(!syn)/發(fā)送報(bào)文并fl接受響應(yīng)responseevent response = snmp.send(pdu, target);/處理響應(yīng)system.out.println("synchronize(同步)messagef消息)from(來自)"+ response.getpeeraddress() + "rn"+,request(發(fā)送的請求):"+ response.ge
22、trequest() + "rn"+"response(返回的響應(yīng)):"+ resp on se.getresponse();*輸出結(jié)果:* synchronize(同步)message(消息)from(來自)3161request)發(fā)送的請求):getrequestld=632977521,errorstatus=success(0), errorlndex=0, vbs..0 = null92 response!返回的響應(yīng)):responserequestld=632977521,errorstatu
23、s=success(0), errorlndex=0, vbs..0 = win-667h6ts3u3793949596979899100101102103104105106ii107求):108109110iii112113114115116117118119120121122123124125126127128129130131132133134true, pdu,*/ else /設(shè)置監(jiān)聽對彖responselistener listener = new responselistener() public void on resp on se(resp on
24、seeve nt eve nt) if (bro.equals(false) (snmp) eventgetsource().cancel(eventgetrequest(),this);/處理響應(yīng)pdu request = event.getrequest();pdu response = event.getresponse();system.out.println(nasynchronise(異步)message(消息)from(來自)+ event.getpeeraddress() + "rn "+"request(發(fā)送的請 + request+ "
25、;rn"+"response(返回的響應(yīng)):"+ response);;/發(fā)送報(bào)文snmp.send(pdu, target, null, listener);public static void main(string args) /snmp的三個(gè)版本號(hào)/int ver 3 = sn mpc onstan ts.version3;int ver2c = sn mpc onstan ts.versi on 2c;/int verl = snmpc onstan ts.versionl;snmp4jfirstdemo manager = new snmp4jfirs
26、tdemo(ver2c);/構(gòu)造報(bào)文pdu pdu = new pdu();/pdu pdu = new scopedpdu();/設(shè)置要獲取的對象id,這個(gè)oid代表遠(yuǎn)程計(jì)算機(jī)的名稱oid oids = new oid("..0”);pdu.add (new variablebi ndin g(oids);設(shè)置報(bào)文類型pdu.settype(pdu.get);/(scopedpdu) pdu).setcontextname(new octetstring("priv"); try/發(fā)送消息其中最后一個(gè)是想要發(fā)送的目標(biāo)地址/ma nag
27、er.sendmessage(false,hudp:29/161n);/29 linux 服務(wù)器135 managers en dmessage(false,true, pdu,"udp:3yi61");/33 winserver2008 服務(wù)器136 catch (loexception e) 137 e.pri ntstacktrace();138 139 140復(fù)制代碼5.2、獲得木機(jī)的信息復(fù)制代碼1 package me.gacl.snmp;22 import java.iooe
28、xception;3 import org.snmp4jcommunitytarget;4 import org.snmp4j.pdu;5 import org.snmp4jsnmp;6 import org.snmp4jtransportmapping;7 import org.snmp4j.event.responseevent;8 import org.snmp4jmp.snmpconstants;9 import org.snmp4jsmi.address;10 import org.snmp4jsmigenericaddress;11 import org.snmp4j.smi.oi
29、d;12 import org.snmp4j.smi.octetstring;13 import org.snmp4j.smi.variablebinding;14 import org.snmp4j.transport.defaultudptransportmapping;1615 /*16 * <p>classname: getoid<p>17 * <p>description:獲得木機(jī)的信息<p>18 * author xudp19 * version 1.0 v20 * createtime 2014-9-15 下午 04:45:1221
30、 */22 public class getoid 2523 public static void main(string args) throws exception2724 try25 設(shè)定 communitytarget26 communitytarget mytarget=new communitytarget();27 定義遠(yuǎn)程主機(jī)的地址28 /address deviceadd = genericaddress.parse(l,udp:33/161,');定義本機(jī)的地址address localadd = genericaddress.parse(,u
31、dp:localhost/161,1);設(shè)定遠(yuǎn)程主機(jī)的地址/mytarget.setaddress(deviceadd);設(shè)定木地主機(jī)的地址myta rget.setad d ress(loca ladd);設(shè)置snmp共同體mytarget.setcommunity(new octetstringpublic”);設(shè)置超時(shí)重試次數(shù)mytarget.setretries(2);設(shè)置超時(shí)的時(shí)間mytarget.settimeout(5*60);設(shè)置使用的snmp版本mytarget.setversio n(sn mpc on stants.versio n2c);3334353637383940
32、41424344454647設(shè)定采取的協(xié)議transportmapping transport = new defaultudptransportmapping();設(shè)定彳&4849輸協(xié)議為udp29 調(diào)川transportmapping屮的listen。方法,啟動(dòng)監(jiān)聽進(jìn)程,接收消息,由 于該監(jiān)聽進(jìn)程是守護(hù)進(jìn)程,最后應(yīng)調(diào)用close()方法來禪放該進(jìn)程tran sport.liste n();創(chuàng)建snmp對象,用于發(fā)送請求pdusnmp protocol = new snmp(transport);創(chuàng)建請求pdu,獲取mibpdu request = new pdu();調(diào)用的add方法綁定要杳詢的oidrequest.add(new variablebinding(new 0id("."
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 外研版高中英語選擇性必修第四冊UNIT3 Period5課件
- 2024-2027年中國無線數(shù)傳通信系統(tǒng)行業(yè)發(fā)展監(jiān)測及投資戰(zhàn)略研究報(bào)告
- 2025年半閉口式三輥型材軋機(jī)項(xiàng)目投資可行性研究分析報(bào)告
- 加入校衛(wèi)隊(duì)申請書
- 教師升職申請書
- 2025年直接栗棕行業(yè)深度研究分析報(bào)告
- 機(jī)器人產(chǎn)業(yè)發(fā)展趨勢及投資機(jī)會(huì)研究報(bào)告
- 四川省成都市2024年七年級《英語》上冊期中試卷與答案(C卷)
- 湖南省長沙市2024年七年級《語文》下冊期末試卷與參考答案
- 四川省簡陽市2022年七年級《語文》下冊期中試卷與參考答案
- Petrel中文操作手冊(1-3)
- 整體租賃底商運(yùn)營方案(技術(shù)方案)
- 新人教版小學(xué)數(shù)學(xué)五年級下冊教材解讀
- 結(jié)婚函調(diào)報(bào)告表
- 象數(shù)療法好療效
- A320系列飛行訓(xùn)練課程:電子飛行儀表系統(tǒng)概況
- 黃土地質(zhì)災(zāi)害類型及其危害性評估
- 交際德語教程第二版A1Studio[21] 課后習(xí)題參考答案
- 部編版道法三下知識(shí)點(diǎn)匯總【需要背誦】
- 氣割、電氣焊作業(yè)的應(yīng)急救援預(yù)案
- 超級精美PPT模版美國經(jīng)典ppt模板(通用珍藏版2)
評論
0/150
提交評論