diff --git a/gestion/iptools.py b/gestion/iptools.py index a4f500e4..b6698e34 100755 --- a/gestion/iptools.py +++ b/gestion/iptools.py @@ -49,8 +49,8 @@ def DecToQuad(ip_dec) : return result except : raise ValueError('IP Invalide') - -def param(net) : + +def param(net, raw=False) : """ net est un résau fourni sous la forme xxx.xxx.xxx.xxx/yy si donnée valide retourne un dictionnaire : @@ -58,6 +58,9 @@ def param(net) : 'netmask' : yyy.yyy.yyy.yyy , 'broadcast' : zzz.zzz.zzz.zzz } sinon retourne {} + + Si raw = False, alors, on ne convertit pas les résultats sous forme pointée. + Ils restent sous forme d'un entier. """ reseau = {} ip, mask = net.split('/') @@ -70,21 +73,15 @@ def param(net) : return {} # Calcul du netmask - dec_netmask=0 - non_dec_netmask=0 # On calcule aussi le complémentaire - for i in range(0,32) : - if i < mask : - dec_netmask += 2**(31-i) - else : - non_dec_netmask += 2**(31-i) - - reseau['netmask'] = DecToQuad(dec_netmask) + non_dec_netmask = (1L<<(32-mask)) - 1 + dec_netmask = (1L<<32) - 1 - non_dec_netmask - # Calcul du network - reseau['network'] = DecToQuad( dec_ip & dec_netmask ) - - # Calcul du broadcast - reseau['broadcast'] = DecToQuad( dec_ip | non_dec_netmask ) + reseau = { 'netmask' : dec_netmask, + 'network' : dec_ip & dec_netmask, + 'broadcast' : dec_ip | non_dec_netmask } + if not raw: + for i in reseau.keys(): + reseau[i] = DecToQuad(reseau[i]) return reseau def AddrInNet(ip,net) : @@ -98,11 +95,12 @@ def AddrInNet(ip,net) : if type(net)==str : net = [ net ] r = False + ip = QuadToDec(ip) for ne in net : - n = param(ne) - if ip == n['broadcast'] or ip ==n['network'] : + n = param(ne, raw=True) + if ip == n['broadcast'] or ip == n['network'] : return False - r = r or QuadToDec(n['netmask']) & QuadToDec(ip) == QuadToDec(n['network']) + r = r or n['netmask'] & ip == n['network'] return r