[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

@ -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)