2010-07-11 9 views
10

Je dois créer un agent dans SNMP4J, mais la documentation sur la procédure de démarrage est plutôt mauvaise. Quelqu'un at-il une expérience avec SNMP4J et pourrait me donner une idée sur la façon de commencer? Merci.Mise en route avec SNMP4J

+0

vous pouvez même regarder friendlySnmp, qui est l'abstraction sur snmp4j .http: //www.friendlysnmp.org/ – Inv3r53

Répondre

10

Vous pouvez télécharger le code source pour SNMP4JAgent ici:

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

Le code source comprend un exemple d'agent - regarder dans le paquet org.snmp4j.agent.example pour toutes les classes associées.

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

Une façon de commencer serait de créer un agent en utilisant l'exemple de code, puis le modifier en fonction de vos besoins. Le JavaDoc décrivant chacune des classes est un peu laconique, mais c'est complet.

+1

comment exécuter le SampleAgent, je une fois blogué ici, http://www.lextm.com/2009 /09/trident-sign-how-to-set-up-snmp4j-agent.html –

+0

J'ai créé Snmp Agent en utilisant Snmp4j .... seul problème que j'ai est de savoir comment permettre/code pour exécuter mon agent pour toujours ... –

1

Bonne documentation de SNMPv3 l'implémentation en utilisant des librairies SNMP4j est vraiment difficile à trouver. Il n'y a pas d'exemples d'agents SNMPv3 fonctionnels dans la documentation officielle. J'ai écrit un agent SNMP de base qui peut se connecter en utilisant le protocole SNMPv3, et effectuer des opérations GET et SET sur le serveur.

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

Ajout d'autres opérations telles que GetBulk sera relativement facile une fois que vous comprenez comment fonctionne GET et SET. Faites-moi savoir si vous avez besoin de plus de précisions dans les commentaires.