[ Noob - Perl Reseau ] Script perl qui recupere les tables ARP des switches Cisco
Bonjour à tous,
Je suis en train d'écrire un script Perl qui récupère la table ARP des mes switches Cisco 2950 (une 30 ene).
Le but de la manoeuvre est de retrouver le port du switch sur lequel serait connectée une machine... ou plus simplement savoir où est connecté telle ou telle machine (ou inversement quelle machine est connecté sur tel switch).
Ces informations sont situés dans la table ARP des switches.
Pour cela, il est necessaire de se connecter sur chacun des switches et de recupérer le resultat de la commande suivante : "show mac-address-table | exclude CPU"
Voici le tableau obtenu :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
|
#sh mac-address-table
Mac Address Table
-------------------------------------------
Vlan Mac Address Type Ports
---- ----------- -------- -----
All 0013.19a4.25c0 STATIC CPU
All 0100.0ccc.cccc STATIC CPU
All 0100.0ccc.cccd STATIC CPU
All 0100.0cdd.dddd STATIC CPU
1 0002.5519.8bb4 DYNAMIC Fa0/23
1 0006.1bc3.4463 DYNAMIC Fa0/19
1 0006.1bc3.e2f2 DYNAMIC Fa0/12
1 0006.1bc3.f40f DYNAMIC Fa0/11
1 0006.1bdf.2978 DYNAMIC Fa0/16
1 0006.1bdf.3c42 DYNAMIC Fa0/20
1 000c.f1ab.5de6 DYNAMIC Gi0/2
1 000d.6143.7ad7 DYNAMIC Fa0/5
1 000d.6146.8672 DYNAMIC Fa0/2
1 000e.0c4f.52ec DYNAMIC Gi0/2
1 000e.a668.a7bb DYNAMIC Fa0/6
1 00d0.cf03.8494 DYNAMIC Gi0/2
Total Mac Addresses for this criterion: 16 |
Je souhaiterais récupéré que les colonnes Mac Address et Port
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13
|
0002.5519.8bb4 Fa0/23
0006.1bc3.4463 Fa0/19
0006.1bc3.e2f2 Fa0/12
0006.1bc3.f40f Fa0/11
0006.1bdf.2978 Fa0/16
0006.1bdf.3c42 Fa0/20
000c.f1ab.5de6 Gi0/2
000d.6143.7ad7 Fa0/5
000d.6146.8672 Fa0/2
000e.0c4f.52ec Gi0/2
000e.a668.a7bb Fa0/6
00d0.cf03.8494 Gi0/2 |
Cela ne fais pas 24H que j'ai commencé à apprendre le language perl (donc ne soyez pas trop indulgent:mrgreen:), mais je sais qu'il faut que j'utilise la fonction Perl "use Net::Telnet::Cisco;" pour me connecter au switch.
Voici le bout de script que j'ai écris... un petit coup de main serait le bien venu, car c'est pas gagné (perl me l'a bien fais comprendre quand je lance le script).
Code:
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 32 33 34 35 36 37 38
| #!/usr/bin/perl
use strict;
use Net::Telnet::Cisco;
my $IP_Switch;
my $session = Net::Telnet::Cisco->new(Host => '192.168.1.1',
Prompt => '/.*\#/');
$session->login('admin', 'turlututu');
# Execute la commande
my @output = $session->cmd('show mac-address-table | exclude CPU');
# Sauvegarde dans un fichier
# Variable des fichiers
$fic_mac_temp_brut = "macport_brut.tmp" ;
$fic_mac_temp_propre = "macport_propre.tmp" ;
# Ouverture en lecture/ecriture du $fic_mac_temp_brut
open (Point-Fic-Mac-Brut, $fic_mac_temp_brut) or die ("Impossible d'ouvrir $fic_mac_temp_brut") ;
# Remplissage du fichier $fic_mac_temp_avt_modif avec le contenu de @output
print Point-Fic-Mac-Brut $output;
# Ouverture en lecture/ecriture du $fic_mac_temp_propre
open (Point-Fic-Mac-Propre, $fic_mac_temp_propre) or die ("Impossible d'ouvrir $fic_mac_temp_propre") ;
# Remplissage du fichier $fic_mac_temp_propre à partir des infos de $fic_mac_temp_brut; on récupère l'adresse MAC et le port pour chaque ligne
$nbve = 0 ;
while ($ligne=<Point-Fic-Mac-Brut>) {
$nbve++ ;
chop($ligne) ;
$ligne =~ s/^\s*//; # supression des blancs à gauche.
$ligne =~ s/\s*$//; # suppression des blancs à droite
@liste = split (/\s+/, $ligne); # Séparation des différents champs
$ligne = join (' ', @liste[1,3]); # Rassemblement des champs qui nous intéressent.
print Point-Fic-Mac-Propre @ligne;
} ; # fin de tant que |
Ce script se connecte dans un premier temps au switch.
Il lance la commande sh mac-address-table.
Le résultat de la commande alimente le fichier macport_brut.tmp.
Ce fichier est ensuite épuré et alimente le fichier macport_propre.tmp.
Voilà, ce que j'ai essayé de faire... mais visiblement, il y a des fautes... :roll:
Une fois que cela fonctionnera pour un switch, je ferais les modifs pour que cela fonctionne pour une liste de switch... et ensuite intégrer mes infos dans une base MySQL... mais c'est pas pour tout de suite.