| 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 Perlprint "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 webprint "<HTML>";#use strict;                   # oblige à déclarer toutes les variables utilisées; contraignant mais plus propreuse 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.txtprint "\@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 10: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
 |