From cb9f32db38268222ada89aab4503d2ad966aada1 Mon Sep 17 00:00:00 2001 From: salles Date: Tue, 25 Apr 2006 14:33:00 +0200 Subject: [PATCH] On rajoute des fonctions pour calculer des sous-rseaux l'aide d'ip ou de rseau et de valeur de masques. darcs-hash:20060425123300-72cb0-f5eb5cbcc7cd1b08985de7819f4114a6c0446169.gz --- gestion/iptools.py | 45 +++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 43 insertions(+), 2 deletions(-) diff --git a/gestion/iptools.py b/gestion/iptools.py index c8f1581c..75ecfc0c 100755 --- a/gestion/iptools.py +++ b/gestion/iptools.py @@ -79,8 +79,8 @@ def param(net, raw=False) : return {} # Calcul du netmask - non_dec_netmask = (1L<<(32-mask)) - 1 - dec_netmask = (1L<<32) - 1 - non_dec_netmask + non_dec_netmask = netmask(mask, dec=False) + dec_netmask = netmask(mask) reseau = { 'netmask' : dec_netmask, 'network' : dec_ip & dec_netmask, @@ -131,4 +131,45 @@ if __name__ == '__main__' : import sys print param(sys.argv[1]) +def netmask(mask, dec=True) : + """ On génère le sous réseau /bits + """ + non_dec_netmask = (1L<<(32-mask)) - 1 + dec_netmask = (1L<<32) - 1 - non_dec_netmask + if dec : + return dec_netmask + else : + return non_dec_netmask +def IpSubnet(ip, mask) : + dec_mask = netmask(mask) + dec_ip = QuadToDec(ip) + start_ip = DecToQuad(dec_ip & dec_mask) + subnet = start_ip + "/%s" % mask + return subnet + +def subnets(net, subnet_mask) : + """ On construit une liste des sous réseaux /subnet_mask + compris dans le sous réseau /mask comprenant l'ip ip + """ + subnets = [] + # On récupère une ip du réseau indiqué + ip = net.split('/')[0] + # On récupère la valeur du masque + mask = int(net.split('/')[1]) + # On transforme les valeurs d'entrées en valeurs décimales + # On définit la valeur du sous réseau initial + dec_netmask = netmask(mask) + dec_ip = QuadToDec(ip) + dec_subnet_netmask = netmask(subnet_mask) + # On calcule la première ip du sous réseau indiqué + start_ip = dec_ip & dec_netmask + seq_ip = start_ip + # On fait une itération sur toutes les ip du sous réseau + while (seq_ip & dec_netmask) == start_ip: + # On récupère le sous réseau de la taille demandée + subnet = DecToQuad(seq_ip & dec_subnet_netmask) + "/%s" % subnet_mask + if not subnets.count(subnet) : + subnets.append(subnet) + seq_ip += 1 + return subnets