java 编写snmp_使用Java进行SNMP编程
简单的说,只需要以下几个步骤
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());
}
}
}
更多推荐


所有评论(0)