| Qui est en ligne ? |
| Il y a : 29 utilisateurs en ligne, consultez le détail |
Forum » Serveur, Réseaux et Programmation » comparer le debut d'une chaine en perl |
Forum modéré par : jblecanard |
| Même auteur |
|
Score ( voter ) : |
|
| Page : [1] |
| Auteur | Message |
|---|---|
|
|
#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. |
|
|
#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. |
|
|
#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. |
|
|
#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. |
|
|
#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. |
|
|
#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. |
| Page : [1] |
Forum » Serveur, Réseaux et Programmation » comparer le debut d'une chaine en perl |
Forum modéré par : jblecanard |
| Même auteur |
|
Score ( voter ) : |
|
- Petit scarabée : 0 pastille, moins de 100 messages
- Scarabée : 0 pastille, plus de 100 messages
- Hobbit : 1 pastille, plus de 1000 messages
- Naboo : 2 pastilles, plus de 2000 messages
- Elfe : 3 pastilles, plus de 3000 messages
- Jedi : 4 pastilles, plus de 4000 messages
- Maître Jedi : 5 pastilles, plus de 5000 messages