Script en PERL qui lit syslog et analyse chaque ligne

Fermé
TempoAA Messages postés 3 Date d'inscription lundi 31 mars 2014 Statut Membre Dernière intervention 15 avril 2014 - Modifié par TempoAA le 1/04/2014 à 00:02
TempoAA Messages postés 3 Date d'inscription lundi 31 mars 2014 Statut Membre Dernière intervention 15 avril 2014 - 15 avril 2014 à 03:08
Bonjour
je dois faire un Script en PERL du nom de syslog qu'on appelle sans paramètre, qui demande le nom d'un fichier de log du programme syslogd à traiter. Le format de ce log est une entrée par ligne, dans le format habituel de syslog :
Mois date heure adresse-visée service[processno]: message
- Mois est dans format Mmm
- Heure est toujours dans format HH:MM:SS
- processno est un nombre entier
- Message est un message différent pour chaque type de service

le Script doit lire le fichier de log et analyser chaque ligne pour faire des statistiques.
Voici les statistiques demandées à chaque appel :
-période couverte du log (début-fin) avec dates et heures
-nombre total de traces (lignes) pour chaque machine (adresse-visée)
-nombre total de traces pour chaque service
-nombre de connexions pop, ssh et imap
-liste des adresses qui ont fait une connexion ssh et le nombre de fois chaque

Besoin d'aide pour mettre en place ce script.
A voir également:

2 réponses

[Dal] Messages postés 6194 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 11 octobre 2024 1 092
1 avril 2014 à 12:41
Salut TempoAA,

Donne un extrait représentatif de ton fichier de log, un exemple de ce que tu veux obtenir en sortie, et le code que tu as fait et qui ne fonctionne pas.


Dal
0
TempoAA Messages postés 3 Date d'inscription lundi 31 mars 2014 Statut Membre Dernière intervention 15 avril 2014
13 avril 2014 à 18:56
Bonjour, voici un extrait du log et le code que j'ai fait

log
Jul 26 20:06:34 deneb PAM_unix[15771]: (system-auth) session opened for user brejeon by (uid=0)
Jul 26 20:06:34 deneb -- brejeon[15771]: LOGIN ON pts/5 BY brejeon FROM sirius
Jul 26 20:43:32 deneb PAM_unix[15771]: (system-auth) session closed for user brejeon
Jul 27 01:24:53 deneb PAM_unix[15960]: (system-auth) session opened for user guilleme by (uid=0)
Jul 27 01:24:53 deneb -- guilleme[15960]: LOGIN ON pts/5 BY guilleme FROM sirius
Jul 27 01:29:29 deneb PAM_unix[15960]: (system-auth) session closed for user guilleme
Jul 27 01:30:33 deneb PAM_unix[15996]: check pass; user unknown
Jul 27 01:30:33 deneb PAM_unix[15996]: authentication failure; (uid=0) -> etudinfo for system-auth service
Jul 27 01:30:33 deneb login[15996]: FAILED LOGIN 1 FROM sirius FOR etudinfo, Authentication failure
Jul 27 01:30:39 deneb PAM_unix[15996]: (system-auth) session opened for user guilleme by (uid=0)
Jul 27 01:30:39 deneb -- guilleme[15996]: LOGIN ON pts/5 BY guilleme FROM sirius
Jul 27 01:31:21 deneb PAM_unix[15996]: (system-auth) session closed for user guilleme
Jul 27 08:31:22 deneb PAM_unix[16954]: (system-auth) session opened for user roynette by (uid=0)
Jul 27 08:31:22 deneb -- roynette[16954]: LOGIN ON pts/5 BY roynette FROM sirius
Jul 27 08:32:44 deneb pam_rhosts_auth[16969]: denied to alaing@sirius.info-ua as alaing: access not allowed
Jul 27 08:32:48 deneb PAM_unix[16970]: (system-auth) session opened for user alaing by (uid=0)
Jul 27 08:32:48 deneb login -- alaing[16970]: LOGIN ON pts/7 BY alaing FROM sirius
Jul 27 08:33:25 deneb PAM_unix[16988]: (system-auth) session opened for user hamon by (uid=0)
Jul 27 08:33:25 deneb -- hamon[16988]: LOGIN ON pts/8 BY hamon FROM sirius
Jul 27 08:40:30 deneb PAM_unix[17013]: (system-auth) session opened for user darlhac by (uid=0)
Jul 27 08:40:30 deneb -- darlhac[17013]: LOGIN ON pts/9 BY darlhac FROM sirius
Jul 27 08:54:00 deneb PAM_unix[17086]: (system-auth) session opened for user gillier by (uid=0)
Jul 27 08:54:00 deneb -- gillier[17086]: LOGIN ON pts/10 BY gillier FROM sirius
Jul 27 08:55:44 deneb PAM_unix[17086]: (system-auth) session closed for user gillier
Jul 27 09:13:13 deneb pam_rhosts_auth[17247]: allowed to deleau@deleau.info-ua as deleau
Jul 27 09:13:13 deneb PAM_pwdb[17247]: (rsh) session opened for user deleau by (


code

#!/usr/bin/perl
use strict;
use warnings;
my $filename = "C:\\Users\\Desktop\\PERL_sous_Windows\\syslog1.txt";

open (my $fh, '<', $filename)
or die "Erreur : impossible d'ouvrir le fichier '$filename'";

my %logstat;

while (my $line = <$fh>){
chomp $ligne;
my @champs = split / /; $ligne;
my %info = (
mois => $champs[0],
date => $champs[1],
heure => $champs[2],
adresse => $champs[3],
service => $champs[4],
processno => $champs[5],
message => $champs[6],
);
$logstat{$champs[0]} = { %info};
print " $logstat{$champs[0]} \n" ;
}

close $fh;
<>; #symbol de pause sous windows
0
[Dal] Messages postés 6194 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 11 octobre 2024 1 092
Modifié par [Dal] le 14/04/2014 à 17:01
Salut TempoAA,

Je pense que ton fichier de log n'est pas représentatif, car il ne permet pas d'observer le format des logs ssh, imap et pop.

Sur la méthode, tu ne devrais pas te servir de split sur le caractère espace car il y a des informations à isoler qui ne sont pas séparées par des espaces. Il te faudrait des regexp adaptées aux différents types de lignes, pour capturer l'information comme il le faut.

Enfin, il n'est pas utile de conserver en mémoire toutes les données du fichier de log, comme tu le fais, puisqu'on te demande des cumuls.


Dal
0
TempoAA Messages postés 3 Date d'inscription lundi 31 mars 2014 Statut Membre Dernière intervention 15 avril 2014
15 avril 2014 à 03:08
Bonjour ,
j'apprécie beaucoup ton aide . je vais continuer à travailler sur le code alors
0