MultiThreadedTrapReceiver类:用于接收trap消息
package com.snmp.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;
/**
* 服务器端,监听162端口
*
*/
public class MultiThreadedTrapReceiver implements CommandResponder {
private MultiThreadedMessageDispatcher dispatcher;
private Snmp snmp = null;
private Address listenAddress;
private ThreadPool threadPool;
public MultiThreadedTrapReceiver() {
}
private void init() throws UnknownHostException, IOException {
threadPool = ThreadPool.create("Trap", 2);
dispatcher = new MultiThreadedMessageDispatcher(threadPool,
new MessageDispatcherImpl());
listenAddress = GenericAddress.parse("udp:127.0.0.1/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();
}
}
/**
* 当监听到消息时,会自动调用该方法
*/
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();
}
}
SendTrap类:用于发送trap消息
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消息
*
*/
public class SendTrap {
private Snmp snmp = null;
private Address targetAddress = null;
public void initComm() throws IOException {
// 设置管理进程的IP和端口
targetAddress = GenericAddress.parse("udp:127.0.0.1/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 {
SendTrap sender = new SendTrap();
sender.initComm();
sender.sendPDU();
} catch (IOException e) {
e.printStackTrace();
}
}
}
1、运行MultiThreadedTrapReceiver类,提示“开始监听Trap信息!”并处理监听状态
2、运行SendTrap类,运行完毕后,将会在“开始监听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输出面板中显示以上两行即表示测试成功!
分享到:
相关推荐
Java使用SNMP4J实现snmp trap接口发送消息_20170808_LK
snmp4j 实现snmp trap发送与接收
snmp4j的发送和接收trap
使用snmp4j实现Snmp功能使用snmp4j实现Snmp功能
监听SNMPtrap消息的小工具,自带解析功能
本源代码为一个大型程序中的部分,描述了如何使用开源代码SNMP4J的异步模式。
snmp4j可采集网络设备资源信息,为网管系统必备工具,包含源码
eclipse工程(编译通过,能运行) snmp4j API get,getnext,set,trap,取mib值 实例
snmp4j api文档
利用snmp4j实现snmp协议三个版本的get、getnext、set、trap操作的源代码,帮助你快速上手snmp协议的实现
SNMP4J——一个支持java管理器和代理,支持snmp应用程序接口的类库。 SNMP4J是一个商业类库,而且开源免费,它也是一个有着很高技术艺术性的SNMP执行能力的类库,支持J2SE1.4或更高的版本。SNMP4J支持指令发生器...
snmp4j 2.2.5 版本的 snmp4j 2.2.5 版本的 snmp4j 2.2.5 版本的
1 windows下安装和配置snmp服务 2 用snmp4j获取本地所有oid 代码
使用Java进行SNMP编程-SNMP4J-代码实例,代码实例实现了GET, GETNEXT, GETBULK, Walk, SET操作; 提供于做服务器监控的朋友;
applet调用vnc,snmp监听数据,发送snmp消息
SNMP4J——一个支持java管理器和代理,支持snmp应用程序接口的类库。 SNMP4J是一个商业类库,而且开源免费,它也是一个有着很高技术艺术性的SNMP执行能力的类库,支持J2SE1.4或更高的版本。SNMP4J支持指令发生器...
使用snmp4j实现Snmp的一些常用的功能
SNMP4J官网上的snmp4j-agent源码
利用SNMP4J实现Snmp Trap完整例子 - 企业应用 - Java - JavaEye论坛.mht