Programme en perl

Fermé
hichamyousfi Messages postés 5 Date d'inscription jeudi 9 février 2012 Statut Membre Dernière intervention 28 mars 2012 - Modifié par hichamyousfi le 27/03/2012 à 05:30
 TMTOWTDI - 30 mars 2012 à 19:43
slt tout le monde, je suis très débutant avec Perl, et je veux faites un script en PERL qui demande le nom d'un fichier de log du programme tcpd à traiter. Le format de ce log est une entrée par ligne, dans ce format :

Mar 17 01:21:35 beta.CRM.Montreal.CA in.ftpd[13331]: connect from 63.196.54.11
Mar 17 01:21:35 theta.CRM.Montreal.CA in.ftpd[27801]: connect from 63.196.54.11
Mar 17 01:21:35 truffaut.CRM.Montreal.CA in.ftpd[18652]: connect from 63.196.54.11

le programme doit lire le fichier de log et analyser chaque ligne pour trouver des balayages
("scans") potentiels, en supposant que plus de 5 demandes provenant de la même adresse dans la même minute est un balayage potentiel. Quand votre programme trouve un balayage potentiel, il envoie immédiatement un courrier électronique à une
adresse courriel, avec comme information l'heure et l'adresse du balayage. Pour
envoyer le courrier électronique, on doit faire un appel à sendmail .
le programme devra à la fin donner les statistiques suivantes :
a) L'adresse source qu'on retrouve le plus souvent dans le fichier analysé
b)
1) le nombre total de connexions acceptées
2) le nombre total de connexions refusées
3) le nombre de demandes de connexions (acceptées et refusées) pour chacun des démons suivants : ftpd telnetd rpcbind imap pop

merci bcp pour votre aide

6 réponses

hichamyousfi Messages postés 5 Date d'inscription jeudi 9 février 2012 Statut Membre Dernière intervention 28 mars 2012 1
Modifié par hichamyousfi le 28/03/2012 à 06:20
j ai ecrit ce script pour compter les connexions acceptées et les connexions refusées, mais il ne fonctione pas. Aidez moi SVP :

#!/usr/bin/perl
#
#

use strict;
use warnings;


#ouvrir fichier en lecture
open Fich,'< log.txt' or die "Le fichier n'existe pas !";

while (my $ligne = <Fich>) {

# découpe une ligne en champs
my @mots=split / /, $ligne;


for (my $i=0;$i<=$#mots;$i++) {
my $connection = 0;
my $refusion = 0;
if ($6 eq "connect"){
$connection ++;
} elsif ($6 eq "refused"){
refusion ++;
}
}
}
close Fich;
1
Templier Nocturne Messages postés 7734 Date d'inscription jeudi 22 janvier 2009 Statut Membre Dernière intervention 21 mai 2016 1 101
27 mars 2012 à 06:02
Si tu attends de nous qu'on fasse le programme à ta place, tu t'es trompé d'endroits
0
hichamyousfi Messages postés 5 Date d'inscription jeudi 9 février 2012 Statut Membre Dernière intervention 28 mars 2012 1
27 mars 2012 à 17:34
Merci bcp pour ta reponse
je veux pas que tu me fasse le script mais juste des indices
merci une autre fois
0
Templier Nocturne Messages postés 7734 Date d'inscription jeudi 22 janvier 2009 Statut Membre Dernière intervention 21 mai 2016 1 101
27 mars 2012 à 17:42
alors pose des questions précises sur où tu bloque ^^
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
hichamyousfi Messages postés 5 Date d'inscription jeudi 9 février 2012 Statut Membre Dernière intervention 28 mars 2012 1
27 mars 2012 à 19:16
Ok je m excuse
merci
0
Templier Nocturne Messages postés 7734 Date d'inscription jeudi 22 janvier 2009 Statut Membre Dernière intervention 21 mai 2016 1 101
27 mars 2012 à 19:58
...
0
Dans la boucle for tu incrémentes la variable $i donc c'est $i que tu dois tester dans les if

$6 a une autre signification en Perl, mais ce n'est pas le sujet.

Pour ton info, dans ton message initial "connect" est plutôt dans la colonne 6 donc l'index 5 du tableau

cat blabla
Mar 17 01:21:35 beta.CRM.Montreal.CA in.ftpd[13331]: connect from 63.196.54.11
Mar 17 01:21:35 theta.CRM.Montreal.CA in.ftpd[27801]: connect from 63.196.54.11
Mar 17 01:21:35 truffaut.CRM.Montreal.CA in.ftpd[18652]: connect from 63.196.54.11

perl -F"/\s/" -ane 'print "$F[5]\n"' blabla
connect
connect
connect

perl -F"/\s/" -ane 'print "$F[6]\n"' blabla
from
from
from
0