Mise en forme.

darcs-hash:20060325222144-68412-ec4176db30697af907a81f8d4a67c9c77c352d8d.gz
This commit is contained in:
glondu 2006-03-25 23:21:44 +01:00
parent f16056b8b4
commit 65b6a8768d
2 changed files with 138 additions and 123 deletions

View file

@ -26,13 +26,13 @@ from ldap_crans import crans_ldap, base_classes_crans
from ldap_crans import MachineWifi from ldap_crans import MachineWifi
from time import * from time import *
import locale import locale
locale.setlocale(locale.LC_TIME,'fr_FR') locale.setlocale(locale.LC_TIME, 'fr_FR')
import lock import lock
# Quelques fonctions # Quelques fonctions
#################### ####################
def machine_online(machine) : def machine_online(machine):
""" """
Retourne True si la machine est connectée au réseau et False si elle ne l'est pas Retourne True si la machine est connectée au réseau et False si elle ne l'est pas
""" """
@ -42,7 +42,7 @@ def machine_online(machine) :
# Arping pour les fixes # Arping pour les fixes
return not commands.getstatusoutput('/usr/sbin/arping -c 3 %s' % machine.mac())[0] return not commands.getstatusoutput('/usr/sbin/arping -c 3 %s' % machine.mac())[0]
def generate_ps(sanction, proprio) : def generate_ps(sanction, proprio):
"""En fonction de la sanction à appliquer au propriétaire, """En fonction de la sanction à appliquer au propriétaire,
on génère la feuille de déconnexion et on retourne son nom et on génère la feuille de déconnexion et on retourne son nom et
emplacement.""" emplacement."""
@ -50,29 +50,29 @@ def generate_ps(sanction, proprio) :
dossier = '/usr/scripts/surveillance/fiche_deconnexion' dossier = '/usr/scripts/surveillance/fiche_deconnexion'
# Base pour le nom du fichier # Base pour le nom du fichier
fichier = strftime('%Y-%m-%d-%H-%M') + '-%s-%s' % (sanction, proprio.Nom().lower().replace(' ','-')) fichier = strftime('%Y-%m-%d-%H-%M') + '-%s-%s' % (sanction, proprio.Nom().lower().replace(' ', '-'))
# Création du fichier tex # Création du fichier tex
format_date = '%A %d %B %Y' format_date = '%A %d %B %Y'
template = file('%s/deconnexion_%s.tex' % (dossier, sanction)).read() template = file('%s/deconnexion_%s.tex' % (dossier, sanction)).read()
template = template.replace('~prenom~',proprio.prenom().encode('iso8859-15')) template = template.replace('~prenom~', proprio.prenom().encode('iso8859-15'))
template = template.replace('~nom~',proprio.nom().encode('iso8859-15')) template = template.replace('~nom~', proprio.nom().encode('iso8859-15'))
template = template.replace('~chambre~',proprio.chbre().encode('iso8859-15')) template = template.replace('~chambre~', proprio.chbre().encode('iso8859-15'))
template = template.replace('~mail~',proprio.email().encode('iso8859-15')) template = template.replace('~mail~', proprio.email().encode('iso8859-15'))
template = template.replace('~debut~',strftime(format_date,localtime())) template = template.replace('~debut~', strftime(format_date, localtime()))
template = template.replace('~fin~',strftime(format_date,localtime(time()+14*86400))) template = template.replace('~fin~', strftime(format_date, localtime(time()+14*86400)))
historique = [ bl.encode('iso-8859-15').split(',') for bl in proprio.blacklist() if bl.split(',')[2]=='autodisc_upload' ] # filtrage des autodisc historique = [ bl.encode('iso-8859-15').split(',') for bl in proprio.blacklist() if bl.split(',')[2] == 'autodisc_upload' ] # filtrage des autodisc
historique = [ (strftime('%A %d %B %Y',strptime(bl[0],'%d/%m/%Y %H:%M')), bl[-1].split(' ')[-2]) for bl in historique ] # transfomation en tupple (date, upload) historique = [ (strftime('%A %d %B %Y', strptime(bl[0], '%d/%m/%Y %H:%M')), bl[-1].split(' ')[-2]) for bl in historique ] # transfomation en tupple (date, upload)
historique = [ '%s & %s & Mo'%(bl[0],bl[1]) for bl in historique ] # tranformation en ligne historique = [ '%s & %s & Mo'%(bl[0], bl[1]) for bl in historique ] # tranformation en ligne
historique = '\\\\\n'.join(historique) # assemblage des lignes historique = '\\\\\n'.join(historique) # assemblage des lignes
template = template.replace('~historique~', historique) template = template.replace('~historique~', historique)
template = template.replace('~limitehard~', str(upload.hard)) template = template.replace('~limitehard~', str(upload.hard))
template = template.replace('~nbadher~', str(len(ldap.search('paiement=ok')['adherent']))) template = template.replace('~nbadher~', str(len(ldap.search('paiement=ok')['adherent'])))
file('%s/%s.tex' % (dossier, fichier),'w').write(template) file('%s/%s.tex' % (dossier, fichier), 'w').write(template)
# Compilation du fichier latex # Compilation du fichier latex
commands.getstatusoutput('PATH="/bin:/usr/bin" cd %(dossier)s && latex %(base)s.tex && dvips %(base)s.dvi && rm -f %(base)s.dvi %(base)s.aux %(base)s.log %(base)s.tex'%{'dossier':dossier,'base':fichier}) commands.getstatusoutput('PATH="/bin:/usr/bin" cd %(dossier)s && latex %(base)s.tex && dvips %(base)s.dvi && rm -f %(base)s.dvi %(base)s.aux %(base)s.log %(base)s.tex'%{'dossier': dossier, 'base': fichier})
return '%s/%s.ps' % (dossier, fichier) return '%s/%s.ps' % (dossier, fichier)
@ -97,7 +97,7 @@ for i in range(5):
mail = smtplib.SMTP('localhost') mail = smtplib.SMTP('localhost')
except: except:
sleep(5) sleep(5)
if i==4: if i == 4:
print "Impossible de se connecter au SMTP" print "Impossible de se connecter au SMTP"
sys.exit(1) sys.exit(1)
@ -196,22 +196,22 @@ for elupload, eltype, elid in uploadeurs:
if elupload >= upload.hard: if elupload >= upload.hard:
# L'adhérent a t il été blacklisté ? # L'adhérent a t il été blacklisté ?
#################################### ####################################
if [eltype,elid] in avertis_upload_hard: if [eltype, elid] in avertis_upload_hard:
continue continue
# Propriétaire issu de LDAP # Propriétaire issu de LDAP
########################### ###########################
if eltype == 'club': if eltype == 'club':
proprio=ldap.search('cid=%d'%elid,'w')['club'] proprio = ldap.search('cid=%d'%elid, 'w')['club']
elif eltype == 'adherent': elif eltype == 'adherent':
proprio=ldap.search('aid=%d'%elid,'w')['adherent'] proprio = ldap.search('aid=%d'%elid, 'w')['adherent']
else: else:
continue continue
if len(proprio)!=1: if len(proprio) != 1:
print 'Erreur : Proprio non trouvé (%s) %d'%(eltype, elid) print 'Erreur : Proprio non trouvé (%s) %d'%(eltype, elid)
continue continue
proprio=proprio[0] proprio = proprio[0]
# On inscrit l'instance dans la table des avertis_hard # On inscrit l'instance dans la table des avertis_hard
###################################################### ######################################################
@ -221,71 +221,71 @@ for elupload, eltype, elid in uploadeurs:
############### ###############
debut = localtime(time()) debut = localtime(time())
fin = localtime(time()+60*60*24) fin = localtime(time()+60*60*24)
proprio.blacklist(["%.2d/%.2d/%.4d %.2d:%.2d" % (debut[2],debut[1],debut[0],debut[3],debut[4]),"%.2d/%.2d/%.4d %.2d:%.2d" % (fin[2],fin[1],fin[0],fin[3],fin[4]),'autodisc_upload',"Déconn auto. %s Mo" % elupload]) proprio.blacklist(["%.2d/%.2d/%.4d %.2d:%.2d" % (debut[2], debut[1], debut[0], debut[3], debut[4]), "%.2d/%.2d/%.4d %.2d:%.2d" % (fin[2], fin[1], fin[0], fin[3], fin[4]), 'autodisc_upload', "Déconn auto. %s Mo" % elupload])
proprio.save() proprio.save()
# On envoie un mail à l'adhérent # On envoie un mail à l'adhérent
################################ ################################
corps = upload.message_soft % {'from':upload.expediteur, 'to':proprio.email(), 'upload':elupload, 'proprio':proprio.Nom()} corps = upload.message_soft % {'from': upload.expediteur, 'to': proprio.email(), 'upload': elupload, 'proprio': proprio.Nom()}
corps = corps.encode('iso 8859-15') corps = corps.encode('iso 8859-15')
mail.sendmail(upload.expediteur,proprio.email(),corps) mail.sendmail(upload.expediteur, proprio.email(), corps)
# On envoie un mail à disconnect # On envoie un mail à disconnect
################################ ################################
if upload.disconnect_mail_hard : if upload.disconnect_mail_hard:
corps = upload.message_disconnect_hard % {'from':upload.expediteur, 'to':upload.expediteur, 'upload':elupload, 'proprio':proprio.Nom()} corps = upload.message_disconnect_hard % {'from': upload.expediteur, 'to': upload.expediteur, 'upload': elupload, 'proprio': proprio.Nom()}
corps = corps.encode('iso 8859-15') corps = corps.encode('iso 8859-15')
mail.sendmail(upload.expediteur,upload.expediteur,corps) mail.sendmail(upload.expediteur, upload.expediteur, corps)
# Vérification du nombre de déconnexions # Vérification du nombre de déconnexions
######################################### #########################################
nb_decos = len([ x for x in proprio.blacklist() if mktime(strptime(x.split(',')[0],'%d/%m/%Y %H:%M')) > mktime(localtime())-30*24*60*60 and x.split(',')[2]=='autodisc_upload' ]) nb_decos = len([ x for x in proprio.blacklist() if mktime(strptime(x.split(',')[0], '%d/%m/%Y %H:%M')) > mktime(localtime())-30*24*60*60 and x.split(',')[2] == 'autodisc_upload' ])
if nb_decos >= 3: if nb_decos >= 3:
# Génération du fichier postscript # Génération du fichier postscript
fichier_ps = generate_ps('upload', proprio) fichier_ps = generate_ps('upload', proprio)
# Envoi du mail à disconnect # Envoi du mail à disconnect
corps = upload.message_disconnect_multi % {'from':upload.expediteur, 'to':upload.expediteur, 'nbdeco':nb_decos, 'proprio':proprio.Nom(), 'ps':fichier_ps} corps = upload.message_disconnect_multi % {'from': upload.expediteur, 'to': upload.expediteur, 'nbdeco': nb_decos, 'proprio': proprio.Nom(), 'ps': fichier_ps}
corps = corps.encode('iso 8859-15') corps = corps.encode('iso 8859-15')
mail.sendmail(upload.expediteur,upload.expediteur,corps) mail.sendmail(upload.expediteur, upload.expediteur, corps)
elif elupload >= upload.soft : elif elupload >= upload.soft:
# L'adhérent a t il été averti # L'adhérent a t il été averti
############################## ##############################
if [eltype,elid] in avertis_upload_soft: if [eltype, elid] in avertis_upload_soft:
continue continue
# Objets LDAP # Objets LDAP
############# #############
if eltype == 'club': if eltype == 'club':
proprio=ldap.search('cid=%d'%elid)['club'] proprio = ldap.search('cid=%d'%elid)['club']
elif eltype == 'adherent': elif eltype == 'adherent':
proprio=ldap.search('aid=%d'%elid)['adherent'] proprio = ldap.search('aid=%d'%elid)['adherent']
else: else:
continue continue
if len(proprio)!=1: if len(proprio) != 1:
print 'Proprio non trouvé (%s) %d'%(eltype, elid) print 'Proprio non trouvé (%s) %d'%(eltype, elid)
continue continue
proprio=proprio[0] proprio = proprio[0]
# On inscrit l'ip dans la table des avertis soft # On inscrit l'ip dans la table des avertis soft
################################################ ################################################
curseur.execute("INSERT INTO avertis_upload_soft (type,id,date) VALUES ('%s','%d','now')"%(eltype,elid)) curseur.execute("INSERT INTO avertis_upload_soft (type,id,date) VALUES ('%s','%d','now')"%(eltype, elid))
# On envoie un mail à l'adhérent # On envoie un mail à l'adhérent
################################ ################################
corps = upload.message_soft % {'from':upload.expediteur, 'to':proprio.email(), 'upload':elupload, 'proprio':proprio.Nom()} corps = upload.message_soft % {'from': upload.expediteur, 'to': proprio.email(), 'upload': elupload, 'proprio': proprio.Nom()}
corps = corps.encode('iso 8859-15') corps = corps.encode('iso 8859-15')
mail.sendmail(upload.expediteur,proprio.email(),corps) mail.sendmail(upload.expediteur, proprio.email(), corps)
# On envoie un mail à disconnect # On envoie un mail à disconnect
################################ ################################
if upload.disconnect_mail_soft : if upload.disconnect_mail_soft:
corps = upload.message_disconnect_soft % {'from':upload.expediteur, 'to':upload.expediteur, 'upload':elupload, 'proprio':proprio.Nom()} corps = upload.message_disconnect_soft % {'from': upload.expediteur, 'to': upload.expediteur, 'upload': elupload, 'proprio': proprio.Nom()}
corps = corps.encode('iso 8859-15') corps = corps.encode('iso 8859-15')
mail.sendmail(upload.expediteur,upload.expediteur,corps) mail.sendmail(upload.expediteur, upload.expediteur, corps)
# On supprime les vieux avertisements # On supprime les vieux avertisements
curseur.execute("DELETE FROM avertis_upload_hard WHERE date < timestamp 'now' - interval '1 day'") curseur.execute("DELETE FROM avertis_upload_hard WHERE date < timestamp 'now' - interval '1 day'")
@ -316,24 +316,24 @@ for ip, nombre in infectes:
continue continue
# Lecture des infos de ldap # Lecture des infos de ldap
machine = ldap.search('ipHostNumber=%s' % ip,'w' )['machine'][0] machine = ldap.search('ipHostNumber=%s' % ip, 'w' )['machine'][0]
hostname = machine.nom() hostname = machine.nom()
proprio = machine.proprietaire() proprio = machine.proprietaire()
blacklist = proprio.blacklist() blacklist = proprio.blacklist()
# Inscription dans la table des infectés # Inscription dans la table des infectés
requete="INSERT INTO avertis_virus (ip_crans,date) VALUES ('%s','now')" % ip requete = "INSERT INTO avertis_virus (ip_crans,date) VALUES ('%s','now')" % ip
curseur.execute(requete) curseur.execute(requete)
# On récupère les index des lignes de bl où il y a marqué virus # On récupère les index des lignes de bl où il y a marqué virus
index = [blacklist.index(x) for x in blacklist if 'virus' in x ] index = [blacklist.index(x) for x in blacklist if 'virus' in x ]
if index : if index:
# L'adhérent est déjà blacklisté # L'adhérent est déjà blacklisté
proprio.blacklist(( index[0] , ['now','-','virus',hostname] )) proprio.blacklist(( index[0] , ['now', '-', 'virus', hostname] ))
proprio.save() proprio.save()
else : else:
# L'adhérent n'est pas encore blacklisté # L'adhérent n'est pas encore blacklisté
proprio.blacklist(['now','-','virus',hostname]) proprio.blacklist(['now', '-', 'virus', hostname])
proprio.save() proprio.save()
################################################################################ ################################################################################
@ -353,28 +353,28 @@ infectes_old = curseur.fetchall()
for ip, nombre in infectes: for ip, nombre in infectes:
# Si on est en dessous du seuil, ou qu'on est déjà averti, on laisse passer # Si on est en dessous du seuil, ou qu'on est déjà averti, on laisse passer
if nombre < virus.flood or [ip] in infectes_old : if nombre < virus.flood or [ip] in infectes_old:
continue continue
# Lecture des infos de ldap # Lecture des infos de ldap
machine = ldap.search('ipHostNumber=%s' % ip,'w' )['machine'][0] machine = ldap.search('ipHostNumber=%s' % ip, 'w' )['machine'][0]
hostname = machine.nom() hostname = machine.nom()
proprio = machine.proprietaire() proprio = machine.proprietaire()
blacklist = proprio.blacklist() blacklist = proprio.blacklist()
# Inscription dans la table des infectés # Inscription dans la table des infectés
requete="INSERT INTO avertis_virus (ip_crans,date) VALUES ('%s','now')" % ip requete = "INSERT INTO avertis_virus (ip_crans,date) VALUES ('%s','now')" % ip
curseur.execute(requete) curseur.execute(requete)
# On récupère les index des lignes de bl où il y a marqué virus # On récupère les index des lignes de bl où il y a marqué virus
index = [blacklist.index(x) for x in blacklist if 'virus' in x ] index = [blacklist.index(x) for x in blacklist if 'virus' in x ]
if index : if index:
# L'adhérent est déjà blacklisté # L'adhérent est déjà blacklisté
proprio.blacklist(( index[0] , ['now','-','virus',hostname] )) proprio.blacklist(( index[0] , ['now', '-', 'virus', hostname] ))
proprio.save() proprio.save()
else : else:
# L'adhérent n'est pas encore blacklisté # L'adhérent n'est pas encore blacklisté
proprio.blacklist(['now','-','virus',hostname]) proprio.blacklist(['now', '-', 'virus', hostname])
proprio.save() proprio.save()
@ -386,23 +386,23 @@ requete = "SELECT ip_crans FROM avertis_virus where date < timestamp 'now' - int
curseur.execute(requete) curseur.execute(requete)
infectes = [ x[0] for x in curseur.fetchall() ] infectes = [ x[0] for x in curseur.fetchall() ]
for IP in infectes : for IP in infectes:
# Nombre de requêtes de virus # Nombre de requêtes de virus
requete1="SELECT COUNT(ip_src) FROM virus where ip_src='%s' and date > timestamp 'now' - interval '1 hour'" % IP requete1 = "SELECT COUNT(ip_src) FROM virus where ip_src='%s' and date > timestamp 'now' - interval '1 hour'" % IP
curseur.execute(requete1) curseur.execute(requete1)
nb_virus = curseur.fetchall() nb_virus = curseur.fetchall()
# Nombre de requêtes de flood # Nombre de requêtes de flood
requete2="SELECT COUNT(ip_src) FROM flood where ip_src='%s' and date > timestamp 'now' - interval '1 hour'" % IP requete2 = "SELECT COUNT(ip_src) FROM flood where ip_src='%s' and date > timestamp 'now' - interval '1 hour'" % IP
curseur.execute(requete2) curseur.execute(requete2)
nb_flood = curseur.fetchall() nb_flood = curseur.fetchall()
# On ne traite que les IP qui sont descendues en dessous des seuils # On ne traite que les IP qui sont descendues en dessous des seuils
if nb_virus[0][0] < virus.virus and nb_flood[0][0] < virus.flood : if nb_virus[0][0] < virus.virus and nb_flood[0][0] < virus.flood:
machine = ldap.search('ipHostNumber=%s' % IP,'w' )['machine'][0] machine = ldap.search('ipHostNumber=%s' % IP, 'w' )['machine'][0]
# Si la machine n'est pas online, on reconnecte # Si la machine n'est pas online, on reconnecte
#if machine_online(machine) : #if machine_online(machine):
proprio = machine.proprietaire() proprio = machine.proprietaire()
bl = proprio.blacklist() bl = proprio.blacklist()
hostname = machine.nom() hostname = machine.nom()
@ -411,12 +411,12 @@ for IP in infectes :
# ont pu s'ajouter. # ont pu s'ajouter.
for ligne in bl: for ligne in bl:
if ',-,virus,%s'%hostname in ligne: if ',-,virus,%s'%hostname in ligne:
liste=ligne.split(',') liste = ligne.split(',')
argument=[liste[0],'now',liste[2],liste[3]] argument = [liste[0], 'now', liste[2], liste[3]]
index = bl.index(ligne) index = bl.index(ligne)
proprio.blacklist((index,argument)) proprio.blacklist((index, argument))
proprio.save() proprio.save()
requete="DELETE FROM avertis_virus where ip_crans='%s'"%IP requete = "DELETE FROM avertis_virus where ip_crans='%s'"%IP
curseur.execute(requete) curseur.execute(requete)
################################################################################ ################################################################################
@ -433,55 +433,67 @@ requete = "SELECT ip_crans,protocole FROM avertis_p2p WHERE date > timestamp 'n
curseur.execute(requete) curseur.execute(requete)
avertisp2p = curseur.fetchall() avertisp2p = curseur.fetchall()
for ip, id_p2p, nombre in fraudeurs : for ip, id_p2p, nombre in fraudeurs:
# On récupére le protocole de p2p : # On récupére le protocole de p2p :
requete="SELECT nom FROM protocole_p2p WHERE id_p2p=%d" % id_p2p requete = "SELECT nom FROM protocole_p2p WHERE id_p2p=%d" % id_p2p
curseur.execute(requete) curseur.execute(requete)
protocole = curseur.fetchall()[0][0] protocole = curseur.fetchall()[0][0]
# On ne prend pas en compte s'il est sous le seuil admis, ou # On ne prend pas en compte s'il est sous le seuil admis, ou
#s'il est averti #s'il est averti
if nombre <= p2p.limite[protocole] or [ip, protocole] in avertisp2p : if nombre <= p2p.limite[protocole] or [ip, protocole] in avertisp2p:
continue continue
# Récupération des ref de la machine # Récupération des ref de la machine
machine = ldap.search('ipHostNumber=%s' % ip,'w' )['machine'][0] machine = ldap.search('ipHostNumber=%s' % ip, 'w' )['machine'][0]
hostname = machine.nom() hostname = machine.nom()
proprio = machine.proprietaire() proprio = machine.proprietaire()
blacklist = proprio.blacklist() blacklist = proprio.blacklist()
# Envoi du mail à disconnect # Envoi du mail à disconnect
if p2p.disconnect_mail : if p2p.disconnect_mail:
requete="select date from p2p where date > timestamp 'now' - interval '1 day' and ip_src='%s' order by date limit 1"%ip requete = "select date from p2p where date > timestamp 'now' - interval '1 day' and ip_src='%s' order by date limit 1"%ip
curseur.execute(requete) curseur.execute(requete)
date=curseur.fetchall()[0][0] date = curseur.fetchall()[0][0]
corps = p2p.avertissement % { 'From': upload.expediteur, 'To': upload.expediteur, 'protocole': protocole, 'hostname':hostname, 'nb_paquets':nombre, 'datedebut':date} corps = p2p.avertissement % { 'From': upload.expediteur,
'To': upload.expediteur,
'protocole': protocole,
'hostname': hostname,
'nb_paquets': nombre,
'datedebut': date }
corps = corps.encode('iso 8859-15') corps = corps.encode('iso 8859-15')
mail.sendmail(upload.expediteur,upload.expediteur,corps) mail.sendmail(upload.expediteur, upload.expediteur, corps)
# Inscription dans la base des avertis # Inscription dans la base des avertis
requete="INSERT INTO avertis_p2p (ip_crans,date,protocole) VALUES ('%s','now','%s')" % (ip, protocole) requete = "INSERT INTO avertis_p2p (ip_crans,date,protocole) VALUES ('%s','now','%s')" % (ip, protocole)
curseur.execute(requete) curseur.execute(requete)
# On envoie un mail a l'adhérent # On envoie un mail a l'adhérent
################################ ################################
corps = p2p.deconnexion % {'From':p2p.expediteur, 'To':proprio.email(), 'protocole': protocole, 'hostname':hostname} corps = p2p.deconnexion % { 'From': p2p.expediteur,
'To': proprio.email(),
'protocole': protocole,
'hostname': hostname }
corps = corps.encode('iso 8859-15') corps = corps.encode('iso 8859-15')
mail.sendmail(p2p.expediteur,proprio.email(),corps) mail.sendmail(p2p.expediteur, proprio.email(), corps)
# Vérification du nombre de déconnexions # Vérification du nombre de déconnexions
######################################### #########################################
nb_decos = len([ x for x in proprio.blacklist() if mktime(strptime(x.split(',')[0],'%d/%m/%Y %H:%M')) > mktime(localtime())-365*24*60*60 and x.split(',')[2]=='autodisc_p2p' ]) nb_decos = len([ x for x in proprio.blacklist() if mktime(strptime(x.split(',')[0], '%d/%m/%Y %H:%M')) > mktime(localtime())-365*24*60*60 and x.split(',')[2] == 'autodisc_p2p' ])
if nb_decos >= 3 : if nb_decos >= 3:
fichier_ps = generate_ps('p2p', proprio) fichier_ps = generate_ps('p2p', proprio)
# Envoi du mail à disconnect # Envoi du mail à disconnect
corps = p2p.message_disconnect_multi % {'from':p2p.expediteur, 'to':p2p.expediteur, 'nbdeco':nb_decos, 'proprio':proprio.Nom(), 'ps':fichier_ps} corps = p2p.message_disconnect_multi % { 'from': p2p.expediteur,
'to': p2p.expediteur,
'nbdeco': nb_decos,
'proprio':proprio.Nom(),
'ps': fichier_ps }
corps = corps.encode('iso 8859-15') corps = corps.encode('iso 8859-15')
mail.sendmail(p2p.expediteur,p2p.expediteur,corps) mail.sendmail(p2p.expediteur, p2p.expediteur, corps)
# L'adhérent n'est pas encore blacklisté # L'adhérent n'est pas encore blacklisté
fin = localtime(time()+60*60*24) fin = localtime(time()+60*60*24)
proprio.blacklist(['now',"%.2d/%.2d/%.4d %.2d:%.2d" % (fin[2],fin[1],fin[0],fin[3],fin[4]),'autodisc_p2p',hostname]) proprio.blacklist(['now', "%.2d/%.2d/%.4d %.2d:%.2d" % (fin[2], fin[1], fin[0], fin[3], fin[4]), 'autodisc_p2p', hostname])
proprio.save() proprio.save()

