Bienvenue visiteur (Inscription |  Connexion)
Qui est en ligne ?
Il y a : 29 utilisateurs en ligne, consultez le détail
Auteur Message
ToMsS
#0 Message posté le : 18-11-2007 à 15:54:11


Petit scarabée


Forum : Inscrit
Association :
Arrivé(e) le : 26-10-2006
Nombre de messages : 57
bonjour,

je suis en train de realiser un script permettant de recuperer les etats des ports sur une serie de switch , pour cela j'utilise Perl et le module the Net-SNMP

#!/usr/bin/perl -w



use SNMP;



my $totalup = "0";

my $totaldown ="0";

#communaute snmp

my $communaute ="public"; 

#version du protocol snmp

my $version = "2" ;

#addresse ip a scanner 

my @IPLOCAL = ('192.168.0.20','192.168.0.30','192.168.0.40','192.168.0.50');



foreach (@IPLOCAL)

{

	#ouverture de la session snmp

	$session = new SNMP::Session(DestHost => $_,

 		             	     Community => $communaute, 

		                     Version   => $version,

                                     UseSprintValue => 1);

	die "session creation error: SNMP::Session::ErrorStr" unless (defined $session); #on affiche l'erreur a moins que la session soit definie





	# Scan des ports ( description et status)

	$vars = new SNMP::VarList(['ifDescr'],['ifOperStatus']);



	($int,$state) = $session->getnext($vars);

	die $session->{ErrorStr} if ($session->{ErrorStr});

	

	# on scanne jusqu'au dernier port

	while (!$session->{ErrorStr} and $vars->[0]->tag eq "ifDescr")

	{

	  

	 if ($state eq "up") 

	  {

		$totalup++;

	  }

		  else

		  {

			$totaldown++;

		   }



          print "$int -> $state\n";

          ($int,$state) = $session->getnext($vars);



	}; 



print "\n-----------------------------\n";

print "Ports actifs : $totalup\n";

print "Ports non actifs : $totaldown\n";

print "-----------------------------\n";



#on vide les compteurs

$totalup = "0";

$totaldown ="0";



}


le programme me renvoit ceci :

NULL0 -> up

InLoopBack0 -> up

Vlan-interface1 -> up

Aux2/0/0 -> up

Ethernet2/0/1 -> down

Ethernet2/0/2 -> down

Ethernet2/0/3 -> down

Ethernet2/0/4 -> down

Ethernet2/0/5 -> down

Ethernet2/0/6 -> down

Ethernet2/0/7 -> down

Ethernet2/0/8 -> down

Ethernet2/0/9 -> up

Ethernet2/0/10 -> down

Ethernet2/0/11 -> down

Ethernet2/0/12 -> down

Ethernet2/0/13 -> down

Ethernet2/0/14 -> down

Ethernet2/0/15 -> down

Ethernet2/0/16 -> down

Ethernet2/0/17 -> down

Ethernet2/0/18 -> down

Ethernet2/0/19 -> down

Ethernet2/0/20 -> down

Ethernet2/0/21 -> down

Ethernet2/0/22 -> down

Ethernet2/0/23 -> down

Ethernet2/0/24 -> down

GigabitEthernet2/0/25 -> down

GigabitEthernet2/0/26 -> down

GigabitEthernet2/0/27 -> down

GigabitEthernet2/0/28 -> down



-----------------------------

Ports actifs : 5

Ports non actifs : 27

-----------------------------



j'aimerais savoir comment comptabiliser uniquement les ports Ethernet , est il possible en perl de comparer uniquement un debut de chaine comme dans l'exemple ?



if ($int commence par Ethernet)

{

....

}



d'avance merci

-------------------------------------
On est toujours le newbie de quelqu"un.
Xionbox
#1 Message posté le : 18-11-2007 à 17:15:22


Hobbit


Forum : Inscrit
Association :
Arrivé(e) le : 24-01-2004
Nombre de messages : 1319
Oui, c'est possible. D'ailleurs, c'est en Perl que les expression régulières ont été créées. Dans ton cas, ce qui suit devrait fonctionner:
if ($int ~= /^Ethernet./) { }
~= permet de comparer un string avec une expression régulière
"/" signifie "début" (ou fin suivant son emplacement) de l'expression régulière
"^" signifie "commence par". Si tu voulais "termine par", il aurait fallut mettre "$" juste avant la fin de l'expression.
Enfin, le "." signifie "n'importe quel caractère".

Voilà, ça devrait fonctionner (si toutes fois les expressions régulière en Perl n'ont pas complètement rouillé dans mon cerveau).

-------------------------------------
This is Linux land. In silent nights you can hear the Windows machines rebooting.
ToMsS
#2 Message posté le : 18-11-2007 à 18:31:50


Petit scarabée


Forum : Inscrit
Association :
Arrivé(e) le : 26-10-2006
Nombre de messages : 57
ca marche nikel Xionbox , merci pour l'info (aufait c'est =~ et non ~= ;-) )
par ailleurs j'ai une derniere question comment pousse t-on une variable dans un tableau j'ai trouvé de nombreux exemple ou le tableau est defini en debut de programme avec les valeurs mais rien avec un tableau ou on y insere des valeurs pendant le programme.

merci

-------------------------------------
On est toujours le newbie de quelqu"un.
Xionbox
#3 Message posté le : 18-11-2007 à 18:53:15


Hobbit


Forum : Inscrit
Association :
Arrivé(e) le : 24-01-2004
Nombre de messages : 1319
Avec la fonction push().
Exemple:

@truc = qw(un deux trois);

push(@truc,'quatre');



PS: merci, je note =~

-------------------------------------
This is Linux land. In silent nights you can hear the Windows machines rebooting.
ToMsS
#4 Message posté le : 18-11-2007 à 19:08:45


Petit scarabée


Forum : Inscrit
Association :
Arrivé(e) le : 26-10-2006
Nombre de messages : 57
merci ca fonctionne !!

-------------------------------------
On est toujours le newbie de quelqu"un.
Xionbox
#5 Message posté le : 19-11-2007 à 07:14:36


Hobbit


Forum : Inscrit
Association :
Arrivé(e) le : 24-01-2004
Nombre de messages : 1319
De rien.

-------------------------------------
This is Linux land. In silent nights you can hear the Windows machines rebooting.