- 浏览: 904267 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (263)
- J2EE (9)
- Spring (11)
- Hibernate (11)
- Struts (5)
- opensource (19)
- Hadoop (28)
- 架构设计 (8)
- 企业应用 (10)
- SNMP (8)
- SSO (4)
- webservice (11)
- RPC (2)
- 编程语言 (0)
- Java (30)
- Javascript (5)
- NoSQL (11)
- 数据库 (0)
- oracle (8)
- MySQL (3)
- web (1)
- Android (2)
- Linux (15)
- 软件工具 (15)
- 项目构建 (11)
- 测试工具 (2)
- Exception (19)
- 杂谈 (4)
- Groovy (5)
- Nodejs (1)
- MacOSX (4)
最新评论
-
fighhin:
decode(BinaryBitmap,java.util.M ...
条形码/二维码之开源利器ZXing图文介绍 -
u013489005:
追问:楼主,请问有中文文档么?我的邮箱是frankgray@s ...
Java表达式计算引擎:Expr4J -
u013489005:
感谢博主 需要引入的包是import java.io.*;im ...
Java表达式计算引擎:Expr4J -
calosteward:
感谢楼主分享。。 Zxing 我听说过的。__________ ...
条形码/二维码之开源利器ZXing图文介绍 -
u013810758:
judasqiqi 写道感谢楼主!想请问楼主一下这个生成的图片 ...
Java实现二维码QRCode的编码和解码
blog迁移至:http://www.micmiu.com
依赖于第三方SNMP4j来实现snmp的get、walk功能,主要实现了如下功能:
[一]、 snmp get 获取单个OID的值
SnmpGet.java
[二]、snmp get 同步和异步的方式获取多个OID的值
同步实现方法:SnmpGetList.java
异步实现方法:SnmpGetListAsyn.java
[三]、 SnmpWalk.java
[四]、SnmpUtil.java
转载请注明来自:Michael's blog @ http://sjsky.iteye.com
-----------------------------------分 ------------------------------------隔 ------------------------------------线 --------------------------------------
这个util类里有很多其他的东西,这里的示例中只引用了一个方法,创建共同体SnmpUtil.createCommunityTarget(....),当时懒了点 没有贴的,已把SnmpUtil的代码清理了下,贴出了部分
依赖于第三方SNMP4j来实现snmp的get、walk功能,主要实现了如下功能:
- 一、snmp get 获取单个OID的值
- 二、snmp get 同步和异步的方式获取多个OID的值
- 三、snmp walk的方式
- 四、补充SnmpUtil.java代码
[一]、 snmp get 获取单个OID的值
SnmpGet.java
package com.michael.snmp4j; import java.io.IOException; import java.util.Vector; import org.snmp4j.CommunityTarget; import org.snmp4j.PDU; import org.snmp4j.Snmp; import org.snmp4j.event.ResponseEvent; import org.snmp4j.mp.SnmpConstants; import org.snmp4j.smi.OID; import org.snmp4j.smi.VariableBinding; import org.snmp4j.transport.DefaultUdpTransportMapping; import com.michael.snmp4j.util.SnmpUtil; /** * @see http://sjsky.iteye.com * @author Michael */ public class SnmpGet { private static int version = SnmpConstants.version1; private static String protocol = "udp"; private static int port = 161; /** * * @param args */ public static void main(String[] args) { String ip = "192.168.8.254"; String community = "public"; String oidval = "1.3.6.1.2.1.1.3.0"; SnmpGet tester = new SnmpGet(); tester.snmpGet(ip, community, oidval); } @SuppressWarnings("unchecked") private void snmpGet(String ip, String community, String oid) { String address = protocol + ":" + ip + "/" + port; CommunityTarget target = SnmpUtil.createCommunityTarget(address, community, version, 2 * 1000L, 3); DefaultUdpTransportMapping udpTransportMapping = null; Snmp snmp = null; try { PDU pdu = new PDU(); // pdu.add(new VariableBinding(new OID(new int[] // {1,3,6,1,2,1,1,2}))); pdu.add(new VariableBinding(new OID(oid))); pdu.setType(PDU.GET); udpTransportMapping = new DefaultUdpTransportMapping(); udpTransportMapping.listen(); snmp = new Snmp(udpTransportMapping); // 发送同步消息 ResponseEvent response = snmp.send(pdu, target); System.out.println("PeerAddress:" + response.getPeerAddress()); PDU responsePdu = response.getResponse(); if (responsePdu == null) { System.out.println(ip + ":Request time out"); } else { Vector vbVect = responsePdu.getVariableBindings(); System.out.println("vb size:" + vbVect.size()); if (vbVect.size() == 0) { System.out.println(" pdu vb size is 0 "); } else { Object obj = vbVect.firstElement(); VariableBinding vb = (VariableBinding) obj; System.out.println(vb.getOid() + " = " + vb.getVariable()); } } System.out.println("success finish snmp get the oid!"); } catch (Exception e) { System.out.println("SNMP Get Exception:" + e); } finally { if (snmp != null) { try { snmp.close(); } catch (IOException ex1) { snmp = null; } } if (udpTransportMapping != null) { try { udpTransportMapping.close(); } catch (IOException ex2) { udpTransportMapping = null; } } } } }
[二]、snmp get 同步和异步的方式获取多个OID的值
同步实现方法:SnmpGetList.java
package com.michael.snmp4j; import java.io.IOException; import java.util.ArrayList; import java.util.List; import org.snmp4j.CommunityTarget; import org.snmp4j.PDU; import org.snmp4j.Snmp; import org.snmp4j.event.ResponseEvent; import org.snmp4j.mp.SnmpConstants; import org.snmp4j.smi.OID; import org.snmp4j.smi.VariableBinding; import org.snmp4j.transport.DefaultUdpTransportMapping; import com.michael.snmp4j.util.SnmpUtil; /** * @see http://sjsky.iteye.com * @author Michael * */ public class SnmpGetList { private static int version = SnmpConstants.version1; private static String protocol = "udp"; private static int port = 161; /** * * @param args */ public static void main(String[] args) { String ip = "192.168.8.254"; String community = "public"; SnmpGetList tester = new SnmpGetList(); List<String> oidList = new ArrayList<String>(); oidList.add(".1.3.6.1.2.1.1.1.0"); oidList.add(".1.3.6.1.2.1.1.3.0"); oidList.add(".1.3.6.1.2.1.1.5.0"); // synchronous tester.snmpGet(ip, community, oidList); } /** * * @param ipAddress * @param community * @param oid */ private void snmpGet(String ipAddress, String community, List<String> oidList) { String address = protocol + ":" + ipAddress + "/" + port; CommunityTarget target = SnmpUtil.createCommunityTarget(address, community, version, 2 * 1000L, 3); DefaultUdpTransportMapping transport = null; Snmp snmp = null; try { PDU pdu = new PDU(); pdu.setType(PDU.GET); for (String oid : oidList) { pdu.add(new VariableBinding(new OID(oid))); } transport = new DefaultUdpTransportMapping(); transport.listen(); snmp = new Snmp(transport); ResponseEvent response = snmp.send(pdu, target); PDU resPdu = response.getResponse(); if (resPdu == null) { System.out.println(ipAddress + ":Request time out"); } else { System.out.println(" response pdu vb size is " + resPdu.size()); for (int i = 0; i < resPdu.size(); i++) { VariableBinding vb = resPdu.get(i); System.out.println(vb.getOid() + "=" + vb.getVariable()); } } } catch (Exception e) { System.out.println("SNMP GetNext Exception:" + e); } finally { if (snmp != null) { try { snmp.close(); } catch (IOException ex1) { snmp = null; } } if (transport != null) { try { transport.close(); } catch (IOException ex2) { transport = null; } } } } }
异步实现方法:SnmpGetListAsyn.java
package michael.snmp.snmp4j; import java.util.ArrayList; import java.util.List; import michael.snmp.util.SnmpUtil; import org.snmp4j.CommunityTarget; import org.snmp4j.MessageDispatcherImpl; import org.snmp4j.PDU; import org.snmp4j.Snmp; import org.snmp4j.event.ResponseEvent; import org.snmp4j.event.ResponseListener; import org.snmp4j.mp.MPv1; import org.snmp4j.mp.MPv2c; import org.snmp4j.mp.MPv3; import org.snmp4j.mp.SnmpConstants; import org.snmp4j.smi.OID; import org.snmp4j.smi.VariableBinding; import org.snmp4j.transport.DefaultUdpTransportMapping; import org.snmp4j.util.MultiThreadedMessageDispatcher; import org.snmp4j.util.ThreadPool; import org.snmp4j.util.WorkerPool; /** * asynchronous send PDU * @see http://sjsky.iteye.com * @author Michael * */ public class SnmpGetListAsyn { private static int version = SnmpConstants.version1; private static String protocol = "udp"; private static int port = 161; /** * * @param args */ public static void main(String[] args) { String ip = "192.168.8.254"; String community = "public"; SnmpGetListAsyn tester = new SnmpGetListAsyn(); List<String> oidList = new ArrayList<String>(); oidList.add(".1.3.6.1.2.1.1.1.0"); oidList.add(".1.3.6.1.2.1.1.3.0"); oidList.add(".1.3.6.1.2.1.1.5.0"); // asynchronous tester.snmpAsynGet(ip, community, oidList); } /** * * @param ipAddress * @param community * @param oid */ private void snmpAsynGet(String ipAddress, String community, List<String> oidList) { String address = protocol + ":" + ipAddress + "/" + port; CommunityTarget target = SnmpUtil.createCommunityTarget(address, community, version, 2 * 1000L, 3); DefaultUdpTransportMapping transport = null; Snmp snmp = null; try { WorkerPool threadPool = ThreadPool.create("TestSNMPWorkPool", 2); MultiThreadedMessageDispatcher dispatcher = new MultiThreadedMessageDispatcher( threadPool, new MessageDispatcherImpl()); transport = new DefaultUdpTransportMapping(); snmp = new Snmp(dispatcher, transport); snmp.getMessageDispatcher().addMessageProcessingModel(new MPv1()); snmp.getMessageDispatcher().addMessageProcessingModel(new MPv2c()); snmp.getMessageDispatcher().addMessageProcessingModel(new MPv3()); snmp.listen(); PDU pdu = new PDU(); pdu.setType(PDU.GET); for (String oid : oidList) { pdu.add(new VariableBinding(new OID(oid))); } ResponseListener listener = new ResponseListener() { public void onResponse(ResponseEvent event) { ((Snmp) event.getSource()).cancel(event.getRequest(), this); PDU response = event.getResponse(); PDU request = event.getRequest(); System.out.println("[request]:" + request); if (response == null) { System.out.println("[ERROR]: response is null"); } else if (response.getErrorStatus() != 0) { System.out.println("[ERROR]: response status" + response.getErrorStatus() + " Text:" + response.getErrorStatusText()); } else { System.out.println("Received response Success!!!"); for (int i = 0; i < response.size(); i++) { VariableBinding vb = response.get(i); System.out.println(vb); } } } }; snmp.send(pdu, target, null, listener); System.out.println("asynchronous send pdu wait for response..."); } catch (Exception e) { System.out.println("SNMP GetNext Exception:" + e); } } }
[三]、 SnmpWalk.java
package com.michael.snmp4j; import java.io.IOException; import org.snmp4j.CommunityTarget; import org.snmp4j.PDU; import org.snmp4j.Snmp; import org.snmp4j.TransportMapping; import org.snmp4j.event.ResponseEvent; import org.snmp4j.mp.SnmpConstants; import org.snmp4j.smi.Integer32; import org.snmp4j.smi.Null; import org.snmp4j.smi.OID; import org.snmp4j.smi.VariableBinding; import org.snmp4j.transport.DefaultUdpTransportMapping; import com.michael.snmp4j.util.SnmpUtil; /** * SnmpWalk * @see http://sjsky.iteye.com * @author Michael * */ public class SnmpWalk { private static int version = SnmpConstants.version1; private static String protocol = "udp"; private static int port = 161; /** * * @param args */ public static void main(String[] args) { String ip = "192.168.8.254"; String community = "public"; String targetOid = "1.3.6.1.2.1.2.2.1.2"; SnmpWalk tester = new SnmpWalk(); tester.snmpWalk(ip, community, targetOid); } /** * 1)responsePDU == null<br> * 2)responsePDU.getErrorStatus() != 0<br> * 3)responsePDU.get(0).getOid() == null<br> * 4)responsePDU.get(0).getOid().size() < targetOID.size()<br> * 5)targetOID.leftMostCompare(targetOID.size(),responsePDU.get(0).getOid())!=0<br> * 6)Null.isExceptionSyntax(responsePDU.get(0).getVariable().getSyntax())<br> * 7)responsePDU.get(0).getOid().compareTo(targetOID) <= 0<br> * @param ipAddress * @param community * @param oid */ @SuppressWarnings("unused") private void snmpWalk(String ip, String community, String targetOid) { String address = protocol + ":" + ip + "/" + port; OID targetOID = new OID(targetOid); PDU requestPDU = new PDU(); requestPDU.setType(PDU.GETNEXT); requestPDU.add(new VariableBinding(targetOID)); CommunityTarget target = SnmpUtil.createCommunityTarget(address, community, version, 2 * 1000L, 3); TransportMapping transport = null; Snmp snmp = null; try { transport = new DefaultUdpTransportMapping(); snmp = new Snmp(transport); transport.listen(); boolean finished = false; while (!finished) { VariableBinding vb = null; ResponseEvent response = snmp.send(requestPDU, target); PDU responsePDU = response.getResponse(); if (null == responsePDU) { System.out.println("responsePDU == null"); finished = true; break; } else { vb = responsePDU.get(0); } // check finish finished = checkWalkFinished(targetOID, responsePDU, vb); if (!finished) { // Dump response. System.out.println("----"+vb.toString()); System.out.println("----"+vb.getOid().toString()); System.out.println("----"+vb.getVariable().toString()); // Set up the variable binding for the next entry. requestPDU.setRequestID(new Integer32(0)); requestPDU.set(0, vb); } } System.out.println("success finish snmp walk!"); } catch (Exception e) { System.out.println("SNMP walk Exception: " + e); } finally { if (snmp != null) { try { snmp.close(); } catch (IOException ex1) { snmp = null; } } if (transport != null) { try { transport.close(); } catch (IOException ex2) { transport = null; } } } } /** * check snmp walk finish * @param resquestPDU * @param targetOID * @param responsePDU * @param vb * @return */ private boolean checkWalkFinished(OID targetOID, PDU responsePDU, VariableBinding vb) { boolean finished = false; if (responsePDU.getErrorStatus() != 0) { System.out.println("responsePDU.getErrorStatus() != 0 "); System.out.println(responsePDU.getErrorStatusText()); finished = true; } else if (vb.getOid() == null) { System.out.println("vb.getOid() == null"); finished = true; } else if (vb.getOid().size() < targetOID.size()) { System.out.println("vb.getOid().size() < targetOID.size()"); finished = true; } else if (targetOID.leftMostCompare(targetOID.size(), vb.getOid()) != 0) { System.out.println("targetOID.leftMostCompare() != 0"); finished = true; } else if (Null.isExceptionSyntax(vb.getVariable().getSyntax())) { System.out .println("Null.isExceptionSyntax(vb.getVariable().getSyntax())"); finished = true; } else if (vb.getOid().compareTo(targetOID) <= 0) { System.out.println("Variable received is not " + "lexicographic successor of requested " + "one:"); System.out.println(vb.toString() + " <= " + targetOID); finished = true; } return finished; } }
[四]、SnmpUtil.java
package michael.snmp.util; import org.snmp4j.CommunityTarget; import org.snmp4j.UserTarget; import org.snmp4j.mp.SnmpConstants; import org.snmp4j.smi.Address; import org.snmp4j.smi.GenericAddress; import org.snmp4j.smi.OctetString; import org.snmp4j.smi.TcpAddress; import org.snmp4j.smi.UdpAddress; /** * @see http://sjsky.iteye.com * @author michael * */ public class SnmpUtil { public static final int DEFAULT_VERSION = SnmpConstants.version2c; public static final String DEFAULT_PROTOCOL = "udp"; public static final int DEFAULT_PORT = 161; public static final long DEFAULT_TIMEOUT = 3 * 1000L; public static final int DEFAULT_RETRY = 3; /** * 创建共同体对象communityTarget * @param address * @param community * @return CommunityTarget */ public static CommunityTarget createMyDefaultTarget(String address, String community) { Address targetAddress = GenericAddress.parse(address); CommunityTarget target = new CommunityTarget(); target.setCommunity(new OctetString(community)); target.setAddress(targetAddress); target.setVersion(DEFAULT_VERSION); target.setTimeout(DEFAULT_TIMEOUT);// milliseconds target.setRetries(DEFAULT_RETRY); return target; } /** * 创建共同体对象communityTarget * @param targetAddress * @param community * @param version * @return CommunityTarget */ public static CommunityTarget createCommunityTarget(Address targetAddress, String community, int version) { CommunityTarget target = new CommunityTarget(); target.setCommunity(new OctetString(community)); target.setAddress(targetAddress); target.setVersion(version); return target; } /** * 创建共同体对象communityTarget * @param targetAddress * @param community * @param version * @param timeOut * @param retry * @return CommunityTarget */ public static CommunityTarget createCommunityTarget(Address targetAddress, String community, int version, long timeOut, int retry) { CommunityTarget target = new CommunityTarget(); target.setCommunity(new OctetString(community)); target.setAddress(targetAddress); target.setVersion(version); target.setTimeout(timeOut); // milliseconds target.setRetries(retry); return target; } /** * 创建共同体对象communityTarget * @param address * @param community * @param version * @param timeOut * @param retry * @return CommunityTarget */ public static CommunityTarget createCommunityTarget(String address, String community, int version, long timeOut, int retry) { Address targetAddress = GenericAddress.parse(address); return createCommunityTarget(targetAddress, community, version, timeOut, retry); } /** * 创建snmp Address * @param protocol * @param ip * @param port * @return Address */ public static Address createAddress(String protocol, String ip, int port) { String address = protocol + ":" + ip + "/" + port; return GenericAddress.parse(address); } /** * 创建snmp udp Address * @param ip * @param port * @return Address */ public static Address createUdpAddress(String ip, int port) { String address = ip + "/" + port; return new UdpAddress(address); } /** * 创建snmp tcp Address * @param ip * @param port * @return Address */ public static TcpAddress createTcpAddress(String ip, int port) { String address = ip + "/" + port; return new TcpAddress(address); } /** * 创建 UserTarget * @param targetAddress * @param version * @param timeOut * @param level * @param securityName * @return UserTarget */ public static UserTarget createUserTarget(Address targetAddress, int version, long timeOut, int level, String securityName) { UserTarget target = new UserTarget(); target.setAddress(targetAddress); target.setRetries(1); target.setTimeout(timeOut); // milliseconds target.setVersion(version); target.setSecurityLevel(level); target.setSecurityName(new OctetString(securityName)); return target; } /** * 创建 UserTarget * @param address * @param version * @param timeOut * @param level * @param securityName * @return UserTarget */ public static UserTarget createUserTarget(String address, int version, long timeOut, int level, String securityName) { Address targetAddress = GenericAddress.parse(address); return createUserTarget(targetAddress, version, timeOut, level, securityName); } }
转载请注明来自:Michael's blog @ http://sjsky.iteye.com
-----------------------------------分 ------------------------------------隔 ------------------------------------线 --------------------------------------
评论
5 楼
muzi_tao
2012-01-13
为什么不贴上snmp SET的例子呢?
4 楼
sjsky
2011-08-10
iamblackwolf 写道
代码好强大,thanks
3 楼
iamblackwolf
2011-08-10
代码好强大,thanks
2 楼
sjsky
2011-06-17
chen4w 写道
文章简洁扼要,有帮助,谢谢!但为什么不贴SnmpUtil的代码呢?
这个util类里有很多其他的东西,这里的示例中只引用了一个方法,创建共同体SnmpUtil.createCommunityTarget(....),当时懒了点 没有贴的,已把SnmpUtil的代码清理了下,贴出了部分
1 楼
chen4w
2011-06-16
文章简洁扼要,有帮助,谢谢!但为什么不贴SnmpUtil的代码呢?
发表评论
-
SNMP4j实现Trap的示例
2012-07-20 10:52 1746目录: 环境参数 代码示例 详见 ... -
SNMP4j实现同步和异步的WALK的示例
2012-07-19 14:10 1453目录: 环境参数 代码示例 同步WA ... -
SNMP4j实现同步和异步的GET的示例
2012-07-19 14:09 1560目录: 环境参数 代码示例 同步GE ... -
JRobin绘制指定时间段的流量图
2012-06-21 08:39 1430详见: http://www.micmiu.com ... -
SNMP4j之基础介绍
2011-05-08 15:35 3461blog迁移至:http://www ... -
SNMP之JRobin画图
2010-11-18 12:57 2712blog迁移至:http://www.micmiu.c ... -
SNMP之JRobin Core学习
2010-11-15 08:46 3573blog迁移至:http://www.micmiu.c ...
相关推荐
Java来实现snmp的get、walk代码示例
java版的SNMP_get,SNMP_walk,SNMP_getbulk,详细举例代码完整版!!
Java实现snmp的get和walk代码示例.doc snmp4j.chm snmp.chm SnmpMain.java snmp配置说明.doc snmp协议详细讲解.doc ToolsetAdministratorGuide.pdf ToolsetQuickStartGuide.pdf 常用oids.txt 为什么积分越来越少,...
snmp4j get walk 方式获取数据
snmp的walk函数的实现,和测试程序
使用Java进行SNMP编程-SNMP4J-代码实例,代码实例实现了GET, GETNEXT, GETBULK, Walk, SET操作; 提供于做服务器监控的朋友;
SNMPWALK是一个通过SNMP GET-NEXT类型PDU,实现对目标AGENT的某指定MIB分支信息进行完整提取输出的命令工作。 snmpwalk是SNMP的一个工具,它使用SNMP的GETNEXT请求查询指定OID(SNMP协议中的对象标识)入口的所有OID...
利用snmp4j实现snmp协议三个版本的get、getnext、set、trap操作的源代码,帮助你快速上手snmp协议的实现
java实现snmp数据包发送和接收资料,个人收集的,免费下吧。
Java使用SNMP4J实现snmp trap接口发送消息_20170808_LK
在eclipse上编译成功,且可以运行,实现了get,getnext,set等功能。
java毕业设计——java基于SNMP网络设备MIB信息采集系统的设计与实现(论文+源代码).zip java毕业设计——java基于SNMP网络设备MIB信息采集系统的设计与实现(论文+源代码).zip java毕业设计——java基于SNMP网络设备...
java编程实现SNMP管理站,完成对SNMP代理的远程访问。
用于监听代理进程的Trap信息,用于向管理进程发送Trap信息。
JAVA基于SNMP网络设备MIB信息采集(论文+源代码) 这两年太卷了,毕设和毕业 答辩竞争激烈,越写越卷,没有创新和亮点的毕业答辩基本达不到老师的要求。 现在学长为你们准备了JAVA毕业设计项目,需要的自取哦。JAVA...
【摘要】在本文中,设计了一个针对TCP/IP网络的基于SNMP网络设备的MIB信息采集系统。这个系统采用三层模型进行设计,最底层负责SNMP中基本对象编码、定义,与设备连接...【关键字】 基于Web的网络管理,SNMP,MIB, Java
用java实现的snmp协议 开机基于此代码开发snmp程序。
该工具为snmpget、snmpwalk命令行工具,可以直接用于命令拼接执行。
NULL 博文链接:https://yuhao224.iteye.com/blog/1040673