灵感的来临,没有任何预兆;灵感的消失,也不会有告别仪式;用文字记下她们吧,让灵感永存……

查询纯真IP数据库(Python)

davies 发表于 2005 年 05 月 18 日

下午花了四个小时用Python写这个程序,效果不理想,运行速度慢。用Python来处理二进制文件不是一个好的选择,它总是把文件当作字符串读进来,还要用Struct模块进行转化。

纯真IP数据库的格式是已知的,Luma写了一份很详尽文档,在这里 ,还提供了Java版本的代码。

该数据库格式总体来说还可以,但有一个地方非常不爽,记录的偏移量用三个字节表示,操作起来很不方便。估计作者也就是为了节省空间,但是用四个字节的话,顶多也就增加百分之十几的空间,已经是四五兆的文件了,再大一点也无所谓。

源代码贴在这里 ,供以后参考。准备晚上再写一个C版本的,学习做Python模块。

网友留言:

Re: 查询纯真IP数据库(Python)1. 发表于 2006 年 02 月 28 日 11:18 p.m.

ip2string这个,可以用socket中的inet_ntoa来代替

socket.inet_ntoa('\x20\x22\x23\x24')
'32.34.35.36'

Re: 查询纯真IP数据库(Python)2. 发表于 2006 年 02 月 28 日 11:31 p.m.

多谢,那自然string2ip也可以用inet_aton代替了,以更新

Re: 查询纯真IP数据库(Python)3. 发表于 2006 年 03 月 1 日 12:56 a.m.

呵呵,刚才没有仔细看程序,我觉得这个程序效率地下的主要问题,还是因为文件操作太细碎了,如果一次就全部装载到一个字符串里面,然后进行操作,速度会快很多(第一次除外). 太晚了,希望明天有空能写一个出来.

Re: 查询纯真IP数据库(Python)4. 发表于 2006 年 03 月 1 日 11:50 a.m.

http://scaner.googlepages.com/iplocat...

Re: 查询纯真IP数据库(Python)5. 发表于 2006 年 03 月 1 日 9:16 p.m.

在程序每次执行查询次数少的情况下,两个程序的效率差不多,甚至不预读还要快一点点。单次运行查询次数越多,你的程序优势越明显。此时索引区的数据利用频繁,只预读索引区的数据并处理成list,则效率会更高。

Re: 查询纯真IP数据库(Python)6. 发表于 2006 年 11 月 9 日 4:12 p.m.

去年夏天用c写了一个,使用mmap把数据放到内存中,查询非常快!

我来留言