1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134
| #! /usr/bin/perl
# Programme de récupération de donnée dans des fichiers de log afin de retransmettre dans une base SQL
# Utilisation des librairies de programmation
use warnings;
use strict;
# Déclaration des variables du programmes.
# Variable "compteur".
my $i = 0;
my $b = 0;
my $c = 0;
my $d = 0;
my $COMPTEUR = 0;
my $COMPTEUR_2 = 0;;
# Variable de vérification.
my $VERIF = 0;
# Variable "tampon".
my @TAMPON;
my @TAMPON_2;
my @TAMPON_3;
# Variable de "données".
my $DATE_1;
my $DATE_2;
my $DIF_HEURE;
my $DIF_MINUTE;
my $FICHIER_ECRITURE = '/home/charles/Programme travail/Analyse_log/resultat.csv';
my $FICHIER_ECRITURE_2 = '/home/charles/Programme travail/Analyse_log/resultat_2.csv';
my $HEURE_1;
my $HEURE_2;
my @LIGNE_2;
my $MINUTE_1;
my $MINUTE_2;
my $INFO;
my $IP_1;
my $IP_2;
open (FICHIER_1, ">$FICHIER_ECRITURE_2");
open( FICHIER ,'/home/charles/Programme travail/Analyse_log/test linux/bi21.net_access_log');
# On lit le fichier ligne par ligne et on enregistre dans le tableau LIGNE.
while(my @LIGNE = <FICHIER>)
{
print "Analyse:";
# On analyse le fichier à la recherche des caractères demandés.
# Le premier tableau TAMPON sert à recevoir les lignes du fichiers après traitement.
# Le second tableau TAMPON_2 sert à fixer le résultat de l'analyse dans une zone qui ne servira qu'à cet effet.
while($i != $#LIGNE)
{
print '.';
@TAMPON = split (/ / , $LIGNE[$i]); # On met la ligne dans un tableau en séparant la "phrase" par espace.
$TAMPON_2[$i] = "$TAMPON[0] $TAMPON[3]"; # On enregistre toutes les lignes dans un tableau.
# Une fois les informations principales récupérées, on prépare la phase deux de l'analyse: on ajoute "0" pour signaler que l'on peut
# analyser la zone.
@TAMPON = split (/:/, $TAMPON_2[$i]);
$TAMPON_2[$i] = "$TAMPON[0] $TAMPON[1] $TAMPON[2] 0";
$i ++;
}
# On informe l'utilisateur de la fin de la procédure.
print "\nAnalyse du fichier FICHIER terminee.\n";
}
# Nous avons finis d'analyser le fichier, on le ferme.
close(FICHIER);
open (F2, ">$FICHIER_ECRITURE");
# Phase de validation de l'opération précédente.
# Le fichier ne doit contenir que des IPs, des dates, des heures et des minutes épurées.
while ($d < $#TAMPON_2)
{
@TAMPON = split (/\[/, $TAMPON_2[$d]);
$TAMPON_3[0] = "$TAMPON[0] $TAMPON[1]";
@TAMPON = split (/ /, $TAMPON_3[0]);
$IP_1 = $TAMPON[0]; $DATE_1 = $TAMPON[2]; $HEURE_1 = $TAMPON[3]; $MINUTE_1 = $TAMPON[4];
print F2 "$IP_1;$DATE_1;$HEURE_1;$MINUTE_1\n";
$d++;
}
close(F2);
# On ferme le fichier en mode écriture.
# On ré-ouvre le fichier précédemment crée afin de récupérer les informations à modifier.
# On doit supprimer tous les doublons dans le fichier afin d'avoir un nouveau fichier "pure" pour les requêtes SQL.
open (FICHIER, "$FICHIER_ECRITURE");
#On définit le tableau LIGNE comme étant une zone contenant l'ensemble de la nouvelle source.
@LIGNE_2 = <FICHIER>;
$i = 0;
my $a = 0;
# Tant que l'on a encore des lignes a analyser, on continue l'opération.
while($i < $#LIGNE_2)
{
# Zone de récupération des informations primaires.
@TAMPON = split (/\;/, $LIGNE_2[$i]);
$IP_1 = $TAMPON[0]; $DATE_1 = $TAMPON[1]; $HEURE_1 = $TAMPON[2]; $MINUTE_1 = $TAMPON[3];
$VERIF = 0;
while ($VERIF != 1 && $i < $#LIGNE_2)
{
# Zone de récupération des informations secondaires.
$d++;
@TAMPON = split (/\;/, $LIGNE_2[$i]);
$IP_2 = $TAMPON[0]; $DATE_2 = $TAMPON[1]; $HEURE_2 = $TAMPON[2]; $MINUTE_2 = $TAMPON[3];
# Calcul des différences.
$DIF_MINUTE = $MINUTE_2 - $MINUTE_1;
$DIF_HEURE = $HEURE_2 - $HEURE_1;
# On débute l'analyse des horaires.
if ($DATE_1 eq $DATE_2 && $DIF_HEURE == 0 && $DIF_MINUTE > 10)
{
$VERIF = 1;
}
elsif ($DATE_1 eq $DATE_2 && $DIF_HEURE ==1 && $DIF_MINUTE > -50)
{
$VERIF = 1;
}
elsif ($DATE_1 ne $DATE_2 && $DIF_HEURE == -23 && $DIF_MINUTE > -50)
{
$VERIF = 1;
}
else
{
$i++;
}
$c++;
print FICHIER_1 "$a-$LIGNE_2[$i]";
}
$a++;
}
close (FICHIER);
close (FICHIER_1); |
Partager