简单的说,只需要以下几个步骤

1) 创建Snmp对象snmp

2) 创建CommunityTarget对象target,并指定community, version, address, timeout, retry等参数。

3) 创建PDU对象pdu,并指定操作类型(GET/GETNEXT/GETBULK/SET), 添加VariableBinding(也就是待操作的OID),

如果是GETBULK操作,还可以指定MaxRepetitions和NonRepeaters。

注意一定要指定MaxRepetitions,默认值是0,那样不会返回任何结果。

4) 调用snmp.send(pdu, target)方法,发送请求请返回结果

引入jar包 org.snmp4j

import java.io.IOException;

import java.util.ArrayList;

import java.util.Collection;

import java.util.HashMap;

import java.util.List;

import java.util.Map;

import java.util.Vector;

import org.snmp4j.CommunityTarget;

import org.snmp4j.DefaultTimeoutModel;

import org.snmp4j.PDU;

import org.snmp4j.Snmp;

import org.snmp4j.Target;

import org.snmp4j.TransportMapping;

import org.snmp4j.event.ResponseEvent;

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;

public class snmpv2 {

private Snmp snmp;

private Target target;

private PDU pdu;

//为了减少代码数量,先不写get set方法

private String host;

private int port;

private int version;

private String community;

private int retries;

private long timeout;

private int type;

public void snmpGet(HashMap result, Collection oids, Snmp snmp, PDU pdu, CommunityTarget target){

pdu.setType(PDU.GET);

for(String oid : oids){

pdu.add(new VariableBinding(new OID(oid)));

}

ResponseEvent responseEvent;

try {

responseEvent = snmp.send(pdu, target);

PDU response = responseEvent.getResponse();

if(response != null){

if(response.getErrorIndex() == PDU.noError && response.getErrorStatus() == PDU.noError){

Vector vector = (Vector)response.getVariableBindings();

for(VariableBinding v : vector){

result.put(v.getOid().toString(), v.getVariable().toString());

}

}else{

//throw new SnmpGetException(response.getErrorStatusText());

}

}else{

//throw new SnmpGetException("no response");

}

} catch (IOException e) {

e.printStackTrace();

}

}

public Map snmpGet(Collection oids){

HashMap result = new HashMap();

snmpGet(result, oids, snmp, pdu, (CommunityTarget) target);

return result;

}

public Map snmpGet(String oid){

List list = new ArrayList();

list.add(oid);

return snmpGet(list);

}

public Snmp createSnmp(){

if(this.snmp == null){

try {

TransportMapping transport;

transport = new DefaultUdpTransportMapping();

Snmp snmp = new Snmp(transport);

snmp.setTimeoutModel(new DefaultTimeoutModel());

snmp.listen();

return snmp;

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

return snmp;

}

public Target createTarget(){

Target target = new CommunityTarget();

Address address = GenericAddress.parse("udp:" + host + "/" + port);

target.setAddress(address);

target.setRetries(retries);

target.setTimeout(timeout);

target.setVersion(version);

target.setSecurityName(new OctetString(community));

return target;

}

public PDU createPDU(){

PDU pdu = new PDU();

pdu.setType(type);

return pdu;

}

public static void main(String[] args) {

snmpv2 snmpv2 = new snmpv2();

//配置snmp 版本号version,主机ip host,主机端口 port, 团体字 community,重试次数retries, 超时时间 timeout,snmp模式type

snmpv2.host = "127.0.0.1";

snmpv2.port = 161;

snmpv2.community = "public";

snmpv2.retries = 3;

snmpv2.timeout = 10000;

snmpv2.version = 1;

snmpv2.type = PDU.GET;

snmpv2.snmp = snmpv2.createSnmp();

snmpv2.target = snmpv2.createTarget();

snmpv2.pdu = snmpv2.createPDU();

Map map = snmpv2.snmpGet("1.3.6.1.4.1.2021.4.3.0");

for(Map.Entry entry : map.entrySet()){

System.out.println(entry.getKey() + " " + entry.getValue());

}

}

}

更多推荐