【转载】 java利用snmp4j包来读取snmp协议数据(Manager端)

https://www.cnblogs.com/xdp-gacl/p/4187089.html

http://doc.okbase.net/yuanfy008/archive/265663.html

java利用snmp4j包来读取snmp协议数据(Manager端)

1 snmp简单介绍

java利用snmp4j包来读取snmp协议数据,很简单的一个流程,就是利用java来读取运行snmp协议的数据,例如服务器、PC机或者路由器等运行了snmp协议的设备。

snmp协议是什么呢?

简单网络管理协议(SNMP),由一组网络管理的标准组成,包含一个 应用层 协议(application layer protocol)、 数据库模型 (database schema)和一组资源对象。该协议能够支持 网络管理系统 ,用以监测连接到网络上的设备是否有任何引起管理上关注的情况。该协议是互联网工程工作小组(IETF,Internet Engineering TaskForce)定义的internet协议簇的一部分。SNMP的目标是管理 互联网 Internet上众多厂家生产的软硬件平台,因此SNMP受Internet标准 网络管理 框架的影响也很大。SNMP已经出到第三个版本的协议,其功能较以前已经大大地加强和改进了。

上面是百度百科上对于snmp的一个定义,其实很简单,就是用来管理网络、查看网络信息的一种协议。

2 在本机上开启snmp协议

那么如何在本机上开启snmp协议呢?

首先,在控制面板中找到“卸载程序”;

在弹出的窗口中单击“打开或关闭Windows功能”;

勾选弹出窗口中的“简单网络管理协议(SNMP)”项后单击“确定”并根据提示完成安装即可。

完成SNMP服务的安装后,右键单击“计算机”选择“管理”

在弹出的“计算机管理”窗口中左侧导航栏中找到“服务”,并在右侧找到“SNMPService”项;

鼠标双击“SNMPService”选项,在弹出的窗口中切换到“安全”选项卡中,如下图添加“接受的社区名称”和接收那些主机发出的SNMP数据包。

“接受的社区名称”是自己定义的任意字符都可以,接收那些主机发出的SNMP数据包定义成你的Nagios服务器即可。到这里被监控端的Windows主机的SNMP服务就配置完成了。

其中要注意的地方就是,在开启后,还要到服务里面给snmp协议添加public权限。

3 snmp4j.jar包的下载

包用的是snmp4j.jar,下载地址是:http://www.snmp4j.org

4 编码测试

SnmpData:

