2010-07-11 15 views
10

Necesito hacer un agente en SNMP4J, pero la documentación sobre cómo comenzar es bastante pobre. ¿Alguien tiene alguna experiencia con SNMP4J y podría darme una idea sobre cómo comenzar? Gracias.Comenzando con SNMP4J

+0

incluso podría ver friendlySnmp, que es abstracción sobre snmp4j .http: //www.friendlysnmp.org/ – Inv3r53

Respuesta

10

Puede descargar el código fuente de SNMP4JAgent aquí:

http://www.snmp4j.org/html/download.html

El código fuente incluye un agente de ejemplo - mira en el paquete org.snmp4j.agent.example para todas las clases relacionadas.

http://www.snmp4j.org/agent/doc/org/snmp4j/agent/example/SampleAgent.html

Una forma de empezar sería la creación de un agente utilizando el código de ejemplo y luego modificarlo para adaptarlo a sus necesidades. El JavaDoc que describe cada una de las clases es un poco escueto, pero está completo.

+1

Acerca de cómo ejecutar SampleAgent, publiqué una vez aquí, http://www.lextm.com/2009 /09/trident-sign-how-to-set-up-snmp4j-agent.html –

+0

he creado Snmp Agent usando Snmp4j ... el único problema que tengo es cómo puedo permitir/codificar para ejecutar mi agente para siempre ... –

1

buena documentación de SNMPv3 la implementación usando bibliotecas SNMP4j es realmente difícil de encontrar. No hay ejemplos de trabajo de agentes SNMPv3 en la documentación oficial. Escribí un agente SNMP básico que se puede conectar usando el protocolo SNMPv3, y realizar operaciones GET y SET en el servidor.

import java.io.IOException; 

import org.snmp4j.PDU; 
import org.snmp4j.ScopedPDU; 
import org.snmp4j.Snmp; 
import org.snmp4j.TransportMapping; 
import org.snmp4j.UserTarget; 
import org.snmp4j.event.ResponseEvent; 
import org.snmp4j.mp.MPv3; 
import org.snmp4j.mp.SnmpConstants; 
import org.snmp4j.security.AuthGeneric; 
import org.snmp4j.security.AuthSHA; 
import org.snmp4j.security.PrivAES128; 
import org.snmp4j.security.PrivacyGeneric; 
import org.snmp4j.security.SecurityModels; 
import org.snmp4j.security.SecurityProtocols; 
import org.snmp4j.security.USM; 
import org.snmp4j.security.UsmUser; 
import org.snmp4j.smi.Address; 
import org.snmp4j.smi.GenericAddress; 
import org.snmp4j.smi.OID; 
import org.snmp4j.smi.OctetString; 
import org.snmp4j.smi.TransportIpAddress; 
import org.snmp4j.smi.VariableBinding; 
import org.snmp4j.transport.DefaultTcpTransportMapping; 
import org.snmp4j.transport.DefaultUdpTransportMapping; 

public class SNMPV3Agent { 

    private Address nmsIP; 
    private String user; 
    private String securityName; 
    private String privacyPassword; 
    private String authorizationPassword; 
    private AuthGeneric authProtocol; 
    private PrivacyGeneric privacyProtocol; 
    private String protocol; 

    private long timeOut = 1000L; 
    private int noOfRetries = 2; 

    private Snmp snmp; 
    private UserTarget target; 

    SNMPV3Agent(String ip, String protocol, int snmpPort, String username, 
      String securityName, String privacyPassword, String authPassowrd, 
      AuthGeneric authProtocol, PrivacyGeneric privacyProtocol) { 

     nmsIP = GenericAddress.parse(protocol + ":" + ip + "/" + snmpPort); 
     System.out.println("NMS IP set : " + nmsIP.toString()); 

     this.protocol = protocol; 
     this.user = username; 
     this.securityName = securityName; 
     this.privacyPassword = privacyPassword; 
     this.authorizationPassword = authPassowrd; 
     this.authProtocol = authProtocol; 
     this.privacyProtocol = privacyProtocol; 

    } 

    public static void main(String[] args) { 

     SNMPV3Agent agent = new SNMPV3Agent("nms/server-ip", "udp", 162, 
       "abhinav", "abhinav", "myprivpass", "myauthpass", 
       new AuthSHA(), new PrivAES128()); 
     try { 
      agent.startAgent(); 
      ResponseEvent response = agent 
        .snmpGetOperation(SnmpConstants.sysName); 
      System.out.println(response.getResponse()); 
      // Similarly you can perform set operation. 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 

    public void startAgent() throws IOException { 
     if (snmp == null) { 
      TransportMapping<? extends TransportIpAddress> transport = null; 
      if (protocol.equalsIgnoreCase("udp")) { 
       System.out.println("UDP Protocol selected."); 
       transport = new DefaultUdpTransportMapping(); 
      } else { 
       System.out.println("TCP Protocol selected."); 
       transport = new DefaultTcpTransportMapping(); 
      } 
      snmp = new Snmp(transport); 
      USM usm = new USM(SecurityProtocols.getInstance(), new OctetString(
        MPv3.createLocalEngineID()), 0); 
      SecurityModels.getInstance().addSecurityModel(usm); 
      transport.listen(); 
      snmp.getUSM().addUser(
        new OctetString(user), 
        new UsmUser(new OctetString(securityName), authProtocol 
          .getID(), new OctetString(authorizationPassword), 
          privacyProtocol.getID(), new OctetString(
            privacyPassword))); 

      target = createUserTarget(); 
     } 

    } 

    public ResponseEvent snmpSetOperation(VariableBinding[] vars) 
      throws IOException { 
     PDU setPdu = new ScopedPDU(); 
     for (VariableBinding variableBinding : vars) { 
      setPdu.add(variableBinding); 
     } 
     return snmp.send(setPdu, target); 
    } 

    public ResponseEvent snmpGetOperation(OID oid) throws IOException { 

     PDU getPdu = new ScopedPDU(); 
     getPdu.add(new VariableBinding(oid)); 
     return snmp.get(getPdu, target); 
    } 

    private UserTarget createUserTarget() { 
     UserTarget target = new UserTarget(); 
     target.setAddress(nmsIP); 
     target.setRetries(noOfRetries); 
     target.setTimeout(timeOut); 
     target.setVersion(3); 
     target.setSecurityLevel(3); 
     target.setSecurityName(new OctetString(securityName)); 
     return target; 
    } 

    public long getTimeOut() { 
     return timeOut; 
    } 

    public void setTimeOut(long timeOut) { 
     this.timeOut = timeOut; 
    } 

    public int getNoOfRetries() { 
     return noOfRetries; 
    } 

    public void setNoOfRetries(int noOfRetries) { 
     this.noOfRetries = noOfRetries; 
    } 
} 

Adición de otras operaciones, como GETBULK serán relativamente fácil una vez que entienda cómo funciona GET y SET. Avíseme si necesita más aclaraciones en los comentarios.