IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Programmation et administration système Perl Discussion :

Analyser un fichier log


Sujet :

Programmation et administration système Perl

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Mars 2009
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Analyser un fichier log
    slt tout le monde, 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

  2. #2
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    Pour détecter les scans, une méthode parmi d'autres est de remplir une table de hashage avec pour clé, la concaténation de l'adresse IP et de la date (séparé par exemple, par un /), et pour valeur, un compteur qu'on incrémente. Un scan est alors détecter pour toutes les clés de ce hash pour lesquels la valeur correspondante est supérieure à 5.

    Une idée d'implémentation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    open ...
    my %scan;
    while(my $line = <$LOG>) {
      my ($date, $ip) = extract_date_ip($line);
      $scan{"$ip/$date"}++;
      ...
    }
    ...
    foreach my $scan (grep $scan{$_} > 5, keys %scan) {
      send_a_mail($scan);
    }
    ...
    Pour le reste, c'est du simple comptage, dont de toute manière, nous ne connaissons pas tous les éléments du log pour répondre.
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Si c'est utile, say

  3. #3
    Nouveau Candidat au Club
    Inscrit en
    Mars 2009
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 3
    Points : 1
    Points
    1
    Par défaut perl
    Merci pour ta reponse
    le log est un fichier de log du programme tcpd à traiter. Le format de ce log est une entrée par ligne, dans ce format :
    Mois heure adresse-visée service: état from adresse-source commentaire-optionnel
    Mois est dans format Mmm
    Heure est toujours dans format HH:MM:SS (format 24 heures)
    État peut être connect ou refused connect
    Service est une suite de caractès sans espace, lettre+chiffres+caractères-spéciaux
    Par exemple voici des entrées du fichier :
    Mar 15 00:24:45 zeta.CRM.UMontreal.CA in.ftpd[28209]: connect from omega.CRM.UMontreal.CA
    Mar 15 00:26:11 poincare.CRM.UMontreal.CA rpcbind: refused connect from 64.26.80.177 to dump()
    Mar 17 01:21:35 beta.CRM.UMontreal.CA in.ftpd[13331]: connect from 63.196.54.11
    Mar 17 01:21:35 theta.CRM.UMontreal.CA in.ftpd[27801]: connect from 63.196.54.11
    Mar 17 01:21:35 truffaut.CRM.UMontreal.CA in.ftpd[18652]: connect from 63.196.54.11
    Mar 17 12:52:17 omega.CRM.UMontreal.CA in.ftpd[15959]: connect from HSE-Montreal-ppp127.qc.sympatico.ca
    Mar 17 12:19:47 omega.CRM.UMontreal.CA in.telnetd[19531]: connect from fitzpbe.math.auburn.edu

    merci beaucoup pour votre aide

  4. #4
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    Avec mes premières indications, tu devrais pouvoir progresser dans l'écriture de ton script. As-tu un début de script à fournir ? Des questions plus précises sur ce que tu ne sais pas faire ?
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Si c'est utile, say

  5. #5
    Nouveau Candidat au Club
    Inscrit en
    Mars 2009
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Merci de votre réponse, j ai ecrit ce script pour compter les connexions acceptées et les connexions refusées dans un fichier log , mais il ne fonctione pas. Aidez moi SVP :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    #!/usr/bin/perl
    #
    # 
    #
    use strict;
    use warnings;
     
    #print ("nom de fichier:"); 
    #my $rep=<STDIN>; 
    #chomp $rep;
    #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;
        my $co = 'connect';
        my $re = 'refused';
        my $j = 0;
        my $k =0;
        for (my $i=0;$i<=$#mots;$i++){
           if (grep(/^$re$/, @mots)) {
               $j++;
           }elsif (grep(/^$co$/, @mots)){
               $k++;
           }
     
        }       
          print ($j);
          print ($k);
    }
    close Fich;

  6. #6
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    Merci de mettre les balises autour du code (icône ).
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Si c'est utile, say

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 31
    Points : 50
    Points
    50
    Par défaut
    Salut,

    plutôt que de faire un split sur tous les champ de ta ligne essaye plutôt ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    while (my $ligne = <Fich>) {
     
    # découpe une ligne en champs
     
    my $j = 0;
    my $k =0;
     
    if ($ligne =~ m/connect/){
    $j++;
    }elsif ($ligne =~ m/refused/){
    $k++;
    }
     
     
    print ($j);
    print ($k);
    }
    dis moi ce que tu obtiens avec ça.


    /Rémi

  8. #8
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    Attention peps16, il faut initialiser $j et $k en dehors de la boucle
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Si c'est utile, say

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 31
    Points : 50
    Points
    50
    Par défaut
    Citation Envoyé par Philou67430 Voir le message
    Attention peps16, il faut initialiser $j et $k en dehors de la boucle
    voila pourquoi ça ne marche pas...j'avais pas vu avec l'éditeur

Discussions similaires

  1. Analyse du Fichier log !
    Par zatout dans le forum Java EE
    Réponses: 0
    Dernier message: 24/02/2011, 12h59
  2. Savoir analyser ses fichiers log
    Par idamarco dans le forum Administration système
    Réponses: 1
    Dernier message: 03/11/2009, 13h36
  3. Perl analyse de fichiers-logs
    Par finelady dans le forum Langage
    Réponses: 4
    Dernier message: 18/03/2008, 17h31
  4. Des logiciels pour l'analyse des fichiers log
    Par maya dans le forum Réseau
    Réponses: 3
    Dernier message: 14/04/2007, 22h27
  5. Programme qui analyse un fichier log
    Par abdou.sahraoui dans le forum Entrée/Sortie
    Réponses: 9
    Dernier message: 20/08/2004, 14h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo