[deconnexion.py] Ajout d'informations sur les derniers endroits où les machines ont été vues (pour mettre en évidence d'éventuels spoofs)

* 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.
This commit is contained in:
Pierre-Elliott Bécue 2013-02-03 03:13:50 +01:00
parent a598e62bab
commit bf26fc0bb8
2 changed files with 46 additions and 2 deletions

View file

@ -283,6 +283,11 @@ Content-Type: text/plain; charset="utf-8"
%(proprio)s a été déconnecté pour upload (%(upload)s Mo). %(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 --\u0020
Message créé par deconnexion.py""" 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 La machine %(hostname)s a été déconnectée pendant 24h pour
utilisation du protocole %(protocole)s. utilisation du protocole %(protocole)s.
Nombre de paquets : %(nb_paquets)s paquets depuis le %(datedebut)s. Nombre de paquets : %(nb_paquets)s paquets depuis le %(datedebut)s.
Chambre (si machine fixe) : %(chambre)s
--\u0020 --\u0020
Message créé par deconnexion.py""" Message créé par deconnexion.py"""

View file

@ -24,12 +24,14 @@ from config import upload, virus, p2p, NETs
import smtplib import smtplib
from ldap_crans import crans_ldap from ldap_crans import crans_ldap
from ldap_crans import MachineWifi from ldap_crans import MachineWifi
from ldap_crans import MachineFixe
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
sys.path.append('/usr/scripts/surveillance/fiche_deconnexion') sys.path.append('/usr/scripts/surveillance/fiche_deconnexion')
from generate import generate_ps from generate import generate_ps
from affich_tools import tableau
# ldap # ldap
ldap = crans_ldap() ldap = crans_ldap()
@ -75,6 +77,19 @@ def connectsmtp():
sys.exit(1) sys.exit(1)
return mail 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 # # Vérification de l'upload #
################################################################################ ################################################################################
@ -178,12 +193,27 @@ for elupload, eltype, elid in uploadeurs:
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 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 # 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)) 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 # 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(), 'mdc': mdcf, 'chambre': proprio.chbre()}
corps = corps.encode('utf-8') corps = corps.encode('utf-8')
mail.sendmail(upload.expediteur, upload.expediteur, corps) mail.sendmail(upload.expediteur, upload.expediteur, corps)
@ -452,6 +482,12 @@ for ip, id_p2p, nombre in fraudeurs:
proprio = machine.proprietaire() proprio = machine.proprietaire()
blacklist = proprio.blacklist() blacklist = proprio.blacklist()
if isinstance(machine, MachineFixe):
_, chambre = reperage_chambre(machine.mac())
else:
chambre = 'machine wifi'
# Envoi du mail à disconnect # Envoi du mail à disconnect
mail = connectsmtp() mail = connectsmtp()
@ -464,7 +500,9 @@ for ip, id_p2p, nombre in fraudeurs:
'protocole': protocole, 'protocole': protocole,
'hostname': hostname, 'hostname': hostname,
'nb_paquets': nombre, 'nb_paquets': nombre,
'datedebut': date } 'datedebut': date,
'chambre': chambre,
}
corps = corps.encode('utf-8') corps = corps.encode('utf-8')
mail.sendmail(upload.expediteur, upload.expediteur, corps) mail.sendmail(upload.expediteur, upload.expediteur, corps)