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