匹配指定的ip属于哪个地址段

王朝other·作者佚名  2006-01-09
宽屏版  字体: |||超大  

匹配指定的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()

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
© 2005- 王朝网络 版权所有