Mise en forme.
darcs-hash:20060325222144-68412-ec4176db30697af907a81f8d4a67c9c77c352d8d.gz
This commit is contained in:
parent
f16056b8b4
commit
65b6a8768d
2 changed files with 138 additions and 123 deletions
|
@ -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()
|
||||||
|
|
|
@ -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)
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue