免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4235 | 回复: 4
打印 上一主题 下一主题

hoxide提供的匹配指定的ip属于哪个地址段的程序 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-06-08 09:08 |只看该作者 |倒序浏览
作者:梅劲松
程序提供:hoxide

因为写DNS服务器,来根据客户端的访问,返回指定ip地址.所以需要用到匹配ip属于哪个地址段的功能.hoxide帮忙用python实现了出来,在这里表示感谢.代码如下 :
注意:hoxide注明本程序为MIT 授权.

  1. class NetPool:
  2.     def __init__(self):
  3.         self.Pool = dict()
  4.         self.Pool['net'] = '0.0.0.0'
  5.         
  6.     def add(self, ip):
  7.         a = map(int, ip.split('.'))
  8.         p = self.Pool
  9.         for i in range(len(a)-1, -1, -1):
  10.             if a[i] != 0 :
  11.                 k = i+1
  12.                 break
  13.         for i in range(k):
  14.             ia = a[i]
  15.             try:
  16.                 p = p[ia]
  17.             except:
  18.                 p[ia] = dict()
  19.                 p = p[ia]
  20.         p['net'] = ip
  21.     def get(self, ip):
  22.         a = map(int, ip.split('.'))
  23.         p = self.Pool
  24.         st = list()
  25.         for ia in a:
  26.             try:
  27.                 if ia == 0:
  28.                     st.append(p)
  29.                 p = p[ia]
  30.             except:
  31.                 break
  32.         st.append(p)
  33.         while st:
  34.             p = st.pop()
  35.             try:
  36.                 return p['net']
  37.             except:
  38.                 pass
  39.         return 'no such net'

  40. def test():
  41.     import pprint
  42.     pp = pprint.PrettyPrinter()
  43.     P = NetPool()
  44.     Net = [
  45.         '11.1.1.0',
  46.         '12.3.2.0',
  47.         '11.1.2.0',
  48.         '12.0.0.0',
  49.         '11.0.1.0',
  50.         '11.0.0.0'
  51.         ]
  52.     IP = [
  53.         '11.1.1.2',
  54.         '12.3.2.5',
  55.         '11.1.2.2',
  56.         '12.5.7.8',
  57.         '11.0.1.9',
  58.         '11.253.9.1',
  59.         '254.254.255.255'
  60.         ]
  61.     #print 'NET'
  62.     for ip in Net:
  63.         print 'NET: ', ip
  64.         P.add(ip)
  65.     for ip in Net:
  66.         print 'NET: ', ip
  67.         P.add(ip)
  68.     pp.pprint(P.Pool)
  69.     for ip in IP:
  70.         print ip, ' in ', P.get(ip)
  71.         
  72. if __name__ == '__main__':
  73.     test()
复制代码

论坛徽章:
0
2 [报告]
发表于 2005-06-08 13:11 |只看该作者

hoxide提供的匹配指定的ip属于哪个地址段的程序

???
帮我贴程序出来了啊~~,  小玩意, 也没注释,用了点函数式编成, 随手写的,  风格不好, 大家表学我啊.

论坛徽章:
4
CU大牛徽章
日期:2013-03-13 15:29:07CU大牛徽章
日期:2013-03-13 15:29:49CU大牛徽章
日期:2013-03-13 15:30:192015亚冠之广州恒大
日期:2015-07-22 17:20:15
3 [报告]
发表于 2005-06-09 23:14 |只看该作者

hoxide提供的匹配指定的ip属于哪个地址段的程序

看了程序 这个社区里面的人都差不多对上号了

论坛徽章:
0
4 [报告]
发表于 2005-07-03 13:11 |只看该作者

hoxide提供的匹配指定的ip属于哪个地址段的程序

[quote]原帖由 "xichen"][/quote 发表:


能不能有给一个具体配合bind的使用方法?

论坛徽章:
0
5 [报告]
发表于 2005-07-06 09:56 |只看该作者

hoxide提供的匹配指定的ip属于哪个地址段的程序

目前还没有相关的代码可以释放出来,如果你有兴趣,我们可以一起参与开发。你可以加入qq 群:9139304
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP