注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

zjcjack的博客

 
 
 

日志

 
 

使用python来解析ip数据库纯真版来读取ip区域信息。  

2012-06-29 15:49:08|  分类: python |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
http://www.oschina.net/code/snippet_5820_7838

最近为啥研究这个呢,其实主要还是想统计一下自己博客的访问情况,虽然博客有安装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

  评论这张
 
阅读(292)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017