因最近需要对大量的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机房

 

源文地址:http://blog.chinaunix.net/uid-25656702-id-3190296.html