欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

如何利用snmp4j库进行SNMP Trap消息的中文化发送与接收操作

最编程 2024-02-10 18:48:40
...
import cn.sh.ideal.service.NmsService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.snmp4j.*; import org.snmp4j.mp.MPv2c; 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 org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; import javax.annotation.PostConstruct; import java.io.IOException; import java.net.BindException; import java.time.Duration; import java.time.Instant; /** * 本类用于监听代理进程的Trap信息 * 实现CommandResponder接口的监听器 */ @Component public class MultiThreadedTrapReceiver implements CommandResponder { private MultiThreadedMessageDispatcher dispatcher; private Snmp snmp = null; private Address listenAddress; private ThreadPool threadPool; @PostConstruct public void run() { try { init(); snmp.addCommandResponder(this);//注册命令响应监听器 System.out.println("开始监听Trap信息!"); } catch (BindException be) { System.out.println("--初始化snmp本地监听失败,地址/端口无法绑定,请确认本地snmp监听ip和端口配置 "+be.getMessage()); } catch (Exception ex) { System.out.println("--初始化snmp本地监听端口报错"+ex.getMessage()); ex.printStackTrace(); } } private void init() throws IOException { System.out.println("snmp udp localAddress:"+localAddress); //创建接收SnmpTrap的线程池,参数: 线程名称及线程数 threadPool = ThreadPool.create("TrapListen", "2"); dispatcher = new MultiThreadedMessageDispatcher(threadPool, new MessageDispatcherImpl()); //监听端的 ip地址 和 监听端口号 listenAddress = GenericAddress.parse(System.getProperty( "snmp4j.listenAddress", "udp:127.0.0.1/162")); TransportMapping<?> transport; if (listenAddress instanceof UdpAddress) { transport = new DefaultUdpTransportMapping((UdpAddress) listenAddress); } else { transport = new DefaultTcpTransportMapping((TcpAddress) listenAddress); } snmp = new Snmp(dispatcher, transport); snmp.getMessageDispatcher().addMessageProcessingModel(new MPv2c()); //开启Snmp监听,可以接收来自Trap端的信息。 snmp.listen(); } /** * 实现CommandResponderprocessPdu方法, 用于处理传入的请求、PDU等信息 * @param respEvnt */ public void processPdu(CommandResponderEvent respEvnt) { // 解析Response if (respEvnt != null && respEvnt.getPDU() != null) {             Vector<VariableBinding> recVBs = (Vector<VariableBinding>) respEvnt.getPDU().getVariableBindings();               for (int i = 0; i < recVBs.size(); i++) {                    VariableBinding recVB = recVBs.elementAt(i);                    System.out.println("OID: "+recVB.getOid() + " `,Variable: " + recVB.getVariable());             } } } }