简单介绍一下SNMP4J

来源:互联网 发布:js导出数据到excel 编辑:程序博客网 时间:2024/04/28 12:10

简单介绍一下SNMP4J

SNMP4J——一个支持java管理器和代理,支持snmp应用程序接口的类库。

SNMP4J是一个商业类库,而且开源免费,它也是一个有着很高技术艺术性的SNMP执行能力的类库,支持J2SE1.4或更高的版本。SNMP4J支持指令发生器(管理器),就像指令回应(代理)一样好。它从SNMP++(一个著名的,支持SNMPv1/v2/v3的C++应用程序接口)获得灵感,具有清晰的对象导向。
SNMP4J 应用程序接口提供一下特性:
   1. 支持MD5和SHA验证,DES和AES128、AES192和AES256加密的SNMPv3。
   2. 支持MPv1,MPv2C和MPv3,带执行的可阻塞的信息处理模块。
   3. 全部PDU格式。
   4. 可阻塞的传输拓扑。UPD和TCP支持直接使用。
   5. 可阻塞的超时模块。
   6. 同步和异步请求。
   7. 支持像指令回应器一样好的指令发生器。
   8. 带有Apache证书模版,开源免费。
   9. JAVA 1.4.1或更高版本。
  10. 使用LOG4J记录日志。
  11. 使用GETBULK实现Row-based矩阵的有效的异步表格获取。
  12. 支持多线程。
  13. JUNIT测试

利用SNMP4J获取可管网络设备的OID数据
使用SNMP4j来获得SNMP信息,首先要创建两个实例CommunityTarget和PDU(主要针对v1和v2)。
   
我写了个简单的程序如下。

import org.snmp4j.*;
import org.snmp4j.transport.*;
import java.io.*;
import org.snmp4j.smi.*;
import org.snmp4j.mp.*;
import org.snmp4j.event.*;

class SnmpGet{
    public static void main(String[] args){
   
    try{
        //设定CommunityTarget
        CommunityTarget myTarget = new CommunityTarget();
        Address deviceAdd = GenericAddress.parse("udp:10.5.24.37/161");
        myTarget.setAddress(deviceAdd);
        myTarget.setCommunity(new OctetString("public"));
        myTarget.setRetries(2);
        myTarget.setTimeout(5*60);   
        myTarget.setVersion(SnmpConstants.version2c);//org.snmp4j.mp.*;
        //设定采取的协议
        TransportMapping transport1  = new DefaultUdpTransportMapping();
        Snmp protocol = new Snmp(transport1);
        transport1.listen();
        //获取mib
        PDU request = new PDU();
        String oidstr ="1.3.6.1.2.1.4.20";
        VariableBinding var = new VariableBinding(new OID(oidstr));
        request.add(var);
        request.setType(PDU.GETNEXT);
        ResponseEvent responseEvent = protocol.send(request, myTarget);
        PDU response=responseEvent.getResponse();
        //输出
        if(response != null){
            System.out.println("request.size()="+request.size());
            System.out.println("response.size()="+response.size());
            VariableBinding vb = response.get(0);
            System.out.println(vb); 
        }
       
      }catch(IOException e){
          e.printStackTrace();
          System.out.println(e.getMessage());
          return;
      }
    }

原创粉丝点击