【问题标题】:Auth and Priv not working for SNMP v3 trapsAuth 和 Priv 不适用于 SNMP v3 陷阱
【发布时间】:2021-01-04 18:03:42
【问题描述】:

我正在向我的 net-snmp 容器发送 v3 陷阱。当我将 securityLevel 设置为 1 时,我得到:

0.....0...1x....
..........-0+...
..p.....3.8.....
....myuser..s...f'
##..{-..0~.....p
.........Mon Jan
04 18:42:16 CET
20210...+.....me
ssage

安全级别 1 是 noAuthNoPriv,所以它可以工作,没关系。当我将安全级别设置为 2 时,我使用我的用户名和 authPassword 登录,它再次正常工作!但是,当我在用户名中打错字时,我发现它也可以正常工作:(因此,我可以写用户:某人密码:某物,而不是有效凭据,它仍然可以工作。当涉及到安全级别 3 时,无论我尝试什么我都无法让它工作。它总是像上面复制的结果一样,但是,在日志的末尾而不是“消息”有一行哈希码。这是否意味着它看到了凭据作为错误的,为什么它被编码?我无法以任何方式解码它? 所以总而言之,使用 authNoPriv 它每次都可以工作,它不关心 auth 密码是否正确,而使用 authPriv 它永远不会工作,它不关心 priv 密码是否正确。我尝试将我的代码与来自互联网的代码混合,但没有帮助。这是我的代码:

 TransportMapping transport = new DefaultUdpTransportMapping();
        transport.listen();
        Snmp snmp = new Snmp(transport);

        USM usm = new USM(SecurityProtocols.getInstance().addDefaultProtocols(),
                new OctetString(MPv3.createLocalEngineID()), 0);
        SecurityProtocols.getInstance().addPrivacyProtocol(new PrivAES192());
        SecurityProtocols.getInstance().addPrivacyProtocol(new PrivAES256());
        SecurityProtocols.getInstance().addPrivacyProtocol(new Priv3DES());
        SecurityModels.getInstance().addSecurityModel(usm);


        String username = "myuser";


        snmp.getUSM().addUser( =
                new OctetString(username),
                new UsmUser(new OctetString(username), AuthMD5.ID, new OctetString(
                        "myAuthPasswd"), PrivAES128.ID, new OctetString("myPrivPasswd")));



        UserTarget target = new UserTarget();
        target.setAddress(new UdpAddress(ipAddress + "/" + port));
        target.setRetries(1);
        target.setTimeout(11500);
        target.setVersion(SnmpConstants.version3);
        target.setSecurityLevel(3);
        target.setSecurityName(new OctetString(username));

        PDU pdu = new ScopedPDU();
        pdu.setType(ScopedPDU.TRAP);
        pdu.add(new VariableBinding(SnmpConstants.snmpTrapOID,
                SnmpConstants.linkDown));
        pdu.add(new VariableBinding(new OID(trapOid), new OctetString("message")));

        snmp.send(pdu, target);
        System.out.println("Sending Trap to (IP:Port)=> " + ipAddress + ":"
                + port);

        snmp.close();
    }

另外,这是我从容器的用户表中得到的:

SNMP-USER-BASED-SM-MIB::usmUserAuthProtocol.".....~"!x..._...."."myuser" = OID: SNMP-USER-BASED-SM-MIB::usmHMACMD5AuthProtocol

所以这个用户有 MD5 authProtocol。 和

SNMP-USER-BASED-SM-MIB::usmUserPrivProtocol.".....~"!x..._...."."myuser" = OID: SNMP-USER-BASED-SM-MIB::usmDESPrivProtocol

此用户具有 DES priv 协议。任何人都可以帮忙吗? 提前致谢。

【问题讨论】:

    标签: java snmp net-snmp snmp4j snmp-trap


    【解决方案1】:

    在 adduser 中尝试设置为 PrivDES.ID 而不是 PrivAES128.ID,

        OID encid = PrivDES.ID;
        if(enc.equalsIgnoreCase("des"))
        {
            encid = PrivDES.ID;
        }
        else if(enc.equalsIgnoreCase("aes")){
            encid = PrivAES128.ID;
        }
        
        
        UsmUser user = new UsmUser(  new OctetString(username),  authid, new 
        OctetString(pass),  encid, new OctetString(pass));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-08
      • 1970-01-01
      • 2011-04-19
      • 1970-01-01
      相关资源
      最近更新 更多