[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:
parent
a598e62bab
commit
bf26fc0bb8
2 changed files with 46 additions and 2 deletions
|
@ -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"""
|
||||
|
|
|
@ -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)
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue