




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、snmp4j介紹一、snmp4j 介紹snmp4j是一個用java來實現(xiàn)snmp(簡單網(wǎng)絡管理協(xié)議)協(xié)議的開源項目.它支持以命令 行的形式進行管理與響應osnmp4j是純面向?qū)ο笤O計與snmp+(用c+實現(xiàn)snmpvl/v2c/v3) 相類似。snmp4j api提供以f下特性:支持 md5 和 sha 驗證,des, 3des,aes128、aes192 和 aes256 加密的 snmpv30支持mpvl,mpv2c和mpv3,帶執(zhí)行的可阻塞的信息處理模塊。全部pdu格式??勺枞膫鬏斖負?。支持upd、tcp、tls o可阻塞的超吋模塊。同步和異步請求。命令發(fā)生器以及命令應答器的支持?;?/p>
2、apache license的開源免費。java 1.4.1或更高版本(2.0或更高版本需要jdkl.6及以上的支持)。基于log4j記錄日志。使用getbulk實現(xiàn)row-based的冇效的異步表格獲取。支持多線程。二、snmp4j重要的類和接口介紹2.1 snmp 類snmp類:該類是snmp4j中最為核心的類。負責snmp報文的接受和發(fā)送。它提供了 發(fā)送和接收pdu的方法,所冇的pdu類型都nj以采川同步或者異步的方式被發(fā)送2.2、pdu 類和 scopedpdu 類該類是snmp報文單元的抽象,其中pdu類適用于snmpvl和snmpv2c。scopedpdu 類繼承于pdu類,適用于
3、snmpv3o2.3 target 接口和 communitytarget 類以及 usertarget 類對應于snmp代理的地址信息,包括ip地址和端口號(161)。其中target接口適用于 snmpvl 和 snmpv2co communitytarget 類實現(xiàn)了 target 接口 ,用于 snmpvl 和 snmpv2c 這 兩個版本,usertarget類實現(xiàn)了 target接口,適用于snmpv3®2.4、transportmapping 接口該接口代表了 snmp4j所使用的傳輸層協(xié)議。這也是snmp4j -大特色的地方。按照rfc 的規(guī)定,snmp是只使川udp
4、作為傳輸層協(xié)議的。而snmp4j支持管理端和代理端使用udp或者tcp進行傳輸。該接口冇兩個了接口。2.5、snmp、target、pdu 三者的關(guān)系target代表遠程設備或者遠程實體、pdu代表管理端同target通信的數(shù)據(jù),snmp就代 表管理者管理功能(其實就是數(shù)據(jù)的收發(fā))的具體執(zhí)行者。打個比方:target就是你遠方的戀人,pdu就是你們之間傳遞的情書、而snmp就是負 責幫你寄信收信的郵差。三、snmp4j的兩種消息發(fā)送模式snmp4j支持兩種消息發(fā)送模式:同步發(fā)送模式和異步發(fā)送模式。同步發(fā)送模式也稱阻塞模式。當管理端發(fā)送出一條消息之后,線程會被阻塞,豈到收到 對方的回應或者時間超
5、時。同步發(fā)送模式編程較為簡單,但是不適用于發(fā)送廣播消息。界步發(fā)送模式也稱非阻塞模式。當程序發(fā)送一條消息之后,線程將會繼續(xù)執(zhí)行,當收到 消息的回應的時候,程序會對消息作出相應的處理。要實現(xiàn)界步發(fā)送模式,需要實例化一個 實現(xiàn)了 responselistener 接口的類的對象。responselistener 接口 屮有一個名為 on response 的函數(shù)。這是一個回調(diào)函數(shù),當程序收到響應的時候,會自動調(diào)用該函數(shù)。由該函數(shù)完成對 響應的處理。四、使用snmp4j實現(xiàn)管理端的步驟該部分說明了利用snmp4j編寫snmp管理端的人致過程,讀者在閱讀z后會對snmp4j 有一個宏觀上的認識。在附錄部
6、分,作者給出了一個用snmp4j 發(fā)管理站的樣例程序,如 果有進一步的需要,請參考附錄部分。4.1、初始化 、明確snmp在傳輸層所使用的協(xié)議一般情況卜我們都使用使用udp協(xié)議作為snmp的傳輸層協(xié)議,所以我們需要 實例化的是個 defaultudptransportmapping 接口對象; 、實例化一個snmp對象在此過程中,我們需要將1中實例化的defaultudptransportmapping接口的對彖作 為參數(shù),穿snmp類的構(gòu)造函數(shù)屮。另外,如果實現(xiàn)的snmpv3協(xié)議,我們還需要設置安全 機制,添加安全用戶等等; 、監(jiān)聽snmp消息在此,我們可以調(diào)用剛剛實例化的defaultud
7、ptransportmapping的接口對象的listen 方法,讓程序監(jiān)聽snmp消息:4.2、構(gòu)造發(fā)送冃標如果實現(xiàn)的是snmpv2c或者說snmpvl,需要實例化一個communitytarget對象。如果 實現(xiàn)的是snmpv3程序,則需要實例化一個usertarget對象。之后,我們還需要對實例化的對象做一些設直。如果是communitytarget的對象,則需 要設置使用的snmp版木,重傳時間和等待時延。如果是usertarget對象,我們不僅需要設 置版本、重傳時間、等待時延,還需要設置安全級別和安全名稱。4.3、構(gòu)造發(fā)送報文如果發(fā)送的是snmpv2c或者說snmpvl的報文,我們
8、需要實例化一個pdu類的對象。 如果發(fā)送的是snmpv3的報文,我們則需要實例化一個scopedpdu類的對象。z后,我們 還需要生成一個oid對象,其屮包含了我們所需要獲取的snmp對象在mib庫中的id。然 后我們需要將oid和之前牛成的pdu対象或者是scopedpdu對象綁定,并且設置pdu的報 文類型(五種snmp報文類型之一)。4.4、構(gòu)造響應監(jiān)聽對象(異步模式)當使用界步模式的時候,我們需要實例化一個實現(xiàn)了 responselistener接口的對象,作 為響應消息的監(jiān)聽對彖。在構(gòu)造該對彖的過程中,我們需耍重寫responselistener的 onresponse函數(shù),該函數(shù)是
9、一個回調(diào)函數(shù),用來處理程序收到響應后的一些操作。4.5、發(fā)送消息當所有上述操作都設置完畢之后,就可以發(fā)送消息了。同步模式和異步模式發(fā)送消息調(diào) 用的函數(shù)名字均為send,但是兩個函數(shù)所需參數(shù)不一樣。同步模式的參數(shù)僅為4.2和4.3屮 構(gòu)造的目標對象和報文對象,而異步模式還需要4.4中構(gòu)造的監(jiān)聽對象。同步模式發(fā)送消息后便等待響應的到達,至ij達之后會返回一個responseevent対象,該 對象中包含了響應的相應信息。異步模式發(fā)送消息z后便會繼續(xù)執(zhí)行,當收到響應消息時便會調(diào)用監(jiān)聽對象的 onresponse函數(shù)。該函數(shù)中的語句便是我們對響應的處理五、使用snmp4j實現(xiàn)管理端的編程實現(xiàn) 、設定遠
10、程實體snmp4j中,用communitytarget 象來表示遠程實體(要進行snmp消息通信的遠 程主機,使用snmp的v2版本) 、指定遠程實體的地址snmp4j中使用address接口對彖來表示,address對象需要通過實現(xiàn)該接口的類的 對象向上轉(zhuǎn)型來實例化 、通過communitytarget以及其父接口中提供的setxx方法來設定遠程實體的屬性, 如設定遠程實體的snmp共同體屬性、遠程實體的地址、超時時間、重傳次數(shù)、snmp版本 等 、設定使用的傳輸協(xié)議snmp4j中,川transportmapping接口的對彖來表示傳輸協(xié)議(tcp/udp) 、調(diào)用transportmapp
11、ing中的listen。方法,啟動監(jiān)聽進程,接收消息,由于該監(jiān)聽進 程是守護進程,最后應調(diào)用close()方法來釋放該進程 、創(chuàng)建snmp対象,用于發(fā)送請求pdua、創(chuàng)建請求pdu,即創(chuàng)建pdu類的對象,調(diào)用pdu類中的add()方法綁定要查詢 的oid,調(diào)用pdu中的settype()方法來確定該pdu的類型(與snmp中五種操作想對應)b、通過 pdu 的構(gòu)造方法 public snmp(transportmapping transportingmapping),或 者其他構(gòu)造方法來生成 pdu,z后調(diào)用 resopnseevent send(pdu pdu,target target)發(fā)
12、送 pdu, 該方法返冋一個responseevent對象 、通過responseevent對彖來獲得snmp請求的應答pdu,方法:public pdu getresp on se() 、通過應答pdu獲得mib信息(之前綁定的oid的值),方法:variblebinding get (int index)5.1. 獲取遠程計算機的名稱復制代碼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) /設置安全模式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/生成冃標地址對象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();設置安全級別(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");/目標對象相關(guān)
21、設置 target.setaddress(targetaddress); target.setretries(s);target.settimeout(looo);if(!syn)/發(fā)送報文并fl接受響應responseevent response = snmp.send(pdu, target);/處理響應system.out.println("synchronize(同步)messagef消息)from(來自)"+ response.getpeeraddress() + "rn"+,request(發(fā)送的請求):"+ response.ge
22、trequest() + "rn"+"response(返回的響應):"+ resp on se.getresponse();*輸出結(jié)果:* synchronize(同步)message(消息)from(來自)3161request)發(fā)送的請求):getrequestld=632977521,errorstatus=success(0), errorlndex=0, vbs..0 = null92 response!返回的響應):responserequestld=632977521,errorstatu
23、s=success(0), errorlndex=0, vbs..0 = win-667h6ts3u3793949596979899100101102103104105106ii107求):108109110iii112113114115116117118119120121122123124125126127128129130131132133134true, pdu,*/ else /設置監(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);/處理響應pdu request = event.getrequest();pdu response = event.getresponse();system.out.println(nasynchronise(異步)message(消息)from(來自)+ event.getpeeraddress() + "rn "+"request(發(fā)送的請 + request+ "
25、;rn"+"response(返回的響應):"+ response);;/發(fā)送報文snmp.send(pdu, target, null, listener);public static void main(string args) /snmp的三個版本號/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)造報文pdu pdu = new pdu();/pdu pdu = new scopedpdu();/設置要獲取的對象id,這個oid代表遠程計算機的名稱oid oids = new oid("..0”);pdu.add (new variablebi ndin g(oids);設置報文類型pdu.settype(pdu.get);/(scopedpdu) pdu).setcontextname(new octetstring("priv"); try/發(fā)送消息其中最后一個是想要發(fā)送的目標地址/ma nag
27、er.sendmessage(false,hudp:29/161n);/29 linux 服務器135 managers en dmessage(false,true, pdu,"udp:3yi61");/33 winserver2008 服務器136 catch (loexception e) 137 e.pri ntstacktrace();138 139 140復制代碼5.2、獲得木機的信息復制代碼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:獲得木機的信息<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 設定 communitytarget26 communitytarget mytarget=new communitytarget();27 定義遠程主機的地址28 /address deviceadd = genericaddress.parse(l,udp:33/161,');定義本機的地址address localadd = genericaddress.parse(,u
31、dp:localhost/161,1);設定遠程主機的地址/mytarget.setaddress(deviceadd);設定木地主機的地址myta rget.setad d ress(loca ladd);設置snmp共同體mytarget.setcommunity(new octetstringpublic”);設置超時重試次數(shù)mytarget.setretries(2);設置超時的時間mytarget.settimeout(5*60);設置使用的snmp版本mytarget.setversio n(sn mpc on stants.versio n2c);3334353637383940
32、41424344454647設定采取的協(xié)議transportmapping transport = new defaultudptransportmapping();設定彳&4849輸協(xié)議為udp29 調(diào)川transportmapping屮的listen。方法,啟動監(jiān)聽進程,接收消息,由 于該監(jiān)聽進程是守護進程,最后應調(diào)用close()方法來禪放該進程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)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年海洋服務合作協(xié)議書
- 新型保安服務模式的探索與創(chuàng)新計劃
- 班級經(jīng)驗分享會的開展計劃
- 培養(yǎng)學生判斷力與批判性思維計劃
- 增強圖書館開放日活動效果計劃
- 如何應對財務恐懼癥計劃
- 經(jīng)理績效目標規(guī)劃計劃
- 美術(shù)欣賞與文化傳播課程大綱計劃
- 幼兒心理健康關(guān)懷計劃
- 2025年藝術(shù)表演場館服務項目建議書
- 《民用無人駕駛航空器系統(tǒng)分類及分級》考試題庫(含答案)
- Y -S-T 1700-2024 銀礦采選業(yè)綠色工廠評價要求(正式版)
- 中職語文高教版(2023-2024)基礎模塊上冊二《風景談》公開課一等獎創(chuàng)新教學設計
- (高清版)JTGT 5440-2018 公路隧道加固技術(shù)規(guī)范
- 簡單的痛(復雜的評估)-醫(yī)學評估
- 第59講-熱重曲線分析(課件)
- 陪診服務項目計劃書
- 心內(nèi)科康復護理個案
- 招聘會會展服務投標方案(技術(shù)方案)
- 補鈣科學知識講座
- 物業(yè)園區(qū)污漬清潔工作規(guī)程培訓
評論
0/150
提交評論