snmp4j 实现 trap监听
发布日期:2021-05-08 13:57:28 浏览次数:13 分类:精选文章

本文共 4942 字,大约阅读时间需要 16 分钟。

snmp4j 实现 Trap监听

以下代码提供了一个基本的Trap监听实现,仅供参考

监听器

以下代码展示了一个实现Trap监听的Java类

package top.leiax00.snmp;import org.snmp4j.*;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.Vector;public class MultiThreadedTrapReceiver implements CommandResponder {    private MultiThreadedMessageDispatcher dispatcher;    private Snmp snmp = null;    private Address listenAddress;    private ThreadPool threadPool;    public MultiThreadedTrapReceiver() {        // BasicConfigurator.configure();    }    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"));        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 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) {        if (respEvnt != null && respEvnt.getPDU() != null) {            Vector
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(); }}

发送Trap

以下代码展示了一个实现发送Trap报文的Java类

package top.leiax00.snmp;import java.io.IOException;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;public class SnmpUtilSendTrap {    private Snmp snmp = null;    private Address targetAddress = null;    public void initComm() throws IOException {        targetAddress = GenericAddress.parse("udp:127.0.0.1/162");        TransportMapping transport = new DefaultUdpTransportMapping();        snmp = new Snmp(transport);        transport.listen();    }    public void sendPDU() throws IOException {        CommunityTarget target = new CommunityTarget();        target.setAddress(targetAddress);        target.setRetries(2);        target.setTimeout(1500);        target.setVersion(SnmpConstants.version2c);        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);        ResponseEvent respEvnt = snmp.send(pdu, target);        if (respEvnt != null && respEvnt.getResponse() != null) {            Vector
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) throws IOException { try { SnmpUtilSendTrap util = new SnmpUtilSendTrap(); util.initComm(); util.sendPDU(); } catch (IOException e) { e.printStackTrace(); } }}

以上代码可以帮助实现SNMP Trap的监听和发送功能,适用于网络管理和监控场景

上一篇:spring中获取项目根路径
下一篇:Mysql配置文件---my.ini

发表评论

最新留言

做的很好,不错不错
[***.243.131.199]2025年03月31日 14时11分23秒