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
This commit is contained in:
salles 2006-04-25 14:33:00 +02:00
parent 5eace4fbfe
commit cb9f32db38

View file

@ -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