利用纯真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



原文地址:https://www.cnblogs.com/maseng/p/3520931.html