From b25bb68689301873fe82ecba7d1c9abc6d4d6c77 Mon Sep 17 00:00:00 2001 From: Michel Blockelet Date: Fri, 13 Mar 2009 23:36:37 +0100 Subject: [PATCH] [statistiques.py] On compte tous les serveurs (+ nettoyage) darcs-hash:20090313223637-ddb99-927ffb4899a7528b9f14af9fd61af8c5f2fc3b3f.gz --- surveillance/statistiques.py | 86 +++++++++++++++++++++--------------- 1 file changed, 51 insertions(+), 35 deletions(-) diff --git a/surveillance/statistiques.py b/surveillance/statistiques.py index c0c7fd94..be7d7bdd 100755 --- a/surveillance/statistiques.py +++ b/surveillance/statistiques.py @@ -2,9 +2,10 @@ # -*- encoding: iso-8859-15 -*- """ -Script d'envoi des statistiques des déconnections et du traffic de la journée à disconnect@ +Script d'envoi des statistiques des déconnections +et du traffic de la journée à disconnect@ -Copyright (C) Xavier Pessoles - Étienne Chové +Copyright (C) Xavier Pessoles - Étienne Chové - Michel Blockelet Licence : GPLv2 """ @@ -23,6 +24,7 @@ import socket import time, random, md5 from analyse import stats from affich_tools import tableau +from iptools import AddrInNet from ldap_crans import AssociationCrans # Fonction retournant l'hote quand c'est possible @@ -33,16 +35,15 @@ def gethostname(s): return s # Liste des IP des serveurs -serveurs_ips = ( - '138.231.136.10', '138.231.136.1', '138.231.136.3', '138.231.136.4', - '138.231.136.7', '138.231.136.8', '138.231.136.9', '138.231.136.11', - '138.231.136.101', '138.231.136.98', '138.231.136.102' ) +serveurs_ips = [x.ip() for x in AssociationCrans().machines() + if x.nom() not in [u'sila.crans.org', u'sable.crans.org']] -############################### -# Ouverture des connections : # -############################### +############################## +# Ouverture des connexions : # +############################## -pgsql = PgSQL.connect(host='/var/run/postgresql', database='filtrage', user='crans') +pgsql = PgSQL.connect(host='/var/run/postgresql', + database='filtrage', user='crans') curseur = pgsql.cursor() ########################### @@ -93,7 +94,8 @@ WHERE GROUP BY ip_crans ORDER BY somme DESC""" curseur.execute(requete) -liste_exemptes = tableau(data = [ [l[1], l[2], gethostname(str(l[0])) ] for l in curseur.fetchall() ], +liste_exemptes = tableau(data = [[l[1], l[2], gethostname(str(l[0]))] + for l in curseur.fetchall()], titre = ['upload', 'download', 'machine'], largeur = [10, 10, 30], format = ['o', 'o', 's'], @@ -106,13 +108,14 @@ liste_serveurs = [] for IP in serveurs_ips: hostname = gethostname(IP) requete = """SELECT sum(upload), sum(download) -FROM upload -WHERE - ip_crans='%s' - AND date > timestamp 'now' - interval '1 day' """ % IP + FROM upload + WHERE + ip_crans='%s' + AND date > timestamp 'now' - interval '1 day' """ % IP curseur.execute(requete) traffic = curseur.fetchone() - if traffic == [None, None]: + # On ne compte pas le serveur si le traffic est petit + if traffic == [None, None] or traffic[0] + traffic[1] < 10*1024*1024: continue liste_serveurs.append([traffic[0], traffic[1], hostname]) @@ -125,7 +128,9 @@ liste_serveurs = tableau(data = liste_serveurs, # statistiques des gros uploads depuis les serveurs ################################################### -gros_uploads_des_serveurs = stats(ip_crans=[x.ip() for x in AssociationCrans().machines() if x.nom() not in [u'sila.crans.org']], show=['ip_crans', 'ip_ext'], upload_mini=50, show_limit=100).encode('iso-8859-15') +gros_uploads_des_serveurs = stats(ip_crans=serveurs_ips, + show=['ip_crans', 'ip_ext'], upload_mini=50, + show_limit=100).encode('iso-8859-15') ############################ # Statistiques virus/p2p : # @@ -141,11 +146,16 @@ for IP in infections: hostname = gethostname(IP) liste_virus.append(["%s" % (str(hostname))]) -liste_virus = tableau(liste_virus, titre=['machine'], largeur=[30]).encode('iso-8859-15') +liste_virus = tableau(liste_virus, + titre=['machine'], largeur=[30]).encode('iso-8859-15') # Machines ayant fait des attaques virus dans la journée : ########################################################## -requete = "SELECT * FROM (SELECT ip_src,count(ip_src) as compteur FROM virus WHERE date > timestamp 'now' - interval '1 day' group by ip_src order by compteur desc) AS tous WHERE tous.compteur>'%s' limit 30" % config.virus.virus +requete = """SELECT * FROM (SELECT ip_src,count(ip_src) as compteur FROM virus +WHERE date > timestamp 'now' - interval '1 day' +GROUP BY ip_src ORDER BY compteur DESC) +AS tous +WHERE tous.compteur>'%s' LIMIT 30""" % config.virus.virus curseur.execute(requete) liste_virus2 = [] for IP, compteur in curseur.fetchall(): @@ -159,7 +169,11 @@ liste_virus2 = tableau(data = liste_virus2, # Machines ayant fait de attaques flood dans la journée : ######################################################### -requete = "SELECT * FROM (SELECT ip_src,count(ip_src) as compteur FROM flood WHERE date > timestamp 'now' - interval '1 day' group by ip_src order by compteur desc) AS tous WHERE tous.compteur>'%s' limit 30" % config.virus.flood +requete = """SELECT * FROM (SELECT ip_src,count(ip_src) as compteur FROM flood +WHERE date > timestamp 'now' - interval '1 day' +GROUP BY ip_src ORDER BY compteur DESC) +AS tous +WHERE tous.compteur>'%s' LIMIT 30""" % config.virus.flood curseur.execute(requete) liste_virus3 = [] for IP, compteur in curseur.fetchall(): @@ -173,20 +187,20 @@ liste_virus3 = tableau(data = liste_virus3, # Machines ayant utilisé des protocoles P2P dans la journée : ############################################################# -requete = "SELECT ip_src, nom, compteur, max(date) FROM \ - (SELECT ip_src,nom,count(ip_src) as compteur \ - FROM p2p INNER JOIN protocole_p2p ON p2p.id_p2p=protocole_p2p.id_p2p \ - WHERE p2p.date > timestamp 'now' - interval '1 day' \ - GROUP BY ip_src,nom) \ - AS tous \ - LEFT JOIN \ - (SELECT * FROM avertis_p2p \ - WHERE date > timestamp 'now' - interval '1 day')\ - AS avertis \ - ON ip_src=ip_crans \ - WHERE tous.compteur>5 \ - GROUP BY ip_src, nom, compteur \ - ORDER BY 3 DESC" +requete = """SELECT ip_src, nom, compteur, max(date) FROM + (SELECT ip_src,nom,count(ip_src) as compteur + FROM p2p INNER JOIN protocole_p2p ON p2p.id_p2p=protocole_p2p.id_p2p + WHERE p2p.date > timestamp 'now' - interval '1 day' + GROUP BY ip_src,nom) + AS tous + LEFT JOIN + (SELECT * FROM avertis_p2p + WHERE date > timestamp 'now' - interval '1 day') + AS avertis + ON ip_src=ip_crans + WHERE tous.compteur>5 + GROUP BY ip_src, nom, compteur + ORDER BY 3 DESC""" curseur.execute(requete) liste_p2p = [] for IP, protocole, compteur, blackliste in curseur.fetchall(): @@ -198,7 +212,9 @@ for IP, protocole, compteur, blackliste in curseur.fetchall(): '*%d*' % compteur, '*%d*' % config.p2p.limite[protocole]]) else: - liste_p2p.append([hostname, protocole, compteur, config.p2p.limite[protocole]]) + liste_p2p.append([hostname, protocole, + compteur, config.p2p.limite[protocole]]) + liste_p2p = tableau(data = liste_p2p, titre = ['machine', 'protocole', 'nombre', 'limite'], largeur = [32, 14, 10, 8],