当前位置:编程学习 > JAVA >>

请问snmp 怎么获取远程机器上的oid? 刚接触snmp实在是一头雾水。谢谢

请求各位高手给予帮助,小弟十分感激。
给我个案例也行。
能监控到两台电脑的例子。
刚接触snmp实在是一头雾水。谢谢

-----------------------------------------------------------------------------------------------
这是我的主测试类:
import org.snmp4j.smi.OID;
public class GetINFO_Test {
static String ip="127.0.0.1";
public static void main(String[] args) {
new GetINFO().getCPU();
}

//获取CPU
private void getCPU() {
OID oid=new OID(".1.3.6.1.2.1.25.3.3.1.2");  //这个oid是从mib browser里查到的.
                                                               //.1.3.6.1.2.1.25.3.3.1.2.1
                                                               //.1.3.6.1.2.1.25.3.3.1.2.2
                                                               //oid的最后一位不要
SnmpOperaUtil.snmpWalk(null, ip, "public", oid, 2);
}
}

----------------------------------------------------------------------------------------------

这是我 工具类: snmpWalk

import java.util.Map;
import org.snmp4j.CommunityTarget;
import org.snmp4j.Snmp;
import org.snmp4j.smi.OID;

public class SnmpOperaUtil {
private static String SNMP_PORT = "161"; // 监控时使用的端口
//类似Servlet
//GET
public static void snmpGet(Map<String, String> datas, String ipAddress, String community, String mo, int snmpVersion) {
CommunityTarget target = SnmpOperation.createCommunityTarget(ipAddress, SNMP_PORT, community, snmpVersion);
try {
Snmp snmp = SnmpOperation.createSnmp();
SnmpOperation.snmpGet(datas, mo, snmp, target);
snmp.close();
} catch (Exception e) {
e.printStackTrace();
}
}

//WALK
public static void snmpWalk(Map<String, String> datas, String ipAddress, String community, OID mo, int snmpVersion) {
CommunityTarget target = SnmpOperation.createCommunityTarget(ipAddress, SNMP_PORT, community, snmpVersion);
try {
Snmp snmp = SnmpOperation.createSnmp();
OID oid = new OID(mo.getValue());
SnmpOperation.snmpWalk(datas, oid, snmp, target, SnmpOperation.ROOT);
snmp.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}

------------------------------------------------------------------------------------------------

这是我的操作类:   snmpWalk
import org.snmp4j.CommunityTarget;
import org.snmp4j.PDU;
import org.snmp4j.Snmp;
import org.snmp4j.TransportMapping;
import org.snmp4j.event.ResponseEvent;
import org.snmp4j.smi.OID;
import org.snmp4j.smi.OctetString;
import org.snmp4j.smi.UdpAddress;
import org.snmp4j.smi.Variable;
import org.snmp4j.smi.VariableBinding;
import org.snmp4j.transport.DefaultUdpTransportMapping;
public class SnmpOperation {

public static void snmpWalk(Map<String, String> datas, OID oid, Snmp snmp, CommunityTarget target, String type) throws Exception {
if (type.equals(SnmpOperation.ROOT))
type = oid.toString();
PDU request = createPDU(PDU.GETNEXT);
request.add(new VariableBinding(oid));
ResponseEvent rspEvt = snmp.send(request, target);
PDU response = rspEvt.getResponse();
if (response.getErrorIndex() == PDU.noError && response.getErrorStatus() == PDU.noError) {
VariableBinding vb = (VariableBinding) response.getVariableBindings().firstElement();
OID curr_oid = vb.getOid();
String curr_str = curr_oid.toString();
if (curr_str.contains(type)) {// 判断获得的值是否是指定根节点下面
String key = vb.getOid().toString();
datas.put(key.replace(type, ""), vb.getVariable().toString());
snmpWalk(datas, curr_oid, snmp, target, type);
}
} else {
throw new Exception("错误信息:" + response.getErrorStatusText());
}
}

}


-----------------------------------------------------------------------------------------------

运行结果报异常:
org.snmp4j.MessageException: Unsupported message processing model: 2
at org.snmp4j.MessageDispatcherImpl.sendPdu(MessageDispatcherImpl.java:361)
at org.snmp4j.Snmp.sendMessage(Snmp.java:945)
at org.snmp4j.Snmp.send(Snmp.java:794)
at org.snmp4j.Snmp.send(Snmp.java:749)
at com.monitorinfo.test_snmp.SnmpOperation.snmpWalk(SnmpOperation.java:193)
at com.monitorinfo.test_snmp.SnmpOperaUtil.snmpWalk(SnmpOperaUtil.java:31)
at com.monitorinfo.test_snmp.GetINFO.getCPU(GetINFO.java:14)
at com.monitorinfo.test_snmp.GetINFO.main(GetINFO.java:9)



我是这样想的,我想得到cpu使用率。   
应该是这样比如: 机器A 是两核CPU , 得到每个cpu oid = value. 然后 拿value的和 除以2



SNMP Snmp4j 远程监控 java --------------------编程问答-------------------- 请问你用的是什么软件?
补充:Java ,  Java相关
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,