View file

@ -44,22 +44,22 @@ mail = smtplib.SMTP('localhost')
##################### #####################
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 DESC" 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 DESC"
curseur.execute(requete) curseur.execute(requete)
liste_upload = tableau_ng( data = [ [l[1], l[2], socket.gethostbyaddr(str(l[0]))[0]] for l in curseur.fetchall() ], liste_upload = tableau_ng(data = [ [l[1], l[2], socket.gethostbyaddr(str(l[0]))[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'],
alignement = ['d','d','c']).encode('iso-8859-15') alignement = ['d', 'd', 'c']).encode('iso-8859-15')
# Traffic exempté : # Traffic exempté :
################### ###################
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 DESC" 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 DESC"
curseur.execute(requete) curseur.execute(requete)
liste_exemptes = tableau_ng( data = [ [l[1],l[2],socket.gethostbyaddr(str(l[0]))[0] ] for l in curseur.fetchall() ], liste_exemptes = tableau_ng(data = [ [l[1], l[2], socket.gethostbyaddr(str(l[0]))[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'],
alignement = ['d','d','c']).encode('iso-8859-15') alignement = ['d', 'd', 'c']).encode('iso-8859-15')
# Upload des serveurs : # Upload des serveurs :
@ -84,7 +84,7 @@ liste_serveurs = tableau_ng( 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=[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')
############################ ############################
# Statistiques virus/p2p : # # Statistiques virus/p2p : #
@ -95,13 +95,13 @@ gros_uploads_des_serveurs = stats (ip_crans=[x.ip() for x in AssociationCrans().
requete = "SELECT DISTINCT ip_crans FROM avertis_virus" requete = "SELECT DISTINCT ip_crans FROM avertis_virus"
curseur.execute(requete) curseur.execute(requete)
infections = [ x[0] for x in curseur.fetchall() ] infections = [ x[0] for x in curseur.fetchall() ]
liste_virus=[] liste_virus = []
for IP in infections: for IP in infections:
try: try:
hostname = socket.gethostbyaddr("%s"%IP)[0] hostname = socket.gethostbyaddr("%s" % IP)[0]
except socket.herror: except socket.herror:
continue continue
liste_virus.append(["%s"%(str(hostname))]) liste_virus.append(["%s" % (str(hostname))])
liste_virus = tableau_ng(liste_virus, titre=['machine'], largeur=[30]).encode('iso-8859-15') liste_virus = tableau_ng(liste_virus, titre=['machine'], largeur=[30]).encode('iso-8859-15')
@ -112,11 +112,11 @@ curseur.execute(requete)
liste_virus2 = [] liste_virus2 = []
for IP, compteur in curseur.fetchall(): for IP, compteur in curseur.fetchall():
hostname = socket.gethostbyaddr(IP)[0] hostname = socket.gethostbyaddr(IP)[0]
liste_virus2.append([hostname,compteur]) liste_virus2.append([hostname, compteur])
liste_virus2 = tableau_ng( data = liste_virus2, liste_virus2 = tableau_ng(data = liste_virus2,
titre = ['machine','nombre'], titre = ['machine', 'nombre'],
largeur = [30, 12], largeur = [30, 12],
alignement = ['c','d'] ).encode('iso-8859-15') alignement = ['c', 'd']).encode('iso-8859-15')
# Machines ayant fait de attaques flood dans la journée : # Machines ayant fait de attaques flood dans la journée :
@ -126,11 +126,11 @@ curseur.execute(requete)
liste_virus3 = [] liste_virus3 = []
for IP, compteur in curseur.fetchall(): for IP, compteur in curseur.fetchall():
hostname = socket.gethostbyaddr(IP)[0] hostname = socket.gethostbyaddr(IP)[0]
liste_virus3.append([hostname,compteur]) liste_virus3.append([hostname, compteur])
liste_virus3 = tableau_ng( data = liste_virus3, liste_virus3 = tableau_ng(data = liste_virus3,
titre = ['machine','nombre'], titre = ['machine', 'nombre'],
largeur = [30, 12], largeur = [30, 12],
alignement = ['c','d'] ).encode('iso-8859-15') alignement = ['c', 'd']).encode('iso-8859-15')
# Machines ayant utilisé des protocoles P2P dans la journée : # Machines ayant utilisé des protocoles P2P dans la journée :
@ -155,13 +155,16 @@ for IP, protocole, compteur, blackliste in curseur.fetchall():
hostname = socket.gethostbyaddr(IP)[0] hostname = socket.gethostbyaddr(IP)[0]
# Le champ blackliste contient la date du blacklistage si il a eu lieu # Le champ blackliste contient la date du blacklistage si il a eu lieu
if blackliste : if blackliste :
liste_p2p.append(['*%s*'%hostname, '*%s*'%protocole, '*%d*'%compteur, '*%d*'%config.p2p.limite[protocole]]) liste_p2p.append(['*%s*' % hostname,
'*%s*' % protocole,
'*%d*' % compteur,
'*%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_ng( data = liste_p2p, liste_p2p = tableau_ng(data = liste_p2p,
titre = ['machine','protocole','nombre','limite'], titre = ['machine', 'protocole', 'nombre', 'limite'],
largeur = [32, 14, 10, 8], largeur = [32, 14, 10, 8],
alignement = ['c','c','d','d'] ).encode('iso-8859-15') alignement = ['c', 'c', 'd', 'd']).encode('iso-8859-15')
@ -171,7 +174,7 @@ liste_p2p = tableau_ng( data = liste_p2p,
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
Message-Id: <%(uuid)s1@crans.org> Message-Id: <%(uuid)s1@crans.org>
@ -213,17 +216,17 @@ statistiques.py
uuid = md5.md5(str(long(time.time() * 1000)) + uuid = md5.md5(str(long(time.time() * 1000)) +
str(long(random.random()*100000000000000000L))).hexdigest() str(long(random.random()*100000000000000000L))).hexdigest()
corps = message %{'From':expediteur, corps = message % { 'From': expediteur,
'To':destinataire, 'To': destinataire,
'uuid':uuid, 'uuid': uuid,
'liste_upload':liste_upload, 'liste_upload': liste_upload,
'liste_p2p':liste_p2p, 'liste_p2p': liste_p2p,
'liste_virus':liste_virus, 'liste_virus': liste_virus,
'liste_virus2':liste_virus2, 'liste_virus2': liste_virus2,
'liste_virus3':liste_virus3, 'liste_virus3': liste_virus3,
'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 }
mail.sendmail('disconnect@crans.org','disconnect@crans.org',corps) mail.sendmail('disconnect@crans.org','disconnect@crans.org',corps)