實例:
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