Java 如何使用snmp4j从多个snmp陷阱接收源IP地址
我使用snmp4j从多个路由器捕获陷阱数据,但我不知道如何从这些路由器接收源IP地址,哪个路由器是发送方。下面是我的代码,可能有用:Java 如何使用snmp4j从多个snmp陷阱接收源IP地址,java,snmp,snmp4j,Java,Snmp,Snmp4j,我使用snmp4j从多个路由器捕获陷阱数据,但我不知道如何从这些路由器接收源IP地址,哪个路由器是发送方。下面是我的代码,可能有用: public class SNMPTrapReceiver implements CommandResponder { private MultiThreadedMessageDispatcher dispatcher; private Snmp snmp = null; private Address listenAddress; private Thread
public class SNMPTrapReceiver implements CommandResponder {
private MultiThreadedMessageDispatcher dispatcher;
private Snmp snmp = null;
private Address listenAddress;
private ThreadPool threadPool;
private int n = 0;
public SNMPTrapReceiver() {
}
public static void main(String[] args) {
new SNMPTrapReceiver().run();
}
private void run() {
try {
init();
snmp.addCommandResponder(this);
} catch (Exception ex) {
ex.printStackTrace();
}
}
private void init() throws UnknownHostException, IOException {
threadPool = ThreadPool.create("Trap", 10);
dispatcher = new MultiThreadedMessageDispatcher(threadPool,
new MessageDispatcherImpl());
listenAddress = GenericAddress.parse(System.getProperty(
"snmp4j.listenAddress", "udp:0.0.0.0/162"));
TransportMapping<?> transport;
if (listenAddress instanceof UdpAddress) {
transport = new DefaultUdpTransportMapping(
(UdpAddress) listenAddress);
} else {
transport = new DefaultTcpTransportMapping(
(TcpAddress) listenAddress);
}
USM usm = new USM(SecurityProtocols.getInstance(), new OctetString(
MPv3.createLocalEngineID()), 0);
usm.setEngineDiscoveryEnabled(true);
snmp = new Snmp(dispatcher, transport);
snmp.getMessageDispatcher().addMessageProcessingModel(new MPv1());
snmp.getMessageDispatcher().addMessageProcessingModel(new MPv2c());
snmp.getMessageDispatcher().addMessageProcessingModel(new MPv3(usm));
SecurityModels.getInstance().addSecurityModel(usm);
snmp.getUSM().addUser(
new OctetString("MD5DES"),
new UsmUser(new OctetString("MD5DES"), AuthMD5.ID,
new OctetString("UserName"), PrivDES.ID,
new OctetString("PasswordUser")));
snmp.getUSM().addUser(new OctetString("MD5DES"),
new UsmUser(new OctetString("MD5DES"), null, null, null, null));
snmp.listen();
}
public void processPdu(CommandResponderEvent event) {
StringBuffer msg = new StringBuffer();
msg.append(event.toString());
Vector<? extends VariableBinding> varBinds = event.getPDU()
.getVariableBindings();
if (varBinds != null && !varBinds.isEmpty()) {
Iterator<? extends VariableBinding> varIter = varBinds.iterator();
while (varIter.hasNext()) {
VariableBinding var = varIter.next();
msg.append(var.toString()).append(";");
}
}
System.out.println("Message Received: " + msg.toString());
}
公共类snmptrapceiver实现CommandResponder{
专用多线程消息调度程序;
私有Snmp=null;
私人地址;
私有线程池线程池;
私有整数n=0;
公共SNMPTrapReceiver(){
}
公共静态void main(字符串[]args){
新的SNMPTrapReceiver().run();
}
私家车{
试一试{
init();
snmp.addCommandResponder(此);
}捕获(例外情况除外){
例如printStackTrace();
}
}
private void init()引发UnknownHostException,IOException{
threadPool=threadPool.create(“Trap”,10);
dispatcher=新的多线程消息调度程序(线程池,
新消息DispatcherImpl());
listenAddress=GenericaAddress.parse(System.getProperty(
“snmp4j.listenadress”、“udp:0.0.0/162”);
运输制图运输;
if(UdpAddress的listenAddress实例){
传输=新的默认UDPTTransportMapping(
(UdpAddress)Listenadress);
}否则{
transport=新的默认TcpTransportMapping(
(TcpAddress)Listenadress);
}
USM USM=新的USM(SecurityProtocols.getInstance(),新的八位字符串(
MPv3.createLocalEngineID()),0);
usm.setEngineDiscoveryEnabled(真);
snmp=新的snmp(调度程序、传输);
snmp.getMessageDispatcher().addMessageProcessingModel(新的MPv1());
snmp.getMessageDispatcher().addMessageProcessingModel(新的MPv2c());
snmp.getMessageDispatcher().addMessageProcessingModel(新的MPv3(usm));
SecurityModels.getInstance().addSecurityModel(usm);
snmp.getUSM().addUser(
新的八进制字符串(“MD5DES”),
新的UsmUser(新的八进制字符串(“MD5DES”)、AuthMD5.ID、,
新的八位字符串(“用户名”),PrivDES.ID,
新的八进制字符串(“密码用户”);
snmp.getUSM().addUser(新的八位字符串(“MD5DES”),
新的UsmUser(新的八进制字符串(“MD5DES”),null,null,null,null);
snmp.listen();
}
公共无效处理PDU(CommandRespondePrevent事件){
StringBuffer msg=新的StringBuffer();
msg.append(event.toString());
VectorCommandResponderRevent在getPeeradAddress()成员中包含发件人地址:
看
如果陷阱由代理转发,snmpTrapAddress.0变量绑定(在SNMP-COMMUNITY-MIB RFC3584中定义)将包含原始陷阱发送方的地址