From 2ef94e1a0d921e0a9936b10d10bdf5318f289ecd Mon Sep 17 00:00:00 2001 From: pessoles Date: Tue, 18 Oct 2005 21:45:06 +0200 Subject: [PATCH] Simplification par Bilou darcs-hash:20051018194506-6d78a-8eae508674cdd8da1ef3a2bfcc180175da8bdcd1.gz --- surveillance/deconnexion.py | 159 +++++++++++++++--------------------- 1 file changed, 65 insertions(+), 94 deletions(-) diff --git a/surveillance/deconnexion.py b/surveillance/deconnexion.py index 39dc0304..63b7bfcb 100755 --- a/surveillance/deconnexion.py +++ b/surveillance/deconnexion.py @@ -157,7 +157,7 @@ curseur.execute(requete) ######## # Dans le table virus on sélectionne les ip_src qui appartiennent au reseau -requete = "SELECT ip_src FROM virus WHERE (ip_src<<=inet('138.231.136.0/21') or ip_src<<=inet('138.231.148.0/22')) and date > timestamp 'now' - interval '1 hour' order by ip_src" +requete = "SELECT ip_src,count(ip_src) FROM virus WHERE (ip_src<<=inet('138.231.136.0/21') or ip_src<<=inet('138.231.148.0/22')) and date > timestamp 'now' - interval '1 hour' group by ip_src" curseur.execute(requete) veroles = curseur.fetchall() @@ -165,110 +165,79 @@ veroles = curseur.fetchall() requete = "SELECT ip_crans FROM avertis_virus" curseur.execute(requete) infectes = curseur.fetchall() -ip1=str('0.0.0.0') -N=0 -if veroles: - ip1=veroles[0][0] - for i in range(0,len(veroles)): - ip=veroles[i][0] - if ip != ip1 : - ip1=ip - N=0 - else : - N=N+1 - if N >= virus.virus and [ip] not in infectes: - # Recuperation des infectes pour ne pas les reblacklister - machine = ldap.search('ipHostNumber=%s' % ip,'w' )['machine'][0] - hostname = machine.nom() - proprio = machine.proprietaire() - bl = proprio.blacklist() - # Inscription dans la table des infectes - requete="INSERT INTO avertis_virus (ip_crans,date) VALUES ('%s','now')" % ip1 - curseur.execute(requete) - requete = "SELECT ip_crans FROM avertis_virus" - curseur.execute(requete) - infectes = curseur.fetchall() - print "Deconnexion virus : %s" %hostname - # Blacklistage - for ligne in bl: - # On réédite si possible les lignes existantes pour ne pas charger la blackliste - if 'virus,' in ligne : - liste=ligne.split(',') - date = time() - debut = localtime(date) - argument=['now','-','virus',hostname] - index = bl.index(ligne) - proprio.blacklist((index,argument)) - proprio.save() - break - else : - date = time() - debut = localtime(date) - proprio.blacklist(["%d/%d/%d %d:%d" % (debut[2],debut[1],debut[0],debut[3],debut[4]),'-','virus',hostname]) - proprio.save() - #date = time() - #debut = localtime(date) - #proprio.blacklist(["%d/%d/%d %d:%d" % (debut[2],debut[1],debut[0],debut[3],debut[4]),'-','virus',hostname]) - #proprio.save() - + +for verole in veroles: + + ip=verole[0] + nombre=verole[1] + + # si le type dépasse le seuil, on le blacklist + if nombre < virus.virus or [ip] not in infectes : + continue + + # lecture des infos de ldap + machine = ldap.search('ipHostNumber=%s' % ip,'w' )['machine'][0] + hostname = machine.nom() + proprio = machine.proprietaire() + blacklist = proprio.blacklist() + + # Inscription dans la table des infectes + requete="INSERT INTO avertis_virus (ip_crans,date) VALUES ('%s','now')" % ip + curseur.execute(requete) + + print "Deconnexion virus : %s" % hostname + + # on récupère les index des lignes de bl ou il y a marqué virus + index = [blacklist.index(x) for x in blacklist if 'virus' in x ] + if index : + proprio.blacklist(( index[0] , ['now','-','virus',hostname] )) + proprio.save() + else : + proprio.blacklist(['now','-','virus',hostname]) + proprio.save() # Flood ######## # Dans le table virus on sélectionne les ip_src qui appartiennent au reseau -requete = "SELECT ip_src FROM flood WHERE (ip_src<<=inet('138.231.136.0/21') or ip_src<<=inet('138.231.148.0/22')) and date > timestamp 'now' - interval '1 hour' order by ip_src" +requete = "SELECT ip_src,count(ip_src) FROM flood WHERE (ip_src<<=inet('138.231.136.0/21') or ip_src<<=inet('138.231.148.0/22')) and date > timestamp 'now' - interval '1 hour' group by ip_src" curseur.execute(requete) veroles = curseur.fetchall() # Recuperation des infectes pour ne pas les reblacklister -requete = "SELECT ip_crans FROM avertis_virus " +requete = "SELECT ip_crans FROM avertis_virus" curseur.execute(requete) infectes = curseur.fetchall() -ip1=str('0.0.0.0') -N=0 -if veroles: - ip1=veroles[0][0] - for i in range(0,len(veroles)): - ip=veroles[i][0] - if ip != ip1 : - ip1=ip - N=0 - else : - N=N+1 - if N >= virus.flood and [ip] not in infectes: - machine = ldap.search('ipHostNumber=%s' % ip,'w' )['machine'][0] - hostname = machine.nom() - proprio = machine.proprietaire() - # Inscription dans la table des infectes - requete="INSERT INTO avertis_virus (ip_crans,date) VALUES ('%s','now')" % ip1 - curseur.execute(requete) - requete = "SELECT ip_crans FROM avertis_virus" - curseur.execute(requete) - infectes = curseur.fetchall() - bl = proprio.blacklist() - # Blacklistage - for ligne in bl: - # On réédite si possible les lignes existantes pour ne pas charger la blackliste - if 'virus,' in ligne : - liste=ligne.split(',') - date = time() - debut = localtime(date) - argument=['now','-','virus',hostname] - index = bl.index(ligne) - proprio.blacklist((index,argument)) - proprio.save() - break - else : - date = time() - debut = localtime(date) - proprio.blacklist(["%d/%d/%d %d:%d" % (debut[2],debut[1],debut[0],debut[3],debut[4]),'-','virus',hostname]) - proprio.save() - #date = time() - #debut = localtime(date) - #proprio.blacklist(["%d/%d/%d %d:%d" % (debut[2],debut[1],debut[0],debut[3],debut[4]),'-','virus',hostname]) - #proprio.save() - print "Deconnexion flood %s" % hostname - + +for verole in veroles: + + ip=verole[0] + nombre=verole[1] + + # si le type dépasse le seuil, on le blacklist + if nombre < virus.flood or [ip] not in infectes : + continue + + # lecture des infos de ldap + machine = ldap.search('ipHostNumber=%s' % ip,'w' )['machine'][0] + hostname = machine.nom() + proprio = machine.proprietaire() + blacklist = proprio.blacklist() + + # Inscription dans la table des infectes + requete="INSERT INTO avertis_virus (ip_crans,date) VALUES ('%s','now')" % ip + curseur.execute(requete) + + print "Deconnexion flood : %s" % hostname + + # on récupère les index des lignes de bl ou il y a marqué virus + index = [blacklist.index(x) for x in blacklist if 'virus' in x ] + if index : + proprio.blacklist(( index[0] , ['now','-','virus',hostname] )) + proprio.save() + else : + proprio.blacklist(['now','-','virus',hostname]) + proprio.save() # Reconnexion si le virus a disparu ################################### @@ -310,6 +279,7 @@ for i in range(0,len(infectes)): # Gestion du P2P : ################## + # Dans le table virus on sélectionne les ip_src qui appartiennent au reseau requete = "SELECT ip_src,id_p2p FROM p2p WHERE (ip_src<<=inet('138.231.136.0/21') or ip_src<<=inet('138.231.148.0/22')) and date > timestamp 'now' - interval '1 day' order by ip_src" curseur.execute(requete) @@ -318,6 +288,7 @@ pair = curseur.fetchall() requete = "SELECT ip_crans FROM avertis_p2p WHERE date > timestamp 'now' - interval '1 day'" curseur.execute(requete) avertisp2p = curseur.fetchall() +N=0 ip1=str('0.0.0.0') if pair :