<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="fr">
		<id>http://www.minetti.org/mediawiki/index.php?action=history&amp;feed=atom&amp;title=Java%3ASNMP</id>
		<title>Java:SNMP - Historique des versions</title>
		<link rel="self" type="application/atom+xml" href="http://www.minetti.org/mediawiki/index.php?action=history&amp;feed=atom&amp;title=Java%3ASNMP"/>
		<link rel="alternate" type="text/html" href="http://www.minetti.org/mediawiki/index.php?title=Java:SNMP&amp;action=history"/>
		<updated>2026-05-04T12:59:31Z</updated>
		<subtitle>Historique pour cette page sur le wiki</subtitle>
		<generator>MediaWiki 1.26.2</generator>

	<entry>
		<id>http://www.minetti.org/mediawiki/index.php?title=Java:SNMP&amp;diff=106&amp;oldid=prev</id>
		<title>Jp : Page créée avec « == But == Le Simple Network Management Protocol (SNMP) est un protocole réseau permettant la supervision et l'administration d'applications. A ce titre, il peut être com... »</title>
		<link rel="alternate" type="text/html" href="http://www.minetti.org/mediawiki/index.php?title=Java:SNMP&amp;diff=106&amp;oldid=prev"/>
				<updated>2016-04-07T17:36:25Z</updated>
		
		<summary type="html">&lt;p&gt;Page créée avec « == But == Le Simple Network Management Protocol (SNMP) est un protocole réseau permettant la supervision et l&amp;#039;administration d&amp;#039;applications. A ce titre, il peut être com... »&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nouvelle page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== But ==&lt;br /&gt;
