Import initial !
darcs-hash:20040831131446-d1718-0734aa73d3b8481b3b4b861e447e85128e488e8a.gz
This commit is contained in:
parent
c9083dfd86
commit
6626a44f15
20 changed files with 6494 additions and 0 deletions
93
gestion/iptools.py
Executable file
93
gestion/iptools.py
Executable file
|
@ -0,0 +1,93 @@
|
|||
#! /usr/bin/env python
|
||||
# -*- coding: iso-8859-15 -*-
|
||||
"""
|
||||
Manipulation d'IPv4
|
||||
|
||||
Copyright (C) Frédéric Pauget
|
||||
Licence : GPLv2
|
||||
"""
|
||||
|
||||
def QuadToDec(ip) :
|
||||
"""
|
||||
Retourne la représentation décimale d'une ip
|
||||
ip est de la forme xxx.xxx.xxx.xxx
|
||||
"""
|
||||
test = ip.split('.')
|
||||
if len(test)!=4 : raise ValueError('IP Invalide')
|
||||
ip_dec = 0
|
||||
for z in range(0,4) :
|
||||
n = int(test[z])
|
||||
if n<0 or n>255 : raise ValueError('IP Invalide')
|
||||
ip_dec += n * ( 256**(3-z) )
|
||||
|
||||
return ip_dec
|
||||
|
||||
def DecToQuad(ip_dec) :
|
||||
"""
|
||||
Retourne la représentation habituelle d'une ip (xxx.xxx.xxx.xxx)
|
||||
ip_dec est l'IP en base 10
|
||||
"""
|
||||
try :
|
||||
return "%d.%d.%d.%d" % ( \
|
||||
ip_dec/(256**3) ,
|
||||
(ip_dec%(256**3)) / (256**2) ,
|
||||
( (ip_dec%(256**3)) % (256**2) ) / 256 ,
|
||||
( (ip_dec%(256**3)) % (256**2) ) % 256 )
|
||||
except :
|
||||
raise ValueError('IP Invalide')
|
||||
|
||||
def param(net) :
|
||||
"""
|
||||
net est un résau fourni sous la forme xxx.xxx.xxx.xxx/yy
|
||||
si donnée valide retourne un dictionnaire :
|
||||
{ 'network' : xxx.xxx.xxx.xxx ,
|
||||
'netmask' : yyy.yyy.yyy.yyy ,
|
||||
'broadcast' : zzz.zzz.zzz.zzz }
|
||||
sinon retourne {}
|
||||
"""
|
||||
reseau = {}
|
||||
ip, mask = net.split('/')
|
||||
|
||||
try :
|
||||
mask = int(mask)
|
||||
dec_ip = QuadToDec(ip)
|
||||
if dec_ip == -1 : raise
|
||||
except :
|
||||
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)
|
||||
|
||||
# Calcul du network
|
||||
reseau['network'] = DecToQuad( dec_ip & dec_netmask )
|
||||
|
||||
# Calcul du broadcast
|
||||
reseau['broadcast'] = DecToQuad( dec_ip | non_dec_netmask )
|
||||
return reseau
|
||||
|
||||
def AddrInNet(ip,net) :
|
||||
"""
|
||||
ip est de la forme xxx.xxx.xxx.xxx
|
||||
net est de la forme xxx.xxx.xxx.xxx/yy
|
||||
net peut être une liste de chaînes ci-dessus
|
||||
Retourne True si l'ip est dans un des réseaux.
|
||||
Note : retourne Fasle si l'IP est une adresse de réseau ou broadcast
|
||||
"""
|
||||
if type(net)==str : net = [ net ]
|
||||
|
||||
r = False
|
||||
for ne in net :
|
||||
n = param(ne)
|
||||
if ip == n['broadcast'] or ip ==n['network'] :
|
||||
return False
|
||||
r = r or QuadToDec(n['netmask']) & QuadToDec(ip) == QuadToDec(n['network'])
|
||||
|
||||
return r
|
Loading…
Add table
Add a link
Reference in a new issue