Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
781 connectés 

  FORUM HardWare.fr
  Programmation
  Perl

  Scripts Logwatch

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Scripts Logwatch

n°1366333
edek
Posté le 15-05-2006 à 11:55:16  profilanswer
 

bonjour,  
 
J'éssaie de configurer l'outil logwatch afin de recevoir un mail journalier relativement sinthetique.
Je récupere des logs des logs windows (dans le repoertoire /var/log de mon serveur Linux) grace à Syslog installé sur un serveur NT.
 
Voici le début du script d'un services logwatch :
 
$adminlog = 0;
while (defined ($ThisLine = <STDIN> ))  
  {
if ( $ThisLine =~ m/ security.*success.*Utilisateur : administrateur/ )
 {
 $adminlog++;
 }
  }
exit(0);
 
# Petit script qui me permet de déterminer en parsant mon fichier Log, le nombre de connexion en Administrateur qui ont était effectué)
 
 
Maintenant je voudrais apporter une amélioration pour pouvoir obtenir l'IP ainsi que le nombre de connexion de chaque IP.
Dans les Logs l'ip apparait de cette forme : "adresse reseau source : 192.xxx.xxx.xxx"
 
Moi ce que je voudrais  c"est qu'a chaque fois qu'il rencontre la chaine de caractere "adresse reseau source :" il me retourne "192.XXX.XXX.XXX"
 
 
J'ai éssayé de me chercher (expression reguliere) mais je ne voit pas trop comment faire !  
 
Merci

mood
Publicité
Posté le 15-05-2006 à 11:55:16  profilanswer
 

n°1366349
anapajari
s/travail/glanding on hfr/gs;
Posté le 15-05-2006 à 12:10:12  profilanswer
 

C'est pas super dur ;)
t'as regex elle doit matcher:

  • 192 suivi d'un point : "192\."
  • entre un et trois chiffres suivi d'un point "\d{1,3}\."
  • entre un et trois chiffres suivi d'un point "\d{1,3}\."
  • entre un et trois chiffres "\d{1,3}\"

Du coup ça donne

/adresse reseau source : (192\.\d{1,3}\.\d{1,3}\.\d{1,3})/


Et pour le comptage, je ferais une petite hash avec comme clé l'ip trouvée:

Code :
  1. #!/usr/bin/perl
  2. use strict;
  3. use Data::Dumper;
  4. my %ips;
  5. open(F, '<tonfichier.txt');
  6. while(<F> ){
  7.   /adresse reseau source : (192\.\d{1,3}\.\d{1,3}\.\d{1,3})/;
  8.   $ips{$1}++;
  9. }
  10. close(F);
  11. print Dumper %ips;


 
edit:
En fait il serait plus logique de considérer ta regex comme ça:

  • 192  
  • et point et entre un et trois chiffres suivi d'un point "\.\d{1,3}"
  • et point et entre un et trois chiffres suivi d'un point "\.\d{1,3}"
  • et point et entre un et trois chiffres suivi d'un point "\.\d{1,3}"

ce qui fait que tu pourrais la raccourcir mais bon


Message édité par anapajari le 15-05-2006 à 12:19:29
n°1366358
edek
Posté le 15-05-2006 à 12:21:02  profilanswer
 

Merci pour la réactivité ! ça fait plaisir  
 
Je vais tester ta solution
 
Merci bcp

n°1366490
edek
Posté le 15-05-2006 à 14:35:42  profilanswer
 

jpense que je dois mal mi prendre mais ça marche pas :/

n°1366496
edek
Posté le 15-05-2006 à 14:42:22  profilanswer
 

