Forum Programmation.perl Un pitit snmpwalk...?

Posté par  .
Étiquettes : aucune
0
24
fév.
2006
J'ai une toute pitite question, si quelqu'un pouvait m'aider,
ça m'aiderais bien...!

je fais un script pour recuperer des infos sur des equips reseau
et les coller dans un fichier en XML.

La partie collecte d'info ressemble à ça:


#!/usr/pkg/bin/perl -w

use SNMP ;

#$ENV{'MIBS'}="ALL"; #Load all available MIBs
$SNMP_TARGET = "$ARGV[0]";
$SNMP_COMMUNITY = "decK550";

$SESSION = new SNMP::Session (DestHost => $SNMP_TARGET,
Community => $SNMP_COMMUNITY,
Version => 1);

$LISTMIB = new SNMP::VarList(
['sysLocation'], #0
['sysName'], #1
['sysDescr'], #2
['sysUpTime'], #3
['ifNumber'] #4
) ;


# Une requette par element du tableau
@SNMPRETURN = $SESSION->getnext($LISTMIB);
print "$LISTMIB\n";

# Output the results.
print "${SNMPRETURN[0]}\n"; #Localisation
print "${SNMPRETURN[1]}\n"; #Nom du system
print "${SNMPRETURN[2]}\n"; #Descri de l'OS
print ${SNMPRETURN[3]}/100 ;print "\n"; #Tmps en 1/100 depuis reboot
print "${SNMPRETURN[4]}\n"; #Nombre d'interfaces sur l'equipement



Mais je ne sais pas faire un snmpwalk, la je ne fais que du getnext, comment faire du walk...?

J'ai lu la doc, et il est indiqué que getnext retourne la valeur de la mib
et si il y en à une, retourne la mib suivante dans l'arbre.

Mais comment je l'a recupère la mib suivante, ça je ne le trouve nul part...!
  • # GetNext, c'est Walk.

    Posté par  (site web personnel) . Évalué à 3.

    Il n'y a que trois requêtes disponibles avec SNMP, pour le manager:
    - Get,
    - GetNext,
    - Set.

    Il en existe deux autres mais uniquement disponibles pour l'agent:
    - GetResponse,
    - Trap.

    GetNext demande donc à l'agent de retourner la valeur *suivante*. C'est très utile quand l'OID que tu as dispose d'un index ou est sous la forme d'une table.
    Par exemple, si je fais:

    $ snmpwalk -v 1 -c public localhost ifDescr
    IF-MIB::ifDescr.1 = STRING: lo
    IF-MIB::ifDescr.2 = STRING: eth0

    J'obtiens plusieurs valeurs.
    Si j'avais essayé directement avec snmpget, j'aurais obtenu ceci:
    $ snmpget -v 1 -c public localhost ifDescr
    Error in packet
    Reason: (noSuchName) There is no such variable name in this MIB.
    Failed object: IF-MIB::ifDescr

    La raison est qu'il peut y avoir plusieurs interfaces et donc, elles sont indexées. Évidemment, il nous est impossible de savoir à l'avance quel numéro sera affecté à quel interface. Le numéro d'index est donc à rajouter à l'OID pour avoir l'information. Voici les index:
    $ snmpwalk -v 1 -c public localhost ifIndex
    IF-MIB::ifIndex.1 = INTEGER: 1
    IF-MIB::ifIndex.2 = INTEGER: 2

    Dans la nomenclature du module Perl Net::SNMP, GetNext correspond à Walk, ce qui est plus proche de la nomenclature du protocole SNMP.

    J'espère avoir été plus clair, sinon, tu pourras toujours voir la documentation de Christian Caleca. ;-)

    http://christian.caleca.free.fr/snmp/le_protocole.htm
    • [^] # Re: GetNext, c'est Walk.

      Posté par  . Évalué à 2.

      Merci pour ton interessante et pertinante reponse, mais je connais le protocol SNMP,
      mon probleme est, comment faire un snmpwalk en perl...?

      parceque quand je fais un getnext, la requette qui correspond à snmpwalk,
      je n'ai qu'une seul reponse, la premiere.

      Je ne connais pas le moyen de recuperé, en perl, tout les variables de ifDescr
      par exemple...

      C'est juste un probleme de syntaxe je pense...!!



      Je hais les problemes de syntaxe, un vendredi soir... (et les autre jours aussi en fait...!) :)

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.