package trap;
/** *
* 测试snmp4j 中trap的接收方法.这里只测试了v1和v2的trap.
* trap接收原理:snmp实例在注册了实现CommandResponder的listener之后,可以通过异步调用的方法
* 将收到内容输出.
* listen()启动监听线程,该线程中的操作是监听指定端口,在收到trap告警之后将调用
* listener.processPdu(CommandResponderEvent event)方法,由processPdu来处理trap信息.
*/
import java.net.InetAddress;
import java.text.DateFormat;
import java.util.Date;
import org.snmp4j.CommandResponder;
import org.snmp4j.CommandResponderEvent;
import org.snmp4j.PDU;
import org.snmp4j.Snmp;
import org.snmp4j.TransportMapping;
import org.snmp4j.smi.UdpAddress;
import org.snmp4j.transport.DefaultUdpTransportMapping;
import snmpPo.TrapPo;
import util.UtilTrap;
import mib.MibDao;
public class TrapThread {
// Trap处理方法
public static void TrapActionRun() {
try {
// 取出本机的IP地址
InetAddress inet = InetAddress.getLocalHost();
String IP = inet.getHostAddress();
//IP="198.9.1.191";
// snmp4j通过transportmapping的监听端口接收SNMP信息,所以这里初始化一个transportmapping
// 注明本机的IP地址及接收trap的端口.
TransportMapping transport = new DefaultUdpTransportMapping(
new UdpAddress(IP + "/162"));
// 创建一个处理消息的snmp实例
Snmp snmp = new Snmp(transport);
// CommandResponder是一个listener,用以处理获取的trap消息
CommandResponder trapPrinter = new CommandResponder() {
public synchronized void processPdu(CommandResponderEvent e) {
// 创建一个TrapPo对象
TrapPo po = new TrapPo();
// 取设备的IP地址
String IP = e.getPeerAddress().toString();
System.out
.println("*****************************************************************");
String ip[] = IP.split("/");
System.out.println("设备的IP地址-------------------" + ip[0]);
po.setAddressIP(ip[0]);
System.out.println("Community name----------------"
+ new String(e.getSecurityName()));
PDU command = e.getPDU();
if (command != null) {
// 这里示例输出trap的内容.具体的trap解析等工作在这里进行
System.out.println(" PDU信息-----------"
+ command.toString());
// 获取相关的信息
String s[] = command.toString().split(",");
for (int i = 0; i < s.length; i++) {
String xx = s[i];
String x[] = xx.split("=");
// System.out.println("--------------"+x[0]);
// System.out.println("--------------"+x[1]);
if (x[0].equals("enterprise")) {
System.out.println("enterprise------" + x[1]);
po.setEnterprise(x[1]);
}
if (x[0].equals("genericTrap")) {
System.out.println("genericTrap------" + x[1]);
System.out.println("genericTrap content------" + UtilTrap.parseTrapContent(x[1]));
po.setGenericType(Integer.parseInt(x[1]));
}
if (x[0].equals("specificTrap")) {
System.out.println("specificTrap------" + x[1]);
po.setSpecificType(Integer.parseInt(x[1]));
}
}
System.out.println("message----------------"
+ command.getVariableBindings().toString()
.replace("[", ".").replace("]", ""));
String message = command.getVariableBindings()
.toString().replace("[", ".").replace("]", "");
if(message.length()>2)
{
System.out.println("message content----------------" + MibDao.getIsmName(new String(message.substring(0,message.indexOf("=")))) + "=" + new String(message.substring(message.indexOf("=")+1,message.length())));
}
po.setMessage(message);
java.text.SimpleDateFormat date = new java.text.SimpleDateFormat(
"MM/dd/yyyy, hh:mm:ss");
String receivedTime = date.format(new Date(System
.currentTimeMillis()));
System.out.println("trap接受时间-----------------"
+ receivedTime);
po.setTimeReceived(receivedTime);
// // 调用相关的方法进行trap信息的处理
// System.out.println("TrapPo-----" + po.getAddressIP()
// + "-------" + po.getGenericType() + "---"
// + po.getMessage() + "---"
// + po.getSpecificType() + "----"
// + po.getTimeReceived() + "---"
// + po.getTrapName());
}
}
};
// 在snmp实例中添加CommandResponder listener
snmp.addCommandResponder(trapPrinter);
System.out.println(" start listening!");
// 开始启动trap监听.listen()方法内部启动了一个线程,这个线程监听发送到transport中定义的端口
// 的消息.
transport.listen();
System.out.println(" 测试监听" + transport.isListening());// 测试监听是否正常
// 等待一段测试时间,在这段时间可以发送trap信息测试.
Thread.sleep(1800000);
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
TrapActionRun();
}
}
/**
* 运行结果如下: start listening! true
* V1TRAP[reqestID=0,timestamp=0:00:00.00,enterprise=0.0,genericTrap=2,specificTrap=0,
* VBS[]]
* V1TRAP[reqestID=0,timestamp=0:00:00.00,enterprise=0.0,genericTrap=2,specificTrap=0,
* VBS[]] TRAP[requestID=1762734632, errorStatus=Success(0), errorIndex=0,
* VBS[1.3.6.1.2.1.1.3.0 = 0:00:00.00; 1.3.6.1.6.3.1.1.4.1.0 =
* 1.3.6.1.6.3.1.1.5.3]] TRAP[requestID=1762734633, errorStatus=Success(0),
* errorIndex=0, VBS[1.3.6.1.2.1.1.3.0 = 0:00:00.00; 1.3.6.1.6.3.1.1.4.1.0 =
* 1.3.6.1.6.3.1.1.5.3]] TRAP[requestID=1762734634, errorStatus=Success(0),
* errorIndex=0, VBS[1.3.6.1.2.1.1.3.0 = 0:00:00.00; 1.3.6.1.6.3.1.1.4.1.0 =
* 1.3.6.1.6.3.1.1.5.3]] TRAP[requestID=1762734635, errorStatus=Success(0),
* errorIndex=0, VBS[1.3.6.1.2.1.1.3.0 = 0:00:01.11; 1.3.6.1.6.3.1.1.4.1.0 =
* 1.3.6.1.6.3.1.1.5.3]]
*
* 这里测试发送了6条trap,第1,2条为v1trap,第3,4,5,6条为v2trap.最后一条时间稍有改变.
* trap的输出的内容就这些,具体内容按照实际情况而定.
*/
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
SNMP.rar (52个子文件)
SNMP
src
RFC1213-MIB.mib 86KB
trap
TrapThread.java 6KB
IF-MIB.smidb 124KB
SNMPv2-MIB.smidb 33KB
snmpPo
SetSnmpPo.java 1KB
TrapPo.java 2KB
SnmpInterf.java 292B
GetSnmpPo.java 1KB
util
UtilTrap.java 695B
IP-MIB.smidb 29KB
UDP-MIB.smidb 6KB
snmpDao
SnmpDao.java 4KB
snmphandle
SnmpManager.java 5KB
SnmpUtil.java 4KB
AppException.java 241B
Test.java 3KB
SnmpMain.java 3KB
mib
MibDao.java 2KB
RFC1213-MIB.mib 86KB
IF-MIB.smidb 124KB
ism3602.mib 40KB
SNMPv2-MIB.smidb 33KB
IP-MIB.smidb 29KB
UDP-MIB.smidb 6KB
bin
trap
TrapThread$1.class 4KB
TrapThread.class 2KB
snmpPo
GetSnmpPo.class 2KB
SnmpInterf.class 281B
TrapPo.class 2KB
SetSnmpPo.class 2KB
util
UtilTrap.class 1KB
snmpDao
SnmpDao.class 5KB
snmphandle
SnmpMain.class 3KB
AppException.class 633B
SnmpManager.class 6KB
Test.class 3KB
SnmpUtil.class 4KB
mib
RFC1213-MIB.mib 86KB
MibDao.class 2KB
IF-MIB.smidb 124KB
ism3602.mib 40KB
SNMPv2-MIB.smidb 33KB
IP-MIB.smidb 29KB
UDP-MIB.smidb 6KB
.classpath 521B
.settings
.project 380B
lib
commons-logging.jar 37KB
SNMP4J.jar 418KB
AdventNetSnmp.jar 1.7MB
AdventNetLogging.jar 36KB
snmp.jar 35KB
说明 91B
共 52 条
- 1
资源评论
- 缤纷的20132014-01-01程序走不通
- u0103109302015-01-08java.io.FileNotFoundException: Could not find the file : IF-MIB.mib 这个错误要怎么修改
- sheshizhang2013-05-15代码结构非常清晰,非常好,谢谢楼主。
- 小宇哥好2013-07-03基于AdventNet,可以运行,
- buyadong2013-05-28程序走不通,不知道为什么
wingst213
- 粉丝: 0
- 资源: 2
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功