while (defined ($ThisLine=<STDIN> )) {
 
use strict;
use Data::Dumper;
 
my %ips;
open (F, 'messages.txt');
while (<F> ) { /adresse r esau source : (192.168.d{1,3}.d{1,3})/; {
$ips {$1}++;
             }
close (F);
print Dumper %ips;
             }
exit(0);

n°1366514
anapajari
s/travail/glanding on hfr/gs;
Posté le 15-05-2006 à 15:02:24  profilanswer
 

le bout de code que je t'ai donné c'etait "tout le code" à mettre dans un script perl... [:mlc]
et tu feras attention à bien recopier la regex, il manque les \

n°1366525
edek
Posté le 15-05-2006 à 15:14:12  profilanswer
 

Voici mon Script complet :
 
#!/usr/bin/perl
 
use strict;
use Data::Dumper;
 
my %ips;
open (F, 'messages.txt');
while (<F> ) {  
     /source : (192\.\d{1,3}\.\d{1,3}\.\d{1,3})/;
$ips {$1}++;
             }
close (F);
print Dumper %ips;

n°1366541
anapajari
s/travail/glanding on hfr/gs;
Posté le 15-05-2006 à 15:27:07  profilanswer
 

et y'a encore un pb?

n°1366548
edek
Posté le 15-05-2006 à 15:30:18  profilanswer
 

oui car lorsque j'éxecute Logwatch je ne reçois rien pr mon Scripts "winlog"

n°1366553
anapajari
s/travail/glanding on hfr/gs;
Posté le 15-05-2006 à 15:32:28  profilanswer
 

déjà ça compile :o
Tu es sur que la pattern qui récupère la ligne est correcte? Tu peux montrer une ligne ou deux de ton fichier de log stp!

mood
Publicité
Posté le 15-05-2006 à 15:32:28  profilanswer
 

n°1366570
edek
Posté le 15-05-2006 à 15:41:34  profilanswer
 

euuhh c quoi la pattern ? le fichier .conf c ça ?
 
Voici un exemple de Log que je reçois dans /var/log/messages  :
 
May 15 15:21:04 srv-nt10.XXX.XX security[success] 528 XXX\administrateur  Ouverture de session réseau réussie :    Utilisatr : administrateur    Domaine : XXX    Id. de la session : (0x0,0x24A09FAA)    Type de session : 10    Processus de session : User32      Package d'authentification : Negotiate    Station de travail : SRV-NT10    GUID d'ouv. de session : {a675ddcb-7e7e-fcfa-9bf0-3ec68c8c1627}    Nom de l'utilisateur appelant : SRV-NT10$    Domaine appelant : XXX    Id. de session de l'aplant : (0x0,0x3E7)    ID de processus appelant : 13852    Services en transit : -   Adresse réseau source : 192.168.XX.XXX Port source : 34717


Message édité par edek le 15-05-2006 à 15:42:09
n°1366575
anapajari
s/travail/glanding on hfr/gs;
Posté le 15-05-2006 à 15:47:33  profilanswer
 

marche très bien :o
Avec le code plus haut et le fichier texte suivant:

Adresse réseau source : 192.168.12.14 Port source : 34717
Adresse réseau source : 192.168.12.14 Port source : 34717
Adresse réseau source : 192.168.12.14 Port source : 34717
Adresse réseau source : 192.168.12.16 Port source : 34717
Adresse réseau source : 192.168.12.14 Port source : 34717


 
ça printe:
[code]$VAR1 = '192.168.12.14';
$VAR2 = 4;
$VAR3 = '192.168.12.16';
$VAR4 = 1;/[code]
 
Edit: t'es sur qu'il compile ton script au fait? Tu as installé le module Data::Dumper?


Message édité par anapajari le 15-05-2006 à 15:49:27
n°1366616
edek
Posté le 15-05-2006 à 16:12:02  profilanswer
 

oui oui il compile c bon ça a l'air de marcher
nonj'ai pas installé Data::Dumper

n°1366619
anapajari
s/travail/glanding on hfr/gs;
Posté le 15-05-2006 à 16:15:47  profilanswer
 

vire les lignes:

Code :
  1. use Data::Dumper;


et à la place de

Code :
  1. print Dumper %ips;


mets

Code :
  1. foreach (sort keys %ips){
  2.   print "IP: $_ NB OCCURENCEs: $ips{$_}\n";
  3. }

n°1366637
edek
Posté le 15-05-2006 à 16:27:43  profilanswer
 

C'est fait , oui effectivement c'est mieux comme ça ;)

n°1367275
edek
Posté le 16-05-2006 à 11:16:51  profilanswer
 

En faite mon but est de comptabiliser toutes les Authentification en Admin sur chaque serveur NT pour chaque jour.
et dans un 2eme temps de les lister par adresses IP.
 
Voici un exemple de Log :
 