[java] view plain copy

  1. package com.test.snmp;
  2. import java.io.IOException;
  3. import java.util.ArrayList;
  4. import java.util.List;
  5. import java.util.concurrent.CountDownLatch;
  6. import java.util.concurrent.TimeUnit;
  7. import org.snmp4j.CommunityTarget;
  8. import org.snmp4j.PDU;
  9. import org.snmp4j.Snmp;
  10. import org.snmp4j.TransportMapping;
  11. import org.snmp4j.event.ResponseEvent;
  12. import org.snmp4j.event.ResponseListener;
  13. import org.snmp4j.mp.SnmpConstants;
  14. import org.snmp4j.smi.Address;
  15. import org.snmp4j.smi.GenericAddress;
  16. import org.snmp4j.smi.Integer32;
  17. import org.snmp4j.smi.Null;
  18. import org.snmp4j.smi.OID;
  19. import org.snmp4j.smi.OctetString;
  20. import org.snmp4j.smi.VariableBinding;
  21. import org.snmp4j.transport.DefaultUdpTransportMapping;
  22. public class SnmpData {
  23. public static final int DEFAULT_VERSION = SnmpConstants.version2c;
  24. public static final String DEFAULT_PROTOCOL = "udp";
  25. public static final int DEFAULT_PORT = 161;
  26. public static final long DEFAULT_TIMEOUT = 3 * 1000L;
  27. public static final int DEFAULT_RETRY = 3;
  28. /**
  29. * 创建对象communityTarget,用于返回target
  30. *
  31. * @param targetAddress
  32. * @param community
  33. * @param version
  34. * @param timeOut
  35. * @param retry
  36. * @return CommunityTarget
  37. */
  38. public static CommunityTarget createDefault(String ip, String community) {
  39. Address address = GenericAddress.parse(DEFAULT_PROTOCOL + ":" + ip
  40. + "/" + DEFAULT_PORT);
  41. CommunityTarget target = new CommunityTarget();
  42. target.setCommunity(new OctetString(community));
  43. target.setAddress(address);
  44. target.setVersion(DEFAULT_VERSION);
  45. target.setTimeout(DEFAULT_TIMEOUT); // milliseconds
  46. target.setRetries(DEFAULT_RETRY);
  47. return target;
  48. }
  49. /*根据OID,获取单条消息*/
  50. public static void snmpGet(String ip, String community, String oid) {
  51. CommunityTarget target = createDefault(ip, community);
  52. Snmp snmp = null;
  53. try {
  54. PDU pdu = new PDU();
  55. // pdu.add(new VariableBinding(new OID(new int[]
  56. // {1,3,6,1,2,1,1,2})));
  57. pdu.add(new VariableBinding(new OID(oid)));
  58. DefaultUdpTransportMapping transport = new DefaultUdpTransportMapping();
  59. snmp = new Snmp(transport);
  60. snmp.listen();
  61. System.out.println("-------> 发送PDU <-------");
  62. pdu.setType(PDU.GET);
  63. ResponseEvent respEvent = snmp.send(pdu, target);
  64. System.out.println("PeerAddress:" + respEvent.getPeerAddress());
  65. PDU response = respEvent.getResponse();
  66. if (response == null) {
  67. System.out.println("response is null, request time out");
  68. } else {
  69. // Vector<VariableBinding> vbVect =
  70. // response.getVariableBindings();
  71. // System.out.println("vb size:" + vbVect.size());
  72. // if (vbVect.size() == 0) {
  73. // System.out.println("response vb size is 0 ");
  74. // } else {
  75. // VariableBinding vb = vbVect.firstElement();
  76. // System.out.println(vb.getOid() + " = " + vb.getVariable());
  77. // }
  78. System.out.println("response pdu size is " + response.size());
  79. for (int i = 0; i < response.size(); i++) {
  80. VariableBinding vb = response.get(i);
  81. System.out.println(vb.getOid() + " = " + vb.getVariable());
  82. }
  83. }
  84. System.out.println("SNMP GET one OID value finished !");
  85. } catch (Exception e) {
  86. e.printStackTrace();
  87. System.out.println("SNMP Get Exception:" + e);
  88. } finally {
  89. if (snmp != null) {
  90. try {
  91. snmp.close();
  92. } catch (IOException ex1) {
  93. snmp = null;
  94. }
  95. }
  96. }
  97. }
  98. /*根据OID列表,一次获取多条OID数据,并且以List形式返回*/
  99. public static void snmpGetList(String ip, String community, List<String> oidList)
  100. {
  101. CommunityTarget target = createDefault(ip, community);
  102. Snmp snmp = null;
  103. try {
  104. PDU pdu = new PDU();
  105. for(String oid:oidList)
  106. {
  107. pdu.add(new VariableBinding(new OID(oid)));
  108. }
  109. DefaultUdpTransportMapping transport = new DefaultUdpTransportMapping();
  110. snmp = new Snmp(transport);
  111. snmp.listen();
  112. System.out.println("-------> 发送PDU <-------");
  113. pdu.setType(PDU.GET);
  114. ResponseEvent respEvent = snmp.send(pdu, target);
  115. System.out.println("PeerAddress:" + respEvent.getPeerAddress());
  116. PDU response = respEvent.getResponse();
  117. if (response == null) {
  118. System.out.println("response is null, request time out");
  119. } else {
  120. System.out.println("response pdu size is " + response.size());
  121. for (int i = 0; i < response.size(); i++) {
  122. VariableBinding vb = response.get(i);
  123. System.out.println(vb.getOid() + " = " + vb.getVariable());
  124. }
  125. }
  126. System.out.println("SNMP GET one OID value finished !");
  127. } catch (Exception e) {
  128. e.printStackTrace();
  129. System.out.println("SNMP Get Exception:" + e);
  130. } finally {
  131. if (snmp != null) {
  132. try {
  133. snmp.close();
  134. } catch (IOException ex1) {
  135. snmp = null;
  136. }
  137. }
  138. }
  139. }
  140. /*根据OID列表,采用异步方式一次获取多条OID数据,并且以List形式返回*/
  141. public static void snmpAsynGetList(String ip, String community,List<String> oidList)
  142. {
  143. CommunityTarget target = createDefault(ip, community);
  144. Snmp snmp = null;
  145. try {
  146. PDU pdu = new PDU();
  147. for(String oid:oidList)
  148. {
  149. pdu.add(new VariableBinding(new OID(oid)));
  150. }
  151. DefaultUdpTransportMapping transport = new DefaultUdpTransportMapping();
  152. snmp = new Snmp(transport);
  153. snmp.listen();
  154. System.out.println("-------> 发送PDU <-------");
  155. pdu.setType(PDU.GET);
  156. ResponseEvent respEvent = snmp.send(pdu, target);
  157. System.out.println("PeerAddress:" + respEvent.getPeerAddress());
  158. PDU response = respEvent.getResponse();
  159. /*异步获取*/
  160. final CountDownLatch latch = new CountDownLatch(1);
  161. ResponseListener listener = new ResponseListener() {
  162. public void onResponse(ResponseEvent event) {
  163. ((Snmp) event.getSource()).cancel(event.getRequest(), this);
  164. PDU response = event.getResponse();
  165. PDU request = event.getRequest();
  166. System.out.println("[request]:" + request);
  167. if (response == null) {
  168. System.out.println("[ERROR]: response is null");
  169. } else if (response.getErrorStatus() != 0) {
  170. System.out.println("[ERROR]: response status"
  171. + response.getErrorStatus() + " Text:"
  172. + response.getErrorStatusText());
  173. } else {
  174. System.out.println("Received response Success!");
  175. for (int i = 0; i < response.size(); i++) {
  176. VariableBinding vb = response.get(i);
  177. System.out.println(vb.getOid() + " = "
  178. + vb.getVariable());
  179. }
  180. System.out.println("SNMP Asyn GetList OID finished. ");
  181. latch.countDown();
  182. }
  183. }
  184. };
  185. pdu.setType(PDU.GET);
  186. snmp.send(pdu, target, null, listener);
  187. System.out.println("asyn send pdu wait for response...");
  188. boolean wait = latch.await(30, TimeUnit.SECONDS);
  189. System.out.println("latch.await =:" + wait);
  190. snmp.close();
  191. System.out.println("SNMP GET one OID value finished !");
  192. } catch (Exception e) {
  193. e.printStackTrace();
  194. System.out.println("SNMP Get Exception:" + e);
  195. } finally {
  196. if (snmp != null) {
  197. try {
  198. snmp.close();
  199. } catch (IOException ex1) {
  200. snmp = null;
  201. }
  202. }
  203. }
  204. }
  205. /*根据targetOID,获取树形数据*/
  206. public static void snmpWalk(String ip, String community, String targetOid)
  207. {
  208. CommunityTarget target = createDefault(ip, community);
  209. TransportMapping transport = null;
  210. Snmp snmp = null;
  211. try {
  212. transport = new DefaultUdpTransportMapping();
  213. snmp = new Snmp(transport);
  214. transport.listen();
  215. PDU pdu = new PDU();
  216. OID targetOID = new OID(targetOid);
  217. pdu.add(new VariableBinding(targetOID));
  218. boolean finished = false;
  219. System.out.println("----> demo start <----");
  220. while (!finished) {
  221. VariableBinding vb = null;
  222. ResponseEvent respEvent = snmp.getNext(pdu, target);
  223. PDU response = respEvent.getResponse();
  224. if (null == response) {
  225. System.out.println("responsePDU == null");
  226. finished = true;
  227. break;
  228. } else {
  229. vb = response.get(0);
  230. }
  231. // check finish
  232. finished = checkWalkFinished(targetOID, pdu, vb);
  233. if (!finished) {
  234. System.out.println("==== walk each vlaue :");
  235. System.out.println(vb.getOid() + " = " + vb.getVariable());
  236. // Set up the variable binding for the next entry.
  237. pdu.setRequestID(new Integer32(0));
  238. pdu.set(0, vb);
  239. } else {
  240. System.out.println("SNMP walk OID has finished.");
  241. snmp.close();
  242. }
  243. }
  244. System.out.println("----> demo end <----");
  245. } catch (Exception e) {
  246. e.printStackTrace();
  247. System.out.println("SNMP walk Exception: " + e);
  248. } finally {
  249. if (snmp != null) {
  250. try {
  251. snmp.close();
  252. } catch (IOException ex1) {
  253. snmp = null;
  254. }
  255. }
  256. }
  257. }
  258. private static boolean checkWalkFinished(OID targetOID, PDU pdu,
  259. VariableBinding vb) {
  260. boolean finished = false;
  261. if (pdu.getErrorStatus() != 0) {
  262. System.out.println("[true] responsePDU.getErrorStatus() != 0 ");
  263. System.out.println(pdu.getErrorStatusText());
  264. finished = true;
  265. } else if (vb.getOid() == null) {
  266. System.out.println("[true] vb.getOid() == null");
  267. finished = true;
  268. } else if (vb.getOid().size() < targetOID.size()) {
  269. System.out.println("[true] vb.getOid().size() < targetOID.size()");
  270. finished = true;
  271. } else if (targetOID.leftMostCompare(targetOID.size(), vb.getOid()) != 0) {
  272. System.out.println("[true] targetOID.leftMostCompare() != 0");
  273. finished = true;
  274. } else if (Null.isExceptionSyntax(vb.getVariable().getSyntax())) {
  275. System.out
  276. .println("[true] Null.isExceptionSyntax(vb.getVariable().getSyntax())");
  277. finished = true;
  278. } else if (vb.getOid().compareTo(targetOID) <= 0) {
  279. System.out.println("[true] Variable received is not "
  280. + "lexicographic successor of requested " + "one:");
  281. System.out.println(vb.toString() + " <= " + targetOID);
  282. finished = true;
  283. }
  284. return finished;
  285. }
  286. /*根据targetOID,异步获取树形数据*/
  287. public static void snmpAsynWalk(String ip, String community, String oid)
  288. {
  289. final CommunityTarget target = createDefault(ip, community);
  290. Snmp snmp = null;
  291. try {
  292. System.out.println("----> demo start <----");
  293. DefaultUdpTransportMapping transport = new DefaultUdpTransportMapping();
  294. snmp = new Snmp(transport);
  295. snmp.listen();
  296. final PDU pdu = new PDU();
  297. final OID targetOID = new OID(oid);
  298. final CountDownLatch latch = new CountDownLatch(1);
  299. pdu.add(new VariableBinding(targetOID));
  300. ResponseListener listener = new ResponseListener() {
  301. public void onResponse(ResponseEvent event) {
  302. ((Snmp) event.getSource()).cancel(event.getRequest(), this);
  303. try {
  304. PDU response = event.getResponse();
  305. // PDU request = event.getRequest();
  306. // System.out.println("[request]:" + request);
  307. if (response == null) {
  308. System.out.println("[ERROR]: response is null");
  309. } else if (response.getErrorStatus() != 0) {
  310. System.out.println("[ERROR]: response status"
  311. + response.getErrorStatus() + " Text:"
  312. + response.getErrorStatusText());
  313. } else {
  314. System.out
  315. .println("Received Walk response value :");
  316. VariableBinding vb = response.get(0);
  317. boolean finished = checkWalkFinished(targetOID,
  318. pdu, vb);
  319. if (!finished) {
  320. System.out.println(vb.getOid() + " = "
  321. + vb.getVariable());
  322. pdu.setRequestID(new Integer32(0));
  323. pdu.set(0, vb);
  324. ((Snmp) event.getSource()).getNext(pdu, target,
  325. null, this);
  326. } else {
  327. System.out
  328. .println("SNMP Asyn walk OID value success !");
  329. latch.countDown();
  330. }
  331. }
  332. } catch (Exception e) {
  333. e.printStackTrace();
  334. latch.countDown();
  335. }
  336. }
  337. };
  338. snmp.getNext(pdu, target, null, listener);
  339. System.out.println("pdu 已发送,等到异步处理结果...");
  340. boolean wait = latch.await(30, TimeUnit.SECONDS);
  341. System.out.println("latch.await =:" + wait);
  342. snmp.close();
  343. System.out.println("----> demo end <----");
  344. } catch (Exception e) {
  345. e.printStackTrace();
  346. System.out.println("SNMP Asyn Walk Exception:" + e);
  347. }
  348. }
  349. /*根据OID和指定string来设置设备的数据*/
  350. public static void setPDU(String ip,String community,String oid,String val) throws IOException
  351. {
  352. CommunityTarget target = createDefault(ip, community);
  353. Snmp snmp = null;
  354. PDU pdu = new PDU();
  355. pdu.add(new VariableBinding(new OID(oid),new OctetString(val)));
  356. pdu.setType(PDU.SET);
  357. DefaultUdpTransportMapping transport = new DefaultUdpTransportMapping();
  358. snmp = new Snmp(transport);
  359. snmp.listen();
  360. System.out.println("-------> 发送PDU <-------");
  361. snmp.send(pdu, target);
  362. snmp.close();
  363. }
  364. }

