首先到http://www.snmp4j.org/上下载一个jar,然后加入引用。
在这里我主要是参照别人的代码实现的snmpget和snmpwalk命令。具体的请看代码
package open.mis.test;
import java.io.IOException;
import java.net.InetAddress;
import java.net.SocketException;
import java.net.SocketTimeoutException;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.snmp4j.CommunityTarget;
import org.snmp4j.PDU;
import org.snmp4j.Snmp;
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;
import snmp.SNMPObject;
import snmp.SNMPSequence;
import snmp.SNMPVarBindList;
import snmp.SNMPv1CommunicationInterface;
public class SnmpManager {
private static final Log log = LogFactory.getLog(SnmpManager.class);
private static int version=0;
private static String protocol = "udp";
private static String port="161";
public static String snmpGet(String ipAddress,String community,String oid){
String resultStat = null;
StringBuilder address = new StringBuilder();
address.append(protocol);
address.append(":");
address.append(ipAddress);
address.append("/");
address.append(port);
Address targetAddress = GenericAddress.parse(address.toString());
PDU pdu = new PDU();
pdu.add(new VariableBinding(new OID(oid)));
pdu.setType(PDU.GET);
//创建共同体对象communityTarget
CommunityTarget target = new CommunityTarget();
target.setCommunity(new OctetString(community));
target.setAddress(targetAddress);
target.setVersion(SnmpConstants.version1);
target.setTimeout(2000);
target.setRetries(1);
DefaultUdpTransportMapping udpTransportMapping = null;
Snmp snmp = null;
try{
//发送同步消息
udpTransportMapping = new DefaultUdpTransportMapping();
udpTransportMapping.listen();
snmp = new Snmp(udpTransportMapping);
ResponseEvent response = snmp.send(pdu, target);
PDU responsePdu = response.getResponse();
if(responsePdu == null){
log.info(ipAddress+":Request time out");
}else {
Object obj = responsePdu.getVariableBindings().firstElement();
VariableBinding variable = (VariableBinding)obj;
System.out.println(variable.getOid());
resultStat = variable.getVariable().toString();
}
}catch (Exception e) {
System.out.println("获取SNMP节点状态时发生错误"+e);
}finally{
if(snmp != null){
try {
snmp.close();
} catch (IOException e2) {
snmp = null;
}
}
if(udpTransportMapping != null){
try {
udpTransportMapping.close();
} catch (Exception e2) {
udpTransportMapping = null;
}
}
}
System.out.println("IP" + ipAddress + " resultStat:"+resultStat);
return resultStat;
}
public static String[] snmpwalk(String ipAddress,String community,String oid){
String[] returnValueStrings = null; //oid走访结果数组
SNMPv1CommunicationInterface comInterface = null;
try{
InetAddress hostAddress = InetAddress.getByName(ipAddress);
comInterface = new SNMPv1CommunicationInterface(version,hostAddress,community);
comInterface.setSocketTimeout(2000);
//返回所有以oid开始的管理信息库变量值
SNMPVarBindList tableVars = comInterface.retrieveMIBTable(oid);
returnValueStrings = new String[tableVars.size()];
//循环处理所有以oid开始的节点的返回值
for(int i=0;i<tableVars.size();i++){
SNMPSequence pair= (SNMPSequence)tableVars.getSNMPObjectAt(i);
SNMPObject snmpValue = pair.getSNMPObjectAt(1);
String typesString = snmpValue.getClass().getName();
if(typesString.equals("snmp.SNMPOctecString")){
String snmpString = snmpValue.toString();
int nullLocation = snmpString.indexOf('\0');
if(nullLocation >=0){
snmpString = snmpString.substring(0,nullLocation);
}
returnValueStrings[i] = snmpString;
System.out.println(snmpString);
}else {
returnValueStrings[i] = snmpValue.toString();
System.out.println(snmpValue.toString());
}
}
}catch (SocketTimeoutException e) {
System.out.println("走访IP为"+ipAddress+",OID为"+oid+"时超时!");
returnValueStrings = null;
}catch (Exception e) {
System.out.println("SNMP走访节点时发生错误");
}finally{
if(comInterface!=null){
try{
comInterface.closeConnection();
}catch (SocketException e) {
comInterface = null;
}
}
}
return returnValueStrings;
}
public static void main(String[] args) {
SnmpManager.snmpGet("127.0.0.1", "public", "1.3.6.1.2.1.1.5.0");
//SnmpManager.snmpGet("127.0.0.1", "public", "sysName.0");
//sSnmpManager.snmpwalk("127.0.0.1", "public", "SNMPv2-MIB");
}
}