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()); -
} -
}
文档和源码csdn下载:http://download.csdn.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.csdn.net/davebobo/article/details/51730688