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 : 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
 
#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 : Sélectionner tout - Visualiser dans une fenêtre à part
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), 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 : 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
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...


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.