拥有一个自己的 IP 归属地查询数据库

在上网和编程的时候,经常会需要查询 IP 归属地,这时候一是用网上的查询网站,或是用别人提供的 API。
其实自己也可以很容易地拥有一个IP归属地数据库。
我用 PHP 写了一个简单查询演示网页,有兴趣的朋友可以试一下,这里的数据库是经过优化的,查询时间基本上是在 1/100 秒的数量级。
https://ipcity.techio.top
教程开始
下载IP归属地数据,感谢 github
选择你自己需要的数据,我用的是 City 数据,下载的是 DB-IP Lite 的 CSV.gz 文件
https://github.com/sapics/ip-location-db
解压 gz 文件,得到 csv 文件
gunzip dbip-city-ipv4.csv.gz
进入 MySQL 数据库命令行
mysql
创建数据库 dbip
CREATE DATABASE dbip;
创建数据库 table dbipcity
CREATE TABLE dbipcity (
id INT AUTO_INCREMENT PRIMARY KEY,
ip_range_start VARCHAR(100),
ip_range_end VARCHAR(100),
country_code VARCHAR(20),
city VARCHAR(100),
state1 VARCHAR(100),
state2 VARCHAR(100),
postcode VARCHAR(50),
latitude VARCHAR(50),
longitude VARCHAR(50),
timezone VARCHAR(50)
);
导入 csv 文件数据到数据库
LOAD DATA INFILE '/your/file/path/dbip-city-ipv4.csv'
INTO TABLE dbipcity
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
(ip_range_start, ip_range_end, country_code, city, state1, state2, postcode, latitude, longitude, timezone);
测试你的数据库
如果要查 IP 8.8.8.8 的归属地,用下面这个语句
SELECT * FROM dbipcity WHERE INET_ATON('8.8.8.8') BETWEEN INET_ATON(ip_range_start) AND INET_ATON(ip_range_end);
然后就看你要怎么用了,在网页上用或是在应用里用,本人只是个编程小白,就不再多说了。