#! /usr/bin/env python # -*- encoding: iso-8859-15 -*- ########################### # Import des commmandes : # ########################### import commands import os #import pg # Import des commandes de postgres import sys sys.path.append('/usr/scripts/gestion') import iptools from pyPgSQL import PgSQL from time import gmtime,strftime sys.path.append('/usr/scripts/surveillance') import strptime # Définition de constantes : ############################ reseau = ["138.231.136.0/21", "138.231.148.0/22"] # Ouverture de la base de données : ################################### pgsql = PgSQL.connect(host='rouge.adm.crans.org', database='filtrage', user='crans') pgsql.autocommit = True ################################################################# # Parser ler log de net-acct : /var/log/net-acct/net-acct.log : # ################################################################# #On récupère en continu les log de net-account # Les logs sont sous la forme : date | id(protocole) | ip_src | port_src | ip_dest | port_dest | octet transf #netacct = os.popen("sh -c 'tail -F /var/log/ulog-acctd/account.log 2> /dev/null'") netacct = os.popen("sh -c 'tail -F /var/log/net-acct/net-acct.log 2> /dev/null'") # Sélectionner le couple de ligne qui va bien (port_src_i=port_dest_i+1 et ip_src_i=ip_dest_i+1 # Création d'un dictionnaire pour matcher les conversations precedent = {"ip_src":"0","ip_dest":"0","port_src":"0","port_dest":"0","donnees":0} for log in netacct : # Découpage du log date,proto,ip_src,port_src,ip_dest,port_dest,donnees = log.split("\t")[0:-2] # ip_src,ip_dest,port_src,port_dest proto = int(proto) # Création d'un dictionnaire pour matcher les conversations actuel = {} actuel["ip_src"]=ip_src actuel["port_src"]=port_src actuel["ip_dest"]=ip_dest actuel["port_dest"]=port_dest actuel["donnees"]=donnees # Test if actuel["ip_src"]==precedent["ip_dest"] \ and actuel["ip_dest"]==precedent["ip_src"] \ and actuel["port_src"]==precedent["port_dest"] \ and actuel["port_dest"]==precedent["port_src"] : # Remplissage de la base de données : #################################### # Vérification de l'IP: verif = iptools.AddrInNets (actuel["ip_src"],reseau) if verif: crans = "src" ext = "dest" upload = int(actuel["donnees"]) download = int(precedent["donnees"]) port_src=int(actuel['port_src']) port_dest=int(actuel['port_dest']) else : crans = "dest" ext = "src" upload = int(precedent["donnees"]) download = int(actuel["donnees"]) port_src=int(actuel['port_dest']) port_dest=int(actuel['port_src']) ip_crans = actuel["ip_%s" % crans] ip_ext = actuel["ip_%s" % ext] port_crans = int(actuel["port_%s" % crans]) port_ext = int(actuel["port_%s" % ext]) #print actuel["ip_%s" % crans] #print ip_crans, ip_ext,port_crans, port_ext # Traitement dans la base SQL ### Modifier le traitement de l'heure ! date = strptime.syslog2pgsql(strftime("%b %d %H:%M:%S",gmtime(int(date)))) curseur = pgsql.cursor() requete = "INSERT INTO upload (ip_crans,ip_ext,port_crans,port_ext,download,upload,date,id) VALUES ('%s','%s',%d,%d,%d,%d,'%s',%d)" % (ip_crans, ip_ext, port_crans, port_ext, download, upload, date, proto) curseur.execute(requete) precedent=actuel