Analyse de journaux maillog, perl et XML

Document Sample
Analyse de journaux maillog, perl et XML Powered By Docstoc
					      Analyse de journaux maillog, perl et XML
                    Elie Bursztein (elie@bursztein.net)
                              Last revision 2007


              e
Table des mati`res
     e
1 Pr´sentation                                                                                                             1
  1.1 Objectif . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .                                             1
              e
  1.2 Mode op´ratoire . . . . . . . . . . . . . . . . . . . . . . . . . . .                                                2
  1.3 Trinome . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .                                              2

2 Bref rappel de la syntaxe Perl                                                                                           2
  2.1 Utilisation des variables . . . . . . .              .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   2
  2.2 Utilisation tableau . . . . . . . . . .              .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   2
  2.3 Utilisation de table de hash . . . . .               .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   3
  2.4 L’instruction condititionel if . . . . .             .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   3
  2.5 boucle for . . . . . . . . . . . . . . .             .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   3
  2.6 L’instruction each et la boucle while                .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   3
  2.7 La boucle foreach . . . . . . . . . . .              .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   3
                                 e     e
  2.8 Utilisation d’expressions r´guli`res .               .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   3
  2.9 Lire un fichier . . . . . . . . . . . . .             .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   4
       ´
  2.10 Ecrire dans un fichier . . . . . . . . .             .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   4

3 Expression regulieres et Perl                                                                                            5
  3.1 Syntaxe Perl . . . . . . . . . . . . . . . . .                       .   .   .   .   .   .   .   .   .   .   .   .   5
                    e
  3.2 Nombre caract`res . . . . . . . . . . . . . .                        .   .   .   .   .   .   .   .   .   .   .   .   5
                         e
  3.3 Ensemble de caract`res . . . . . . . . . . . .                       .   .   .   .   .   .   .   .   .   .   .   .   5
  3.4 Classes POSIX des ensembles de caract`res e                          .   .   .   .   .   .   .   .   .   .   .   .   5
  3.5 Example . . . . . . . . . . . . . . . . . . . .                      .   .   .   .   .   .   .   .   .   .   .   .   5

4 L’exercice                                                                                                               6
  4.1 Vue d’ensemble . . . . . . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   6
  4.2 Convertir mail.log en XML        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   6
                             e
  4.3 Les statistiques demand´es       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   6
  4.4 Transformation XSLT . . .        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   6


1       e
      Pr´sentation
1.1    Objectif
                                                                            a
    Les bijoux ont toujours beaucoup de valeur et perl ne fait pas exception` la
 e                                                                     e   e
r`gle. Ce TP vous permet de mieux comprendre perl et les expressions r´guli`res.
                           e                                     e      e
L’analyse de journaux syst`me est une tache fondamentale de la s´curit´ car elle

                                           1
             e e
permet de r´v´ler les comportements suspects ainsi que les disfonctionnement.
                                             e
Perl est un outil de choix pour cette activit´ car il est facile, portable et dispose
                       e
de nombreuses bilioth`ques.
La structure des journaux est rarement facilement parsable c’est pourquoi l’uti-
                       e    e                  e
lisation d’expression r´guli`res est souvent n´cessaire. Le format des journaux
                                                            e
d’emails est un excellent exemple de ce type de difficult´. Enfin, le recours aux
                            a
transformations XSLT et ` XML permet de renforcer dans vos aquis dans ce
domaine.

1.2            e
        Mode op´ratoire
                          o
     Le TD ce fait en Trinˆme. Si vous devez le finir chez vous.

1.3     Trinome
     – Membre 1 :
     – Membre 2 :
     – Membre 3 :


2      Bref rappel de la syntaxe Perl
     Petit rappel de la syntaxe de perl au travers d’exemples intuitifs


2.1     Utilisation des variables
                                                                  e       e
   En perl les variables commence par $. Elles n’ont pas besoin d’ˆtre typ´es,
        e         e
ou allou´es. On d´note trois types de variables basiques
 e
d´claration de scalaire

my $i;
 e
d´claration de tableau
my @t;
declaration de hash

my %hash

2.2     Utilisation tableau
                ee
     ajouter un ´l´ment au tableau
$t[1] = "a";
ou
$t[1]++;

          ee
Afficher un ´l´ment
print $t[1];


                                         2
2.3     Utilisation de table de hash
             a
     ajouter ` la table de hash
$hash{$key} = "valeur";
ou
$hash{$key}++;
                                  e
$key est une chaine. Afficher une cl´
print $hash{$key};

2.4     L’instruction condititionel if
$a = 10;
if ($a > 9) {
   print "j’ai la moyenne\n";
} else {
   print "pas de bol\n";
}

2.5     boucle for
for ($i = 0; $i < 10; $i++)
{
print "print $i\n";
 }

2.6     L’instruction each et la boucle while
while (($key, $value) = each %hash) {
    print $key, "\n";
   delete $hash{$key};   #This is safe
}

2.7     La boucle foreach
foreach $key (sort(keys %hash)) {
print $key, ’=’, $hash{$key}, "\n";
}

2.8                                e    e
        Utilisation d’expressions r´guli`res
         e
     L’op´rateur ”regexp”
$toto =~ /REGEXP/
                                                   e     a
Utiliser les regexp pour savoir si une expression r´pond ` un motif
If ($toto =~ /REGEXP/)
{
print "ca marche\n";
}


                                       3
                          e   e
Utiliser les regexp pour r´cup´rer un sous-motif
If ($toto =~ /(Regexp)/)
{
print "$1\n";
}

2.9    Lire un fichier
open(IN, "toto.txt")
While ($line = <IN>)
{
print "$line";
}
close IN;

2.10    ´
        Ecrire dans un fichier
open(OUT, ">".$ARGV[0]) or die "can’t open";
print OUT "test\n";
close OUT;




                                       4
3       Expression regulieres et Perl
                                                     e    e
    Rapide rappel sur l’utilisation des expressions r´guli`res (regexp).

3.1      Syntaxe Perl
$toto =~ /REGEXP/

3.2                   e
         Nombre caract`res
                     e
    – ? 0 ou 1 caract`re.
    – ∗ 0,1 ou plus.
    – + 1 ou plus.

3.3                        e
         Ensemble de caract`res
    –                            e
        . n’importe quelle caract`re.
    –   [] un ensemble de caract`res : [0 − 9] un chiffre, [0 − 9]+ des chiffres.
                                 e
    –                                                            a
        [∧] tout sauf cette ensemble : [∧\n] tout sauf le retour ` la ligne.
    –               e                                   e
        () parenth`ses de capture. Met le motif captur´ dans une variable tempo-
        raire : $1, $2...$n.

3.4                                           e
         Classes POSIX des ensembles de caract`res

 :upper :     A-Z                uppercase letters
 :lower :     a-z                lowercase letters
 :alpha :     A-Za-z             upper- and lowercase letters
 :alnum :     A-Za-z0-9          digits, upper- and lowercase letters
 :digit :     0-9                digits
 :xdigit :    0-9A-Fa-f          hexadecimal digits
 :punct :     ., ! ? :...        punctuation
 :blank :     \t                 space and TAB characters only
 :space :     \t\n\r\f \v        blank (whitespace) characters
 :cntrl :     -                  control characters
 :graph :     ˆ\t \n \r \f \v    printed characters
 :print :     ˆ\t\n\r\f \v       printed characters and space

3.5      Example
If ($toto =~ /(Regexp)/)
{
print "$1\n";
}




                                        5
4     L’exercice
4.1     Vue d’ensemble
                                               a
   La chaine de production du script ressemble ` ceci :
mail.log → Script → XML → XSLT transformation → HTML

4.2     Convertir mail.log en XML
                               a e e
   Le coeur du TP consist ` r´alis´ un script qui va lire le fichier maillog et
en ressortir des statistiques (voir 4.3) sur l’utilisation du serveur de mails Il
                   e
vous est demand´ d’utiliser les tables de hash en perl ainsi que les expressions
 e    e                                                  e    e     a
r´guli`res. L’utilisation de label dans les expressions r´guli`res ”` la” perl 6 n’est
            e
pas autoris´.

4.3                            e
        Les statistiques demand´es
        e
    1. R´partition des mails par code postfix : sent, reject, bounced..
        e
    2. R´partition par sender : IP, utilisateur, Domain
        e
    3. R´partition par destinataire, domaine de destination
                                           e
    4. Volume horaire du nombre de mails. R´partition par code postfix
        e
    5. R´partition par taille de mails par code postfix
                                     e
    6. Volume horaire du trafic mail r´partition par code postfix

4.4     Transformation XSLT
   La transformation XSL permet de convertir votre fichier en HTML ou tout
                                                          e        a
autre type de votre choix (PDF, Latex, txt). On s’int´resse ici ` la transfor-
mation vers une page HTML afin de pouvoir visualiser les statistiques dans un
navigateur web.
Pour l’affichage graphique, deux solutions sont possible en fonction de votre
motivation :
                                                                         e
   – Utiliser des fichiers images (1 par couleur) de 1px de largeur et l’´tirer en
                      e
      fonction de la r´partition en utilisant les attributs width ou height de la
      balise IMG.
                               e e
   – Utilise la lib GD pour g´n´rer les stats. Voir utiliser JPgraph pour ceux
                     e
      qui sont motiv´s pour faire une transformation XSLT + PHP.




                                          6