β

使用ruby解析纯真IP库-qqwry.dat

Francis Jiang 290 阅读
在写一个地区相关的节能时,需要用到根据IP判断地区的功能,就想着找一个能够解析IP到地址的库。找了一下资料,国内用的比较多的IP库是早年就开始流行到现在的纯真IP库(QQrwy.dat),至于用ruby来解析纯真IP库的,则没找到几个,文章是不少,不过引用的几乎都是同样的代码,那个是比较早的ruby版本了,在1.9.2下跑的话,会有问题,我小改了一下,发现还是会有些问题,于是索性自己写一个吧。 要解析纯真IP库,对于该库的数据结构是必须要了解的,不多说,网上几乎唯一的纯真数据格式的说明就是这篇了  纯真IP数据库格式解析 格式并不算太复杂,主要是要注意偏移。纯真IP库的字符编码是GB2312的,而Windows下的命令行窗口也是GB2312编码,所以就不用转编码了。不过我是在linux下写的,所以默认编码用的是utf8,这也算是大势所趋么(也提供了GB编码的取得方式)。 代码如下,如果看过IP库格式的话,配上代码注释,应该是比较容易就懂的。 试了一下,查询1000次用时大概200毫秒左右 require 'iconv' class IpSearch def initialize(file='qqwry.dat') filename = file @file = File.open(filename,"r") @index_first,@index_last = @file.read(8).unpack('L2') @index_total = (@index_last - @index_first)/7 + 1 @location = {} end #把IP转换为长整形 def ip2long(ip) long = 0 ip.split(/./).each_with_index do |b, … Continue reading →
作者:Francis Jiang
Bloging from Francis.J
原文地址:使用ruby解析纯真IP库-qqwry.dat, 感谢原作者分享。