因最近需要对大量的accesslog进行IP归属地分析,一些网页上的分析效率太低,而且每次只能分析500个IP,根本满足不了我的需求,所以自己写了一个IP归属地分析脚本。
一、去下载纯真IP地址数据库
1)www.cz88.net --> 下载 --> 纯真IP地址数据库
2) 解压,打开IP.exe
点解压就可以获取到IP及归属地址的txt文本,保存为ip_zone.txt
二、 对ip_zone.txt进行改造并导入到数据库
1)先对ip_zone.txt进行编码转换
用记事本打开,然后选另存为,改成UTF-8
2) 因ip_zone.txt要导入数据库并且能准确的定位,改照是必不可少的
a) 将ip_zone.txt上传到linux服务器上
b) 将ip_zone.txt改照成我们需要 导入数据库的格式
点击(此处)折叠或打开
1.cat ip_zone.txt |sed 's/\./ /g'|awk '{printf "%03d%03d%03d%03d,%03d%03d%03d%03d,%s%s\n",$1,$2,$3,$4,$5,$6,$7,$8,$9,$10}' > a.txt
2.在linux下把a.txt转换成unix格式的,以防止出现^M符号。
linux# dos2unix a.txt
3) 修改my.cnf
安装数据库就不说了,修改my.cnf
将max_connections修改为2000
4)创建数据库及表
点击(此处)折叠或打开
1.create database ip_zone;
2. use ip_zone;
3. CREATE TABLE `ip_zone` (
4. `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
5. `begin` varchar(255) NOT NULL,
6. `end` varchar(255) NOT NULL,
7. `zone` varchar(255) NOT NULL,
8. UNIQUE KEY `id` (`id`),
9. KEY `begin` (`begin`),
10. KEY `end` (`end`)
11.) ENGINE=MyISAM AUTO_INCREMENT=381085 DEFAULT CHARSET=utf8;
5) 将txt文本load入数据库
点击(此处)折叠或打开
1.load data LOCAL infile '/root/a.txt' into table ip_zone fields terminated by ',' (begin,end,zone);
6) 测试一下IP归属是否成功8.8.8.8
点击(此处)折叠或打开
1.select zone from ip_zone where begin <= '008008008008' and end >= '008008008008';
2.+------------------------------------------------------------+
3.| zone |
4.+------------------------------------------------------------+
5. |美国加利福尼亚州山景市谷歌公司DNS服务器
6.+------------------------------------------------------------+
7.1 row in set (0.00 sec)
基本没有问题了
三、写个脚本调用数据库
点击(此处)折叠或打开
1.vim check_ip.sh
2.#!/bin/bash
3.#create by wenlin.kuang 2012-04-26
4.cat $1|sort|while read line
5.do
6.(b=`echo "$line"|sed 's/\./ /g'|awk '{printf("%03d%03d%03d%03d\n", $1,$2,$3,$4)}'`
7.echo "$line#`mysql -u用户名 -p密码 ip_zone -N -e "select zone from ip_zone where begin<='"$b"' and end>='"$b"'" `" >> $1_zone.txt )&
8.c=$(expr $c + 1)
9. if [ "$c" -eq "500" ];then
10. sleep 1
11. c=0
12. fi
13.done
四、测试脚本是否运行OK
随便输入些IP到一个test.txt文本里面,一行一个IP
vim test.txt
8.8.8.8
202.96.128.86
61.144.56.100
202.96.134.133
sh check_ip.sh test.txt
会生成一个test.txt_zone.txt 内容如下
8.8.8.8#美国加利福尼亚州山景市谷歌公司DNS服务器
61.144.56.100#广东省广州市电信ADSL
202.96.134.133#广东省深圳市福田区电信
202.96.128.86#广东省广州市电信IDC机房