匹配指定的ip属于哪个地址段
作者:梅劲松
程序提供:hoxide
因为写DNS服务器,来根据客户端的访问,返回指定ip地址.所以需要用到匹配ip属于哪个地址段的功能.hoxide帮忙用python实现了出来,在这里表示感谢.代码如下 :
注意:hoxide注明本程序为MIT 授权.
class NetPool:
def __init__(self):
self.Pool = dict()
self.Pool['net'] = '0.0.0.0'
def add(self, ip):
a = map(int, ip.split('.'))
p = self.Pool
for i in range(len(a)-1, -1, -1):
if a[i] != 0 :
k = i+1
break
for i in range(k):
ia = a[i]
try:
p = p[ia]
except:
p[ia] = dict()
p = p[ia]
p['net'] = ip
def get(self, ip):
a = map(int, ip.split('.'))
p = self.Pool
st = list()
for ia in a:
try:
if ia == 0:
st.append(p)
p = p[ia]
except:
break
st.append(p)
while st:
p = st.pop()
try:
return p['net']
except:
pass
return 'no such net'
def test():
import pprint
pp = pprint.PrettyPrinter()
P = NetPool()
Net = [
'11.1.1.0',
'12.3.2.0',
'11.1.2.0',
'12.0.0.0',
'11.0.1.0',
'11.0.0.0'
]
IP = [
'11.1.1.2',
'12.3.2.5',
'11.1.2.2',
'12.5.7.8',
'11.0.1.9',
'11.253.9.1',
'254.254.255.255'
]
#print 'NET'
for ip in Net:
print 'NET: ', ip
P.add(ip)
for ip in Net:
print 'NET: ', ip
P.add(ip)
pp.pprint(P.Pool)
for ip in IP:
print ip, ' in ', P.get(ip)
if __name__ == '__main__':
test()