java利用snmp4j包来读取snmp协议数据(Manager端)
1 snmp简单介绍
java利用snmp4j包来读取snmp协议数据,很简单的一个流程,就是利用java来读取运行snmp协议的数据,例如服务器、PC机或者路由器等运行了snmp协议的设备。
snmp协议是什么呢?
简单网络管理协议(SNMP),由一组网络管理的标准组成,包含一个 应用层 协议(application layer protocol)、 数据库模型 (database schema)和一组资源对象。该协议能够支持 网络管理系统 ,用以监测连接到网络上的设备是否有任何引起管理上关注的情况。该协议是互联网工程工作小组(IETF,Internet Engineering TaskForce)定义的internet协议簇的一部分。SNMP的目标是管理 互联网 Internet上众多厂家生产的软硬件平台,因此SNMP受Internet标准 网络管理 框架的影响也很大。SNMP已经出到第三个版本的协议,其功能较以前已经大大地加强和改进了。
上面是百度百科上对于snmp的一个定义,其实很简单,就是用来管理网络、查看网络信息的一种协议。
2 在本机上开启snmp协议
那么如何在本机上开启snmp协议呢?
首先,在控制面板中找到“卸载程序”;
在弹出的窗口中单击“打开或关闭Windows功能”;
勾选弹出窗口中的“简单网络管理协议(SNMP)”项后单击“确定”并根据提示完成安装即可。
完成SNMP服务的安装后,右键单击“计算机”选择“管理”
在弹出的“计算机管理”窗口中左侧导航栏中找到“服务”,并在右侧找到“SNMPService”项;
鼠标双击“SNMPService”选项,在弹出的窗口中切换到“安全”选项卡中,如下图添加“接受的社区名称”和接收那些主机发出的SNMP数据包。
“接受的社区名称”是自己定义的任意字符都可以,接收那些主机发出的SNMP数据包定义成你的Nagios服务器即可。到这里被监控端的Windows主机的SNMP服务就配置完成了。
其中要注意的地方就是,在开启后,还要到服务里面给snmp协议添加public权限。
3 snmp4j.jar包的下载
包用的是snmp4j.jar,下载地址是:http://www.snmp4j.org
4 编码测试
SnmpData:
-
package com.test.snmp;
-
import java.io.IOException;
-
import java.util.ArrayList;
-
import java.util.List;
-
import java.util.concurrent.CountDownLatch;
-
import java.util.concurrent.TimeUnit;
-
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.Address;
-
import org.snmp4j.smi.GenericAddress;
-
import org.snmp4j.smi.Integer32;
-
import org.snmp4j.smi.Null;
-
import org.snmp4j.smi.OID;
-
import org.snmp4j.smi.OctetString;
-
import org.snmp4j.smi.VariableBinding;
-
import org.snmp4j.transport.DefaultUdpTransportMapping;
-
public class SnmpData {
-
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,用于返回target
-
*
-
* @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;
-
}
-
/*根据OID,获取单条消息*/
-
public static void snmpGet(String ip, String community, String oid) {
-
CommunityTarget target = createDefault(ip, community);
-
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();
-
System.out.println("-------> 发送PDU <-------");
-
pdu.setType(PDU.GET);
-
ResponseEvent respEvent = snmp.send(pdu, target);
-
System.out.println("PeerAddress:" + respEvent.getPeerAddress());
-
PDU response = respEvent.getResponse();
-
if (response == null) {
-
System.out.println("response is null, request time out");
-
} else {
-
// Vector<VariableBinding> vbVect =
-
// response.getVariableBindings();
-
// System.out.println("vb size:" + vbVect.size());
-
// if (vbVect.size() == 0) {
-
// System.out.println("response vb size is 0 ");
-
// } else {
-
// VariableBinding vb = vbVect.firstElement();
-
// System.out.println(vb.getOid() + " = " + vb.getVariable());
-
// }
-
System.out.println("response pdu size is " + response.size());
-
for (int i = 0; i < response.size(); i++) {
-
VariableBinding vb = response.get(i);
-
System.out.println(vb.getOid() + " = " + vb.getVariable());
-
}
-
}
-
System.out.println("SNMP GET one OID value finished !");
-
} catch (Exception e) {
-
e.printStackTrace();
-
System.out.println("SNMP Get Exception:" + e);
-
} finally {
-
if (snmp != null) {
-
try {
-
snmp.close();
-
} catch (IOException ex1) {
-
snmp = null;
-
}
-
}
-
}
-
}
-
/*根据OID列表,一次获取多条OID数据,并且以List形式返回*/
-
public static void snmpGetList(String ip, String community, List<String> oidList)
-
{
-
CommunityTarget target = createDefault(ip, community);
-
Snmp snmp = null;
-
try {
-
PDU pdu = new PDU();
-
for(String oid:oidList)
-
{
-
pdu.add(new VariableBinding(new OID(oid)));
-
}
-
DefaultUdpTransportMapping transport = new DefaultUdpTransportMapping();
-
snmp = new Snmp(transport);
-
snmp.listen();
-
System.out.println("-------> 发送PDU <-------");
-
pdu.setType(PDU.GET);
-
ResponseEvent respEvent = snmp.send(pdu, target);
-
System.out.println("PeerAddress:" + respEvent.getPeerAddress());
-
PDU response = respEvent.getResponse();
-
if (response == null) {
-
System.out.println("response is null, request time out");
-
} else {
-
System.out.println("response pdu size is " + response.size());
-
for (int i = 0; i < response.size(); i++) {
-
VariableBinding vb = response.get(i);
-
System.out.println(vb.getOid() + " = " + vb.getVariable());
-
}
-
}
-
System.out.println("SNMP GET one OID value finished !");
-
} catch (Exception e) {
-
e.printStackTrace();
-
System.out.println("SNMP Get Exception:" + e);
-
} finally {
-
if (snmp != null) {
-
try {
-
snmp.close();
-
} catch (IOException ex1) {
-
snmp = null;
-
}
-
}
-
}
-
}
-
/*根据OID列表,采用异步方式一次获取多条OID数据,并且以List形式返回*/
-
public static void snmpAsynGetList(String ip, String community,List<String> oidList)
-
{
-
CommunityTarget target = createDefault(ip, community);
-
Snmp snmp = null;
-
try {
-
PDU pdu = new PDU();
-
for(String oid:oidList)
-
{
-
pdu.add(new VariableBinding(new OID(oid)));
-
}
-
DefaultUdpTransportMapping transport = new DefaultUdpTransportMapping();
-
snmp = new Snmp(transport);
-
snmp.listen();
-
System.out.println("-------> 发送PDU <-------");
-
pdu.setType(PDU.GET);
-
ResponseEvent respEvent = snmp.send(pdu, target);
-
System.out.println("PeerAddress:" + respEvent.getPeerAddress());
-
PDU response = respEvent.getResponse();
-
/*异步获取*/
-
final CountDownLatch latch = new CountDownLatch(1);
-
ResponseListener listener = new ResponseListener() {
-
public void onResponse(ResponseEvent event) {
-
((Snmp) event.getSource()).cancel(event.getRequest(), this);
-
PDU response = event.getResponse();
-
PDU request = event.getRequest();
-
System.out.println("[request]:" + request);
-
if (response == null) {
-
System.out.println("[ERROR]: response is null");
-
} else if (response.getErrorStatus() != 0) {
-
System.out.println("[ERROR]: response status"
-
+ response.getErrorStatus() + " Text:"
-
+ response.getErrorStatusText());
-
} else {
-
System.out.println("Received response Success!");
-
for (int i = 0; i < response.size(); i++) {
-
VariableBinding vb = response.get(i);
-
System.out.println(vb.getOid() + " = "
-
+ vb.getVariable());
-
}
-
System.out.println("SNMP Asyn GetList OID finished. ");
-
latch.countDown();
-
}
-
}
-
};
-
pdu.setType(PDU.GET);
-
snmp.send(pdu, target, null, listener);
-
System.out.println("asyn send pdu wait for response...");
-
boolean wait = latch.await(30, TimeUnit.SECONDS);
-
System.out.println("latch.await =:" + wait);
-
snmp.close();
-
System.out.println("SNMP GET one OID value finished !");
-
} catch (Exception e) {
-
e.printStackTrace();
-
System.out.println("SNMP Get Exception:" + e);
-
} finally {
-
if (snmp != null) {
-
try {
-
snmp.close();
-
} catch (IOException ex1) {
-
snmp = null;
-
}
-
}
-
}
-
}
-
/*根据targetOID,获取树形数据*/
-
public static void snmpWalk(String ip, String community, String targetOid)
-
{
-
CommunityTarget target = createDefault(ip, community);
-
TransportMapping transport = null;
-
Snmp snmp = null;
-
try {
-
transport = new DefaultUdpTransportMapping();
-
snmp = new Snmp(transport);
-
transport.listen();
-
PDU pdu = new PDU();
-
OID targetOID = new OID(targetOid);
-
pdu.add(new VariableBinding(targetOID));
-
boolean finished = false;
-
System.out.println("----> demo start <----");
-
while (!finished) {
-
VariableBinding vb = null;
-
ResponseEvent respEvent = snmp.getNext(pdu, target);
-
PDU response = respEvent.getResponse();
-
if (null == response) {
-
System.out.println("responsePDU == null");
-
finished = true;
-
break;
-
} else {
-
vb = response.get(0);
-
}
-
// check finish
-
finished = checkWalkFinished(targetOID, pdu, vb);
-
if (!finished) {
-
System.out.println("==== walk each vlaue :");
-
System.out.println(vb.getOid() + " = " + vb.getVariable());
-
// Set up the variable binding for the next entry.
-
pdu.setRequestID(new Integer32(0));
-
pdu.set(0, vb);
-
} else {
-
System.out.println("SNMP walk OID has finished.");
-
snmp.close();
-
}
-
}
-
System.out.println("----> demo end <----");
-
} catch (Exception e) {
-
e.printStackTrace();
-
System.out.println("SNMP walk Exception: " + e);
-
} finally {
-
if (snmp != null) {
-
try {
-
snmp.close();
-
} catch (IOException ex1) {
-
snmp = null;
-
}
-
}
-
}
-
}
-
private static boolean checkWalkFinished(OID targetOID, PDU pdu,
-
VariableBinding vb) {
-
boolean finished = false;
-
if (pdu.getErrorStatus() != 0) {
-
System.out.println("[true] responsePDU.getErrorStatus() != 0 ");
-
System.out.println(pdu.getErrorStatusText());
-
finished = true;
-
} else if (vb.getOid() == null) {
-
System.out.println("[true] vb.getOid() == null");
-
finished = true;
-
} else if (vb.getOid().size() < targetOID.size()) {
-
System.out.println("[true] vb.getOid().size() < targetOID.size()");
-
finished = true;
-
} else if (targetOID.leftMostCompare(targetOID.size(), vb.getOid()) != 0) {
-
System.out.println("[true] targetOID.leftMostCompare() != 0");
-
finished = true;
-
} else if (Null.isExceptionSyntax(vb.getVariable().getSyntax())) {
-
System.out
-
.println("[true] Null.isExceptionSyntax(vb.getVariable().getSyntax())");
-
finished = true;
-
} else if (vb.getOid().compareTo(targetOID) <= 0) {
-
System.out.println("[true] Variable received is not "
-
+ "lexicographic successor of requested " + "one:");
-
System.out.println(vb.toString() + " <= " + targetOID);
-
finished = true;
-
}
-
return finished;
-
}
-
/*根据targetOID,异步获取树形数据*/
-
public static void snmpAsynWalk(String ip, String community, String oid)
-
{
-
final CommunityTarget target = createDefault(ip, community);
-
Snmp snmp = null;
-
try {
-
System.out.println("----> demo start <----");
-
DefaultUdpTransportMapping transport = new DefaultUdpTransportMapping();
-
snmp = new Snmp(transport);
-
snmp.listen();
-
final PDU pdu = new PDU();
-
final OID targetOID = new OID(oid);
-
final CountDownLatch latch = new CountDownLatch(1);
-
pdu.add(new VariableBinding(targetOID));
-
ResponseListener listener = new ResponseListener() {
-
public void onResponse(ResponseEvent event) {
-
((Snmp) event.getSource()).cancel(event.getRequest(), this);
-
try {
-
PDU response = event.getResponse();
-
// PDU request = event.getRequest();
-
// System.out.println("[request]:" + request);
-
if (response == null) {
-
System.out.println("[ERROR]: response is null");
-
} else if (response.getErrorStatus() != 0) {
-
System.out.println("[ERROR]: response status"
-
+ response.getErrorStatus() + " Text:"
-
+ response.getErrorStatusText());
-
} else {
-
System.out
-
.println("Received Walk response value :");
-
VariableBinding vb = response.get(0);
-
boolean finished = checkWalkFinished(targetOID,
-
pdu, vb);
-
if (!finished) {
-
System.out.println(vb.getOid() + " = "
-
+ vb.getVariable());
-
pdu.setRequestID(new Integer32(0));
-
pdu.set(0, vb);
-
((Snmp) event.getSource()).getNext(pdu, target,
-
null, this);
-
} else {
-
System.out
-
.println("SNMP Asyn walk OID value success !");
-
latch.countDown();
-
}
-
}
-
} catch (Exception e) {
-
e.printStackTrace();
-
latch.countDown();
-
}
-
}
-
};
-
snmp.getNext(pdu, target, null, listener);
-
System.out.println("pdu 已发送,等到异步处理结果...");
-
boolean wait = latch.await(30, TimeUnit.SECONDS);
-
System.out.println("latch.await =:" + wait);
-
snmp.close();
-
System.out.println("----> demo end <----");
-
} catch (Exception e) {
-
e.printStackTrace();
-
System.out.println("SNMP Asyn Walk Exception:" + e);
-
}
-
}
-
/*根据OID和指定string来设置设备的数据*/
-
public static void setPDU(String ip,String community,String oid,String val) throws IOException
-
{
-
CommunityTarget target = createDefault(ip, community);
-
Snmp snmp = null;
-
PDU pdu = new PDU();
-
pdu.add(new VariableBinding(new OID(oid),new OctetString(val)));
-
pdu.setType(PDU.SET);
-
DefaultUdpTransportMapping transport = new DefaultUdpTransportMapping();
-
snmp = new Snmp(transport);
-
snmp.listen();
-
System.out.println("-------> 发送PDU <-------");
-
snmp.send(pdu, target);
-
snmp.close();
-
}
-
}
SnmpTest:
-
package com.test.snmp;
-
import java.util.ArrayList;
-
import java.util.List;
-
import org.snmp4j.log.ConsoleLogFactory;
-
import org.snmp4j.log.LogAdapter;
-
import org.snmp4j.log.LogFactory;
-
import com.test.snmp.SnmpData;
-
public class SnmpTest {
-
/**
-
* @param args
-
*/
-
public static void main(String[] args) {
-
// TODO Auto-generated method stub
-
SnmpTest test = new SnmpTest();
-
test.testGet();
-
}
-
public void testGet()
-
{
-
String ip = "127.0.0.1";
-
String community = "public";
-
String oidval = "1.3.6.1.2.1.1.6.0";
-
SnmpData.snmpGet(ip, community, oidval);
-
}
-
public void testGetList(){
-
String ip = "127.0.0.1";
-
String community = "public";
-
List<String> oidList=new ArrayList<String>();
-
oidList.add("1.3.6.1.2.1.1.5.0");
-
oidList.add("1.3.6.1.2.1.1.7.0");
-
SnmpData.snmpGetList(ip, community, oidList);
-
}
-
public void testGetAsyList()
-
{
-
String ip = "127.0.0.1";
-
String community = "public";
-
List<String> oidList=new ArrayList<String>();
-
oidList.add("1.3.6.1.2.1");
-
oidList.add("1.3.6.1.2.12");
-
SnmpData.snmpAsynGetList(ip, community, oidList);
-
System.out.println("i am first!");
-
}
-
public void testWalk()
-
{
-
String ip = "127.0.0.1";
-
String community = "public";
-
String targetOid = "1.3.6.1.2.1.1.5.0";
-
SnmpData.snmpWalk(ip, community, targetOid);
-
}
-
public void testAsyWalk()
-
{
-
String ip = "127.0.0.1";
-
String community = "public";
-
// 异步采集数据
-
SnmpData.snmpAsynWalk(ip, community, "1.3.6.1.2.1.25.4.2.1.2");
-
}
-
public void testSetPDU() throws Exception
-
{
-
String ip = "127.0.0.1";
-
String community = "public";
-
SnmpData.setPDU(ip, community, "1.3.6.1.2.1.1.6.0","jianghuiwen");
-
}
-
public void testVersion()
-
{
-
System.out.println(org.snmp4j.version.VersionInfo.getVersion());
-
}
-
}
文档和源码****下载:http://download.****.net/detail/davebobo/9509435
ref: http://www.tuicool.com/articles/FF7fEbi
ref: http://blog.chinaunix.net/uid-21857285-id-3340206.html
-------------------------更新--------------------------------------
Trap功能的实现:
下面是两个用于发送和接收Trap报文信息的类:
接收Trap消息类:
-
import java.io.IOException;
-
import java.net.UnknownHostException;
-
import java.util.Vector;
-
import org.snmp4j.CommandResponder;
-
import org.snmp4j.CommandResponderEvent;
-
import org.snmp4j.MessageDispatcherImpl;
-
import org.snmp4j.Snmp;
-
import org.snmp4j.TransportMapping;
-
import org.snmp4j.mp.MPv1;
-
import org.snmp4j.mp.MPv2c;
-
import org.snmp4j.mp.MPv3;
-
import org.snmp4j.security.SecurityModels;
-
import org.snmp4j.security.SecurityProtocols;
-
import org.snmp4j.security.USM;
-
import org.snmp4j.smi.Address;
-
import org.snmp4j.smi.GenericAddress;
-
import org.snmp4j.smi.OctetString;
-
import org.snmp4j.smi.TcpAddress;
-
import org.snmp4j.smi.UdpAddress;
-
import org.snmp4j.smi.VariableBinding;
-
import org.snmp4j.transport.DefaultTcpTransportMapping;
-
import org.snmp4j.transport.DefaultUdpTransportMapping;
-
import org.snmp4j.util.MultiThreadedMessageDispatcher;
-
import org.snmp4j.util.ThreadPool;
-
/**
-
* 本类用于监听代理进程的Trap信息
-
*
-
* @author zhanjia
-
*
-
*/
-
public class MultiThreadedTrapReceiver implements CommandResponder {
-
private MultiThreadedMessageDispatcher dispatcher;
-
private Snmp snmp = null;
-
private Address listenAddress;
-
private ThreadPool threadPool;
-
public MultiThreadedTrapReceiver() {
-
// BasicConfigurator.configure();
-
}
-
private void init() throws UnknownHostException, IOException {
-
threadPool = ThreadPool.create("Trap", 2);
-
dispatcher = new MultiThreadedMessageDispatcher(threadPool,
-
new MessageDispatcherImpl());
-
listenAddress = GenericAddress.parse(System.getProperty(
-
"snmp4j.listenAddress", "udp:192.168.1.23/162")); // 本地IP与监听端口
-
TransportMapping transport;
-
// 对TCP与UDP协议进行处理
-
if (listenAddress instanceof UdpAddress) {
-
transport = new DefaultUdpTransportMapping(
-
(UdpAddress) listenAddress);
-
} else {
-
transport = new DefaultTcpTransportMapping(
-
(TcpAddress) listenAddress);
-
}
-
snmp = new Snmp(dispatcher, transport);
-
snmp.getMessageDispatcher().addMessageProcessingModel(new MPv1());
-
snmp.getMessageDispatcher().addMessageProcessingModel(new MPv2c());
-
snmp.getMessageDispatcher().addMessageProcessingModel(new MPv3());
-
USM usm = new USM(SecurityProtocols.getInstance(), new OctetString(MPv3
-
.createLocalEngineID()), 0);
-
SecurityModels.getInstance().addSecurityModel(usm);
-
snmp.listen();
-
}
-
public void run() {
-
try {
-
init();
-
snmp.addCommandResponder(this);
-
System.out.println("开始监听Trap信息!");
-
} catch (Exception ex) {
-
ex.printStackTrace();
-
}
-
}
-
/**
-
* 实现CommandResponder的processPdu方法, 用于处理传入的请求、PDU等信息
-
* 当接收到trap时,会自动进入这个方法
-
*
-
* @param respEvnt
-
*/
-
public void processPdu(CommandResponderEvent respEvnt) {
-
// 解析Response
-
if (respEvnt != null && respEvnt.getPDU() != null) {
-
Vector<VariableBinding> recVBs = respEvnt.getPDU().getVariableBindings();
-
for (int i = 0; i < recVBs.size(); i++) {
-
VariableBinding recVB = recVBs.elementAt(i);
-
System.out.println(recVB.getOid() + " : " + recVB.getVariable());
-
}
-
}
-
}
-
public static void main(String[] args) {
-
MultiThreadedTrapReceiver multithreadedtrapreceiver = new MultiThreadedTrapReceiver();
-
multithreadedtrapreceiver.run();
-
}
-
}
发送Trap消息的类:
-
import java.io.IOException;
-
import java.util.Vector;
-
import org.snmp4j.CommunityTarget;
-
import org.snmp4j.PDU;
-
import org.snmp4j.Snmp;
-
import org.snmp4j.TransportMapping;
-
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;
-
/**
-
* 本类用于向管理进程发送Trap信息
-
*
-
* @author zhanjia
-
*
-
*/
-
public class SnmpUtilSendTrap {
-
private Snmp snmp = null;
-
private Address targetAddress = null;
-
public void initComm() throws IOException {
-
// 设置管理进程的IP和端口
-
targetAddress = GenericAddress.parse("udp:192.168.1.23/162");
-
TransportMapping transport = new DefaultUdpTransportMapping();
-
snmp = new Snmp(transport);
-
transport.listen();
-
}
-
/**
-
* 向管理进程发送Trap报文
-
*
-
* @throws IOException
-
*/
-
public void sendPDU() throws IOException {
-
// 设置 target
-
CommunityTarget target = new CommunityTarget();
-
target.setAddress(targetAddress);
-
// 通信不成功时的重试次数
-
target.setRetries(2);
-
// 超时时间
-
target.setTimeout(1500);
-
// snmp版本
-
target.setVersion(SnmpConstants.version2c);
-
// 创建 PDU
-
PDU pdu = new PDU();
-
pdu.add(new VariableBinding(new OID(".1.3.6.1.2.3377.10.1.1.1.1"),
-
new OctetString("SnmpTrap")));
-
pdu.add(new VariableBinding(new OID(".1.3.6.1.2.3377.10.1.1.1.2"),
-
new OctetString("JavaEE")));
-
pdu.setType(PDU.TRAP);
-
// 向Agent发送PDU,并接收Response
-
ResponseEvent respEvnt = snmp.send(pdu, target);
-
// 解析Response
-
if (respEvnt != null && respEvnt.getResponse() != null) {
-
Vector<VariableBinding> recVBs = respEvnt.getResponse()
-
.getVariableBindings();
-
for (int i = 0; i < recVBs.size(); i++) {
-
VariableBinding recVB = recVBs.elementAt(i);
-
System.out.println(recVB.getOid() + " : " + recVB.getVariable());
-
}
-
}
-
}
-
public static void main(String[] args) {
-
try {
-
SnmpUtilSendTrap util = new SnmpUtilSendTrap();
-
util.initComm();
-
util.sendPDU();
-
} catch (IOException e) {
-
e.printStackTrace();
-
}
-
}
-
}
1、运行MultiThreadedTrapReceiver类,提示“开始监听Trap信息!”并处理监听状态
2、运行SnmpUtilSendTrap类,运行完毕后,将会在“开始监听Trap信息!”后面显示:
1.3.6.1.2.3377.10.1.1.1.1 : SnmpTrap
1.3.6.1.2.3377.10.1.1.1.2 : JavaEE
MultiThreadedTrapReceiver输出面板中显示以上两行即表示测试成功!
说明:
本例只在本人电脑上测试过,操作系统为Windows
ref:http://www.iteye.com/topic/308836
-----------------------------------------------------更新20160621-------------------------------------------------
接下来问题又来了,我们发的trap消息如果manager掉线我们应该考虑将trap消息保存下来,此时snmp inform就用上场了。详解请看下文:http://blog.****.net/davebobo/article/details/51730688