chanegement de mise en page
darcs-hash:20051030121358-4ec08-0c32b913c0f1176b414ab7218f83f53d59c6e864.gz
This commit is contained in:
parent
53a82857e2
commit
612d00460c
1 changed files with 85 additions and 84 deletions
|
@ -1,6 +1,13 @@
|
||||||
#! /usr/bin/env python
|
#! /usr/bin/env python
|
||||||
# -*- encoding: iso-8859-15 -*-
|
# -*- 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 : #
|
# Import des commmandes : #
|
||||||
###########################
|
###########################
|
||||||
|
@ -9,18 +16,30 @@ import commands
|
||||||
import sys
|
import sys
|
||||||
from pyPgSQL import PgSQL
|
from pyPgSQL import PgSQL
|
||||||
sys.path.append('/usr/scripts/gestion')
|
sys.path.append('/usr/scripts/gestion')
|
||||||
from config import p2p
|
import config
|
||||||
import smtplib
|
import smtplib
|
||||||
import socket
|
import socket
|
||||||
from analyse import stats
|
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 : #
|
# Ouverture des connections : #
|
||||||
###############################
|
###############################
|
||||||
|
|
||||||
pgsql = PgSQL.connect(host='/var/run/postgresql', database='filtrage', user='crans')
|
pgsql = PgSQL.connect(host='/var/run/postgresql', database='filtrage', user='crans')
|
||||||
pgsql.autocommit = True
|
|
||||||
curseur = pgsql.cursor()
|
curseur = pgsql.cursor()
|
||||||
mail = smtplib.SMTP('localhost')
|
mail = smtplib.SMTP('localhost')
|
||||||
|
|
||||||
|
@ -31,82 +50,43 @@ mail = smtplib.SMTP('localhost')
|
||||||
|
|
||||||
# Adhérents avertis :
|
# 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)
|
curseur.execute(requete)
|
||||||
hard = curseur.fetchall()
|
hard = curseur.fetchall()
|
||||||
liste_upload=""
|
liste_upload = '| upload | download | machine |\n'
|
||||||
for i in range(0,len(hard)):
|
liste_upload += '|----------|----------|------------------------------|\n'
|
||||||
IP=hard[i][0]
|
for IP,upload,download in hard:
|
||||||
hostname = socket.gethostbyaddr("%s"%IP)[0]
|
hostname = socket.gethostbyaddr("%s"%IP)[0]
|
||||||
upload = round((hard[i][1]),2)
|
liste_upload += '| %7so | %7so | %28s |\n' % (humanise(upload),humanise(download),hostname)
|
||||||
download = round((hard[i][2]),2)
|
|
||||||
liste_upload += "%10s%10s\t%s\n"%(str(upload),str(download),str(hostname))
|
|
||||||
|
|
||||||
|
|
||||||
# Upload exemptés :
|
# Upload exemptés :
|
||||||
###################
|
###################
|
||||||
|
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"
|
||||||
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"
|
|
||||||
curseur.execute(requete)
|
curseur.execute(requete)
|
||||||
exemptes = curseur.fetchall()
|
exemptes = curseur.fetchall()
|
||||||
liste_exemptes=""
|
liste_exemptes = '| upload | download | machine |\n'
|
||||||
for i in range(0,len(exemptes)):
|
liste_exemptes += '|----------|----------|------------------------------|\n'
|
||||||
IP=exemptes[i][0]
|
for IP,upload,download in exemptes:
|
||||||
|
if upload < config.upload.soft :
|
||||||
|
continue
|
||||||
hostname = socket.gethostbyaddr("%s"%IP)[0]
|
hostname = socket.gethostbyaddr("%s"%IP)[0]
|
||||||
upload=round(exemptes[i][1],2)
|
liste_exemptes += '| %7so | %7so | %28s |\n' % (humanise(upload),humanise(download),hostname)
|
||||||
download=round(exemptes[i][2],2)
|
|
||||||
liste_exemptes=liste_exemptes+"%10s%10s\t%s\n"%(str(upload),str(download),str(hostname))
|
|
||||||
|
|
||||||
|
|
||||||
# Upload des serveurs :
|
# 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):
|
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]
|
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)
|
curseur.execute(requete)
|
||||||
traffic=curseur.fetchall()
|
traffic=curseur.fetchone()
|
||||||
try :
|
if traffic == [None, None] :
|
||||||
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:
|
|
||||||
continue
|
continue
|
||||||
liste_virus+="%s\n"%(str(hostname))
|
liste_serveurs += '| %7so | %7so | %28s |\n' % (humanise(traffic[0]),humanise(traffic[1]),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]))
|
|
||||||
|
|
||||||
|
|
||||||
# statistiques des gros uploads depuis les serveurs
|
# statistiques des gros uploads depuis les serveurs
|
||||||
|
@ -122,55 +102,78 @@ serveurs = [['Zamok','138.231.136.1',30,20],
|
||||||
|
|
||||||
gros_uploads_des_serveurs = ""
|
gros_uploads_des_serveurs = ""
|
||||||
for serveur in serveurs :
|
for serveur in serveurs :
|
||||||
titre = "Gros upload depuis %s" % serveur[0]
|
gros_uploads_des_serveurs += "*Gros upload depuis %s*\n\n" % serveur[0]
|
||||||
gros_uploads_des_serveurs += titre + '\n' + '-'*len(titre) + '\n\n'
|
|
||||||
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 += 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"
|
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 : #
|
# Message : #
|
||||||
#############
|
#############
|
||||||
|
|
||||||
expediteur = "disconnect@crans.org"
|
expediteur = "disconnect@crans.org"
|
||||||
destinataire = "disconnect@crans.org"
|
destinataire = "disconnect@crans.org"
|
||||||
message="""From: %(From)s
|
message="""From: %(From)s
|
||||||
To: %(To)s
|
To: %(To)s
|
||||||
Subject: Statistiques des dernières 24h
|
Subject: Statistiques des dernières 24h
|
||||||
|
|
||||||
Bilan des déconnexions :
|
*Machines infectées pour virus*
|
||||||
========================
|
|
||||||
|
|
||||||
|
|
||||||
Machines infectées pour virus :
|
|
||||||
-------------------------------
|
|
||||||
%(liste_virus)s
|
%(liste_virus)s
|
||||||
|
|
||||||
|
*Machines utilisant des protocoles P2P* (Nb de paquets par 24 heures)
|
||||||
|
/Le seuil actuel est de %(seuil)d paquets par 24 heures./
|
||||||
|
|
||||||
Machines utilisant des protocoles P2P (Nb de paquets par 24 heures) :
|
|
||||||
---------------------------------------------------------------------
|
|
||||||
/Le seuil actuel est de %(seuil)s paquets par 24 heures./
|
|
||||||
%(liste_p2p)s
|
%(liste_p2p)s
|
||||||
|
|
||||||
|
*Statistiques de traffic des adhérents* (exemptions non comptés)
|
||||||
|
|
||||||
Statistiques d'upload -- download :
|
|
||||||
-----------------------------------
|
|
||||||
%(liste_upload)s
|
%(liste_upload)s
|
||||||
|
|
||||||
|
*Statistiques de traffic des adhérents exemptés* (tout compris)
|
||||||
|
|
||||||
Statistiques d'upload -- download des machines exemptées :
|
|
||||||
----------------------------------------------------------
|
|
||||||
%(liste_exemptes)s
|
%(liste_exemptes)s
|
||||||
|
|
||||||
Statistiques d'upload -- download des serveurs :
|
*Statistiques de traffic des serveurs*
|
||||||
------------------------------------------------
|
|
||||||
%(liste_serveurs)s
|
%(liste_serveurs)s
|
||||||
|
|
||||||
|
|
||||||
%(gros_uploads_des_serveurs)s
|
%(gros_uploads_des_serveurs)s
|
||||||
|
|
||||||
--
|
--
|
||||||
statistiques.py
|
statistiques.py
|
||||||
"""
|
"""
|
||||||
#print p2p.tag
|
|
||||||
|
|
||||||
corps = message %{'From':expediteur,
|
corps = message %{'From':expediteur,
|
||||||
'To':destinataire,
|
'To':destinataire,
|
||||||
|
@ -180,8 +183,6 @@ corps = message %{'From':expediteur,
|
||||||
'liste_exemptes':liste_exemptes,
|
'liste_exemptes':liste_exemptes,
|
||||||
'liste_serveurs':liste_serveurs,
|
'liste_serveurs':liste_serveurs,
|
||||||
'gros_uploads_des_serveurs':gros_uploads_des_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)
|
mail.sendmail('disconnect@crans.org','disconnect@crans.org',corps)
|
||||||
#print corps
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue