From 612d00460c06c8429530113f359ea1b165fe22e5 Mon Sep 17 00:00:00 2001 From: chove Date: Sun, 30 Oct 2005 13:13:58 +0100 Subject: [PATCH] chanegement de mise en page darcs-hash:20051030121358-4ec08-0c32b913c0f1176b414ab7218f83f53d59c6e864.gz --- surveillance/statistiques.py | 169 ++++++++++++++++++----------------- 1 file changed, 85 insertions(+), 84 deletions(-) diff --git a/surveillance/statistiques.py b/surveillance/statistiques.py index d949155e..5a8ed02f 100755 --- a/surveillance/statistiques.py +++ b/surveillance/statistiques.py @@ -1,6 +1,13 @@ #! /usr/bin/env python # -*- encoding: iso-8859-15 -*- +""" +Script d'envoi des statistiques des déconnections et du traffic de la journée à disconnect@ + +Copyright (C) Xavier Pessoles +Licence : ???? +""" + ########################### # Import des commmandes : # ########################### @@ -9,18 +16,30 @@ import commands import sys from pyPgSQL import PgSQL sys.path.append('/usr/scripts/gestion') -from config import p2p +import config import smtplib import socket from analyse import stats +###################### +# Fonctions à la con # +###################### + +def humanise (nombre): + """ Transforme un nombre en k,M,G """ + if nombre > 0.8 * 1024**3 : + return str(round(nombre/1024**3,1))+'G' + if nombre > 0.8 * 1024**2 : + return str(round(nombre/1024**2,1))+'M' + if nombre > 0.8 * 1024 : + return str(round(nombre/1024,1))+'k' + return str(round(nombre,1)) ############################### # Ouverture des connections : # ############################### pgsql = PgSQL.connect(host='/var/run/postgresql', database='filtrage', user='crans') -pgsql.autocommit = True curseur = pgsql.cursor() mail = smtplib.SMTP('localhost') @@ -31,82 +50,43 @@ mail = smtplib.SMTP('localhost') # Adhérents avertis : ##################### -requete = "SELECT ip_crans,sum(upload)/1024/1024 as somme,sum(download)/1024/1024 FROM upload WHERE ip_crans IN (SELECT ip_crans FROM avertis_upload where hard='1' or soft='1') and date > timestamp 'now' - interval '1 day' GROUP BY ip_crans order by somme" +requete = "SELECT ip_crans,sum(upload) as somme,sum(download) FROM upload WHERE ip_crans IN (SELECT ip_crans FROM avertis_upload where hard='1' or soft='1') and date > timestamp 'now' - interval '1 day' GROUP BY ip_crans order by somme" curseur.execute(requete) hard = curseur.fetchall() -liste_upload="" -for i in range(0,len(hard)): - IP=hard[i][0] +liste_upload = '| upload | download | machine |\n' +liste_upload += '|----------|----------|------------------------------|\n' +for IP,upload,download in hard: hostname = socket.gethostbyaddr("%s"%IP)[0] - upload = round((hard[i][1]),2) - download = round((hard[i][2]),2) - liste_upload += "%10s%10s\t%s\n"%(str(upload),str(download),str(hostname)) + liste_upload += '| %7so | %7so | %28s |\n' % (humanise(upload),humanise(download),hostname) # Upload exemptés : ################### - -requete = "SELECT ip_crans,sum(upload)/1024/1024 AS somme , sum(download)/1024/1024 FROM upload WHERE ip_crans IN ( SELECT ip_crans from exemptes) and date > timestamp 'now' - interval '1 day' GROUP BY ip_crans order by somme" +requete = "SELECT ip_crans,sum(upload) AS somme , sum(download) FROM upload WHERE ip_crans IN ( SELECT ip_crans from exemptes) and date > timestamp 'now' - interval '1 day' GROUP BY ip_crans order by somme" curseur.execute(requete) exemptes = curseur.fetchall() -liste_exemptes="" -for i in range(0,len(exemptes)): - IP=exemptes[i][0] +liste_exemptes = '| upload | download | machine |\n' +liste_exemptes += '|----------|----------|------------------------------|\n' +for IP,upload,download in exemptes: + if upload < config.upload.soft : + continue hostname = socket.gethostbyaddr("%s"%IP)[0] - upload=round(exemptes[i][1],2) - download=round(exemptes[i][2],2) - liste_exemptes=liste_exemptes+"%10s%10s\t%s\n"%(str(upload),str(download),str(hostname)) - + liste_exemptes += '| %7so | %7so | %28s |\n' % (humanise(upload),humanise(download),hostname) + # Upload des serveurs : ####################### -liste_serveurs="" +liste_serveurs = '| upload | download | machine |\n' +liste_serveurs += '|----------|----------|------------------------------|\n' for i in (10,1,3,4,7,8,9,11): - IP='138.231.136.'+str(i) + IP='138.231.136.%d' % i hostname = socket.gethostbyaddr("%s"%IP)[0] - requete = "SELECT sum(upload)/1024/1024,sum(download)/1024/1024 FROM upload WHERE ip_crans='%s' AND date > timestamp 'now' - interval '1 day' "%IP + requete = "SELECT sum(upload),sum(download) FROM upload WHERE ip_crans='%s' AND date > timestamp 'now' - interval '1 day' "%IP curseur.execute(requete) - traffic=curseur.fetchall() - try : - round(traffic[0][0],2) - except TypeError: - print "Pas d'upload ou download depuis %s" % hostname - else : - upload=round(traffic[0][0],2) - download=round(traffic[0][1],2) - liste_serveurs += "%10s%10s\t%s\n"%(str(upload),str(download),str(hostname)) - - -# Machines infectées : -###################### -requete = "SELECT DISTINCT ip_crans FROM avertis_virus " -curseur.execute(requete) -infections = curseur.fetchall() -liste_virus="" -for i in range(1,len(infections)): - IP=infections[i][0] - print 'Machine infectée %s' % IP - try: - hostname = socket.gethostbyaddr("%s"%IP)[0] - except socket.herror: + traffic=curseur.fetchone() + if traffic == [None, None] : continue - liste_virus+="%s\n"%(str(hostname)) - - -# Machines utilisant des protocoles P2P : -######################################### -requete = "SELECT ip_crans,protocole FROM avertis_p2p WHERE date>timestamp 'now' - interval '1 day'" -curseur.execute(requete) -p2p = curseur.fetchall() -liste_p2p="" -for i in range(0,len(p2p)): - IP=p2p[i][0] - protocole = p2p[i][1] - hostname = socket.gethostbyaddr("%s"%IP)[0] - requete = "SELECT COUNT(ip_src) from p2p where date > timestamp 'now' - interval '1 day' and ip_src='%s'"%IP - curseur.execute(requete) - paquets=curseur.fetchall() - liste_p2p+="%10s\t%20s\t%s\n"%(str(protocole),str(hostname),str(paquets[0][0])) + liste_serveurs += '| %7so | %7so | %28s |\n' % (humanise(traffic[0]),humanise(traffic[1]),str(hostname)) # statistiques des gros uploads depuis les serveurs @@ -122,55 +102,78 @@ serveurs = [['Zamok','138.231.136.1',30,20], gros_uploads_des_serveurs = "" for serveur in serveurs : - titre = "Gros upload depuis %s" % serveur[0] - gros_uploads_des_serveurs += titre + '\n' + '-'*len(titre) + '\n\n' + gros_uploads_des_serveurs += "*Gros upload depuis %s*\n\n" % serveur[0] gros_uploads_des_serveurs += stats(ip_crans=serveur[1],group=['ip_ext'],upload_mini=serveur[2],limit=serveur[3]).encode('iso-8859-15') gros_uploads_des_serveurs += "\n\n" + +############################ +# Statistiques virus/p2p : # +############################ + +# Machines infectées : +###################### +requete = "SELECT DISTINCT ip_crans FROM avertis_virus" +curseur.execute(requete) +infections = [ x[0] for x in curseur.fetchall() ] +liste_virus="" +for IP in infections: + try: + hostname = socket.gethostbyaddr("%s"%IP)[0] + except socket.herror: + continue + liste_virus+="%s\n"%(str(hostname)) + + +# Machines utilisant des protocoles P2P : +######################################### +requete = "SELECT ip_crans,protocole FROM avertis_p2p WHERE date>timestamp 'now' - interval '1 day'" +curseur.execute(requete) +liste_p2p = '|protocole | machine | nombre |\n' +liste_p2p += '|----------|------------------------------|----------|\n' +for IP, protocole in curseur.fetchall(): + hostname = socket.gethostbyaddr(IP)[0] + requete = "SELECT COUNT(ip_src) from p2p where date > timestamp 'now' - interval '1 day' and ip_src='%s'"%IP + curseur.execute(requete) + paquets=curseur.fetchone()[0] + liste_p2p += '| %8s | %28s | %8s |\n' % (protocole,hostname,str(paquets)) + + ############# # Message : # ############# + expediteur = "disconnect@crans.org" destinataire = "disconnect@crans.org" message="""From: %(From)s To: %(To)s Subject: Statistiques des dernières 24h -Bilan des déconnexions : -======================== +*Machines infectées pour virus* - -Machines infectées pour virus : -------------------------------- %(liste_virus)s - -Machines utilisant des protocoles P2P (Nb de paquets par 24 heures) : ---------------------------------------------------------------------- -/Le seuil actuel est de %(seuil)s paquets par 24 heures./ +*Machines utilisant des protocoles P2P* (Nb de paquets par 24 heures) +/Le seuil actuel est de %(seuil)d paquets par 24 heures./ + %(liste_p2p)s +*Statistiques de traffic des adhérents* (exemptions non comptés) -Statistiques d'upload -- download : ------------------------------------ %(liste_upload)s +*Statistiques de traffic des adhérents exemptés* (tout compris) -Statistiques d'upload -- download des machines exemptées : ----------------------------------------------------------- %(liste_exemptes)s -Statistiques d'upload -- download des serveurs : ------------------------------------------------- +*Statistiques de traffic des serveurs* + %(liste_serveurs)s - %(gros_uploads_des_serveurs)s - -- statistiques.py """ -#print p2p.tag corps = message %{'From':expediteur, 'To':destinataire, @@ -180,8 +183,6 @@ corps = message %{'From':expediteur, 'liste_exemptes':liste_exemptes, 'liste_serveurs':liste_serveurs, 'gros_uploads_des_serveurs':gros_uploads_des_serveurs, - 'seuil':5} + 'seuil':config.p2p.tag} -#corps = corps.encode('iso 8859-15') mail.sendmail('disconnect@crans.org','disconnect@crans.org',corps) -#print corps