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

拥有一个自己的 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);

然后就看你要怎么用了,在网页上用或是在应用里用,本人只是个编程小白,就不再多说了。