Bonjour. Je suis actuellement en stage et dans le cadre de mon BTS nous avons convenu avec mon tuteur que mon projet serai le suivant :

creation d'un script en PERL pour analyser les log du firewall en place.

Personnellement je n'avais quasiement jamais touché a PERL (j'en profite pour conseiller aux debutants PERL pour l'impatient aux edition H&K que j'ai trouvé pour moins de 10€. Il est simple, petit et vas droit à l'essentiel)

donc j'arrive a mon petit soucis :

J'ai commencé par me faire un peut la main sous perl en creeant un petit script qui se contentait de lire un fichier contenant des informations separé par une tabulation et qui generai une page HTML contenant les information dans un tableau. jusque la : pas de soucis !

Je me suis donc dis "nikel ! il y a plus qu'a adapter le script au format du fichier log du firewall".

Sauf que là : tout se complique !

en effet le log généré par le firewall n'est pas un beau fichier contenant du texte bien rangé avec un separateur constant mais plutôt quelque chose de se type :


Mar 23 04:19:23 192.168.XX.XX IP-Logs: FIREWALL - id=firewall time="2006-03-23 04:19:20" fw=firewall.domaine.com type=IP src=192.168.XX.XX dst=192.168.XX.XX etc ....
impossible donc de faire un decoupage propre.

De toute façon toutes les information ne sont pas utiles. Je voudrais juste recuperer les lignes dont (par exemple) la destination ne serai pas une IP du type 192.168.XX.XX (j'espere que je ne suis pas trop confus je commence a m'embrouiller moi même ...)

Aprés avoir fureté un long moment sur le forum je me dis "bon sang mais c'est bien sur ! je vais utiliser GREP !!"


je lis donc le fichier ouvert precedement ligne par ligne et je recherche une expression qui correspond à "dst=" + "ip autorisée" que je place ensuite dans un tableau.



while ($line = <DATA>)
{
print OUT "<tr>\n";
$line;
$dstip = grep(/dst\=192\.168\.\d\d?\d\.\d\d?\d/, $line);
{
print OUT "<td style='font-weight: bold; color: rgb(0, 0, 0);'>$dstip</td>\n";
print $dstip;
}

j'ai rajouté "print $dstip;" afin de voir pendant l'execution se que le script me trouve et la horreur : il ne me trouve que "1" et se pour chaque ligne ...

je dois certainement avoir fais une erreure au niveau de mon code. Quelqu'un aurai une idée sur la question ?




------------------------
edit
------------------------

Je viens de me rendre compte d'une erreure :

Si j'utilise grep, le script vas chercher dans la liste l'expression souhaitée et au lieu de recuperer juste l'element que je souhaite, il vas me sortir toute la ligne contenant l'element ... Il vas faloir qu je trouve autre chose ...