项目需求,要监控服务器各种信息,于是了解了下snmp4j,不过在实际应用中遇到了些问题,返回值总是空,status为-1。不知道有没有用过的同仁遇到过类似问题,有没有解决?希望了解的可以指点一二,感激不尽哦。
ps:List list = getSNMPList(oip,CPU_OID);这里获取到的list中各项值都为空
已在目标服务器开启了snmp service服务
/**
* 获取网络设备信息的公共函数
* @param oip
* @param stOID
* @return list
*/
private List getSNMPList(String oip,String stOID) {
Target target = getTarget(oip + "/" + "161");
List list = null;
try {
//Example for Sending an Asynchronous Message
DefaultUdpTransportMapping udpTransportMap = new DefaultUdpTransportMapping();
//udpTransportMap.listen();
Snmp snmp = new Snmp(udpTransportMap);
snmp.listen();
PDUFactory pf = new DefaultPDUFactory(PDU.GET);
TableUtils tu = new TableUtils(snmp, pf);
OID[] columns = new OID[1];
columns[0] = new VariableBinding(new OID(stOID)).getOid();
list = tu.getTable(target, columns, null, null);
snmp.close();
}catch (UnsupportedEncodingException e) {
e.printStackTrace();
}catch (IOException e) {
e.printStackTrace();
}catch (Exception e) {
e.printStackTrace();
}
return list;
}
/**
* 获取CPU信息
* @param oip
* @return getvalue
*/
public List getSNMP_CPU(String oip) {
List getvalue = new ArrayList();
try {
String CPU_OID = ".1.3.6.1.2.1.25.3.3";//查看CPU信息的OID值
List list = getSNMPList(oip,CPU_OID);
List SylLs = new ArrayList();//存放组集合
List OidLs = new ArrayList();//存放OID的索引值对应值
List tempLs = new ArrayList();//存放负载对应值
for (int i = 0; i < list.size(); i++) {
TableEvent te = (TableEvent) list.get(i);
VariableBinding[] vb = te.getColumns();
if(vb==null){
return null;
}else{
for (int j = 0; j < vb.length; j++) {
String _sid = vb[j].getOid().toString().substring(21,22).trim();//获取键
String _oid = vb[j].getOid().toString().substring(23,24).trim();//获id
Variable _s = vb[j].getVariable();
String _sva = "";
//类型判断
if (_s instanceof OctetString) {
_sva = new String(((OctetString)_s).getValue(),"UTF-8");
}else{
_sva = _s.toString();
}
if(Integer.parseInt(_sid)==1){//OID的索引值
OidLs.add(_oid);
SylLs.add(_sva);
}
if(Integer.parseInt(_sid)==2){
tempLs.add(_sva);
}
}
}
}
getvalue.add(OidLs);
getvalue.add(SylLs);
getvalue.add(tempLs);
}catch (NumberFormatException e) {
e.printStackTrace();
}catch (UnsupportedEncodingException e) {
e.printStackTrace();
}catch (IOException e) {
e.printStackTrace();
}catch (IllegalArgumentException e) {
e.printStackTrace();
}catch (RuntimeException e) {
e.printStackTrace();
}catch (Exception e) {
e.printStackTrace();
}
return getvalue;
}
------解决思路----------------------
这个CPU_OID 应该为1.3.6.1.2.1.25.3.3前面不带点的。