使用ip数据库纯真版查询ip-代码实现

上一篇文章ip数据库纯真版格式我讲了那个纯真版的ip数据库的格式。今天用代码来实现一下。

最近为啥研究这个呢,其实主要还是想统计一下自己博客的访问情况,虽然博客有安装Google Analytics 统计,不过对于那些外链请求图片和程序扫描可能就无能为力了,前段时间就无聊的查看了一下apache日志,结果发现大量的请求,原来是一些自动扫描程序来的,还有就是搜索引擎蜘蛛,还有就是图片盗链。这些都是通过google analytics无法统计的。所以只能自己分析日志。首先第一个想要实现的功能就是分析访问ip的地理分布,所以就用到了这个ip库。

我是一名.Net程序员,按理说得用c#来实现才对,但鉴于目前的博客系统是linux的,硬要在系统上装个mono来运行net程序也是可以的,不过既然使用了linux系统,便入乡随俗,使用python来实现这一代码,本人学python只会皮毛,还难登大雅之堂,只能写写简单的代码。

程序步骤:

1.读取数据库文件头8个字节,得到索引区的第一条记录和最后一条记录,并确定索引记录数。由于每一个索引的长度固定为7字节,所以索引记录数就是“最后记录的地址-第一个记录的地址+1”。

2.把4位的ip地址转化为整数,那么要查找某个ip就可以转化为是数字的大小对比,使用二分法来查找的速度比较理想。二分法的算法这里不叙述了,不过要提点注意的是,我一开始在查找时,一直都得不到结果,怀疑由于我技能不够,算法写得不对,最后才知道,你要找到ip还不一定就会在索引区里存在,即有可能ip不存在的情况下,只能取其近似值。

3.当在索引区里找到后,获取其在内容区的偏移地址后,跳转到内容区去读取他对应的区域信息。

代码不在文章里直接显示,这是由于python这东西讲究缩进,文章里不容易把他弄整齐,加之我一时没有代码着色工具也不美观。我的代码使用Visual Studio2010 安装了个python for visual studio tool 来编写的。感谢vs功能的强大,用起来非常方便,加之本身是net程序员的缘故,使用起来天然无障碍。如果你不是net程序员,那就没必要为了安装一个几兆的python开发插件而去安装几百M甚至上G的vs环境。我这里推荐两款我用的python工具,一款是国人开发的ulipad,免费好用,有中文界面,其次是wing ide ,这款是商业软件,功能强大,同时也提供免费版本和一个宽松的试用期,我对他的宽松试用期非常喜欢,每次有十来天的试用期,期满后他就会提示,是否购买或者再次申请一个试用期,这样就可以一直使用下去。

经过美化的代码我放在了这里http://www.oschina.net/code/snippet_5820_7838    

下载地址为:http://www.lixin.me/blog/wp-content/uploads/2011/12/QQWry.zip

posted @ 2011-12-24 22:07  看那边的人  阅读(536)  评论(0编辑  收藏  举报