[scripts] Going to utf-8
This commit is contained in:
parent
c4a19a88ed
commit
a1bf0a4547
54 changed files with 676 additions and 573 deletions
|
@ -1,13 +1,13 @@
|
|||
#! /usr/bin/env python
|
||||
# -*- coding: iso-8859-15 -*-
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
###############################################################################
|
||||
# parse_auth_log.py : Détecte les problèmes d'authentifications
|
||||
# parse_auth_log.py : Détecte les problèmes d'authentifications
|
||||
###############################################################################
|
||||
# The authors of this code are
|
||||
# Jérémie Dimino <dimino@crans.org>
|
||||
# Jérémie Dimino <dimino@crans.org>
|
||||
#
|
||||
# Copyright (C) 2006 Jérémie Dimino
|
||||
# Copyright (C) 2006 Jérémie Dimino
|
||||
# All rights reserved.
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
|
@ -40,7 +40,7 @@ prise_chbre = {}
|
|||
aujourdhui = datetime.date.today()
|
||||
|
||||
def trouve_chambre(bat, prise):
|
||||
""" Trouve la chambre associée à une prise """
|
||||
""" Trouve la chambre associée à une prise """
|
||||
|
||||
if prise in ('????', 'EXT', 'CRA'):
|
||||
return prise
|
||||
|
@ -59,7 +59,7 @@ def trouve_chambre(bat, prise):
|
|||
|
||||
|
||||
def trouve_prise(chbre):
|
||||
""" Trouve la prise associée à une chambre """
|
||||
""" Trouve la prise associée à une chambre """
|
||||
|
||||
if chbre in ('EXT', '????', 'CRA'):
|
||||
return chbre
|
||||
|
@ -72,7 +72,7 @@ def trouve_prise(chbre):
|
|||
|
||||
|
||||
def __calcul_max(table):
|
||||
""" Calcule les différents maxima (voir parse_auth_log pour plus de détails) """
|
||||
""" Calcule les différents maxima (voir parse_auth_log pour plus de détails) """
|
||||
|
||||
nb_m = 0
|
||||
nb_p = 0
|
||||
|
@ -93,7 +93,7 @@ def __calcul_max(table):
|
|||
|
||||
|
||||
def __ajoute_ligne(errs, ligne, prise, mac, info=None):
|
||||
""" Ajoute une ligne dans le dico pour la prise et la mac donnée """
|
||||
""" Ajoute une ligne dans le dico pour la prise et la mac donnée """
|
||||
|
||||
erreur_prise = errs.get(prise)
|
||||
if not erreur_prise:
|
||||
|
@ -108,29 +108,29 @@ def __ajoute_ligne(errs, ligne, prise, mac, info=None):
|
|||
erreur_mac['lignes'].append(ligne)
|
||||
|
||||
|
||||
# Correspondance 'noms de mois' -> n°
|
||||
# Correspondance 'noms de mois' -> n°
|
||||
__mois_num = { 'Jan': 1, 'Feb': 2, 'Mar': 3, 'Apr': 4, 'May': 5, 'Jun': 6,
|
||||
'Jul': 7, 'Aug': 8, 'Sep': 9, 'Oct': 10, 'Nov': 11, 'Dec': 12 }
|
||||
|
||||
def parse_auth_log(fichier_log='/var/log/freeradius/radius_auth.log', jour=None):
|
||||
""" Retourne la liste des problèmes de connexions: retourne deux dicos, la première étant pour les macs qui n'ont pas été trouvées dans la base et la seconde pour les connexions qui ont eu lieu à partir d'une mauvaise prise
|
||||
""" Retourne la liste des problèmes de connexions: retourne deux dicos, la première étant pour les macs qui n'ont pas été trouvées dans la base et la seconde pour les connexions qui ont eu lieu à partir d'une mauvaise prise
|
||||
|
||||
les deux dictionnaires ont la structure suivante:
|
||||
- nombre_mac_max: nombre maximal d'erreurs trouvées pour une mac
|
||||
- nombre_prise_max: nombre maximal d'erreurs trouvées pour une prise
|
||||
- prises: dico associant à une prise la listes des erreurs à partir de cette prise:
|
||||
- nombre_mac_max: nombre maximal d'erreurs trouvées pour une mac
|
||||
- nombre_prise_max: nombre maximal d'erreurs trouvées pour une prise
|
||||
- prises: dico associant à une prise la listes des erreurs à partir de cette prise:
|
||||
- nombre: nombre total d'erreurs survenues sur la prise
|
||||
- nombre_max: nombre maximal d'erreurs trouvéss pour une mac
|
||||
- macs: dico associant à une mac la liste des erreurs à partir de cette mac
|
||||
- nombre_max: nombre maximal d'erreurs trouvéss pour une mac
|
||||
- macs: dico associant à une mac la liste des erreurs à partir de cette mac
|
||||
- nombre: le nombre d'erreurs survenues pour cette mac sur cette prise
|
||||
- lignes: la liste des lignes du fichier de logs où la mac apparaît sur cette prise
|
||||
- info: informations sur le propriétaire (vaut None pour la première table)
|
||||
- lignes: la liste des lignes du fichier de logs où la mac apparaît sur cette prise
|
||||
- info: informations sur le propriétaire (vaut None pour la première table)
|
||||
- machine: la machine en question
|
||||
- prise: la prise de sa chambre
|
||||
- chambre: sa chambre
|
||||
- prop: le propriétaire
|
||||
- prop: le propriétaire
|
||||
|
||||
Si jour est spécifié (de type datetime.date), toutes les connexions avant cette dates seront ignorées.
|
||||
Si jour est spécifié (de type datetime.date), toutes les connexions avant cette dates seront ignorées.
|
||||
"""
|
||||
|
||||
try:
|
||||
|
@ -139,13 +139,13 @@ Si jour est sp
|
|||
cprint(u"Impossible d'ouvrir le fichier %s" % fichier_log, 'rouge')
|
||||
sys.exit(1)
|
||||
|
||||
# Les macs non trouvées
|
||||
# Les macs non trouvées
|
||||
errs_inconnue = {}
|
||||
|
||||
# Les pc connectés sur la mauvaise prise
|
||||
# Les pc connectés sur la mauvaise prise
|
||||
errs_prise = {}
|
||||
|
||||
# Les recherches déjà effectuées sur les macs
|
||||
# Les recherches déjà effectuées sur les macs
|
||||
mac_machine = {}
|
||||
|
||||
annee = None
|
||||
|
@ -161,12 +161,12 @@ Si jour est sp
|
|||
|
||||
if annee == None:
|
||||
if nouveau_mois > aujourdhui.month:
|
||||
# Là on suppose qu'il s'agit de l'année dernière
|
||||
# Là on suppose qu'il s'agit de l'année dernière
|
||||
annee = aujourdhui.year - 1
|
||||
else:
|
||||
annee = aujourdhui.year
|
||||
elif mois > nouveau_mois:
|
||||
# Là on suppose qu'on est passé à l'année suivante
|
||||
# Là on suppose qu'on est passé à l'année suivante
|
||||
annee += 1
|
||||
|
||||
mois = nouveau_mois
|
||||
|
@ -213,7 +213,7 @@ Si jour est sp
|
|||
|
||||
|
||||
def affiche_erreurs(errs, message, min_mac=1, min_prise=1):
|
||||
""" Affiche les infos contenues dans un dico renvoyé par parse_auth_log """
|
||||
""" Affiche les infos contenues dans un dico renvoyé par parse_auth_log """
|
||||
|
||||
if errs['nombre_mac_max'] >= min_mac and errs['nombre_prise_max'] >= min_prise:
|
||||
|
||||
|
@ -248,35 +248,35 @@ def __usage(err=''):
|
|||
|
||||
|
||||
def __param_entier(opt, val):
|
||||
""" Récupère un entier passé en ligne de commande """
|
||||
""" Récupère un entier passé en ligne de commande """
|
||||
|
||||
try:
|
||||
return int(val)
|
||||
except:
|
||||
__usage(u'La valeur du paramètre %s est incorecte (doit être un entier positif)' % opt)
|
||||
__usage(u'La valeur du paramètre %s est incorecte (doit être un entier positif)' % opt)
|
||||
|
||||
|
||||
def __aide():
|
||||
""" Aide """
|
||||
|
||||
cprint(u"""Usage: %s [OPTIONS]
|
||||
Parse les logs d'authentifications et affiche les erreurs trouvées (macs inconnues ou connexion d'une machine sur une prise autre que celle du propriétaire).
|
||||
Parse les logs d'authentifications et affiche les erreurs trouvées (macs inconnues ou connexion d'une machine sur une prise autre que celle du propriétaire).
|
||||
|
||||
Options:
|
||||
-h, --help affiche cette aide
|
||||
-l, --log <fichier> fichier de log à parser (par défaut: /var/log/freeradius/radius_auth.log)
|
||||
-m, --min-mac <nombre> nombre minimal d'occurrences d'une mac sur une prise pour qu'elle soit reportée
|
||||
-n, --min-prise <nombre> nombre minimal d'erreurs sur une prise pour qu'elle soit reportée
|
||||
-l, --log <fichier> fichier de log à parser (par défaut: /var/log/freeradius/radius_auth.log)
|
||||
-m, --min-mac <nombre> nombre minimal d'occurrences d'une mac sur une prise pour qu'elle soit reportée
|
||||
-n, --min-prise <nombre> nombre minimal d'erreurs sur une prise pour qu'elle soit reportée
|
||||
-i, --inconnue n'affiche que les erreurs de mac inconnues
|
||||
-p, --prise n'affiche que les connexions sur une prise autre que celle du propriétaire
|
||||
-p, --prise n'affiche que les connexions sur une prise autre que celle du propriétaire
|
||||
-d, --date <date> ignorer totalement les lignes avant cette date
|
||||
|
||||
<date> peut être:
|
||||
<date> peut être:
|
||||
- une date absolue sous la forme AAAAMMJJ
|
||||
- une date relative à aujourd'hui sous la forme +<nombre de jour>
|
||||
Par exemple pour ne considérer que les deux dernier jours: +2
|
||||
- une date relative à aujourd'hui sous la forme +<nombre de jour>
|
||||
Par exemple pour ne considérer que les deux dernier jours: +2
|
||||
|
||||
Rapporter toutes anomalies à <dimino@crans.org>.""" % sys.argv[0].split('/')[-1].split('.')[0])
|
||||
Rapporter toutes anomalies à <dimino@crans.org>.""" % sys.argv[0].split('/')[-1].split('.')[0])
|
||||
sys.exit(0)
|
||||
|
||||
|
||||
|
@ -288,7 +288,7 @@ if __name__ == '__main__':
|
|||
# Info que l'on veut afficher
|
||||
aff_inconnue = True
|
||||
aff_prise = True
|
||||
# Date de départ
|
||||
# Date de départ
|
||||
jour = None
|
||||
|
||||
import getopt, time
|
||||
|
@ -318,7 +318,7 @@ if __name__ == '__main__':
|
|||
try:
|
||||
jour = datetime.date(*(time.strptime(val, "%Y%m%d")[0:3]))
|
||||
except:
|
||||
__usage(u'La valeur du paramètre %s est incorecte (doit être de la forme AAAAMMJJ)' % opt)
|
||||
__usage(u'La valeur du paramètre %s est incorecte (doit être de la forme AAAAMMJJ)' % opt)
|
||||
else:
|
||||
cprint(u'Option inconnue: %s' % opt, 'rouge')
|
||||
__usage()
|
||||
|
@ -328,7 +328,7 @@ if __name__ == '__main__':
|
|||
errs_inconnue, errs_prise = parse_auth_log(fichier_log, jour)
|
||||
|
||||
if aff_inconnue:
|
||||
affiche_erreurs(errs_inconnue, u"Pour les connexions suivantes la mac n'a pas été trouvée dans la base:", min_mac, min_prise)
|
||||
affiche_erreurs(errs_inconnue, u"Pour les connexions suivantes la mac n'a pas été trouvée dans la base:", min_mac, min_prise)
|
||||
|
||||
if aff_prise:
|
||||
affiche_erreurs(errs_prise, u"Les connexions suivantes ont eu lieu sur une prise autre que celle du proriétaire:", min_mac, min_prise)
|
||||
affiche_erreurs(errs_prise, u"Les connexions suivantes ont eu lieu sur une prise autre que celle du proriétaire:", min_mac, min_prise)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue