[statistiques.py] On compte tous les serveurs (+ nettoyage)

darcs-hash:20090313223637-ddb99-927ffb4899a7528b9f14af9fd61af8c5f2fc3b3f.gz
This commit is contained in:
Michel Blockelet 2009-03-13 23:36:37 +01:00
parent 63a8882dbc
commit b25bb68689

View file

@ -2,9 +2,10 @@
# -*- encoding: iso-8859-15 -*- # -*- 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 Licence : GPLv2
""" """
@ -23,6 +24,7 @@ import socket
import time, random, md5 import time, random, md5
from analyse import stats from analyse import stats
from affich_tools import tableau from affich_tools import tableau
from iptools import AddrInNet
from ldap_crans import AssociationCrans from ldap_crans import AssociationCrans
# Fonction retournant l'hote quand c'est possible # Fonction retournant l'hote quand c'est possible
@ -33,16 +35,15 @@ def gethostname(s):
return s return s
# Liste des IP des serveurs # Liste des IP des serveurs
serveurs_ips = ( serveurs_ips = [x.ip() for x in AssociationCrans().machines()
'138.231.136.10', '138.231.136.1', '138.231.136.3', '138.231.136.4', if x.nom() not in [u'sila.crans.org', u'sable.crans.org']]
'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' )
############################### ##############################
# 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() curseur = pgsql.cursor()
########################### ###########################
@ -93,7 +94,8 @@ WHERE
GROUP BY ip_crans GROUP BY ip_crans
ORDER BY somme DESC""" ORDER BY somme DESC"""
curseur.execute(requete) 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'], titre = ['upload', 'download', 'machine'],
largeur = [10, 10, 30], largeur = [10, 10, 30],
format = ['o', 'o', 's'], format = ['o', 'o', 's'],
@ -112,7 +114,8 @@ WHERE
AND date > timestamp 'now' - interval '1 day' """ % IP AND date > timestamp 'now' - interval '1 day' """ % IP
curseur.execute(requete) curseur.execute(requete)
traffic = curseur.fetchone() 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 continue
liste_serveurs.append([traffic[0], traffic[1], hostname]) 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 # 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 : # # Statistiques virus/p2p : #
@ -141,11 +146,16 @@ for IP in infections:
hostname = gethostname(IP) hostname = gethostname(IP)
liste_virus.append(["%s" % (str(hostname))]) 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 : # 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) curseur.execute(requete)
liste_virus2 = [] liste_virus2 = []
for IP, compteur in curseur.fetchall(): 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 : # 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) curseur.execute(requete)
liste_virus3 = [] liste_virus3 = []
for IP, compteur in curseur.fetchall(): 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 : # Machines ayant utilisé des protocoles P2P dans la journée :
############################################################# #############################################################
requete = "SELECT ip_src, nom, compteur, max(date) FROM \ requete = """SELECT ip_src, nom, compteur, max(date) FROM
(SELECT ip_src,nom,count(ip_src) as compteur \ (SELECT ip_src,nom,count(ip_src) as compteur
FROM p2p INNER JOIN protocole_p2p ON p2p.id_p2p=protocole_p2p.id_p2p \ FROM p2p INNER JOIN protocole_p2p ON p2p.id_p2p=protocole_p2p.id_p2p
WHERE p2p.date > timestamp 'now' - interval '1 day' \ WHERE p2p.date > timestamp 'now' - interval '1 day'
GROUP BY ip_src,nom) \ GROUP BY ip_src,nom)
AS tous \ AS tous
LEFT JOIN \ LEFT JOIN
(SELECT * FROM avertis_p2p \ (SELECT * FROM avertis_p2p
WHERE date > timestamp 'now' - interval '1 day')\ WHERE date > timestamp 'now' - interval '1 day')
AS avertis \ AS avertis
ON ip_src=ip_crans \ ON ip_src=ip_crans
WHERE tous.compteur>5 \ WHERE tous.compteur>5
GROUP BY ip_src, nom, compteur \ GROUP BY ip_src, nom, compteur
ORDER BY 3 DESC" ORDER BY 3 DESC"""
curseur.execute(requete) curseur.execute(requete)
liste_p2p = [] liste_p2p = []
for IP, protocole, compteur, blackliste in curseur.fetchall(): for IP, protocole, compteur, blackliste in curseur.fetchall():
@ -198,7 +212,9 @@ for IP, protocole, compteur, blackliste in curseur.fetchall():
'*%d*' % compteur, '*%d*' % compteur,
'*%d*' % config.p2p.limite[protocole]]) '*%d*' % config.p2p.limite[protocole]])
else: 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, liste_p2p = tableau(data = liste_p2p,
titre = ['machine', 'protocole', 'nombre', 'limite'], titre = ['machine', 'protocole', 'nombre', 'limite'],
largeur = [32, 14, 10, 8], largeur = [32, 14, 10, 8],