作者:梅劲松
程序提供: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 != 0 :
k = i+1
break
for i in range(k):
ia = a
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()
hoxide 回复于:2005-06-08 13:11:15
???
帮我贴程序出来了啊~~, 小玩意, 也没注释,用了点函数式编成, 随手写的, 风格不好, 大家表学我啊.
ghostwwl 回复于:2005-06-09 23:14:12
看了程序 这个社区里面的人都差不多对上号了
hangtiany 回复于:2005-07-03 13:11:40
引用:原帖由 "xichen"] 发表:
能不能有给一个具体配合bind的使用方法?
xichen 回复于:2005-07-06 09:56:21
目前还没有相关的代码可以释放出来,如果你有兴趣,我们可以一起参与开发。你可以加入qq 群:9139304
|