May 15 15:21:04 srv-nt10.XXX.XX security[success] 528 XXX\administrateur  Ouverture de session réseau réussie :    Utilisatr : administrateur    Domaine : XXX    Id. de la session : (0x0,0x24A09FAA)    Type de session : 10    Processus de session : User32      Package d'authentification : Negotiate    Station de travail : SRV-NT10    GUID d'ouv. de session : {a675ddcb-7e7e-fcfa-9bf0-3ec68c8c1627}    Nom de l'utilisateur appelant : SRV-NT10$    Domaine appelant : XXX    Id. de session de l'aplant : (0x0,0x3E7)    ID de processus appelant : 13852    Services en transit : -   Adresse réseau source : 192.168.XX.XXX Port source : 34717
 
Voici mes 2 lignes de matching :  
_if ( $ThisLine =~ m/ security.*success.*Utilisateur : administrateur/ )
 {
 $adminlog++; }
 
_while (<F> ) {  
     /security.*success.*Utilisateur : administrateur.*SRV-NT10.*source : (192\.\d{1,3}\.\d{1,3}\.\d{1,3})/;
$ips {$1}++;  
 
 
Je pense que c'est ligne n'éffectue pas le bon matching car les rapport que je reçois sont corompue (information inéxacte, information démesurée)

n°1367295
anapajari
s/travail/glanding on hfr/gs;
Posté le 16-05-2006 à 11:33:57  profilanswer
 

rien compris :o
 
Montre nous le resultat que tu souhaiterais obtenir et ou se trouve chaque  donnée sur la ligne de log...

n°1367317
edek
Posté le 16-05-2006 à 11:44:29  profilanswer
 

anapajari a écrit :

rien compris :o
 
Montre nous le resultat que tu souhaiterais obtenir et ou se trouve chaque  donnée sur la ligne de log...


 
Voici un exemple de Log :
 
May 15 15:21:04 srv-nt10.XXX.XX security[success] 528 XXX\administrateur  Ouverture de session réseau réussie :    Utilisateur : administrateur    Domaine : XXX    Id. de la session : (0x0,0x24A09FAA)    Type de session : 10    Processus de session : User32      Package d'authentification : Negotiate    Station de travail : SRV-NT10    GUID d'ouv. de session : {a675ddcb-7e7e-fcfa-9bf0-3ec68c8c1627}    Nom de l'utilisateur appelant : SRV-NT10$    Domaine appelant : XXX    Id. de session de l'aplant : (0x0,0x3E7)    ID de processus appelant : 13852    Services en transit : -   Adresse réseau source : 192.168.XX.XXX Port source : 34717  
 
Voila je voudrais que les mots en vert soit matché

n°1367330
anapajari
s/travail/glanding on hfr/gs;
Posté le 16-05-2006 à 11:49:23  profilanswer
 

D'accord MAIS QUE CE QUE TU VEUX COMME RESULTAT???
savoir combien il y a de ligne avec SVR-NT10 ou savoir combien de fois il y a l'ip 192.168.1.2 ou ...

n°1367347
edek
Posté le 16-05-2006 à 11:55:33  profilanswer
 

éhéhéh ! désolé j'avais pas bien compris :/
Je voudrais savoir dans un 1er temps savoir combien de ligne possede les 3 premier parametre en VERT.
Et dans un 2nd temps je voudrais lister Chaque IP (avec le nombre de connexions) répondant aux 1eres conditions.

n°1367368
anapajari
s/travail/glanding on hfr/gs;
Posté le 16-05-2006 à 12:10:26  profilanswer
 

Code :
  1. -MiniBufExplorer-
  2. #!/usr/bin/perl
  3. use strict;
  4. use Data::Dumper;
  5. my %res;
  6. open (F, 'messages.txt');
  7. while (<F> ) {
  8.   /security\[success\].*Utilisateur : administrateur.*Station de travail : ([^ ]+?) .*source : (192\.\d{1,3}\.\d{1,3}\.\d{1,3})/;
  9.   if ( !defined $res{$1}){
  10.     $res{$1} = {};
  11.   }
  12.   $res{$1}{$2}++;
  13.   $res{$1}{'TOTAL'}++;
  14. }
  15. close (F);
  16. foreach my $srv (sort keys %res){
  17.   print "SERVEUR $srv NB CONNECTIONS TOTAL:".$res{$srv}{'TOTAL'}."\n";
  18.   foreach my $ip(sort keys %{$res{$srv}}){
  19.     next if $ip eq 'TOTAL';
  20.     print "POUR IP: $ip ->".$res{$srv}{$ip}." CONNECTIONS\n";
  21.   }
  22. }


Et pose les questions sur ce que tu comprends pas.
Attention la regex exacte est

 /security\[success\].*Utilisateur : administrateur.*Station de travail : ([^ ]+?) .*source : (192\.\d{1,3}\.\d{1,3}\.\d{1,3})/

n°1367568
edek
Posté le 16-05-2006 à 14:47:06  profilanswer
 

Le code ne compile pas...
 
Je ne comprends pas ces termes :  
 -     ([^ ]+?)
 
 -  #$res{$1} = {};
     }
      $res{$1}{$2}++;
      $res{$1}{'TOTAL'}++;

