
qu'une norme transaction qui bloque les insertions des autres scripts au bout d'un moment darcs-hash:20060122140750-d1718-04b800f39bb7c60b2a499e3fc9e61a0452ccb9af.gz
100 lines
3.6 KiB
Python
Executable file
100 lines
3.6 KiB
Python
Executable file
#! /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,localtime
|
|
sys.path.append('/usr/scripts/surveillance')
|
|
import strptime, config
|
|
|
|
# Définition de constantes :
|
|
############################
|
|
reseau = config.NETs['all']
|
|
|
|
# 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
|
|
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,"date":"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]
|
|
|
|
# si on change de date, on analyse le dump et on commite
|
|
if precedent["date"] != date:
|
|
print 'dump (%s=>%s)'%(precedent["date"],date)
|
|
#os.system('/usr/scripts/surveillance/filtrage_dump.py')
|
|
print 'done'
|
|
# Autocommit, on ne commite pas...
|
|
# pgsql.commit()
|
|
|
|
# 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
|
|
actuel["date"]=date
|
|
|
|
# on regarde si c'est le retour de la connection du dessus
|
|
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
|
|
date = strptime.syslog2pgsql(strftime("%b %d %H:%M:%S",localtime(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
|