使用SNMP4J获取oid

实例:

import org.snmp4j.*;
import org.snmp4j.transport.*;
import java.io.*;
import org.snmp4j.smi.*;
import org.snmp4j.mp.*;
import org.snmp4j.event.*;
class GetOID{
    public static void main(String[] args) throws Exception{
  
    try{
        //设定CommunityTarget
        CommunityTarget myTarget = new CommunityTarget();
        Address deviceAdd = GenericAddress.parse("udp:localhost/161"); //定义远程主机的地址
        //Address deviceAdd=new IpAddress("udp:127.0.0.1/161");
        myTarget.setAddress(deviceAdd);  //设定远程主机的地址
        myTarget.setCommunity(new OctetString("public"));   //设置snmp共同体
        myTarget.setRetries(2);  //设置超时重试次数
        myTarget.setTimeout(5*60);   //设置超时的时间
        myTarget.setVersion(SnmpConstants.version2c);//设置snmp版本
       
        //设定采取的协议
        TransportMapping transport = new DefaultUdpTransportMapping();  //设定传输协议为UDP
        transport.listen();
        Snmp protocol = new Snmp(transport);
       
        //获取mib
        PDU request = new PDU();
       
        request.add(new VariableBinding(new OID("1.3.6.1.2.1.1.1")));
        request.add(new VariableBinding(new OID(new int[] {1,3,6,1,2,1,1,2})));
      
        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 vb1 = response.get(0);
            VariableBinding vb2 = response.get(1);
            System.out.println(vb1);
            System.out.println(vb2);
            transport.close();
        }
      
      }catch(IOException e){
          e.printStackTrace();
        
      }
    }
}


总结——使用SNMP4J获取oid过程:

1、设定远程实体

     snmp4j中,用CommunityTarget对象来表示远程实体(要进行snmp消息通信的远程主机,使用snmp的v2版本)

2、指定远程实体的地址

     snmp4j中使用Address接口对象来表示,Address对象需要通过实现该接口的类的对象向上转型来实例化

3、通过CommunityTarget以及其父接口中提供的setXX方法来设定远程实体的属性,如设定远程实体的snmp共同体属性、远程实体的地址、超时时间、重传次数、snmp版本等

4、设定使用的传输协议

    snmp4j中,用TransportMapping接口的对象来表示传输协议(tcp/udp)

5、调用TransportMapping中的listen()方法,启动监听进程,接收消息,由于该监听进程是守护进程,最后应调用close()方法来释放该进程

6、创建SNMP对象,用于发送请求PDU

     a、创建请求pdu,即创建PDU类的对象,调用PDU类中的add()方法绑定要查询的OID,调用PDU中的setType()方法来确定该pdu的类型(与snmp中物种操作想对应)

     b、通过PDU的构造方法  public SNMP(TransportMapping transportingMapping),或者其他构造方法来生成pdu,之后调用 ResopnseEvent send(PDU pdu,Target target)发送pdu,该方法返回一个ResponseEvent对象

7、通过ResponseEvent对象来获得SNMP请求的应答pdu,方法:public PDU getResponse()

8、通过应答pdu获得mib信息(之前绑定的OID的值),方法:VaribleBinding get(int index)


转自:http://blog.csdn.net/creazyjava/article/details/5453004


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值