Le Simple Network Management Protocol (SNMP) est un protocole réseau permettant la supervision et l'administration d'applications. A ce titre, il peut être complémentaire de [[Java:JMX|JMX]]. En effet, l'intégration d'un [[Java:JMX#Adaptateurs SNMP|adaptateur JMX]] fournissant un service SNMP peut devenir très intéressant puisqu'il nous permettrait l'utilisation d'un grand nombre de logiciels pour faire de la supervision, tel que:&lt;br /&gt;
* [[Linux:Configuration de Nagios|Nagios]] pour surveiller l'état d'un système,&lt;br /&gt;
* [[Linux:Configuration de Cacti|Cacti]] pour tracer des courbes,&lt;br /&gt;
* [http://snmptt.sourceforge.net SNMP Trap Translator (snmptt)] pour traiter les traps SNMP (par exemple, les renvoyer vers [[Linux:Configuration de Nagios|Nagios]]).&lt;br /&gt;
&lt;br /&gt;
== API SNMP ==&lt;br /&gt;
On utilisera [http://joesnmp.sourceforge.net joeSNMP] pour mettre en oeuvre le protocole SNMP (téléchargeable [http://sourceforge.net/projects/joesnmp/files/latest/download?source=files ici]).&lt;br /&gt;
&lt;br /&gt;
== Service SNMP ==&lt;br /&gt;
Tout d'abord nous devons créer une classe qui sera chargée de traiter nos requêtes SNMP. Elle aura le gabaris suivant:&lt;br /&gt;
&lt;br /&gt;
 public final class SnmpAgentHandlerImpl implements SnmpAgentHandler&lt;br /&gt;
 {&lt;br /&gt;
 &lt;br /&gt;
    public void SnmpAgentSessionError (final SnmpAgentSession session, final int error, final Object ref)&lt;br /&gt;
    {&lt;br /&gt;
 &lt;br /&gt;
       // Traitement des erreurs&lt;br /&gt;
 &lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    public void snmpReceivedPdu (final SnmpAgentSession session, final InetAddress manager, final int port, final SnmpOctetString community,&lt;br /&gt;
             final SnmpPduPacket pdu)&lt;br /&gt;
    {&lt;br /&gt;
       if (pdu instanceof SnmpPduBulk) {&lt;br /&gt;
          final SnmpPduRequest response = new SnmpPduRequest (SnmpPduPacket.RESPONSE);&lt;br /&gt;
          response.setRequestId (pdu.getRequestId ());&lt;br /&gt;
          doBulk (pdu.toVarBindArray (), (SnmpPduBulk) pdu, response);&lt;br /&gt;
          try {&lt;br /&gt;
             session.send (new SnmpPeer (manager, port), response);&lt;br /&gt;
          }&lt;br /&gt;
          catch (final AsnEncodingException e) {&lt;br /&gt;
             final SnmpPduRequest errorResponse = new SnmpPduRequest (SnmpPduPacket.RESPONSE);&lt;br /&gt;
             errorResponse.setRequestId (pdu.getRequestId ());&lt;br /&gt;
             errorResponse.setErrorStatus (SnmpPduPacket.ErrTooBig);&lt;br /&gt;
             errorResponse.setErrorIndex (0);&lt;br /&gt;
 &lt;br /&gt;
             // Traitement des erreurs de type ErrTooBig (errorStatus)&lt;br /&gt;
             ...&lt;br /&gt;
 &lt;br /&gt;
          }&lt;br /&gt;
          catch (final Throwable e) {&lt;br /&gt;
             final SnmpPduRequest errorResponse = new SnmpPduRequest (SnmpPduPacket.RESPONSE);&lt;br /&gt;
             errorResponse.setRequestId (pdu.getRequestId ());&lt;br /&gt;
             errorResponse.setErrorStatus (SnmpPduPacket.ErrGenError);&lt;br /&gt;
             errorResponse.setErrorIndex (0);&lt;br /&gt;
 &lt;br /&gt;
             // Traitement des autres type d'erreurs&lt;br /&gt;
             ...&lt;br /&gt;
 &lt;br /&gt;
          }&lt;br /&gt;
       }&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    public SnmpPduRequest snmpReceivedGet (final SnmpPduPacket pdu, final boolean getNext)&lt;br /&gt;
    {&lt;br /&gt;
       final SnmpPduRequest response = new SnmpPduRequest (SnmpPduPacket.RESPONSE);&lt;br /&gt;
       response.setRequestId (pdu.getRequestId ());&lt;br /&gt;
       final SnmpVarBind[] binds = pdu.toVarBindArray ();&lt;br /&gt;
 &lt;br /&gt;
       // SNMP v1&lt;br /&gt;
       if (pdu instanceof SnmpPduRequest) {&lt;br /&gt;
          int resultIndex = 1;                // pour connaître le ErrorIndex en cas d'erreur&lt;br /&gt;
          for (final SnmpVarBind varBind : binds) {&lt;br /&gt;
             final SnmpObjectId oid = varBind.getName ();&lt;br /&gt;
             if (getNext) {&lt;br /&gt;
 &lt;br /&gt;
                // Traitement d'une requête GET NEXT&lt;br /&gt;
                SnmpObjectId nextOid = ...    // recherche l'OID du métrique positionné après oid&lt;br /&gt;
                SnmpSyntax nextValue = ...    // recherche la valeur de ce métrique&lt;br /&gt;
 &lt;br /&gt;
                // Si fin de la MIB atteint, renvoyer l'erreur SnmpPduPacket.ErrNoSuchName&lt;br /&gt;
                ...&lt;br /&gt;
 &lt;br /&gt;
                response.addVarBind (new SnmpVarBind (nextOid, nextValue));&lt;br /&gt;
             }&lt;br /&gt;
             else {&lt;br /&gt;
 &lt;br /&gt;
                // Traitement d'une requête GET&lt;br /&gt;
                SnmpSyntax value = ...        // recherche de la valeur d'un métrique à la position oid&lt;br /&gt;
 &lt;br /&gt;
                // Si la valeur n'a pas été trouvée, renvoyer l'erreur SnmpPduPacket.ErrNoSuchName&lt;br /&gt;
                ...&lt;br /&gt;
 &lt;br /&gt;
                varBind.setValue (value);&lt;br /&gt;
                response.addVarBind (varBind);&lt;br /&gt;
             }&lt;br /&gt;
             resultIndex++;                   // pour connaître le ErrorIndex en cas d'erreur&lt;br /&gt;
          }&lt;br /&gt;
       }&lt;br /&gt;
 &lt;br /&gt;
       // SNMP v2&lt;br /&gt;
       else if (pdu instanceof SnmpPduBulk) {&lt;br /&gt;
         doBulk (binds, (SnmpPduBulk) pdu, response);&lt;br /&gt;
       }&lt;br /&gt;
 &lt;br /&gt;
       return response; &lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    private void doBulk (final SnmpVarBind binds[], final SnmpPduBulk bulk, final SnmpPduRequest response)&lt;br /&gt;
    {&lt;br /&gt;
       int resultIndex = 1;                   // pour connaître le ErrorIndex en cas d'erreur&lt;br /&gt;
       for (final SnmpVarBind varBind : binds) {&lt;br /&gt;
          final SnmpObjectId oid = varBind.getName ();&lt;br /&gt;
          if (i &amp;lt; bulk.getNonRepeaters ()) {&lt;br /&gt;
 &lt;br /&gt;
             // Traitement d'une requête GET NEXT&lt;br /&gt;
             SnmpObjectId nextOid = ...       // recherche l'OID du métrique positionné après oid&lt;br /&gt;
             SnmpSyntax nextValue = ...       // recherche la valeur de ce métrique&lt;br /&gt;
 &lt;br /&gt;
             // Si un métrique a été trouvé:&lt;br /&gt;
             response.addVarBind (new SnmpVarBind (nextOid, nextValue));&lt;br /&gt;
 &lt;br /&gt;
             // Si la fin de la MIB a été atteinte:&lt;br /&gt;
             response.addVarBind (new SnmpVarBind (oid, new SnmpEndOfMibView ()));&lt;br /&gt;
 &lt;br /&gt;
          }&lt;br /&gt;
          else {&lt;br /&gt;
             final int maxRepititions = bulk.getMaxRepititions ();&lt;br /&gt;
 &lt;br /&gt;
             // Traitement d'une requête WALK&lt;br /&gt;
             while ... {                      // pour les N métriques positionnés après oid (N &amp;lt;= maxRepititions)&lt;br /&gt;
 &lt;br /&gt;
                SnmpObjectId nextOid = ...    // OID du métrique&lt;br /&gt;
                SnmpSyntax nextValue = ...    // valeur du métrique&lt;br /&gt;
 &lt;br /&gt;
                // Si un métrique a été trouvé:&lt;br /&gt;
                response.addVarBind (new SnmpVarBind (nextOid, nextValue));&lt;br /&gt;
 &lt;br /&gt;
                // Si la fin de la MIB a été atteinte (N &amp;lt; maxRepititions):&lt;br /&gt;
                response.addVarBind (new SnmpVarBind (&amp;quot;.1.9&amp;quot;, new SnmpEndOfMibView ()));&lt;br /&gt;
 &lt;br /&gt;
             }&lt;br /&gt;
 &lt;br /&gt;
             // Si aucun métrique trouvé:&lt;br /&gt;
             response.addVarBind (new SnmpVarBind (oid, new SnmpEndOfMibView ()));&lt;br /&gt;
 &lt;br /&gt;
          }&lt;br /&gt;
          resultIndex++;                      // pour connaître le ErrorIndex en cas d'erreur&lt;br /&gt;
       }&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    public SnmpPduRequest snmpReceivedSet (final SnmpPduPacket pdu)&lt;br /&gt;
    {&lt;br /&gt;
       final SnmpPduRequest response = new SnmpPduRequest (SnmpPduPacket.RESPONSE);&lt;br /&gt;
       response.setRequestId (pdu.getRequestId ());&lt;br /&gt;
       int resultIndex = 1;                   // pour connaître le ErrorIndex en cas d'erreur&lt;br /&gt;
       for (final SnmpVarBind varBind : pdu.toVarBindArray ()) {&lt;br /&gt;
          SnmpObjectId oid = varBind.getName ();&lt;br /&gt;
          SnmpSyntax newValue = varBind.getValue ();&lt;br /&gt;
 &lt;br /&gt;
          // Traitement d'une requête SET&lt;br /&gt;
          ...&lt;br /&gt;
 &lt;br /&gt;
          // Si le métrique n'existe pas, renvoyer l'erreur SnmpPduPacket.ErrNoSuchName&lt;br /&gt;
          ...&lt;br /&gt;
 &lt;br /&gt;
          response.addVarBind (varBind);&lt;br /&gt;
          resultIndex++;                      // pour connaître le ErrorIndex en cas d'erreur&lt;br /&gt;
       }&lt;br /&gt;
      return response;&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Nous pouvons voir qu'il y a 2 façons de rechercher un métrique:&lt;br /&gt;
* soit on le recherche à une position bien précise (cas de la requête GET)&lt;br /&gt;
* soit on le recherche à une position suivante d'une position donnnée (cas des requêtes GET NEXT et WALK)&lt;br /&gt;
&lt;br /&gt;
Partons dans l'hypothèse que nos métriques sont stockés dans un TreeMap&amp;lt;SnmpObjectId, SnmpSyntax&amp;gt; nommé '''mibMap'''. Le code suivant permet de trouver les métriques suivants à '''oid''' jusqu'au dernier:&lt;br /&gt;
 final SnmpObjectId baseOid = new SnmpObjectId (oid);&lt;br /&gt;
 baseOid.append (new int []{0});&lt;br /&gt;
 final SortedMap&amp;lt;SnmpObjectId, SnmpSyntax&amp;gt; followsMap = mibMap.tailMap (baseOid);&lt;br /&gt;
&lt;br /&gt;
Les valeurs des métriques sont stockés dans des objets de type:&lt;br /&gt;
* SnmpNull pour une valeur nulle,&lt;br /&gt;
* SnmpInt32 pour une valeur entière signée de 32 bits (int),&lt;br /&gt;
* SnmpUInt32 pour une valeur entière non signée de 32 bits (long),&lt;br /&gt;
* SnmpGauge32 pour une gauge de 32 bits (long),&lt;br /&gt;
* SnmpCounter32 pour un compteur de 32 bits (long),&lt;br /&gt;
* SnmpCounter64 pour un compteur de 64 bits (java.math.BigInteger ou long),&lt;br /&gt;
* SnmpTimeTicks pour un temps écoulé en 100ème de secondes (long),&lt;br /&gt;
* SnmpOctetString pour un texte (byte[]),&lt;br /&gt;
* SnmpIPAddress pour une adresse IP (java.net.InetAddress),&lt;br /&gt;
* SnmpObjectId pour un OID (int[]),&lt;br /&gt;
* SnmpOpaque pour autre chose (byte[]).&lt;br /&gt;
Tous ces types héritent de SnmpSyntax.&lt;br /&gt;
&lt;br /&gt;
Le traitement des requêtes SNMP peut provoquer les erreurs suivantes (toutes énumérées dans la classe SnmpPduPacket):&lt;br /&gt;
* ErrNoError pour aucune erreur,&lt;br /&gt;
* ErrTooBig pour une requête dont la réponse serait trop importante,&lt;br /&gt;
* ErrNoSuchName pour un métrique non trouvé,&lt;br /&gt;
* ErrBadValue pour une valeur envoyée avec un mauvais type ou une mauvaise longueur (par exemple lors d'une exception SnmpBadConversionException),&lt;br /&gt;
* ErrReadOnly pour une tentative de modification d'un métrique non modifiable,&lt;br /&gt;
* ErrGenError pour une erreur générale,&lt;br /&gt;
* ErrNoAccess,&lt;br /&gt;
* ErrWrongType pour un métrique avec un mauvais type de données,&lt;br /&gt;
* ErrWrongLength,&lt;br /&gt;
* ErrWrongEncoding,&lt;br /&gt;
* ErrWrongValue,&lt;br /&gt;
* ErrNoCreation,&lt;br /&gt;
* ErrInconsistentValue,&lt;br /&gt;
* ErrResourceUnavailable pour une ressource non disponible (outOfMemory),&lt;br /&gt;
* ErrCommitFailed,&lt;br /&gt;
* ErrUndoFailed,&lt;br /&gt;
* ErrAuthorizationError pour un accès à un métrique refusé,&lt;br /&gt;
* ErrNotWritable,&lt;br /&gt;
* ErrInconsistentName.&lt;br /&gt;
&lt;br /&gt;
Ces erreurs sont renvoyées dans la réponse de la requête SNMP avec l'index de l'élément où s'est produit l'erreur:&lt;br /&gt;
 response.setErrorStatus (SnmpPduPacket.ErrGenError);&lt;br /&gt;
 response.setErrorIndex (resultIndex);&lt;br /&gt;
&lt;br /&gt;
Une fois la classe SnmpAgentHandlerImpl implémentée, nous pouvons ouvrir une session d'écoute sur le port UDP 161:&lt;br /&gt;
 final SnmpPeer peer = new SnmpPeer (InetAddress.getByName (&amp;quot;localhost&amp;quot;), 161);&lt;br /&gt;
 final SnmpParameters params = peer.getParameters ();&lt;br /&gt;
 params.setVersion (SnmpSMI.SNMPV1);&lt;br /&gt;
 params.setReadCommunity (&amp;quot;public&amp;quot;);&lt;br /&gt;
 params.setWriteCommunity (&amp;quot;private&amp;quot;);&lt;br /&gt;
 final SnmpAgentSession session = new SnmpAgentSession (new SnmpAgentHandlerImpl (), peer);&lt;br /&gt;
&lt;br /&gt;
Ici, nous utilisons la version 1 du protocole SNMP. Mais nous pouvons tout aussi bien utiliser la version 2c:&lt;br /&gt;
 params.setVersion (SnmpSMI.SNMPV2);&lt;br /&gt;
&lt;br /&gt;
Pour fermer la session:&lt;br /&gt;
 session.close ();&lt;br /&gt;
&lt;br /&gt;
Pour tester il faut installer un client qui va interroger notre service SNMP. Avec [http://www.net-snmp.org Net-SNMP] on tapera la commande:&lt;br /&gt;
 snmpget -v2c -c public localhost .1.3.6.1.2.1.1.1.0&lt;br /&gt;
ou bien:&lt;br /&gt;
 snmpwalk -v2c -c public localhost .1.3.6.1.4.1.690&lt;br /&gt;
&lt;br /&gt;
== Envoi de traps SNMP ==&lt;br /&gt;
Comme pour le service SNMP, nous devons créer une classe mais qui sera chargée de traiter les réponses à nos requêtes SNMP, notamment les erreurs:&lt;br /&gt;
&lt;br /&gt;
 public final class SnmpHandlerImpl implements SnmpHandler&lt;br /&gt;
 {&lt;br /&gt;
 &lt;br /&gt;
    public void snmpInternalError (final SnmpSession snmpSession, final int err, final SnmpSyntax pdu)&lt;br /&gt;
    {&lt;br /&gt;
 &lt;br /&gt;
       // Traitement des erreurs&lt;br /&gt;
 &lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    public void snmpTimeoutError (final SnmpSession snmpSession, final SnmpSyntax pdu)&lt;br /&gt;
    {&lt;br /&gt;
 &lt;br /&gt;
       // Traitement des erreurs&lt;br /&gt;
 &lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    public void snmpReceivedPdu (final SnmpSession snmpSession, final int cmd, final SnmpPduPacket pdu)&lt;br /&gt;
    {&lt;br /&gt;
       // NOP&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Avant d'envoyer une trap nous devons établir une connexion vers l'agent SNMP:&lt;br /&gt;
 SnmpPeer peer = new SnmpPeer (InetAddress.getByName (&amp;quot;localhost&amp;quot;));&lt;br /&gt;
 peer.setPort (162);&lt;br /&gt;
 SnmpParameters parameters = peer.getParameters ();&lt;br /&gt;
 parameters.setReadCommunity (&amp;quot;public&amp;quot;);&lt;br /&gt;
 parameters.setVersion (SnmpSMI.SNMPV1);&lt;br /&gt;
 SnmpSession session = new SnmpSession (peer);&lt;br /&gt;
&lt;br /&gt;
Une fois la connexion établie, nous pouvons construire notre requête SNMP:&lt;br /&gt;
 final SnmpPduTrap trapPdu = new SnmpPduTrap ();&lt;br /&gt;
 trapPdu.setTimeStamp ( ... );                                 // Temps écoulés en 100ème de seconde depuis l'initialisation de l'application&lt;br /&gt;
 trapPdu.setEnterprise ( ... );                                // OID indexant la source de la trap&lt;br /&gt;
 trapPdu.setAgentAddress ( ... );                              // Adresse IP de la machine hébergeant l'application&lt;br /&gt;
 trapPdu.setGeneric (SnmpPduTrap.GenericEnterpriseSpecific);   // Pour une trap de type spécifique&lt;br /&gt;
 trapPdu.setSpecific ( ... );                                  // et le numéro de cette trap spécifique&lt;br /&gt;
&lt;br /&gt;
Y embarquer d'autres données (indexées par un OID unique):&lt;br /&gt;
 trapPdu.addVarBind (new SnmpVarBind (oid, value));&lt;br /&gt;
&lt;br /&gt;
Et l'envoyer à l'agent chargé de traiter les traps SNMP:&lt;br /&gt;
 session.send (trapPdu, new SnmpHandlerImpl ( ... ));&lt;br /&gt;
&lt;br /&gt;
On n'oubli pas de fermer notre connexion:&lt;br /&gt;
 session.close ();&lt;br /&gt;
&lt;br /&gt;
Pour tester, nous devons installer un agent chargé de traiter les traps SNMP. Avec [http://www.net-snmp.org Net-SNMP] on démarrera le démon '''snmptrapd''':&lt;br /&gt;
 service snmptrapd start&lt;br /&gt;
&lt;br /&gt;
Mais avant, nous devons:&lt;br /&gt;
* installer [http://snmptt.sourceforge.net snmptt],&lt;br /&gt;
* configurer [http://www.net-snmp.org Net-SNMP] (/etc/snmp/snmptrapd.conf):&lt;br /&gt;
 traphandle default /usr/sbin/snmptt&lt;br /&gt;
 disableAuthorization yes&lt;br /&gt;
* paramétrer les options du démon (/etc/snmp/snmptrapd.options):&lt;br /&gt;
 OPTIONS=&amp;quot;-On -p /var/run/snmptrapd.pid&amp;quot;&lt;br /&gt;
* configurer [http://snmptt.sourceforge.net snmptt] (/etc/snmp/snmptt.ini):&lt;br /&gt;
 ...&lt;br /&gt;
 mode = standalone&lt;br /&gt;
 ...&lt;br /&gt;
 strip_domain_list = &amp;lt;&amp;lt;END&lt;br /&gt;
 lan.minetti.org&lt;br /&gt;
 minetti.org&lt;br /&gt;
 END&lt;br /&gt;
 ...&lt;br /&gt;
 snmptt_conf_files = &amp;lt;&amp;lt;END&lt;br /&gt;
 /etc/minetti/snmptt/test.conf&lt;br /&gt;
 END&lt;br /&gt;
* paramétrer la gestion de chaque traps (/etc/minetti/snmptt/test.conf):&lt;br /&gt;
 EVENT TEST_APP_1 .1.3.6.1.4.1.1000.1.* &amp;quot;Test application 1&amp;quot; Normal&lt;br /&gt;
 FORMAT $2&lt;br /&gt;
 EXEC echo &amp;quot;$r app1.$1 $S \&amp;quot;$2\&amp;quot;&amp;quot; &amp;gt;&amp;gt; /var/log/minetti/traps.log&lt;br /&gt;
 &lt;br /&gt;
 EVENT TEST_APP_2 .1.3.6.1.4.1.1000.2.* &amp;quot;Test application 2&amp;quot; Normal&lt;br /&gt;
 FORMAT $2&lt;br /&gt;
 EXEC echo &amp;quot;$r app2.$1 $S \&amp;quot;$2\&amp;quot;&amp;quot; &amp;gt;&amp;gt; /var/log/minetti/traps.log&lt;br /&gt;
Ici, toutes nos traps seront traçées dans le fichier /var/log/minetti/traps.log.&lt;br /&gt;
&lt;br /&gt;
== A propos des OID ==&lt;br /&gt;
Le choix des OID doit se faire dans la branche '''private enterprises''' (.1.3.6.1.4.1) qui sont attribués par l'[http://pen.iana.org/pen/PenApplication.page IANA].&lt;br /&gt;
&lt;br /&gt;
En principe, les services SNMP doivent renvoyer les informations suivantes:&lt;br /&gt;
* 1.3.6.1.2.1.1.1.0 (system.sysDescr.0) pour renvoyer une description de notre application,&lt;br /&gt;
* 1.3.6.1.2.1.1.2.0 (system.sysObjectID.0) pour renvoyer l'OID racine où se trouve tous nos métriques,&lt;br /&gt;
* 1.3.6.1.2.1.1.3.0 (system.sysUpTime.0) pour renvoyer le temps écoulés en 100ème de seconde depuis le dernier démarrage de notre application,&lt;br /&gt;
* 1.3.6.1.2.1.1.4.0 (system.sysContact.0) pour renvoyer le nom et l'adresse e-mail de la personne responsable de l'application,&lt;br /&gt;
* 1.3.6.1.2.1.1.5.0 (system.sysName.0) pour renvoyer le nom de notre application,&lt;br /&gt;
* 1.3.6.1.2.1.1.6.0 (system.sysLocation.0) pour renvoyer la localisation de notre application.&lt;br /&gt;
&lt;br /&gt;
== Voir aussi ==&lt;br /&gt;
* [[Java:JMX|Java Management Extensions (JMX)]]&lt;br /&gt;
* [http://snmpadaptor4j.sf.net Adaptateur snmpAdaptor4j pour JMX]&lt;/div&gt;</summary>
		<author><name>Jp</name></author>	</entry>

	</feed>