SnmpTest:

[java] view plain copy

  1. package com.test.snmp;
  2. import java.util.ArrayList;
  3. import java.util.List;
  4. import org.snmp4j.log.ConsoleLogFactory;
  5. import org.snmp4j.log.LogAdapter;
  6. import org.snmp4j.log.LogFactory;
  7. import com.test.snmp.SnmpData;
  8. public class SnmpTest {
  9. /**
  10. * @param args
  11. */
  12. public static void main(String[] args) {
  13. // TODO Auto-generated method stub
  14. SnmpTest test = new SnmpTest();
  15. test.testGet();
  16. }
  17. public void testGet()
  18. {
  19. String ip = "127.0.0.1";
  20. String community = "public";
  21. String oidval = "1.3.6.1.2.1.1.6.0";
  22. SnmpData.snmpGet(ip, community, oidval);
  23. }
  24. public void testGetList(){
  25. String ip = "127.0.0.1";
  26. String community = "public";
  27. List<String> oidList=new ArrayList<String>();
  28. oidList.add("1.3.6.1.2.1.1.5.0");
  29. oidList.add("1.3.6.1.2.1.1.7.0");
  30. SnmpData.snmpGetList(ip, community, oidList);
  31. }
  32. public void testGetAsyList()
  33. {
  34. String ip = "127.0.0.1";
  35. String community = "public";
  36. List<String> oidList=new ArrayList<String>();
  37. oidList.add("1.3.6.1.2.1");
  38. oidList.add("1.3.6.1.2.12");
  39. SnmpData.snmpAsynGetList(ip, community, oidList);
  40. System.out.println("i am first!");
  41. }
  42. public void testWalk()
  43. {
  44. String ip = "127.0.0.1";
  45. String community = "public";
  46. String targetOid = "1.3.6.1.2.1.1.5.0";
  47. SnmpData.snmpWalk(ip, community, targetOid);
  48. }
  49. public void testAsyWalk()
  50. {
  51. String ip = "127.0.0.1";
  52. String community = "public";
  53. // 异步采集数据
  54. SnmpData.snmpAsynWalk(ip, community, "1.3.6.1.2.1.25.4.2.1.2");
  55. }
  56. public void testSetPDU() throws Exception
  57. {
  58. String ip = "127.0.0.1";
  59. String community = "public";
  60. SnmpData.setPDU(ip, community, "1.3.6.1.2.1.1.6.0","jianghuiwen");
  61. }
  62. public void testVersion()
  63. {
  64. System.out.println(org.snmp4j.version.VersionInfo.getVersion());
  65. }
  66. }

文档和源码csdn下载:http://download.csdn.net/detail/davebobo/9509435

ref: http://www.tuicool.com/articles/FF7fEbi

ref: http://blog.chinaunix.net/uid-21857285-id-3340206.html

-------------------------更新--------------------------------------

Trap功能的实现:

下面是两个用于发送和接收Trap报文信息的类:

接收Trap消息类:

[java] view plain copy

  1. import java.io.IOException;
  2. import java.net.UnknownHostException;
  3. import java.util.Vector;
  4. import org.snmp4j.CommandResponder;
  5. import org.snmp4j.CommandResponderEvent;
  6. import org.snmp4j.MessageDispatcherImpl;
  7. import org.snmp4j.Snmp;
  8. import org.snmp4j.TransportMapping;
  9. import org.snmp4j.mp.MPv1;
  10. import org.snmp4j.mp.MPv2c;
  11. import org.snmp4j.mp.MPv3;
  12. import org.snmp4j.security.SecurityModels;
  13. import org.snmp4j.security.SecurityProtocols;
  14. import org.snmp4j.security.USM;
  15. import org.snmp4j.smi.Address;
  16. import org.snmp4j.smi.GenericAddress;
  17. import org.snmp4j.smi.OctetString;
  18. import org.snmp4j.smi.TcpAddress;
  19. import org.snmp4j.smi.UdpAddress;
  20. import org.snmp4j.smi.VariableBinding;
  21. import org.snmp4j.transport.DefaultTcpTransportMapping;
  22. import org.snmp4j.transport.DefaultUdpTransportMapping;
  23. import org.snmp4j.util.MultiThreadedMessageDispatcher;
  24. import org.snmp4j.util.ThreadPool;
  25. /**
  26. * 本类用于监听代理进程的Trap信息
  27. *
  28. * @author zhanjia
  29. *
  30. */
  31. public class MultiThreadedTrapReceiver implements CommandResponder {
  32. private MultiThreadedMessageDispatcher dispatcher;
  33. private Snmp snmp = null;
  34. private Address listenAddress;
  35. private ThreadPool threadPool;
  36. public MultiThreadedTrapReceiver() {
  37. // BasicConfigurator.configure();
  38. }
  39. private void init() throws UnknownHostException, IOException {
  40. threadPool = ThreadPool.create("Trap", 2);
  41. dispatcher = new MultiThreadedMessageDispatcher(threadPool,
  42. new MessageDispatcherImpl());
  43. listenAddress = GenericAddress.parse(System.getProperty(
  44. "snmp4j.listenAddress", "udp:192.168.1.23/162")); // 本地IP与监听端口
  45. TransportMapping transport;
  46. // 对TCP与UDP协议进行处理
  47. if (listenAddress instanceof UdpAddress) {
  48. transport = new DefaultUdpTransportMapping(
  49. (UdpAddress) listenAddress);
  50. } else {
  51. transport = new DefaultTcpTransportMapping(
  52. (TcpAddress) listenAddress);
  53. }
  54. snmp = new Snmp(dispatcher, transport);
  55. snmp.getMessageDispatcher().addMessageProcessingModel(new MPv1());
  56. snmp.getMessageDispatcher().addMessageProcessingModel(new MPv2c());
  57. snmp.getMessageDispatcher().addMessageProcessingModel(new MPv3());
  58. USM usm = new USM(SecurityProtocols.getInstance(), new OctetString(MPv3
  59. .createLocalEngineID()), 0);
  60. SecurityModels.getInstance().addSecurityModel(usm);
  61. snmp.listen();
  62. }
  63. public void run() {
  64. try {
  65. init();
  66. snmp.addCommandResponder(this);
  67. System.out.println("开始监听Trap信息!");
  68. } catch (Exception ex) {
  69. ex.printStackTrace();
  70. }
  71. }
  72. /**
  73. * 实现CommandResponder的processPdu方法, 用于处理传入的请求、PDU等信息
  74. * 当接收到trap时,会自动进入这个方法
  75. *
  76. * @param respEvnt
  77. */
  78. public void processPdu(CommandResponderEvent respEvnt) {
  79. // 解析Response
  80. if (respEvnt != null && respEvnt.getPDU() != null) {
  81. Vector<VariableBinding> recVBs = respEvnt.getPDU().getVariableBindings();
  82. for (int i = 0; i < recVBs.size(); i++) {
  83. VariableBinding recVB = recVBs.elementAt(i);
  84. System.out.println(recVB.getOid() + " : " + recVB.getVariable());
  85. }
  86. }
  87. }
  88. public static void main(String[] args) {
  89. MultiThreadedTrapReceiver multithreadedtrapreceiver = new MultiThreadedTrapReceiver();
  90. multithreadedtrapreceiver.run();
  91. }
  92. }

发送Trap消息的类:

[java] view plain copy

  1. import java.io.IOException;
  2. import java.util.Vector;
  3. import org.snmp4j.CommunityTarget;
  4. import org.snmp4j.PDU;
  5. import org.snmp4j.Snmp;
  6. import org.snmp4j.TransportMapping;
  7. import org.snmp4j.event.ResponseEvent;
  8. import org.snmp4j.mp.SnmpConstants;
  9. import org.snmp4j.smi.Address;
  10. import org.snmp4j.smi.GenericAddress;
  11. import org.snmp4j.smi.OID;
  12. import org.snmp4j.smi.OctetString;
  13. import org.snmp4j.smi.VariableBinding;
  14. import org.snmp4j.transport.DefaultUdpTransportMapping;
  15. /**
  16. * 本类用于向管理进程发送Trap信息
  17. *
  18. * @author zhanjia
  19. *
  20. */
  21. public class SnmpUtilSendTrap {
  22. private Snmp snmp = null;
  23. private Address targetAddress = null;
  24. public void initComm() throws IOException {
  25. // 设置管理进程的IP和端口
  26. targetAddress = GenericAddress.parse("udp:192.168.1.23/162");
  27. TransportMapping transport = new DefaultUdpTransportMapping();
  28. snmp = new Snmp(transport);
  29. transport.listen();
  30. }
  31. /**
  32. * 向管理进程发送Trap报文
  33. *
  34. * @throws IOException
  35. */
  36. public void sendPDU() throws IOException {
  37. // 设置 target
  38. CommunityTarget target = new CommunityTarget();
  39. target.setAddress(targetAddress);
  40. // 通信不成功时的重试次数
  41. target.setRetries(2);
  42. // 超时时间
  43. target.setTimeout(1500);
  44. // snmp版本
  45. target.setVersion(SnmpConstants.version2c);
  46. // 创建 PDU
  47. PDU pdu = new PDU();
  48. pdu.add(new VariableBinding(new OID(".1.3.6.1.2.3377.10.1.1.1.1"),
  49. new OctetString("SnmpTrap")));
  50. pdu.add(new VariableBinding(new OID(".1.3.6.1.2.3377.10.1.1.1.2"),
  51. new OctetString("JavaEE")));
  52. pdu.setType(PDU.TRAP);
  53. // 向Agent发送PDU,并接收Response
  54. ResponseEvent respEvnt = snmp.send(pdu, target);
  55. // 解析Response
  56. if (respEvnt != null && respEvnt.getResponse() != null) {
  57. Vector<VariableBinding> recVBs = respEvnt.getResponse()
  58. .getVariableBindings();
  59. for (int i = 0; i < recVBs.size(); i++) {
  60. VariableBinding recVB = recVBs.elementAt(i);
  61. System.out.println(recVB.getOid() + " : " + recVB.getVariable());
  62. }
  63. }
  64. }
  65. public static void main(String[] args) {
  66. try {
  67. SnmpUtilSendTrap util = new SnmpUtilSendTrap();
  68. util.initComm();
  69. util.sendPDU();
  70. } catch (IOException e) {
  71. e.printStackTrace();
  72. }
  73. }
  74. }

1、运行MultiThreadedTrapReceiver类,提示“开始监听Trap信息!”并处理监听状态

2、运行SnmpUtilSendTrap类,运行完毕后,将会在“开始监听Trap信息!”后面显示:

1.3.6.1.2.3377.10.1.1.1.1 : SnmpTrap
1.3.6.1.2.3377.10.1.1.1.2 : JavaEE

MultiThreadedTrapReceiver输出面板中显示以上两行即表示测试成功!

说明:

本例只在本人电脑上测试过,操作系统为Windows

ref:http://www.iteye.com/topic/308836-----------------------------------------------------更新20160621-------------------------------------------------

接下来问题又来了,我们发的trap消息如果manager掉线我们应该考虑将trap消息保存下来,此时snmp inform就用上场了。详解请看下文:http://blog.csdn.net/davebobo/article/details/51730688

原文地址:https://www.cnblogs.com/jing1617/p/8780366.html

时间: 2024-11-16 05:00:35

【转载】 java利用snmp4j包来读取snmp协议数据(Manager端)的相关文章

(转)java 从jar包中读取资源文件

(转)java 从jar包中读取资源文件 博客分类: java 源自:http://blog.csdn.net/b_h_l/article/details/7767829 在代码中读取一些资源文件(比如图片,音乐,文本等等),在集成环境(Eclipse)中运行的时候没有问题.但当打包成一个可执行的jar包(将资源文件一并打包)以后,这些资源文件找不到,如下代码:Java代码 [java] view plaincopy //源代码1: package edu.hxraid; import java

