Разность ловушек SNMP v1, v2c и v3

Объясните разницу между v1, v2c и v3 Ловушками PDU/format.

Ответ 1

Это требует, чтобы вы просмотрели документы RFC, что означает, что это не связано с программированием и, вероятно, относится к ServerFault.

Дать вам несколько советов:

  1. SNMP v1 определяет специальный формат сообщений TRAP, отличный от других сообщений (таких как GET). http://tools.ietf.org/html/rfc1157#page-27 Этот формат сообщения больше не используется в SNMP v2 и v3. Если агент SNMP отправляет такие сообщения TRAP для v2 или v3, это может быть ошибкой.
  2. Начиная с версии v2, TRAP начинает использовать общий формат сообщений (такой же, как GET и т.д.). Так называется SNMPv2-Trap-PDU. http://tools.ietf.org/search/rfc3416#page-22
  3. SNMP v3 представляет модель безопасности для всех сообщений, поэтому TRAP также получает такие обновления. Он все еще основан на SNMPv2-Trap-PDU.

Ответ 2

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

Ниже приведен код SNMP4j для отправки ловушки snmpv3.

  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();
    }
}

Ответ 3

Вышеприведенный код работает только тогда, когда все устройства, отправляющие прерывания, имеют уникальное имя пользователя.

Можно ли добавить идентификатор двигателя вместе с именем пользователя и отправить ловушку? Если да, можно ли поделиться фрагментом кода?

Я попытался сделать это, и я получаю "Ошибка обработки модели 3 сообщения: неизвестное имя безопасности".