使用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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章