SNMP v1,v2c和v3陷阱的区别

时间:2011-12-30 11:47:31

标签: snmp

解释v1,v2c和v3陷阱PDU /格式之间的区别。

2 个答案:

答案 0 :(得分:7)

这要求您浏览RFC文档,这意味着这与编程无关,可能属于ServerFault。

给你一些提示:

  1. SNMP v1定义了一种特殊的TRAP消息格式,与其他消息(例如GET)不同。 http://tools.ietf.org/html/rfc1157#page-27 SNMP v2和v3中不再使用此消息格式。如果SNMP代理为v2或v3发出此类TRAP消息,则可能是错误。
  2. 自v2起,TRAP开始使用通用消息格式(与GET相同,依此类推)。所以它被称为SNMPv2-Trap-PDU。 http://tools.ietf.org/search/rfc3416#page-22
  3. SNMP v3将安全模型引入所有消息,因此TRAP也会收到此类更新。它仍然基于SNMPv2-Trap-PDU。

答案 1 :(得分:3)

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

在MIB中,SNMPv1陷阱定义为Trap-PDU,SNMPv2陷阱定义为NOTIFICATION-TYPE。 SNMPv2也取消了通用陷阱的概念,它在公共MIB中定义了许多特定的陷阱(正确地说,通知)。

SNMPv3陷阱,它只是SNMPv2陷阱,添加了身份验证(基于凭据)(通用身份验证技术MD5或SHA)和隐私功能(加密技术 - DES,3DES,AES128 / 192/256)。

大多数SNMP实施仅支持v1。

Reference_1 Reference_2

以下是发送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();
    }
}