Gnration des feuilles de dconnexion pour trop de p2p
+ petites corrections darcs-hash:20060307145248-72cb0-4d70962d90f318e6572e09350eef1463d74dbcac.gz
This commit is contained in:
parent
78ab350b53
commit
13a4688422
1 changed files with 93 additions and 77 deletions
|
@ -35,27 +35,59 @@ 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
|
||||||
"""
|
"""
|
||||||
# les wifi sont toujours online
|
# Les machines wifi sont toujours online
|
||||||
if machine.ipsec() :
|
if machine.ipsec() :
|
||||||
return True
|
return True
|
||||||
# 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) :
|
||||||
|
# Dossier de génération du ps
|
||||||
|
dossier = '/usr/scripts/surveillance/fiche_deconnexion'
|
||||||
|
|
||||||
|
# Base pour le nom du fichier
|
||||||
|
fichier = strftime('%Y-%m-%d-%H-%M') + '-%s-%s' % (sanction, proprio.Nom().lower().replace(' ','-'))
|
||||||
|
|
||||||
|
# Création du fichier tex
|
||||||
|
format_date = '%A %d %B %Y'
|
||||||
|
template = file('%s/deconnexion_%s.tex' % (dossier, sanction)).read()
|
||||||
|
template = template.replace('~prenom~',proprio.prenom().encode('iso8859-15'))
|
||||||
|
template = template.replace('~nom~',proprio.nom().encode('iso8859-15'))
|
||||||
|
template = template.replace('~chambre~',proprio.chbre().encode('iso8859-15'))
|
||||||
|
template = template.replace('~mail~',proprio.email().encode('iso8859-15'))
|
||||||
|
template = template.replace('~debut~',strftime(format_date,localtime()))
|
||||||
|
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 = [ (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 = '\\\\\n'.join(historique) # assemblage des lignes
|
||||||
|
template = template.replace('~historique~', historique)
|
||||||
|
template = template.replace('~limitehard~', str(upload.hard))
|
||||||
|
template = template.replace('~nbadher~', str(len(ldap.search('paiement=ok')['adherent'])))
|
||||||
|
|
||||||
|
file('%s/%s.tex' % (dossier, fichier),'w').write(template)
|
||||||
|
|
||||||
|
# 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})
|
||||||
|
|
||||||
|
return '%s/%s.ps' % (dossier, fichier)
|
||||||
|
|
||||||
# Variables utiles
|
# Variables utiles
|
||||||
##################
|
##################
|
||||||
|
|
||||||
# création d'une chaine qui ressemble à : (ip_src<<=inet('138.231.136.0/21') or ip_src<<=inet('138.231.148.0/22'))
|
# Création d'une chaine qui ressemble à :
|
||||||
|
# (ip_src<<=inet('138.231.136.0/21') or ip_src<<=inet('138.231.148.0/22'))
|
||||||
ip_src_in_crans = '(%s)' % ' or '.join([ "ip_src<<=inet('%s')" % net for net in NETs['all'] ])
|
ip_src_in_crans = '(%s)' % ' or '.join([ "ip_src<<=inet('%s')" % net for net in NETs['all'] ])
|
||||||
|
|
||||||
# Connections :
|
# Connections :
|
||||||
###############
|
###############
|
||||||
|
|
||||||
# pgsql
|
# Connection à la base sql via pgsql
|
||||||
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
|
pgsql.autocommit = True
|
||||||
curseur = pgsql.cursor()
|
curseur = pgsql.cursor()
|
||||||
|
|
||||||
# smtp, assez capricieux
|
# Le smtp est assez capricieux
|
||||||
for i in range(5):
|
for i in range(5):
|
||||||
try:
|
try:
|
||||||
mail = smtplib.SMTP('localhost')
|
mail = smtplib.SMTP('localhost')
|
||||||
|
@ -185,10 +217,10 @@ 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(["%d/%d/%d %d:%d" % (debut[2],debut[1],debut[0],debut[3],debut[4]),"%d/%d/%d %d:%d" % (fin[2],fin[1],fin[0],fin[3],fin[4]),'autodisc',"Déconn auto. %s Mo" % elupload])
|
proprio.blacklist(["%d/%d/%d %d:%d" % (debut[2],debut[1],debut[0],debut[3],debut[4]),"%d/%d/%d %d:%d" % (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 a 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')
|
||||||
|
@ -201,41 +233,16 @@ for elupload, eltype, elid in uploadeurs:
|
||||||
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éconnections
|
# 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' ])
|
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:
|
||||||
|
|
||||||
# dossier de génération du pdf
|
# Génération du fichier postscript
|
||||||
dossier = '/usr/scripts/surveillance/fiche_deconnection/'
|
fichier_ps = generate_ps('upload', proprio)
|
||||||
|
|
||||||
# base pour le dossier de destination
|
# Envoi du mail à disconnect
|
||||||
fichier = strftime('%Y-%m-%d-%H-%M') + '-' + proprio.Nom().lower().replace(' ','-')
|
corps = upload.message_disconnect_multi % {'from':upload.expediteur, 'to':upload.expediteur, 'nbdeco':nb_decos, 'proprio':proprio.Nom(), 'ps':fichier_ps}
|
||||||
|
|
||||||
# création du fichier tex
|
|
||||||
format_date = '%A %d %B %Y'
|
|
||||||
template = file(dossier + 'deconnexion_upload.tex').read()
|
|
||||||
template = template.replace('~prenom~',proprio.prenom().encode('iso8859-15'))
|
|
||||||
template = template.replace('~nom~',proprio.nom().encode('iso8859-15'))
|
|
||||||
template = template.replace('~chambre~',proprio.chbre().encode('iso8859-15'))
|
|
||||||
template = template.replace('~mail~',proprio.email().encode('iso8859-15'))
|
|
||||||
template = template.replace('~debut~',strftime(format_date,localtime()))
|
|
||||||
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' ] # 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 = [ '%s & %s & Mo'%(bl[0],bl[1]) for bl in historique ] # tranformation en ligne
|
|
||||||
historique = '\\\\\n'.join(historique) # assemblage des lignes
|
|
||||||
template = template.replace('~historique~', historique)
|
|
||||||
template = template.replace('~limitehard~', str(upload.hard))
|
|
||||||
template = template.replace('~nbadher~', str(len(ldap.search('paiement=ok')['adherent'])))
|
|
||||||
|
|
||||||
file(dossier+fichier+'.tex','w').write(template)
|
|
||||||
|
|
||||||
# compilation
|
|
||||||
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})
|
|
||||||
|
|
||||||
# envoie du mail à disconnect
|
|
||||||
corps = upload.message_disconnect_multi % {'from':upload.expediteur, 'to':upload.expediteur, 'nbdeco':nb_decos, 'proprio':proprio.Nom(), 'ps':dossier+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)
|
||||||
|
|
||||||
|
@ -263,7 +270,7 @@ for elupload, eltype, elid in uploadeurs:
|
||||||
################################################
|
################################################
|
||||||
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 a 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')
|
||||||
|
@ -284,44 +291,44 @@ curseur.execute("DELETE FROM avertis_upload_soft WHERE date < timestamp 'now' -
|
||||||
# Détection de l'existence de virus #
|
# Détection de l'existence de virus #
|
||||||
################################################################################
|
################################################################################
|
||||||
|
|
||||||
# Dans le table virus on sélectionne les ip_src qui appartiennent au reseau
|
# Dans la table virus on sélectionne les ip_src qui appartiennent au réseau
|
||||||
requete = "SELECT ip_src,count(ip_src) FROM virus WHERE %s and date > timestamp 'now' - interval '1 hour' group by ip_src" % ip_src_in_crans
|
requete = "SELECT ip_src,count(ip_src) FROM virus WHERE %s and date > timestamp 'now' - interval '1 hour' group by ip_src" % ip_src_in_crans
|
||||||
curseur.execute(requete)
|
curseur.execute(requete)
|
||||||
infectes = curseur.fetchall()
|
infectes = curseur.fetchall()
|
||||||
|
|
||||||
# Recuperation des infectes pour ne pas les reblacklister
|
# Récupération des infectés pour ne pas les reblacklister
|
||||||
requete = "SELECT ip_crans FROM avertis_virus"
|
requete = "SELECT ip_crans FROM avertis_virus"
|
||||||
curseur.execute(requete)
|
curseur.execute(requete)
|
||||||
infectes_old = curseur.fetchall()
|
infectes_old = curseur.fetchall()
|
||||||
|
|
||||||
for ip, nombre in infectes:
|
for ip, nombre in infectes:
|
||||||
|
|
||||||
# si on est en dessous du seuil, on laisse passer
|
# Si on est en dessous du seuil, on laisse passer
|
||||||
if nombre < virus.virus:
|
if nombre < virus.virus:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
# si on est déja avertis, on laisse passer
|
# Si on est déja avertis, on laisse passer
|
||||||
if [ip] in infectes_old:
|
if [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 infectes
|
# 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 ou 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 :
|
||||||
# adhérent déja 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 :
|
||||||
# adhérent non blacklisté
|
# L'adhérent n'est pas encore blacklisté
|
||||||
proprio.blacklist(['now','-','virus',hostname])
|
proprio.blacklist(['now','-','virus',hostname])
|
||||||
proprio.save()
|
proprio.save()
|
||||||
|
|
||||||
|
@ -329,40 +336,40 @@ for ip, nombre in infectes:
|
||||||
# Détection des virus qui floodent #
|
# Détection des virus qui floodent #
|
||||||
################################################################################
|
################################################################################
|
||||||
|
|
||||||
# Dans le table virus on sélectionne les ip_src qui appartiennent au reseau
|
# Dans la table virus on sélectionne les ip_src qui appartiennent au réseau
|
||||||
requete = "SELECT ip_src,count(ip_src) FROM flood WHERE %s and date > timestamp 'now' - interval '1 hour' GROUP BY ip_src" % ip_src_in_crans
|
requete = "SELECT ip_src,count(ip_src) FROM flood WHERE %s and date > timestamp 'now' - interval '1 hour' GROUP BY ip_src" % ip_src_in_crans
|
||||||
curseur.execute(requete)
|
curseur.execute(requete)
|
||||||
infectes = curseur.fetchall()
|
infectes = curseur.fetchall()
|
||||||
|
|
||||||
# Recuperation des infectes pour ne pas les reblacklister
|
# Récupération des infectés pour ne pas les reblacklister
|
||||||
requete = "SELECT ip_crans FROM avertis_virus"
|
requete = "SELECT ip_crans FROM avertis_virus"
|
||||||
curseur.execute(requete)
|
curseur.execute(requete)
|
||||||
infectes_old = curseur.fetchall()
|
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 deja 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 infectes
|
# 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 ou 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 :
|
||||||
# adhérent déja 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 :
|
||||||
# adhérent non blacklisté
|
# L'adhérent n'est pas encore blacklisté
|
||||||
proprio.blacklist(['now','-','virus',hostname])
|
proprio.blacklist(['now','-','virus',hostname])
|
||||||
proprio.save()
|
proprio.save()
|
||||||
|
|
||||||
|
@ -377,20 +384,20 @@ infectes = [ x[0] for x in curseur.fetchall() ]
|
||||||
|
|
||||||
for IP in infectes :
|
for IP in infectes :
|
||||||
|
|
||||||
# Nombre de requets 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 requetes 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 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 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()
|
||||||
|
@ -412,12 +419,12 @@ for IP in infectes :
|
||||||
# Gestion du peer to peer #
|
# Gestion du peer to peer #
|
||||||
################################################################################
|
################################################################################
|
||||||
|
|
||||||
# Dans le table p2p on sélectionne les ip_src qui appartiennent au reseau
|
# Dans la table p2p on sélectionne les ip_src qui appartiennent au réseau
|
||||||
requete = "SELECT ip_src,id_p2p,count(ip_src) FROM p2p WHERE %s AND date > timestamp 'now' - interval '1 day' GROUP BY ip_src,id_p2p ORDER BY ip_src" % ip_src_in_crans
|
requete = "SELECT ip_src,id_p2p,count(ip_src) FROM p2p WHERE %s AND date > timestamp 'now' - interval '1 day' GROUP BY ip_src,id_p2p ORDER BY ip_src" % ip_src_in_crans
|
||||||
curseur.execute(requete)
|
curseur.execute(requete)
|
||||||
fraudeurs = curseur.fetchall()
|
fraudeurs = curseur.fetchall()
|
||||||
|
|
||||||
# Recuperation des fraudeurs pour ne pas les resanctionner
|
# Récupération des fraudeurs pour ne pas les resanctionner
|
||||||
requete = "SELECT ip_crans,protocole FROM avertis_p2p WHERE date > timestamp 'now' - interval '1 day'"
|
requete = "SELECT ip_crans,protocole FROM avertis_p2p WHERE date > timestamp 'now' - interval '1 day'"
|
||||||
curseur.execute(requete)
|
curseur.execute(requete)
|
||||||
avertisp2p = curseur.fetchall()
|
avertisp2p = curseur.fetchall()
|
||||||
|
@ -429,17 +436,18 @@ for ip, id_p2p, nombre in fraudeurs :
|
||||||
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 s'il est averti
|
# On ne prend pas en compte s'il est sous le seuil admis, ou
|
||||||
|
#s'il est averti
|
||||||
if nombre <= p2p.tag or [ip, protocole] in avertisp2p :
|
if nombre <= p2p.tag or [ip, protocole] in avertisp2p :
|
||||||
continue
|
continue
|
||||||
|
|
||||||
# Recuperation 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()
|
||||||
|
|
||||||
# Envoie 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)
|
||||||
|
@ -448,28 +456,36 @@ for ip, id_p2p, nombre in fraudeurs :
|
||||||
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.deconnection % {'From':upload.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(upload.expediteur,proprio.email(),corps)
|
mail.sendmail(p2p.expediteur,proprio.email(),corps)
|
||||||
|
|
||||||
|
# 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' ])
|
||||||
|
if nb_decos >= 3 :
|
||||||
|
|
||||||
index = [blacklist.index(x) for x in blacklist if 'P2P' in x ]
|
fichier_ps = generate_ps('p2p', proprio)
|
||||||
|
# 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 = corps.encode('iso 8859-15')
|
||||||
|
mail.sendmail(p2p.expediteur,p2p.expediteur,corps)
|
||||||
|
|
||||||
|
# On récupère les index des lignes de bl où il y a marqué autodisc_p2p
|
||||||
|
index = [blacklist.index(x) for x in blacklist if 'autodisc_p2p' in x ]
|
||||||
if index :
|
if index :
|
||||||
# adhérent déja blacklisté
|
# L'adhérent est déja blacklisté
|
||||||
fin = localtime(time()+60*60*24)
|
fin = localtime(time()+60*60*24)
|
||||||
proprio.blacklist(( index[0] , ['now',"%d/%d/%d %d:%d" % (fin[2],fin[1],fin[0],fin[3],fin[4]),'p2p',hostname] ))
|
proprio.blacklist(( index[0] , ['now',"%d/%d/%d %d:%d" % (fin[2],fin[1],fin[0],fin[3],fin[4]),'autodisc_p2p',hostname] ))
|
||||||
proprio.save()
|
proprio.save()
|
||||||
else :
|
else :
|
||||||
# adhérent non blacklisté
|
# L'adhérent n'est pas encore blacklisté
|
||||||
fin = localtime(time()+60*60*24)
|
fin = localtime(time()+60*60*24)
|
||||||
proprio.blacklist(['now',"%d/%d/%d %d:%d" % (fin[2],fin[1],fin[0],fin[3],fin[4]),'p2p',hostname])
|
proprio.blacklist(['now',"%d/%d/%d %d:%d" % (fin[2],fin[1],fin[0],fin[3],fin[4]),'autodisc_p2p',hostname])
|
||||||
proprio.save()
|
proprio.save()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue