Optimisations...
darcs-hash:20050715161011-d1718-18e5676a1d2cd44acce031f06114355539801e69.gz
This commit is contained in:
parent
10eda9a824
commit
996d55c8a4
1 changed files with 17 additions and 19 deletions
|
@ -50,7 +50,7 @@ def DecToQuad(ip_dec) :
|
|||
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)
|
||||
non_dec_netmask = (1L<<(32-mask)) - 1
|
||||
dec_netmask = (1L<<32) - 1 - non_dec_netmask
|
||||
|
||||
reseau['netmask'] = DecToQuad(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
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue