SNMP v1、v2c和v3陷阱差异

SNMP v1、v2c和v3陷阱差异,snmp,Snmp,解释v1、v2c和v3陷阱PDU/格式之间的差异。这要求您仔细阅读RFC文档,这意味着这与编程无关,可能属于ServerFault 给你一些提示: SNMP v1定义了一种特殊的陷阱消息格式,与其他消息(如GET)不同。SNMP v2和v3不再使用此消息格式。如果SNMP代理为v2或v3发送此类陷阱消息,则可能是一个错误 从v2开始,TRAP开始使用公共消息格式(与GET等相同)。所以它被称为SNMPv2陷阱PDU SNMP v3将安全模型引入所有消息,因此TRAP也会接收此类更新。它仍然基于S

解释v1、v2c和v3陷阱PDU/格式之间的差异。

这要求您仔细阅读RFC文档,这意味着这与编程无关,可能属于ServerFault

给你一些提示:

  • SNMP v1定义了一种特殊的陷阱消息格式,与其他消息(如GET)不同。SNMP v2和v3不再使用此消息格式。如果SNMP代理为v2或v3发送此类陷阱消息,则可能是一个错误
  • 从v2开始,TRAP开始使用公共消息格式(与GET等相同)。所以它被称为SNMPv2陷阱PDU
  • SNMP v3将安全模型引入所有消息,因此TRAP也会接收此类更新。它仍然基于SNMPv2陷阱PDU

  • SNMPv2以稍微不同的方式定义陷阱

    在MIB中,SNMPv1陷阱定义为陷阱PDU,SNMPv2陷阱定义为通知类型。SNMPv2还取消了通用陷阱的概念,而是在公共MIB中定义了许多特定的陷阱(确切地说,是通知)

    SNMPv3陷阱,即简单的SNMPv2陷阱,具有附加的身份验证(基于凭证)(通用身份验证技术MD5或SHA)和隐私功能(加密技术-DES、3DES、AES128/192/256)

    大多数SNMP实现只支持v1

    下面是发送snmpv3陷阱的SNMP4j代码

      public void sendTrap_Version3() {
        //TrasportMapping
        TransportMapping transport;
        try {
            transport = new DefaultUdpTransportMapping();
            transport.listen();
            //Creating SNMP object
            snmp = new Snmp(transport);
    
             //Creating USM
            USM usm = new USM(SecurityProtocols.getInstance(), new OctetString(MPv3.createLocalEngineID()), 0);
            SecurityModels.getInstance().addSecurityModel(usm);
    
            // Add user to the USM
            snmp.getUSM().addUser(
                    new OctetString("MD5DES"),
                    new UsmUser(new OctetString("MD5DES"), AuthMD5.ID, new OctetString("MD5DESUsrAuthPwd"), PrivDES.ID,
                            new OctetString("MD5DESUsrPrivPwd")));
    
            // Create the target
            Address targetAddress = GenericAddress.parse("udp:10.120.7.107/162");
            UserTarget target = new UserTarget();
            target.setAddress(targetAddress);
            target.setRetries(3);
            target.setTimeout(5000);
            target.setVersion(SnmpConstants.version3);
            target.setSecurityLevel(SecurityLevel.AUTH_PRIV);
            target.setSecurityName(new OctetString("MD5DES"));
            // Create PDU
            ScopedPDU pdu = new ScopedPDU();
    
           pdu.add(new VariableBinding(SnmpConstants.sysUpTime, new TimeTic(new Date().toString())));
           pdu.add(new VariableBinding(SnmpConstants.snmpTrapOID,SnmpConstants.linkDown));
           pdu.add(new VariableBinding(SnmpConstants.snmpTrapAddress, new IpAddress("127.3.4.1")));
           pdu.add(new VariableBinding(new OID("1.3.6.1.2.1.2.2.1.1.1"), new Integer32(1)));
    
            pdu.setType(ScopedPDU.TRAP);
            snmp.send(pdu, target);
    
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    

    关于:“如果SNMP代理为v2或v3发送此类陷阱消息,这可能是一个错误。”@lex li您对此评论有任何参考或url吗?谢谢。这是我基于RFC1157和RFC3416的个人观点。由于后者定义了新的陷阱消息格式,因此前者中的旧格式应该完全过时。事实上,我确实知道一些设备发送SNMP v2的旧格式(一位SNMP库用户向我报告了这一点),但我认为这应该是固件的一个缺陷。可能是因为上面的第3个原因,Wireshark在标题中显示了
    msgVersion:3
    ,在
    msgData
    中显示了
    snmpV2 trap
    (解密后)