collisions_ipv6: stop reporting useless stuff

Ie on filtre sur nos cidr, et éventuellement sur le lien local, mais on laisse
tomber les trucs comme ::1 que crachent parfois certains noyaux linux (sic).
This commit is contained in:
Daniel STAN 2014-02-17 17:02:48 +01:00
parent 93f369eab1
commit 8147952551

View file

@ -1,12 +1,23 @@
#!/usr/bin/env python #!/bin/bash /usr/scripts/python.sh
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
""" Pour détecter et signaler les collisions d'adresses IPv6 """ """ Pour détecter et signaler les collisions d'adresses IPv6 """
import psycopg2 import psycopg2
import sys import sys
sys.path.append('/usr/scripts') import netaddr
import itertools
import gestion.ipt as ipt import gestion.ipt as ipt
from gestion.config import prefix as crans_prefixes
## Construit un filtre sql succint des réseaux à vérifier
# (crans_prefixes est un dictionnaire de listes de networks, mais on se fout des
# clés, donc on concatène méchamment)
prefixes = itertools.chain(['fe80::/64'], *crans_prefixes.values())
# Et on ne garde que le plus utile (histoire de faire moins de tests plus tard)
prefixes = netaddr.cidr_merge(prefixes)
prefixes = " OR \n".join( "a.ip <<= inet '%s'" % str(cidr) for cidr in prefixes)
# Connection à la base sql via pgsql # Connection à la base sql via pgsql
pgsql = psycopg2.connect(database='filtrage', user='crans') pgsql = psycopg2.connect(database='filtrage', user='crans')
@ -20,10 +31,11 @@ collision_mac_ip_request = """SELECT DISTINCT
b.date as date2, b.mac as mac2, b.ip as ip2 b.date as date2, b.mac as mac2, b.ip as ip2
FROM mac_ip as a, mac_ip as b FROM mac_ip as a, mac_ip as b
WHERE a.ip = b.ip AND WHERE a.ip = b.ip AND
(%s) AND
a.mac != b.mac AND a.mac != b.mac AND
a.date >= b.date AND a.date >= b.date AND
a.date - b.date < interval '3 day' a.date - b.date < interval '3 day'
ORDER BY a.date;""" ORDER BY a.date;""" % prefixes
curseur.execute(collision_mac_ip_request) curseur.execute(collision_mac_ip_request)
collision_mac_ip = curseur.fetchall() collision_mac_ip = curseur.fetchall()