2011-12-30 20 views

Respuesta

6

Esto requiere que revises los documentos de RFC, lo que significa que esto no está relacionado con la programación, y probablemente pertenece a ServerFault.

a dar algunos consejos:

  1. SNMP v1 define un formato de mensaje de alarma especial, diferente de otros mensajes (como GET). http://tools.ietf.org/html/rfc1157#page-27 Este formato de mensaje ya no se usa en SNMP v2 y v3. Si un agente SNMP envía tales mensajes TRAP para v2 o v3, eso puede ser un error.
  2. Desde v2, TRAP comienza a usar el formato de mensaje común (lo mismo que GET, etc.). Por lo tanto, se llama SNMPv2-Trap-PDU. http://tools.ietf.org/search/rfc3416#page-22
  3. SNMP v3 presenta el modelo de seguridad para todos los mensajes, por lo que TRAP también recibe dicha actualización. Todavía se basa en SNMPv2-Trap-PDU.
+0

Referente a "Si un agente SNMP envía tales mensajes TRAP para v2 o v3, eso puede ser un error". @ lex-li ¿tiene alguna referencia o url para este comentario? Gracias. – k1eran

+2

Esa es mi visión personal basada en RFC1157 y RFC3416. Dado que en este último se define un nuevo formato de mensaje TRAP, el formato anterior en el primero debe estar completamente obsoleto. En realidad, sí sabía que algunos dispositivos envían el formato anterior para SNMP v2 (un usuario de la biblioteca #SNMP me lo informó), pero creo que debería ser un error del firmware. –

+0

Probablemente, # 3 arriba, es la razón, Wireshark muestra tales paquetes como 'msgVersion: 3' en el encabezado y' snmpV2-trap' en 'msgData' (después de descifrar) – vyom

2

SNMPv2 define las trampas de una manera ligeramente diferente.

En una MIB, las trampas SNMPv1 se definen como Trap-PDU, las trampas SNMPv2 se definen como NOTIFICATION-TYPE. SNMPv2 también elimina la noción de trampas genéricas, sino que define muchas trampas específicas (hablando correctamente, notificación) en MIB públicas.

SNMPv3 trampas, que son simplemente trampas SNMPv2 con autenticación adicional (basadas en credenciales) (Técnicas de autenticación comunes MD5 o SHA) y capacidades de privacidad (Técnicas de cifrado - DES, 3DES, AES128/192/256).

La mayoría de las implementaciones SNMP solo son compatibles con v1.

Reference_1Reference_2

A continuación se muestra el código para enviar SNMP4j trampa 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(); 
    } 
} 
+0

¿Está el fragmento de arriba para v2? ¿Por qué hay seguridad relacionada en el fragmento? – ifelsemonkey