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
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.
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
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).
Ce script se connecte dans un premier temps au switch.
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
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.
Partager