n°1367628
anapajari
s/travail/glanding on hfr/gs;
Posté le 16-05-2006 à 15:23:31  profilanswer
 

vire la 1ere ligne:

Code :
  1. -MiniBufExplorer-


c'est un copier coller depuis vim qui l'a sorti et qui doit tout faire merder.
Vire également le use Data::Dumper;
Après chez moi ça marche ;) si c'est toujours pas le cas chez toi merci de donner l'erreur assorti
 

Code :
  1. ([^ ]+?)


C'est un bout de regex qui veut dire: Tout ce qui n'est pas un espace repeté au moins un fois
 

Code :
  1. if ( !defined $res{$1}){
  2.    $res{$1} = {};
  3. }
  4. $res{$1}{$2}++;
  5. $res{$1}{'TOTAL'}++;


$1 correspond au morceau matché par la 1ere parenthèse de la regex au dessus, dans ce cas le serveur
Dans ma hash resultat (%res), je regarde si il existe une clé correspondant au serveur trouvé.
Si c'est pas le cas, j'initialise la valeur de la hash res pour cette clé avec une hash anonyme.
Ensuite dans cette hash anonyme j'augmente le nombre de fois ou $2 ( qui correspond à l'ip) a été trouvé
et pareil pour total

n°1367664
edek
Posté le 16-05-2006 à 15:37:11  profilanswer
 

Voici mon erreur :
 
Scalar found where operator expected at windows_security line 14, near ""SERVEUR $srv Nombre de connexion(s) total :" $res"
        (Missing operator before  $res?)
Global symbol "$res" requires explicit package name at windows_security line 6.
syntax error at windows_security line 14, near ""SERVEUR $srv Nombre de connexion(s) total :" $res"
syntax error at windows_security line 14, near "}."
Missing right curly or square bracket at windows_security line 48, at end of line
Execution of windows_security aborted due to compilation errors.

n°1367683
anapajari
s/travail/glanding on hfr/gs;
Posté le 16-05-2006 à 15:45:33  profilanswer
 

donc tu as modifié mon code  ;)
Dans ces cas là reposte le qu'on soit sur de parler de la même chose.
 
Néanmoins je pense que tu as oublié un point là:

Citation :

Nombre de connexion(s) total :".$res

n°1367719
edek
Posté le 16-05-2006 à 15:59:02  profilanswer
 

j'ai repris ton code initial eet c bon il compile bien parcontre lors de l'execution de Logwatch, rien n'est matché pour le service.

n°1388234
edek
Posté le 15-06-2006 à 15:11:41  profilanswer
 

Quelqu'un pourrait il me renseigner ?!
 
Voila commande suivante :
(srv-nt\d{1,2}|srv010-nt\d{1,2}).*\[error\].*(\d{1,5})
ne match pas le texte suivant :
srv010-nt13.rld.fr ntds kcc[error] 1311 AUTORITE......
 
Voila merci !

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Perl

  Scripts Logwatch

 

Sujets relatifs
Problème d' exec et scripts shellQuestion de débutant. Interface HTML pour mes scripts perl ???
Cherche scriptsCherche scripts
[ SCRIPTS ] Comment détecter une architecture 32 bits??aidez moi à faire trois scripts en shell
débutant : qu'elle langage choisir pour les scripts[Débutant] Comment tester scripts sans installer Oracle ?
scripts/programmes pythonsniffer son serveur php pour voir les scripts exécutés
Plus de sujets relatifs à : Scripts Logwatch


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR