Script Perl - Informations

Résolu/Fermé
dimitri - 9 juin 2009 à 14:56
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 - 22 juil. 2009 à 08:52
Bonjour à tous,

Quelqu'un aurait il l'amabilité de m'aider à commencer le programme suivant s'il vous plaît ?

Le problème étant que j'ai vraiment du mal à comprendre la syntaxe du perl.

Je connais l'utilité du programme : Il permet de lire dans un fichier log (syslog) les données sur chaque ligne et de check les access-list . Je lance mon fichier : fichier.pl > accesslist.xls et je redirige les données vers un fichier excel.

Ce qui est déjà commenté, c'est ce qui est intuitif, les autres lignes je ne comprends, j'ai vraiment besoin d'aide s'il vous plaît ...


#
$acl_name="MK1";
# Nom du fichier Syslog à examiner
$stuff="fichierSyslog.txt";
#
# Seuil : nombre de paquets minimum pour ajouter la conversation dans le rapport
$seuil=0;
$nc=0;
$conversation="";
open stuff, $stuff;
while (<stuff>) {
# On filtre le fichier d'entrée en ne traitant que les lignes comprenant la chaine de caractères entre // ci-dessous
if (/list 124/) {
s/^.*permitted//;
# print "\nLigne1 $_";
# good s/\([0-9\/]*\)//g;
# s/(\([0-9\/]*\))(.*?)(\([0-9\/]*\))/ PS\1 \2 PR\3/g;
s/ ->//g;
# print "\nLigne2 $_";
s/,//g;
s/\(0\/0\)//g;
# print "\nLigne3 $_";
s/([a-z]+).*?([\.\(\)0-9]+).*?([\.\(\)0-9]+).*?([0-9]+)/\1 \2 \3 \4/;
# print "\nLigne4 $_";
# s/(10\.22\.207)/toto/;
$conversation="$1 $2 $3";
$packet=$4;
# print "Conversation : |$conversation| $packet paquets\n";
$exist=0;
$I=0;
foreach $conv (@conv_tab) {
# print "Conv : $conv \n";
if ($conv eq $conversation) {
# print "Conv existante ($conv , $conversation )\n";
$exist=1;
$pkt_tab[$I]+=$packet;
# print " $pkt_tab[$I] \n";
last;
}
$I++;
}
if (!$exist) {
# print "Conv non existante\n";
push(@conv_tab,$conversation);
push(@pkt_tab,$packet);
# print @conv_tab;
# print "\n";
}

}
}
print "Tableau conversations \n";
$I=0;
foreach (@conv_tab) {
if ($pkt_tab[$I] > $seuil) {
print "$pkt_tab[$I] $conv_tab[$I]\n";
}
$I++;
}


pouvez vous m'aider s'il vous plait à commenter ce petit bout de code,

amicalement,

dimitri
A voir également:

23 réponses

lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 569
21 juil. 2009 à 19:40
Re,
# à ne pas oublié qu'on est toujours dans la boucle while

# pour chaque élément du tableau @conv_tab
foreach $conv (@conv_tab) {
# print "Conv : $conv \n";
  if ($conv eq $conversation) { # si la variable $conv est égale avec $conversation
# print "Conv existante ($conv , $conversation )\n";
  $exist=1;              # initialise la variable $exist
  $pkt_tab[$I]+=$packet; # équivalent avec $pkt_tab[$I] = $pkt_tab[$I] + $packet
                         # donc tu remplis le tableau @pkt_tab
# print " $pkt_tab[$I] \n";
                last; # sortir de la boucle
        }
        $I++; # $I est incrementé
}
if (!$exist) { # on test la valeur de vérité de $existe
               # ! c'est pour négation
# print "Conv non existante\n";
        push(@conv_tab,$conversation); # on ajoute à @conf la variable $conversation
        push(@pkt_tab,$packet);        # on ajoute à @pkt_tab,$packet
# print @conv_tab;
# print "\n";
}

}
}
print "Tableau conversations \n";
$I=0;
foreach (@conv_tab) {                # pour chaque élément de tableau @conv_tab
        if ($pkt_tab[$I] > $seuil) { # on teste les éléments de @pkt_tab avec $seuil
                print "$pkt_tab[$I] $conv_tab[$I]\n"; # on affiche les éléments de @pkt_tab et @conv_tab
        }
        $I++; # incrémentatoin de $I
}

0
thanks you very much my friend :)

i've now understand a little perl language.

it's hard .. but with you i'll upgrade my personal skill .

Thanks a lot :)
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 569
22 juil. 2009 à 08:52
Salut,

De rien ;-)
0