<span style="font-family:Times New Roman;">package snmp_get;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Vector;
import org.snmp4j.CommunityTarget;
import org.snmp4j.PDU;
import org.snmp4j.Snmp;
import org.snmp4j.TransportMapping;
import org.snmp4j.event.ResponseEvent;
import org.snmp4j.mp.SnmpConstants;
import org.snmp4j.smi.Address;
import org.snmp4j.smi.GenericAddress;
import org.snmp4j.smi.OID;
import org.snmp4j.smi.OctetString;
import org.snmp4j.smi.VariableBinding;
import org.snmp4j.transport.DefaultUdpTransportMapping;
/**
* GET : 一个pdu中要支持获取多个OID
* @author Shinetien
*
*/
public class SnmpGet {
private Address targetAddress;
private Snmp snmp;
public static void main(String[] args) {
SnmpGet gu = new SnmpGet();
gu.init();
}
// 初始化targetAddress, snmp,开启transport监听消息
private void init() {
System.out.println("--------初始化----------");
// 设置Agent的IP和端口
targetAddress = GenericAddress.parse("udp:127.0.0.1/161");
TransportMapping transport = null;
try {
// A transport mapping can only support a single transport protocol
transport = new DefaultUdpTransportMapping();
} catch (IOException e) {
e.printStackTrace();
}
snmp = new Snmp(transport);
try {
transport.listen();
} catch (IOException e) {
e.printStackTrace();
}
// 发送PDU,并将返回的ResponseEvent进行读取
parseResponseEvent(sendPDU(getPdu(), getTarget()));
}
// get PDU
private PDU getPdu() {
PDU pdu = new PDU();
for (int i = 0; i < getOidList().size(); i++) {
pdu.add(new VariableBinding(new OID(getOidList().get(i))));// pcName
}
pdu.setType(PDU.GET);
return pdu;
}
// get Target
private CommunityTarget getTarget() {
CommunityTarget target = new CommunityTarget();
target.setCommunity(new OctetString("public"));
target.setAddress(targetAddress);
// 通信不成功时的重试次数
target.setRetries(2);
// 超时时间
target.setTimeout(1500);
target.setVersion(SnmpConstants.version2c);
return target;
}
// 发送PDU,返回ResponseEvent对象
private ResponseEvent sendPDU(PDU pdu, CommunityTarget target) {
try {
return snmp.send(pdu, target);
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
// parse ResponseEvent
private void parseResponseEvent(ResponseEvent responseEvent) {
// 解析Response
System.out.println("----------解析Response-------------");
if (responseEvent != null && responseEvent.getResponse() != null) {
@SuppressWarnings("unchecked")
Vector<VariableBinding> vbs = responseEvent.getResponse()
.getVariableBindings();
for (int i = 0; i < vbs.size(); i++) {
VariableBinding vb = vbs.elementAt(i);
System.out.println(" oid=" + vb.getOid() + "\n value= "
+ vb.getVariable()+"\n");
}
} else {
System.out.println("----------解析ResponseEvent失败-------------");
}
}
private ArrayList<String> getOidList() {
ArrayList<String> oidList = new ArrayList<String>();
oidList.add("1.3.6.1.2.1.1.1.0"); //Get OID_sysDescr
oidList.add(".1.3.6.1.2.1.1.2.0");//Get OID_sysObjectID
oidList.add(".1.3.6.1.2.1.1.3.0");//Get OID_sysUpTime
return oidList;
}
}
</span>
一个pdu中要支持获取多个OID
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.