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

作者: 分类: 技术文章 时间: 2011-12-24

上一篇文章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

使用“IP数据库纯真版”解析IP归属地

作者: 分类: 技术文章 时间: 2011-12-23

在做web服务器日志分析的时候,有时候需要知道访问者的归属地,这就需要一个ip地址库来做查询,有些网站提供在线查询的,如ip138.com这类网站,既可以使用网站提供的api来查询,也可以通过对web网页的模拟post和文本分析来获取查询内容。但是,考虑到网络问题,这不是一个高效的做法。最好是使用本地ip数据库。

这里介绍“QQ IP数据库 纯真版”。据其介绍,截止2011年12月,该库共收录435840条ip记录,整库体积6M左右,库以文件类型存在,而不是某个数据库格式,这样的好处就是不需要依赖某个数据库服务器,只要按照格式读取文件便可以了,同时整个库使用了类似dns协议中的标签去重复的压缩方法,使得文件的体积得到控制。

纯真IP库的文件结构分为3个部分:1.文件头部分;2.记录区部分;3.索引区部分。

阅读全文»

第一次锡接过线

作者: 分类: 技术文章 时间: 2011-12-18

这是我第一次锡接过线,做了5条,测试的洞洞板超旧,还得用砂纸磨一下,不然都不沾锡,电烙铁也是锈迹斑斑,磨了好久。锡接过线也不是容易的事,而且感觉特别耗锡线,一扎长长的锡线一下子就没了。下面2张图,猜猜哪张是我做的

xiejieguoxian

阅读全文»

点亮LCD1602

作者: 分类: 技术文章 时间: 2011-12-08

LCD1602中的16表示16个字符,02表示有2行。是一个价格不贵比较常用到字符显示器,我在淘宝上买了一个10元。默认情况下能显示192个已经定义好的字符,当然不包括中文。不过他也提供了64字节的空间给您自己造字型。

这东西使用起来还是比较容易的,只不过他的引脚有点多,有16个,挺占IO端口的。点亮LCD1602算是我学单片机以来除了led灯外,会弄的第一个外设了。赶紧拿出来晒一晒。

LCD1602

使用Amazon EC2 一个星期记事

作者: 分类: 技术文章 时间: 2011-12-04

近来在新闻看到盛大云公测,也就去了解了一下,第一件要了解的事情自然是价格问题,了解自然少不了货比三家,也顺便查询了一下其他云服务的价格。总体来说,盛大云的价格还是比较便宜的,例如他的超微型实例一年也大概400来元而已,微型也能控制在一千内。比起阿里云的强悍ABCD套餐算便宜了不少,当然阿里云的配置都很高,没有所谓的超微概念。不过感觉比较坑人的是他的公网ip地址,这个一天一块钱,一年下来无论你购买其他什么服务这个365元都少不了,不买又无法做对外服务,例如web服务。

阅读全文»