java - 第一次发送后几次无法接收 SNMPv3 陷阱。 [snmp4j-Java]

标签 java snmp sender receiver snmp4j

过去几天我一直在努力使用 Auth 和 priv 短语发送 SNMPV3 陷阱。问题是:在我收到第一个带有 Auth-Priv 的 Trap SNMPv3 后,有时(大约 2 分钟)我无法收到陷阱。接收者就像忽略了每一个即将到来的陷阱。

这是我的代码:

Receiver.java

    try {
        // set udpAdress and transportMapping
        final UdpAddress udpAddress = new UdpAddress(162);
        final TransportMapping transportMapping = new          DefaultUdpTransportMapping(udpAddress);

        // Protocole de sécurité +usm +snmp
        this.snmp = new Snmp(new MessageDispatcherImpl(), transportMapping);
        SecurityProtocols.getInstance().addDefaultProtocols();
        final USM usm = new USM(SecurityProtocols.getInstance(),
            new OctetString(MPv3.createLocalEngineID(new OctetString())),
            0);
        SecurityProtocols.getInstance().addPrivacyProtocol(new PrivDES());
        usm.setEngineDiscoveryEnabled(true);

        // Add the MPv
        snmp.getMessageDispatcher().addMessageProcessingModel(new MPv1());
        snmp.getMessageDispatcher().addMessageProcessingModel(new MPv2c());
        snmp.getMessageDispatcher().addMessageProcessingModel(new MPv3(usm));

        // Security model
        SecurityModels.getInstance().addSecurityModel(usm);

        // Add user 
        snmp.getUSM().addUser(new OctetString("v3AuthSHAPrivDESSecName"),
            new UsmUser(new OctetString("v3AuthSHAPrivDESSecName"), AuthMD5.ID,
                new OctetString("v3AuthSHAPrivDESAuthPassword"), PrivDES.ID,
                new OctetString("v3AuthSHAPrivDESPrivPassword")));

        // Launch of the listener
        this.snmp.addCommandResponder(this);
        snmp.listen();`

Sender.java

try {
        // set udpAdress and transportMapping
        Address targetAddress = GenericAddress.parse("udp:" + ipAddress + "/" + port);
        TransportMapping transport = new DefaultUdpTransportMapping();
        Snmp snmp = new Snmp(transport);

        // Protocole de sécurité +usm +snmp
        SecurityProtocols.getInstance().addDefaultProtocols();
        final USM usm = new USM(SecurityProtocols.getInstance(),
            new OctetString(MPv3.createLocalEngineID(new OctetString())),
            0);

        SecurityProtocols.getInstance().addPrivacyProtocol(new PrivDES());
        SecurityModels.getInstance().addSecurityModel(usm);

        transport.listen();

        // Ajout d'un user avec les paramètres de sécurité
        snmp.getUSM().addUser(new OctetString("v3AuthSHAPrivDESSecName"),
            new UsmUser(new OctetString("v3AuthSHAPrivDESSecName"), AuthMD5.ID,
                new OctetString("v3AuthSHAPrivDESAuthPassword"), PrivDES.ID,
                new OctetString("v3AuthSHAPrivDESPrivPassword")));

        // Create Target
        UserTarget target = new UserTarget();
        target.setAddress(targetAddress);
        target.setRetries(1111);
        target.setTimeout(11111500);
        target.setVersion(SnmpConstants.version3);
        target.setSecurityLevel(SecurityLevel.AUTH_PRIV);
        target.setSecurityName(new OctetString("v3AuthSHAPrivDESSecName"));

        // Create PDU 1 for V3
        ScopedPDU pdu = new ScopedPDU();
        pdu.setType(PDU.TRAP);
        pdu.add(new VariableBinding(SnmpConstants.sysUpTime));
        pdu.add(new VariableBinding(SnmpConstants.snmpTrapOID, SnmpConstants.linkDown));
        pdu.add(new VariableBinding(new OID(trapOid), new OctetString("V33333")));
        snmp.send(pdu, target);

        System.out.println("Sending Trap to (IP:Port)=> " + ipAddress + ":" + port);

        snmp.addCommandResponder(new CommandResponder() {
            public void processPdu(CommandResponderEvent arg0) {
                System.out.println(arg0);
            }
        });
        snmp.close();
  • 我正在使用 snmp4j-1.1 依赖项。我不知道为什么它会忽略第一次发送后大约 2 分钟出现的陷阱。

    非常感谢 friend 的帮助

最佳答案

我找到答案了! :D 只需将依赖项更改为 snmp4j-2.* 即可,现在我使用了 snmp4j-2.5.0。它工作完美,如果你想使用上面的代码,它工作完美。

祝你代码日愉快:-)

关于java - 第一次发送后几次无法接收 SNMPv3 陷阱。 [snmp4j-Java],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42761250/

相关文章:

java - Java的JConsole可以用来自动配置内存吗?

snmp - 什么是正确的 snmptrap 命令格式?

snmp:仅给出表索引的一部分时的正确行为?

sender - 我的 chromecast 没有出现在接收者列表回调中

ios - 如何在没有发送者的情况下将Target添加到UIButton

java - 我需要获取一个字符串并输出该字符串中出现次数最多的单词

java - 在 NetBeans 中使用 CheckStyle 并配置 CheckStyle 规则

java - 如果应用程序崩溃,保存登录信息

java - 检查 MIB 对象是否为 DisplayString

ios - 针对特定情况获取两个发件人值而不是一个值?