From bf26fc0bb8892941a3143e7f1ca6e60f34ccf4f9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pierre-Elliott=20B=C3=A9cue?= Date: Sun, 3 Feb 2013 03:13:50 +0100 Subject: [PATCH] =?UTF-8?q?[deconnexion.py]=20Ajout=20d'informations=20sur?= =?UTF-8?q?=20les=20derniers=20endroits=20o=C3=B9=20les=20machines=20ont?= =?UTF-8?q?=20=C3=A9t=C3=A9=20vues=20(pour=20mettre=20en=20=C3=A9vidence?= =?UTF-8?q?=20d'=C3=A9ventuels=20spoofs)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Une deconnexion pour upload entraîne la recherche dans la base mac_prises des différentes chambres où toutes les machines filaires ont été vues pour la dernière fois. * Une pour p2p récupère la même info pour la machine déconnectée si elle est filaire. --- gestion/config.py | 6 ++++++ surveillance/deconnexion.py | 42 +++++++++++++++++++++++++++++++++++-- 2 files changed, 46 insertions(+), 2 deletions(-) diff --git a/gestion/config.py b/gestion/config.py index efbe2065..69ff96c2 100644 --- a/gestion/config.py +++ b/gestion/config.py @@ -283,6 +283,11 @@ Content-Type: text/plain; charset="utf-8" %(proprio)s a été déconnecté pour upload (%(upload)s Mo). +Ses machines ont été aperçues pour la dernière fois à ces endroits : +%(mdc)s + +La chambre de l'adhérent est %(chambre)s. + --\u0020 Message créé par deconnexion.py""" @@ -459,6 +464,7 @@ Content-Type: text/plain; charset="utf-8" La machine %(hostname)s a été déconnectée pendant 24h pour utilisation du protocole %(protocole)s. Nombre de paquets : %(nb_paquets)s paquets depuis le %(datedebut)s. +Chambre (si machine fixe) : %(chambre)s --\u0020 Message créé par deconnexion.py""" diff --git a/surveillance/deconnexion.py b/surveillance/deconnexion.py index 80f8e3e1..54a5d291 100755 --- a/surveillance/deconnexion.py +++ b/surveillance/deconnexion.py @@ -24,12 +24,14 @@ from config import upload, virus, p2p, NETs import smtplib from ldap_crans import crans_ldap from ldap_crans import MachineWifi +from ldap_crans import MachineFixe from time import * #import locale #locale.setlocale(locale.LC_TIME, 'fr_FR') import lock sys.path.append('/usr/scripts/surveillance/fiche_deconnexion') from generate import generate_ps +from affich_tools import tableau # ldap ldap = crans_ldap() @@ -75,6 +77,19 @@ def connectsmtp(): sys.exit(1) return mail +# Pour trouver la chambre où était la machine que l'on déconnecte. +def reperage_chambre(mac): + pgsql = psycopg2.connect(database='mac_prises', user='crans') + # Il faudra remplacer la ligne ci-dessous par pgsql.set_session(autocommit = True) sous wheezy + curseur = pgsql.cursor() + requete = "SELECT date, chambre FROM correspondance WHERE mac=%s ORDER BY date DESC LIMIT 1;" + curseur.execute(requete, (mac,)) + result = curseur.fetchall() + if result: + return result[0][0], result[0][1] + else: + return "Inconnue", "Inconnue" + ################################################################################ # Vérification de l'upload # ################################################################################ @@ -178,12 +193,27 @@ for elupload, eltype, elid in uploadeurs: proprio = ldap.search('aid=%d'%elid, 'w')['adherent'] else: continue + if len(proprio) != 1: print 'Erreur : Proprio non trouvé (%s) %d'%(eltype, elid) continue proprio = proprio[0] + # On cherche à savoir où et quand on + # a vu les machines du proprio pour la dernière fois + #################################################### + machines = proprio.machines() + + macs_dates_chambres = [] + for machine in machines: + if isinstance(machine, MachineFixe): + mac = machine.mac() + date, chambre = reperage_chambre(mac) + macs_dates_chambres.append([mac, date, chambre]) + + mdcf = tableau(macs_dates_chambres, ('mac', 'date', 'chambre'), (20, 21, 7), ('c', 'c', 'c')) + # On inscrit l'instance dans la table des avertis_hard ###################################################### curseur.execute("INSERT INTO avertis_upload_hard (type,id,date) VALUES ('%s','%d','now')"%(eltype,elid)) @@ -206,7 +236,7 @@ for elupload, eltype, elid in uploadeurs: # On envoie un mail à disconnect ################################ 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(), 'mdc': mdcf, 'chambre': proprio.chbre()} corps = corps.encode('utf-8') mail.sendmail(upload.expediteur, upload.expediteur, corps) @@ -452,6 +482,12 @@ for ip, id_p2p, nombre in fraudeurs: proprio = machine.proprietaire() blacklist = proprio.blacklist() + if isinstance(machine, MachineFixe): + _, chambre = reperage_chambre(machine.mac()) + else: + chambre = 'machine wifi' + + # Envoi du mail à disconnect mail = connectsmtp() @@ -464,7 +500,9 @@ for ip, id_p2p, nombre in fraudeurs: 'protocole': protocole, 'hostname': hostname, 'nb_paquets': nombre, - 'datedebut': date } + 'datedebut': date, + 'chambre': chambre, + } corps = corps.encode('utf-8') mail.sendmail(upload.expediteur, upload.expediteur, corps)