From 1348314ea397f60b4570bd41490ce6a60e04dbbd Mon Sep 17 00:00:00 2001 From: Nicolas Dandrimont Date: Wed, 8 Dec 2010 00:38:28 +0100 Subject: [PATCH] [statistiques.py] On fait un reverse DNS IPv6 "du pauvre" pour que les mails soient lisibles... darcs-hash:20101207233828-ffbb2-a156f218c1feff1fdd8928483e6e76e8d13c95a9.gz --- surveillance/statistiques.py | 45 +++++++++++++++++++++++++----------- 1 file changed, 31 insertions(+), 14 deletions(-) diff --git a/surveillance/statistiques.py b/surveillance/statistiques.py index 6fea3feb..8efcd7a9 100644 --- a/surveillance/statistiques.py +++ b/surveillance/statistiques.py @@ -22,17 +22,42 @@ import config import smtplib import socket import time, random, md5 +import netaddr from analyse import stats from affich_tools import tableau from iptools import AddrInNet -from ldap_crans import AssociationCrans +from ldap_crans import AssociationCrans, crans_ldap + +CL = crans_ldap() # Fonction retournant l'hote quand c'est possible -def gethostname(s): - try: - return socket.gethostbyaddr(s)[0] - except: - return s +def gethostname(ip): + # Poor man's IPv6 reverse DNS... + if ":" in ip: + # reconstruction de l'EUI48 ŕ partir de l'EUI64... + addr_bits = list(netaddr.IPAddress(ip).bits('')) + addr_bits[0:64] = [] + addr_bits[24:40] = [] + addr_bits[6] = '0' + addr_bits = ''.join(addr_bits) + mac = ':'.join("%02x" % int(addr_bits[8*i:8*i+8], 2) for i in range(6)) + res = CL.search("mac=%s" % mac) + noms = sorted(r.nom() for r in res["machineFixe"] + res["machineWifi"] + res["machineCrans"] if r.nom().endswith('crans.org')) + if noms: + return str(noms[0]) + else: + return ip + else: + try: + return socket.gethostbyaddr(ip)[0] + except: + return ip + +def ipv4or6(addr): + if ':' in addr: + return "IPv6" + else: + return "IPv4" # Liste des IP des serveurs serveurs_ips = [x.ip() for x in AssociationCrans().machines() @@ -49,14 +74,6 @@ curseur = pgsql.cursor() ########################### # Statistiques d'upload : # ########################### -# Y a-t-il eu des récidivistes - -def ipv4or6(addr): - if ':' in addr: - return "IPv6" - else: - return "IPv4" - # Liste des uploads : ##################### requete = """SELECT ip_crans, sum(upload) AS somme, sum(download)