java使用snmp协议抓取设备信息
pom.xml
!-- https://mvnrepository.com/artifact/org.snmp4j/snmp4j -->
<dependency>
<groupId>org.snmp4j</groupId>
<artifactId>snmp4j</artifactId>
<version>2.8.2</version>
</dependency>
SnmpUtil
package com.lanxum.domas.util;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.lanxum.domas.controller.SnmpController;
import lombok.extern.slf4j.Slf4j;
import org.snmp4j.CommunityTarget;
import org.snmp4j.PDU;
import org.snmp4j.Snmp;
import org.snmp4j.TransportMapping;
import org.snmp4j.event.ResponseEvent;
import org.snmp4j.event.ResponseListener;
import org.snmp4j.mp.SnmpConstants;
import org.snmp4j.smi.*;
import org.snmp4j.transport.DefaultUdpTransportMapping;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
/**
* Created by JiangJunpeng on 2020/4/22.<br>
*/
@Slf4j
public class SnmpUtil {
public static final int DEFAULT_VERSION = SnmpConstants.version2c;
public static final String DEFAULT_PROTOCOL = "udp";
public static final int DEFAULT_PORT = 161;
public static final long DEFAULT_TIMEOUT = 3 * 1000L;
public static final int DEFAULT_RETRY = 3;
/**
* 创建对象communityTarget
*
* @param targetAddress
* @param community
* @param version
* @param timeOut
* @param retry
* @return CommunityTarget
*/
public static CommunityTarget createDefault(String ip, String community) {
Address address = GenericAddress.parse(DEFAULT_PROTOCOL + ":" + ip + "/" + DEFAULT_PORT);
CommunityTarget target = new CommunityTarget();
target.setCommunity(new OctetString(community));
target.setAddress(address);
target.setVersion(DEFAULT_VERSION);
target.setTimeout(DEFAULT_TIMEOUT); // milliseconds
target.setRetries(DEFAULT_RETRY);
return target;
}
/*获取信息*/
public static JSONArray snmpGet(String ip, String community, String oid) {
CommunityTarget target = createDefault(ip, community);
JSONArray jsonArray = new JSONArray();
Snmp snmp = null;
try {
PDU pdu = new PDU();
// pdu.add(new VariableBinding(new OID(new int[]
// {1,3,6,1,2,1,1,2})));
pdu.add(new VariableBinding(new OID(oid)));
DefaultUdpTransportMapping transport = new DefaultUdpTransportMapping();
snmp = new Snmp(transport);
snmp.listen();
log.info("-------> 发送PDU <-------");
pdu.setType(PDU.GET);
ResponseEvent respEvent = snmp.send(pdu, target);
log.info("PeerAddress:" + respEvent.getPeerAddress());
PDU response = respEvent.getResponse();
if (response == null) {
log.info("response is null, request time out");
} else {
// Vector<VariableBinding> vbVect =
// response.getVariableBindings();
// log.info("vb size:" + vbVect.size());
// if (vbVect.size() == 0) {
// log.info("response vb size is 0 ");
// } else {
// VariableBinding vb = vbVect.firstElement();
// log.info(vb.getOid() + " = " + vb.getVariable());
// }
log.info("response pdu size is " + response.size());
for (int i = 0; i < response.size(); i++) {
VariableBinding vb = response.get(i);
JSONObject jsonObject = new JSONObject();
jsonObject.put("oid", vb.getOid().toString());
j