[scripts] Going to utf-8

This commit is contained in:
Pierre-Elliott Bécue 2013-05-04 19:19:36 +02:00
parent c4a19a88ed
commit a1bf0a4547
54 changed files with 676 additions and 573 deletions

View file

@ -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 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 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)