java利用poi包 为excel生成超链接

转载自:http://www.blogjava.net/leekiang/archive/2008/10/21/235794.html 1,一个需求, 要求报表生成的Excel表格支持超链接.例如点击Excel内的公司名, 自动打开浏览器并连到该公司的网站上去.在Excel里面选中所需的单元格, 右键弹出属性, 选超链接就能输入相应的地址了,既然Excel支持超链接.那就没有什么借口说不能实现了.:). 翻了翻POI的文档, 很容易就找到了解决方案.在POI中让单元格实现超链接功能, 可以用Hy

Java利用POI导入导出Excel中的数据

     首先谈一下今天发生的一件开心的事,本着一颗android的心我被分配到了PB组,身在曹营心在汉啊!好吧,今天要记录和分享的是Java利用POI导入导出Excel中的数据.下面POI包的下载地址http://poi.apache.org/download.html,有兴趣的朋友也可以去看看其中的API.      下面分享一下在对POI进行基本操作时觉得需要注意的两点:       1.POI中针对xlsx/xls是需要create different Workbook instance

java 从jar包中读取资源文件

在代码中读取一些资源文件(比如图片,音乐,文本等等),在集成环境(Eclipse)中运行的时候没有问题.但当打包成一个可执行的jar包(将资源文件一并打包)以后,这些资源文件找不到,如下代码:Java代码 [java] view plaincopy //源代码1: package edu.hxraid; import java.io.*; public class Resource { public  void getResource() throws IOException{ File fil

