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)