Programme en perl [Fermé]

Signaler
Messages postés
5
Date d'inscription
jeudi 9 février 2012
Statut
Membre
Dernière intervention
28 mars 2012
-
 TMTOWTDI -
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

Messages postés
5
Date d'inscription
jeudi 9 février 2012
Statut
Membre
Dernière intervention
28 mars 2012
1
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
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 65492 internautes nous ont dit merci ce mois-ci

Messages postés
7716
Date d'inscription
jeudi 22 janvier 2009
Statut
Membre
Dernière intervention
21 mai 2016
1 070
Si tu attends de nous qu'on fasse le programme à ta place, tu t'es trompé d'endroits
Messages postés
5
Date d'inscription
jeudi 9 février 2012
Statut
Membre
Dernière intervention
28 mars 2012
1
Merci bcp pour ta reponse
je veux pas que tu me fasse le script mais juste des indices
merci une autre fois
Messages postés
7716
Date d'inscription
jeudi 22 janvier 2009
Statut
Membre
Dernière intervention
21 mai 2016
1 070
alors pose des questions précises sur où tu bloque ^^
Messages postés
5
Date d'inscription
jeudi 9 février 2012
Statut
Membre
Dernière intervention
28 mars 2012
1
Ok je m excuse
merci
Messages postés
7716
Date d'inscription
jeudi 22 janvier 2009
Statut
Membre
Dernière intervention
21 mai 2016
1 070
...
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