2011-12-30 7 views

risposta

6

Questo richiede di passare attraverso i documenti RFC, che significa che questo non è programmazione relativa, e probabilmente appartiene a serverfault.

darvi alcuni suggerimenti:

  1. SNMP v1 definisce un formato speciale messaggio trap, diverso da altri messaggi (come GET). http://tools.ietf.org/html/rfc1157#page-27 Questo formato di messaggio non viene più utilizzato in SNMP v2 e v3. Se un agente SNMP invia tali messaggi TRAP per v2 o v3, potrebbe trattarsi di un bug.
  2. Dal v2, TRAP inizia ad utilizzare il formato del messaggio comune (lo stesso di GET e così via). Quindi è chiamato SNMPv2-Trap-PDU. http://tools.ietf.org/search/rfc3416#page-22
  3. SNMP v3 introduce il modello di sicurezza a tutti i messaggi, in modo da TRAP riceve tale aggiornamento troppo. È ancora basato su SNMPv2-Trap-PDU.
+0

Per quanto riguarda: "Se un agente SNMP invia tali messaggi TRAP per v2 o v3, può trattarsi di un errore". @ lex-li hai qualche riferimento o url per questo commento? Grazie. – k1eran

+2

Questa è la mia visualizzazione personale basata su RFC1157 e RFC3416. Poiché un secondo formato di messaggio TRAP è definito in quest'ultimo, il vecchio formato nel primo deve essere completamente obsoleto. In realtà sapevo che alcuni dispositivi inviano il vecchio formato per SNMP V2 (un utente #SNMP Biblioteca ha riferito che a me), ma penso che dovrebbe essere un bug del firmware. –

+0

Probabilmente, al di sopra # 3, è la ragione, Wireshark mostra tali pacchetti come 'msgVersion: 3' nell'intestazione e' SNMPv2-trap' in 'msgData' (dopo la decrittografia) – vyom

2

SNMPv2 definisce trappole in modo leggermente diverso.

In un MIB, trap SNMPv1 sono definiti come Trap-PDU, trappole SNMPv2 sono definiti come NOTIFICATION-TYPE. SNMPv2 elimina anche la nozione di trappole generiche, definisce molte trappole specifiche (correttamente parlando, notifica) in MIB pubblici.

Trap SNMPv3, che sono semplicemente trap SNMPv2 con autenticazione aggiunta (basata su credenziali) (Tecniche di autenticazione comune MD5 o SHA) e funzionalità di privacy (Tecniche di crittografia - DES, 3DES, AES128/192/256).

supporto implementazione più SNMP v1 solo.

Reference_1Reference_2

Di seguito si riporta il codice SNMP4j per inviare trap 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

È il frammento di codice qui sopra per v2? Perché ci sono problemi di sicurezza nello snippet? – ifelsemonkey