From 996d55c8a446025c206dcce4fbe1bb5f0a02360b Mon Sep 17 00:00:00 2001 From: bernat Date: Fri, 15 Jul 2005 18:10:11 +0200 Subject: [PATCH] Optimisations... darcs-hash:20050715161011-d1718-18e5676a1d2cd44acce031f06114355539801e69.gz --- gestion/iptools.py | 36 +++++++++++++++++------------------- 1 file changed, 17 insertions(+), 19 deletions(-) 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