Gouki19 | bonjour à tous, voila je reprend le script d'un stagiaire en Perl. Il s'agit d'un script qui récupère l'@ MAC tapé par l'utilisateur dans un formulaire et qui recherche l'existence de cette @ MAC dans un fichier .txt ! Je dois faire en sorte que le script tolère les séparateurs "espace", ":" et "-" taper par l'utilisateur lorsqu'il rentre l'@ MAC dans le formulaire. Comme les @ MAC sont stocké avec le séparateurs "-" dans le fichier .txt j'utilise simplement la substitution de chaîne avec expression régulière : "$mac =~s/\+|%3A/-/g;"
Cette substitution fonctionne car je vérifie le contenu de $mac mais je constate que le prog réagit de manière incohérente car il ne veut plus exécuter l'instruction après le if de "if ($tabip[$i]=~m/$ip/) {$t++;}" qui se trouve à la ligne 160 tandis que si il n'y a pas de substitution faite alors il l'exécute ce "if" et m'affiche l'@ MAC dans un tableau.
Voici le code du script: Code :
- #!C:\perl\bin\perl.exe -w
- #on indique ici le chemin vers l'interpréteur Perl
- print "Content-type: text/html\n\n"; #indique qu'on va utiliser des balises HTML en vue d'executer le script à l'aide d'un navigateur web
- print "<HTML>";
- #use strict; # oblige à déclarer toutes les variables utilisées; contraignant mais plus propre
- use forme; # module que j'ai écrit dédié à la mise en forme de l'interface HM (interface web en l'occurence)
- use URI::Escape; # module intégré à Perl qui permet d'échapper les caractères spéciaux
- ############################# déclaration des variables ####################################################
- my $tiret;
- my $l; # variable de parcours de fichier TXT
- my $i; # variable de boucle
- my $in; # données passées par le formulaire
- my $nom; # variable intermédiaire
- my ($mac,$ip); # @mac et @ip fourni par l'utilisateur ds le formulaire recherche.pl
- my $ipv; # copie de $ip avant échappement des points de $ip
- my ($t,$s); # variables de controle pour la recherche de résultats ds ARP.txt
- my @ligne; # tableau dont chaque ligne correspond à une ligne du fichier ARP.txt
- my (@hop,@champs); # tableaux intermédiaires
- my (@tabcompt,@tabmac,@tabip,@tabhost,@tabport,@tabswit,@tabvlan,@tabind); # tableaux contenant respectivement le compteur pour décler les anciennes mac,
- # @mac,@ip,hostname,nom du port,switch, et vlan (mais était-il nécessaire de le préciser? ^^)
- ############################# affiche l'en tête de la page web (titre, logo) ################################
- forme::haut();
- ############################# ouverture des fichiers ARP successifs! #########################
- $c=0;
- open(FIC,"<../sites.txt" ) || die "Problème à l\'ouverture : $!";
- while (defined ($l=<FIC> ))
- {
- chomp $l;
- $site[$c]=$l;
- $c++;
- }
- close FIC;
- ############################# ouverture des fichiers ARP successifs! #########################
- $c=0;
- open(FIC,"<../sites.txt" ) || die "Problème à l\'ouverture : $!";
- while (defined ($l=<FIC> ))
- {
- chomp $l;
- $site[$c]=$l;
- $c++;
- }
- close FIC;
- ############################# récupération des informations du formulaire : @mac/@ip ################################
- read(STDIN, $in, $ENV{CONTENT_LENGTH}); # ON RECUPERE LES INFORMATIONS DU FORMULAIRE
- @champs = split(/&/,$in);
- print "$in <br>";
- ($nom, $mac) = split(/=/,$champs[0]);
- print "nom: $nom, mac: $mac<br>";
- $mac =~s/\+/-/g; # il y a bien un anti-slash juste avt le "+" meme si il ne se voit pas ici
- #chomp($mac);
- print "mac après subtitution: $mac<br>";
- @hop=split(//,$mac);
- ($nom, $ip) = split(/=/,$champs[1]);
- $mac=lc($mac); # on met la mac fournie par l'utilisateur en minuscule pour coller avec notre BDD ARP.txt
- print "\@MAC minuscule: $mac et ip= $ip<br>";
- $ipv=$ip;
- @hop=split(/\./,$ip); # petit tour de passe passe pour avoir l'ip sous une bonne forme
- $ip=join('\.',@hop); # (il faut échapper les points pour que ca fonctionne : 126.43 devient 126\.43 par exemple)
- ############################# ouverture du fichier ARP.txt et extraction des données ds des tableaux ################################
- $i=0;
- for ($c=0;$c<@site-1;$c++)
- {
- open(FIC,"<../ARP-".$site[$c].".txt" ) || die "Problème à l\'ouverture : $!";
- while (defined ($l=<FIC> ))
- {
- chomp $l;
- $ligne[$i]=$l;
- @hop=split(/:/,$l);
- if (defined($hop[0])) { $tabcompt[$i]=$hop[0]; } else { $tabcompt[$i]=""; }
- if (defined($hop[1])) { $tabind[$i]=$hop[1]; } else { $tabind[$i]=""; }
- if (defined($hop[2])) { $tabmac[$i]=$hop[2]; } else { $tabmac[$i]=""; }
- if (defined($hop[3])) { $tabip[$i]=$hop[3]; } else { $tabip[$i]=""; }
- if (defined($hop[4])) { $tabhost[$i]=$hop[4]; } else { $tabhost[$i]=""; }
- if (defined($hop[5])) { $tabbios[$i]=$hop[5]; } else { $tabbios[$i]=""; }
- if (defined($hop[6])) { $tabname[$i]=$hop[6]; } else { $tabname[$i]=""; }
- if (defined($hop[7])) { $tabport[$i]=$hop[7]; } else { $tabport[$i]=""; }
- if (defined($hop[8])) { $tabswit[$i]=$hop[8]; } else { $tabswit[$i]=""; }
- if (defined($hop[9])) { $tabvlan[$i]=$hop[9]; } else { $tabvlan[$i]=""; }
- $tabsite[$i]=$site[$c];
- $i++;
- }
- close FIC || die "Problème à la fermeture : $!";
- }
- ############################# affichage des résultats trouvés ################################
- if (-d "../Recherche" )
- {}
- else
- {mkdir("../Recherche","077" );}
- open(FIC,">../Recherche/mac ".$mac." ip ".$ipv.".txt" ) || die "Problème à l\'ouverture : $!";
- print "<br> ";
- print "mac : $mac<br>";
- print "<CENTER><font size=3> résultat de la recherche pour \@mac: ".$mac." et \@ip: ".$ipv."<br><br><br></font></CENTER>";
- print (FIC "résultat de la recherche pour \@mac: ".$mac." et \@ip: ".$ipv."\n \n" );
- print "<font size=3><center> <a href='../Networks Inventory/Recherche/mac ".$mac." ip ".$ipv.".txt'> Exporter le résultat</a><br><br> </center><br>";
- print "<table border=1 align='center' cellpadding=3>";
- print "<tr>";
- print "<td><font size=2><center> site </td></font></center>";
- print "<td><font size=2><center> \@mac </td></font></center>";
- print "<td><font size=2><center> \@ip </td></font></center>";
- print "<td><font size=2><center> hostname </td></font></center>";
- print "<td><font size=2><center> NBname </td></font></center>";
- print "<td><font size=2><center> Username </td></font></center>";
- print "<td><font size=2><center> port </td></font></center>";
- print "<td><font size=2><center> switch </td></font></center>";
- print "<td><font size=2><center> vlan </td></font></center>";
- print "</tr>";
- for ($i=0;$i<@ligne;$i++)
- {
- $s=0;
- $t=0;
- if (defined($mac))
- {
- $s++;
- print "tabmac[$i] : $tabmac[$i], mac: $mac<br>";
- if ($tabmac[$i]=~m/$mac/) {$t++;if ($tabmac[$i] cmp $mac){print "sont différents";}print"mac trouvé avec \$t= $t , \$i= $i et \$s= $s<br>";}
- }
- if (defined($ip))
- {
- $s++;
- print "tabip[$i] : $tabip[$i], ip: $ip<br>";
- if ($tabip[$i]=~m/$ip/) {$t++;}
- }
- print "avt le if \$s = $s et \$t = $t<br>";
- if ($s==$t)
- {
- print "apres le if \$s = $s et \$t = $t<br>";
- print "<tr>";
- print "<td><font size=2>".$tabsite[$i]."</td></font>";
- print "<td><font size=2>".$tabmac[$i]."</td></font>";
- print "<td><font size=2>".$tabip[$i]."</td></font>";
- print "<td><font size=2>".$tabhost[$i]."</td></font>";
- print "<td><font size=2>".$tabbios[$i]."</td></font>";
- print "<td><font size=2>".$tabname[$i]."</td></font>";
- print "<td><font size=2>".$tabport[$i]."</td></font>";
- print "<td><font size=2>".$tabswit[$i]."</td></font>";
- print "<td><font size=2>".$tabvlan[$i]."</td></font>";
- print "</tr>";
- print (FIC $tabsite[$i]."\t".$tabmac[$i]."\t".$tabip[$i]."\t".$tabhost[$i]."\t".$tabbios[$i]."\t".$tabname[$i]."\t".$tabport[$i]."\t".$tabswit[$i]."\t".$tabvlan[$i]."\n" );
- }
- }
- print "</table>";
- close FIC;
- forme::bas();
- print "</HTML>";
|
voici un exemple du fichier .txt:
Code :
- 0:1:00-30-f1-7d-97-20:192.168.201.101::::::
- 0:1:00-20-e0-6f-cb-e1:::::mod. 1, port 1:OmniStack 6124 n°1:Vlan 1
- 0:1:00-01-f4-d6-21-13:10.40.190.1::::::
|
Voila je ne comprend pas la reaction du prog , si quelqu'un a une solution ou meme une explication plz !?!?
Message édité par Gouki19 le 17-02-2005 à 10:58:55
|