Java利用zxing创建和读取二维码

一.maven依赖 <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> <!-- https://mvnrepository.com/art

Java或者JAR包获取读取资源文件的路径的问题总结

这里分为具体两种: 第一种:资源文件为一般后缀文件 第二种:资源文件为图片文件 [NO1]第一种 使用这行代码可以获取class类的根目录的路径 String path =Thread.currentThread().getContextClassLoader().getResource("").getPath(); 例子:我用的开发软件MyEclipse 6.5 假设项目文件夹如下: files---bin--core(生成class包) |               |     

java/IO流FileInputStream读取文档数据

package ketang82; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; public class FileDome { public static void main(String[] args) { try { FileInputStream fis = new FileInputStream("text.txt"); byt

java向oracle数据库Clob读取,写入数据

写入数据 1. 向oracle clob字段创建一个空的 empty_clob()对象. insert  into PTR_AssetXml(cChr_AssetPlanId,cChr_AssetData,Create_Date,Submitter,Last_Modified_By,Modified_Date,Status,Short_Description,Request_ID) "     + "values(?,empty_clob(),?,?,?,?,?,?,(select n

JAVA利用poi获取world文件内容

本文主要简单介绍了利用poi包,读取world文件内容. 这个依然存在版本的问题,只能读取doc结尾的老版本文件. 话不多说,上代码: 1 import java.io.File; 2 import java.io.FileInputStream; 3 4 import org.apache.poi.hwpf.HWPFDocument; 5 import org.apache.poi.hwpf.usermodel.Range; 6 7 8 public class testdoc { 9 /**