Accueil » Outils, Programmation

Requête SNMP en Perl

6 mars 2009 One Comment Par Remy

Il peut s’avérer parfois utile de développer ses propres scripts d’administration afin d’effectuer des requêtes bien précises de manière automatisée.

Le but de ce billet est d’introduire l’utilisation du module Perl Net::SNMP qui permet donc d’effectuer des requêtes SNMP depuis un script perl.

Dans un premier temps, il est nécessaire de déclarer l’utilisation de ce module au niveau du script :

use Net::SNMP;

Nous définissons ensuite quatres variables : l’OID dont nous souhaitons récupérer les différentes valeurs des instances, le port UDP de l’agent SNMP distant, l’équipement à interroger et la communauté SNMP à utiliser :

my $snmp_port = 161;
my $oid = "1.3.6.1.2.1.31.1.1.1.18.";
my $host = "10.0.0.1";
my $community = "private";
L’OID de notre exemple correspond aux interfaces de VLAN d’un switch Nortel ERS 5520. Une fois ces variables déclarées, il faut désormais créer un objet session de la manière suivante :
my ($session, $error) = Net::SNMP->session(
-hostname = $host,
-timeout = 3,
-retries = 1,
-community = $community,
-port = $snmp_port
);

L’objet est crée avec les paramètres précédemment déclarés en variables et la valeur du timeout ainsi que le nombre d’essais à effectuer après le timeout.

Nous pouvons ensuite effectuer la requête en balayant l’ensemble des instances possibles pour les interfaces VLAN (maximul 4095 dans notre cas) :

# Les interfaces VLANs sur ce switch sont les instances 10001 à 14095 inclus
for (my $i=10001; $i<14096; $i++) {
         # On effectue une requête SNMP de type GET sur l’OID et sur chaque instance
         my $result = $session->get_request($oid.$i);
         # Si la requête ne retourne pas d’erreur, l’objet $result est alors défini
         if(defined($result)) {
            # On récupère la valeur de l’instance
            my $vlans = $result->{$oid.$i};
            my $vid = substr($i,1);
            # On affiche le numéro de VLAN et le nom du VLAN
            print "VLAN ID : ".$vid." – Nom du VLAN : $vlans\n";
        }
}

Vous l’aurez donc vu, le Perl permet de créer des scripts permettant d’effectuer des tâches d’administration très rapides sur les équipements réseaux. Le bout de code précédent est donné à titre d’exemple, et peut donc être largement améliorer afin d’obtenir un script plus fourni et plus facilement exploitable (notamment en ajoutant la prise en charge des arguments pour passer la communauté SNMP en paramètre par exemple).

Un Commentaire »

  • Benhabib dit:

    Bonjour,

    je viens de tester ce programme mais il ne fonctionne pas, ils me sortent plein de problème sur le code
    ??

Laissez votre réponse !

Vous devez être connecté pour poster un commentaire