利用纯真ip地址库 查询 ip所属地
1. 首先下周数据源,选择是纯真数据库:http://www.cz88.net/
2. 安装后,打开软件,将数据导出为txt格式。
3. 处理数据,参照网上的文章(http://www.jb51.net/article/20511.htm),用vi打开,执行如下命令::%s/\s\+/;/
执行3次。
%s代表全局搜索替换,\s 代表空格 , \+ 代表尽可能多的匹配前面的字符,;代表替换成';'(我再实际操作的时候将;替换为tab了)
4. 创建表ip2
startip varchar 255 0 -1 0 0 0 0 0 gbk gbk_chinese_ci 0 0 endip varchar 255 0 -1 0 0 0 0 0 gbk gbk_chinese_ci 0 0 location varchar 255 0 -1 0 0 0 0 0 gbk gbk_chinese_ci 0 0 detail varchar 255 0 -1 0 0 0 0 0 gbk gbk_chinese_ci 0 0
最后是数据库的编码格式就选择为 gbk_chinese_ci
创建表ip
id int 10 0 0 -1 -1 0 0 0 -1 0 startip int 10 0 -1 0 0 0 0 0 0 0 endip int 10 0 -1 0 0 0 0 0 0 0 location varchar 255 0 -1 0 0 0 0 0 gbk gbk_chinese_ci 0 0 detail varchar 255 0 -1 0 0 0 0 0 gbk gbk_chinese_ci 0 0
5. 将文本中的数据导入到数据库中来。
d:\mysql>mysqlimport -h127.0.0.1 -uroot -p --local --delete ips ip2.txt (因为我的文本中的分隔符是tab,所以这里不用指定分隔符)
注意文本的文件名必须和表的名字相同
6. 为了以后查询方便,将ip用int存储,将ip2的数据的ip转换为数字后插入ip表中
INSERT into ips.ip(startip,endip,location,detail) (select Inet_ATON(startip),inet_ATON(endip),location,detail FROM ips.ip2)
7. 这样当你需要查询某个ip的地址时,可以如下这样:
SELECT * from ips.ip where startip < INET_ATON('1.2.5.333') and INET_ATON('1.2.5.33')< endip