SNMPTrapReceiver.java
3.37 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
package com.sitech.ismp.snmp;
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.*;
import org.snmp4j.transport.DefaultTcpTransportMapping;
import org.snmp4j.transport.DefaultUdpTransportMapping;
import org.snmp4j.util.MultiThreadedMessageDispatcher;
import org.snmp4j.util.ThreadPool;
import java.io.IOException;
import java.net.UnknownHostException;
import java.util.ResourceBundle;
public class SNMPTrapReceiver {
private MultiThreadedMessageDispatcher dispatcher;
private Snmp snmp = null;
private Address listenAddress;
private ThreadPool threadPool;
private String ip = null;
private int port = 0;
private String swap_path = null;
public SNMPTrapReceiver() {
try {
ResourceBundle snmpConfig = ResourceBundle.getBundle("snmp");
// 在snmp.properties获得snmp配置参数
String ip = snmpConfig.getString("ip");
String strport = snmpConfig.getString("port");
String swap_path = snmpConfig.getString("swap_path");
this.port = Integer.valueOf(strport.trim()).intValue();
this.ip = ip;
this.swap_path = swap_path;
} catch (Exception e) {
e.printStackTrace();
System.out.println("initial config error......exit");
System.exit(0);
}
}
/**
* 初始化SNMP
*
* @throws java.net.UnknownHostException
* @throws java.io.IOException
*/
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:127.0.0.1/162")); // 本地IP与监听端口
String snmppath = "udp:" + this.ip + "/" + this.port;
listenAddress = GenericAddress.parse(snmppath); // 本地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();
System.out.println("listen on " + snmppath);
System.out.println("开始接受数据");
}
public void run() {
try {
init();
snmp.addCommandResponder(new PDUProcessor());
System.out.println("start to receive SNMP Trap message!");
} catch (Exception ex) {
ex.printStackTrace();
}
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
SNMPTrapReceiver trapreceiver = new SNMPTrapReceiver();
trapreceiver.run();
}
}