snmpv3接收trap消息 java snmp4j接收V3trap消息

本文档详细介绍了如何使用Java SNMP4j库实现SNMPv3 trap的接收和发送。代码示例涵盖了V3的认证和加密过程,包括接收不同主机的Trap并设置不同用户的安全配置。测试结果显示所有发送的Trap消息均被成功接收。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

snmpv3接收trap消息 java snmp4j接收V3trap消息

前言

网上关于V3加密认证的例子不多,尤其是认证和加密的,很多都是发送trap的例子,很少有接收trap的例子。
虽然是V3,但也支持V1V2,只需要打开相关注释就行。
网上没有认证且加密成功的例子,下面的例子都能测试通。
现在贴出来,希望对大家有用。

消息接收类

package org.apache.flume.test.v3;

import org.snmp4j.*;
import org.snmp4j.mp.MPv1;
import org.snmp4j.mp.MPv2c;
import org.snmp4j.mp.MPv3;
import org.snmp4j.security.*;
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.util.Vector;

public class MultiThreadedTrapReceiver implements CommandResponder {
    private String username1 = "nmsAdminNaNp";
    private String username2 = "nmsAdmin2ANp";
    private String username3 = "nmsAdmin3ap";
    private String authPassword = "nmsAuthKey";
    private String privPassword = "nmsPrivKey";

    private MultiThreadedMessageDispatcher dispatcher;
    private Snmp snmp = null;
    private Address listenAddress;
    private ThreadPool threadPool;

    public MultiThreadedTrapReceiver() {
        // BasicConfigurator.configure();
    }

    private void init() throws Exception {
        /*threadPool = ThreadPool.create("Trap", 2);
        dispatcher = new MultiThreadedMessageDispatcher(threadPool,
                new MessageDispatcherImpl());
        listenAddress = GenericAddress.parse(System.getProperty(
                "snmp4j.listenAddress", "udp:10.195.88.96/162")); // 本地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());
        UsmUser usmUser = new UsmUser(new OctetString(username), AuthMD5.ID,
                new OctetString(authPassword), Priv3DES.ID,
                new OctetString(privPassword));

        USM usm = new USM(SecurityProtocols.getInstance().addDefaultProtocols(), new OctetString(MPv3
                .createLocalEngineID()), 0);
        usm.addUser(usmUser);
        SecurityModels.getInstance().addSecurityModel(usm);
        snmp.listen();



        //add the enginID in the trap
        //OctetString engineID = new OctetString(MPv3.createLocalEngineID());
        byte[] enginId = "TEO_ID".getBytes();
        OctetString engineID = new OctetString(enginId);
        //create and add the userSecurityModel
        USM usm = new USM(SecurityProtocols.getInstance(),engineID, 0);
        SecurityModels.getInstance().addSecurityModel(usm);

        //add the securityProtocols,you can skip it if your users are noAuthNoPriv
        SecurityProtocols.getInstance().addDefaultProtocols();


        //create and add the user
        UsmUser usmUser = new UsmUser(new OctetString(username), AuthMD5.ID,
                new OctetString(authPassword), Priv3DES.ID,
                new OctetString(privPassword));
        usm.addUser(usmUser);


        //snmp.getUSM().addUser(usmUser);
        snmp.listen();
        */
        /*******************************************使用处*************************************************/
        //创建接收SnmpTrap的线程池,参数: 线程名称及线程数
        threadPool = ThreadPool.create("Trap", 2);
        dispatcher = new MultiThreadedMessageDispatcher(threadPool,
                new MessageDispatcherImpl());
        //监听端的 ip地址 和 监听端口号
        listenAddress = GenericAddress.parse(System.getProperty(
                "snmp4j.listenAddress", "udp:127.0.0.1/161"));
        TransportMapping transport;
        if (listenAddress instanceof UdpAddress) {
            transpo
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值