使用snmp4j实现Snmp功能

上传人:小*** 文档编号:159587604 上传时间:2022-10-09 格式:DOC 页数:7 大小:70.50KB
收藏 版权申诉 举报 下载
使用snmp4j实现Snmp功能_第1页
第1页 / 共7页
使用snmp4j实现Snmp功能_第2页
第2页 / 共7页
使用snmp4j实现Snmp功能_第3页
第3页 / 共7页
资源描述:

《使用snmp4j实现Snmp功能》由会员分享,可在线阅读,更多相关《使用snmp4j实现Snmp功能(7页珍藏版)》请在装配图网上搜索。

1、使用实现功能一篇有关的文章已经是一年前写的了,因为工作等各种原因,一直没有继续下去。但是不管怎么样,包括,虽然速度有点慢,我还是会坚持学习并将心得写下去。),里的各种功能。首上一篇文章讲了的一些基本概念(详情请查看这里接下来,我们使用的开源组件来实现一下先是上一篇文章中的那个例子。即通过获取机器名。的包可以在它的官方网站上下载,我就不啰嗦了。接下来直接贴代码:importjava.io.IOException;importjava.util.Vector;importorg.snmp4j.CommunityTarget;importorg.snmp4j.PDU;importorg.snmp4j

2、.Snmp;importorg.snmp4j.TransportMapping;importorg.snmp4j.event.ResponseEvent;importorg.snmp4j.mp.SnmpConstants;importorg.snmp4j.smi.Address;importorg.snmp4j.smi.GenericAddress;importorg.snmp4j.smi.OID;importorg.snmp4j.smi.OctetString;importorg.snmp4j.smi.VariableBinding;importorg.snmp4j.transport.De

3、faultUdpTransportMapping;publicclassSnmpUtilprivateSnmpsnmp=null;privateAddresstargetAddress=null;publicvoidinitComm()throwsIOException/设置Agent方的IP和端口targetAddress=GenericAddress.parse(udp:127.0.0.1/161);TransportMappingtransport=newDefaultUdpTransportMapping();snmp=newSnmp(transport);transport.list

4、en();publicvoidsendPDU()throwsIOException/设置targetCommunityTargettarget=newCommunityTarget();target.setCommunity(newOctetString(public);target.setAddress(targetAddress);/通信不成功时的重试次数target.setRetries(2);/超时时间target.setTimeout(1500);target.setVersion(SnmpConstants.version1);/创建PDUPDUpdu=newPDU();pdu.a

5、dd(newVariableBinding(newOID(newint1,3,6,1,2,1,1,5,0);/MIB的访问方式pdu.setType(PDU.GET);/向Agent发送PDU,并接收ResponseResponseEventrespEvnt=snmp.send(pdu,target);/解析Responseif(respEvnt!=null&respEvnt.getResponse()!=null)VectorrecVBs=respEvnt.getResponse().getVariableBindings();for(inti=0;irecVBs.size();i+)Var

6、iableBindingrecVB=recVBs.elementAt(i);System.out.println(recVB.getOid()+:+recVB.getVariable();publicstaticvoidmain(Stringargs)trySnmpUtilutil=newSnmpUtil();util.initComm();util.sendPDU();catch(IOExceptione)e.printStackTrace();上面的这段代码直接参考nmp说明文档中提供的例子,是一个最简单的nmp的应用。只要你的机器里安装了nmp通讯组件,上面的代码应该可以运行成功。在上一

7、个例子中,我们只做了读取的工作,接下来,我们进行一下设置操作,通过Snmp修改读取的机器名。p的默认权限是只读,要想进行写操作,我们必须进行手动的设置。具体的做法是:进入管理工具f服务,找到SnmpService属性安全。在这个选项卡中我们可以看到P的权限是只读,你可以修改P的权限,也可以重新创建一个cmmni。从安全角度来讲当然应该新建一个,在这里为了测试方便,我就直接给P添加写入权限了。接下来就可以编写代码了,我把上面的例子重构一下,代码如下:importjava.io.IOException;importjava.util.Vector;importorg.snmp4j.Communit

8、yTarget;importorg.snmp4j.PDU;importorg.snmp4j.Snmp;importorg.snmp4j.TransportMapping;importorg.snmp4j.event.ResponseEvent;importorg.snmp4j.mp.SnmpConstants;importorg.snmp4j.smi.Address;importorg.snmp4j.smi.GenericAddress;importorg.snmp4j.smi.OID;importorg.snmp4j.smi.OctetString;importorg.snmp4j.smi.

9、VariableBinding;importorg.snmp4j.transport.DefaultUdpTransportMapping;publicclassSnmpUtilprivateSnmpsnmp=null;privateAddresstargetAddress=null;publicvoidinitComm()throwsIOException/设置Agent方的IP和端口targetAddress=GenericAddress.parse(udp:127.0.0.1/161);TransportMappingtransport=newDefaultUdpTransportMap

10、ping();snmp=newSnmp(transport);transport.listen();publicResponseEventsendPDU(PDUpdu)throwsIOException/设置targetCommunityTargettarget=newCommunityTarget();target.setCommunity(newOctetString(public);target.setAddress(targetAddress);/通信不成功时的重试次数target.setRetries(2);/超时时间target.setTimeout(1500);target.se

11、tVersion(SnmpConstants.version1);/向Agent发送PDU,并返回Responsereturnsnmp.send(pdu,target);publicvoidsetPDU()throwsIOException/setPDUPDUpdu=newPDU();pdu.add(newVariableBinding(newOID(newint1,3,6,1,2,1,1,5,0),newOctetString(SNMPTEST);pdu.setType(PDU.SET);sendPDU(pdu);publicvoidgetPDU()throwsIOException/get

12、PDUPDUpdu=newPDU();pdu.add(newVariableBinding(newOID(newint1,3,6,1,2,1,1,5,0);pdu.setType(PDU.GET);readResponse(sendPDU(pdu);publicvoidreadResponse(ResponseEventrespEvnt)/解析Responseif(respEvnt!=null&respEvnt.getResponse()!=null)VectorrecVBs=respEvnt.getResponse().getVariableBindings();for(inti=0;ire

13、cVBs.size();i+)VariableBindingrecVB=recVBs.elementAt(i);System.out.println(recVB.getOid()+:+recVB.getVariable();publicstaticvoidmain(Stringargs)trySnmpUtilutil=newSnmpUtil();util.initComm();util.setPDU();util.getPDU();catch(IOExceptione)e.printStackTrace();如果控制台打出“1.3.6.1.2.1.1.5.0:SNMPTEST”的消息,就说明我

14、们的操作成功啦!前一篇文章讲了如何用实现和的功能,今天讲如何接收。提供了一个抽象类类用于接收,这个类里面有一个必须实现的方法,当接收到,会自动进入这个方法,因此我们可以将对的处理写在这里。下面修改上篇文章例子中的方法:privateTransportMappingtransport=null;publicvoidinitComm()throwsIOException/设置Agent方的IP和端口targetAddress=GenericAddress.parse(udp:192.168.1.1/161);/设置接收trap的IP和端口transport=newDefaultUdpTranspo

15、rtMapping(newUdpAddress(192.168.1.2/162);snmp=newSnmp(transport);CommandRespondertrapRec=newCommandResponder()publicsynchronizedvoidprocessPdu(CommandResponderEvente)/接收trapPDUcommand=e.getPDU();if(command!=null)System.out.println(command.toString();;snmp.addCommandResponder(trapRec);transport.liste

16、n();其中targetAddress扌旨Agent端也就是trap发送,transport扌旨trap接收方,这里就是本机,假设ip是192.168.1.2,但注意不能写成127.0.0.1。因为我们无法得知什么时候会发送,所以需要有一个线程等待的到来,在这个例子中我们使用来等待的到来,具体应用中就要根据实际情况来做了。publicsynchronizedvoidlisten()System.out.println(Waitingfortraps.);trythis.wait();/Waitfortrapstocomeincatch(InterruptedExceptionex)System

17、.out.println(Interruptedwhilewaitingfortraps:+ex);System.exit(-1);publicstaticvoidmain(Stringargs)trySnmpUtilutil=newSnmpUtil();util.initComm();util.listen();catch(IOExceptione)e.printStackTrace();将上面的代码添加到原来的例子中,就可以接收trap了。但是还有一个问题,如何让.发送trap呢?这个也可以使用snp来做。其实发送trap和发送stgt是类似的,同样是发送,只不过类型不一样。我们把前面的例

18、子复制到,在里面添加一段代码:publicvoidsetTrap()throwsIOException/构造TrapPDUPDUpdu=newPDU();pdu.add(newVariableBinding(newOID(.1.3.6.1.2.3377.10.1.1.1.1),newOctetString(SnmpTrap);pdu.setType(PDU.TRAP);sendPDU(pdu);System.out.println(Trapsentsuccessfully.);这里的和a可以自己构造,无需使用特定的值。然后修改地址targetAddress=GenericAddress.parse(udp:192.168.1.2/162);transport=newDefaultUdpTransportMapping();为什么要这样改我也没搞清楚,另外需要修改targ啲rsion即改为target.setVersion(SnmpConstants.version2c)总之rior收不至【j。接下来修改ain函数,调用strap。然后回到本机运行刚才的例子,当控制台显示“Waitingfortraps.”时,运行gr端的例子。此时如果打出我们刚刚设置的的信息,就说明rap的收发成功了。

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!