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

Posted 学海无涯

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了转载 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.   
  3. import java.io.IOException;  
  4. import java.util.ArrayList;  
  5. import java.util.List;  
  6. import java.util.concurrent.CountDownLatch;  
  7. import java.util.concurrent.TimeUnit;  
  8.    
  9. import org.snmp4j.CommunityTarget;  
  10. import org.snmp4j.PDU;  
  11. import org.snmp4j.Snmp;  
  12. import org.snmp4j.TransportMapping;  
  13. import org.snmp4j.event.ResponseEvent;  
  14. import org.snmp4j.event.ResponseListener;  
  15. import org.snmp4j.mp.SnmpConstants;  
  16. import org.snmp4j.smi.Address;  
  17. import org.snmp4j.smi.GenericAddress;  
  18. import org.snmp4j.smi.Integer32;  
  19. import org.snmp4j.smi.Null;  
  20. import org.snmp4j.smi.OID;  
  21. import org.snmp4j.smi.OctetString;  
  22. import org.snmp4j.smi.VariableBinding;  
  23. import org.snmp4j.transport.DefaultUdpTransportMapping;  
  24.   
  25. public class SnmpData {  
  26.       
  27.       public static final int DEFAULT_VERSION = SnmpConstants.version2c;  
  28.       public static final String DEFAULT_PROTOCOL = "udp";  
  29.       public static final int DEFAULT_PORT = 161;  
  30.       public static final long DEFAULT_TIMEOUT = 3 * 1000L;  
  31.       public static final int DEFAULT_RETRY = 3;  
  32.        
  33.       /** 
  34.        * 创建对象communityTarget,用于返回target 
  35.        * 
  36.        * @param targetAddress 
  37.        * @param community 
  38.        * @param version 
  39.        * @param timeOut 
  40.        * @param retry 
  41.        * @return CommunityTarget 
  42.        */  
  43.       public static CommunityTarget createDefault(String ip, String community) {  
  44.         Address address = GenericAddress.parse(DEFAULT_PROTOCOL + ":" + ip  
  45.             + "/" + DEFAULT_PORT);  
  46.         CommunityTarget target = new CommunityTarget();  
  47.         target.setCommunity(new OctetString(community));  
  48.         target.setAddress(address);  
  49.         target.setVersion(DEFAULT_VERSION);  
  50.         target.setTimeout(DEFAULT_TIMEOUT); // milliseconds  
  51.         target.setRetries(DEFAULT_RETRY);  
  52.         return target;  
  53.       }  
  54.       /*根据OID,获取单条消息*/  
  55.       public static void snmpGet(String ip, String community, String oid) {  
  56.        
  57. SNMP4J源码主要类解析

    SNMP4J SNMP用法小记

    java-snmp4j之snmp

    Snmp网络协议及Java开发相关

    如何配置引擎 ID 以使用 SNMP4J 发送 SNMP 陷阱 V3?

    snmp.jar和snmp4j.jar,这两个jar包的主要区别是啥?