Trace de fichier log d'apache
Le fichier access.log du serveur Web Apache enregistre dans un fichier texte toutes les requêtes HTTP emises. Il se trouve dans le répertoire apache/logs.
Par exemple la ligne suivante extraite d'un fichier log founit les informations suivantes :
172.16.0.2 - - [21/May/2006:06:25:33 +0200] "POST /ocsinventory HTTP/1.1" 200 88 "-" "OCS-NG_linux_client_v9"
L'adresse IP de l'émetteur (172.16.0.2) de la requête, le jour et l'heure (21/May/2006:06:25:33), la méthode utilisée (POST) (la ressource demandée (/ocsinventory) , un code de retour HTTP (200 -ressource trouvée-) et le SE du demandeur(linux).
La trace de ce fichier permet de repérer les intrusions malvenues éventuelles mais aussi seulement l'activité du serveur (sa charge par exemple).
Le programme à réaliser ici va consister à extraire du fichier log les adresses IP ainsi que les jour et heure d'activité.
Travail à faire.
Télécharger un fichier log de test. Observez-le.
Cas d'utilisation. Visualisation des accès à Apache
Acteur : l'administrateur réseaux
Scénario normal
1. L'administrateur demande le formulaire de gestion des accès
2. Le système retourne un formulaire
3. L'administrateur sélectionne le fichier log
4. Le système pointe sur le fichier demandé
5. L'admistrateur sélectionne une date début et une date fin
6. Le système retourne tous les accès (IP, date et heures précises)
Scénario alternatif
6.1 La date sélectionnée de fin de log est inférieure à
la date de début, le système en avertit l'administrateur. retour
à 5.
Analyse
L'accès au fichier log sera réalisé par une classe Passerelle qui aura la responsabilité de lire le fichier log, extraire les informations (ip et date) et retourner un DataSet.
fig1 Classe Passerelle
Pour charger la classe Periode qui contient tous les accès
entre deux dates, il faudra parcourir la fichier log (trié par accès)
et ajouter un accès par ligne du fichier log.
Travail à faire.
Justifier le signature de la méthode getDonnees.
La classe passerelle.
Cette classe assure les responsabilités suivantes :
Travail à faire.
private void button1_Click(object sender, System.EventArgs e)
{
StreamReader
sr = new StreamReader("access.log");
string
ligne=sr.ReadLine();
label1.Text=Passerelle.getIP(ligne);
}
Ajouter la clause using System.IO; pour utiliser la classe StreamReader
Vous regarderez, si besoin, l'aide pour comprendre les deux premières
lignes.
Attention, le fichier log doit être placé dans le répertoire
d'exécution du programme (répertoire bin\debug)
A l'éxécution, vous devez obtenir :
fig 3 affichage de la première ip du fichier log
fig 4 affichage des éléments de la première date du fichier
log
La méthode getDonnees.
Cette méthode prend en paramètre deux DateTime, un pour le début et l'autre pour la fin de l'intervalle sélectionné. Cette méthode parcours le fichier et pour chaque ligne, vérifie si la date est comprise dans l'intervalle ; dans ce cas un objet DataRow va être ajouté à une DataTable (lesAcces) du DataSet retourné en fin de méthode.
On donne les premières lignes :
StreamReader
sr = new StreamReader(nomFichier);
DataSet
ds= new DataSet();
DataTable
tab = new DataTable("lesAcces");
ds.Tables.Add(tab);
tab.Columns.Add("ip");
tab.Columns.Add("jmaHms");
Travail à faire.
Commenter chaque ligne fournie.
Ecrire la suite de la méthode getDonnees.
Tester à l'aide d'un DataGrid dans le formulaire :
DateTime
deb = new DateTime(2006,5,22);
DateTime
fin = new DateTime(2006,5,23);
DataSet
ds = Passerelle.getDonnees("access.log",deb,fin);
dg.DataSource=ds.Tables["lesAcces"]; //binding
du DataGrid
Afin d'obtenir l'écran :
fig 2 affichage des accès
Remarque : pour visualiser toutes les informations, il faut agrandir les colonnes du DataGrid.