IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Programmation et administration système Perl Discussion :

amelioration de script table mac (cam pour cisco) en snmp


Sujet :

Programmation et administration système Perl

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Étudiant
    Inscrit en
    Février 2008
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2008
    Messages : 2
    Points : 1
    Points
    1
    Par défaut amelioration de script table mac (cam pour cisco) en snmp
    Bonjour,

    J'ai un petit script qui va me chercher les informations de la table mac de chaque switch en snmp. Je remonte l'équivalent de la commande "show cam" chez cisco.

    Il fonctionne trés bien, mais est un peu lent pour certains switch: cela varie de 10 à 200 secondes .

    Je me demandais si vous voyez une solution afin d'améliorer ce délais. Pour un parc de 30 switch, ca me revient à presque 20 minutes au total.

    Voici le script:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
     
    	my ($switch,$ip) = @_;
     
    	my $dot1dTpFdbAddress = 	'.1.3.6.1.2.1.17.4.3.1.1'; 
    	my $dot1dTpFdbPort= 		'.1.3.6.1.2.1.17.4.3.1.2'; 
    	my $dot1dBasePortIfIndex= 	'.1.3.6.1.2.1.17.1.4.1.2'; 
    	my $ifName= 			'.1.3.6.1.2.1.31.1.1.1.1';
     
    	$session = new SNMP::Session(DestHost => "$ip", Community => "public", UseSprintValue => 1, Version => 1, UseNumeric => 1);
     
    	die "session creation error: $SNMP::Session::ErrorStr" unless (defined $session);
     
    	$vars = new SNMP::VarList(["$dot1dTpFdbAddress"], ["$dot1dTpFdbPort"]);
     
    	# premiere ligne
    	my ($macaddr,$portnum) = $session->getnext($vars);
    	die $session->{ErrorStr} if ($session->{ErrorStr});
     
    	#les suivantes
    	while (!$session->{ErrorStr} and $$vars[0]->tag =~ /^$dot1dTpFdbAddress/){
    	    $ifnum = 
    	          (exists $ifnum{$portnum}) ? $ifnum{$portnum} :
    	            ($ifnum{$portnum} = 
    	               $session->get("$dot1dBasePortIfIndex\.$portnum"));
     
    	        $portname = 
    	          (exists $portname{$ifnum}) ? $portname{$ifnum} :
    	            ($portname{$ifnum}=$session->get("$ifName\.$ifnum"));            
    	        print "$macaddr sur $portname\n";
    	        ($macaddr,$portnum) = $session->getnext($vars);
    	};
    Je pensais peut-être faire les requêtes snmp en asynchrones par exemple, ....

    Merci

  2. #2
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Citation Envoyé par X-Flap Voir le message
    Je pensais peut-être faire les requêtes snmp en asynchrones par exemple, ....
    Oui, c'est la bonne solution, d'autant que Net::SNMP te permet de faire ça en standard, lis la section "Non-blocking" de la doc.

    --
    Jedaï

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Étudiant
    Inscrit en
    Février 2008
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2008
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Le problème est que j'utilise malheureusement le module SNMP et pas Net::SNMP.
    Existerait t-il un moyen de faire pareil ?

    J'avais deja vu cete solution mais je voudrais au possible eviter de rechanger de module.

  4. #4
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Ok, ce n'est pas un problème non plus : il te suffit de rajouter un argument callback à tes appels SNMP pour qu'ils soient automatiquement transformés en appels asynchrones, ensuite tu appelles Mainloop() avec un timeout et tu répètes tant que tous les appels ne sont pas finis.

    --
    Jedaï

Discussions similaires

  1. [ Noob - Perl Reseau ] Script perl qui recupere les tables ARP des switches Cisco
    Par oneal42 dans le forum Programmation et administration système
    Réponses: 1
    Dernier message: 04/09/2007, 11h11
  2. Réponses: 3
    Dernier message: 19/06/2006, 14h25
  3. Faire passer une table en paramètre pour une procedure
    Par samplaid dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 10/02/2006, 11h26
  4. Table de jointure pour une seule table
    Par Louis-Guillaume Morand dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 06/10/2005, 18h49
  5. modification ou amelioration du script
    Par snoopy59110 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 15/09/2005, 16h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo