ip2region 简介
ip2region
是一个高性能且高准确度的离线 IP 地址定位库和 IP 定位数据管理框架。它能够根据 IP 地址解析出对应的位置信息,包括国家、地区、省份、城市以及互联网服务提供商(ISP)。以下是 ip2region
的一些关键特性:
-
高准确率:它声称有 99.9% 的准确率,这使得它在 IP 地址定位方面非常可靠。
-
快速查询:查询速度达到 0.0x 毫秒级别,即大约 10 微秒级别,这意味着查询响应非常迅速。
-
小体积数据库:尽管包含大量数据,但
ip2region.db
数据库文件通常只有几 MB 的大小,这使得它易于部署和使用。 -
多语言支持:提供了多种编程语言的查询绑定,包括 Java、PHP、C、Python、Node.js、Go、C#、Rust 和 Lua 等。
-
查询算法:支持 Binary(二进制)、B树和纯内存三种查询算法,以适应不同的性能和资源需求。
-
标准化数据格式:每个 IP 数据段的区域信息都有固定的格式,例如“国家|区域|省份|城市|ISP”。对于中国数据,大部分可以精确到城市级别,而其他国则可能只定位到国家级别。
-
数据管理与定制:
ip2region
不仅是一个定位库,还是一个数据管理框架,允许用户自定义数据格式,比如添加 GPS 信息、国际统一地域信息编码或邮政编码等。 -
数据去重与压缩:其数据库生成工具会自动去除重复数据并进行压缩,保持数据库的精简高效。
ip2region
被广泛应用于需要 IP 地址定位功能的场景中,如网站访问统计、网络安全监控、内容分发网络(CDN)优化、广告定位等领域。由于它是离线数据库,不需要实时连接外部服务进行查询,因此在稳定性上也有保障。
教程
ip2region 开源项目地址 https://github.com/lionsoul2014/ip2region
本文教在nodejs项目中使用ip2region 库根据ip获取地区位置信息
package.json 中引入依赖
"dependencies": {
"ip2region": "^2.3.0"
},
代码实现
import IP2Region from 'ip2region';
let originIp = requestIp.getClientIp(req);
let province = null;
let city = null;
console.log('当前工作目录:', process.cwd());
if (originIp != null) {
//默认会从IP2Region库中data文件夹下找db文件
const data = new IP2Region().searchRaw(originIp);
//自定义db文件路径,docker打包时候,IP2Region库里没有下载db文件,所以才自定义路径
const data = new IP2Region({
ipv4db: process.cwd() + '/db/ip2region.db',
ipv6db: process.cwd() + '/db/ipv6wry.db'
}).searchRaw(originIp);
if (data !== null) {
province = data.province;
city = data.city;
}
}
- process.cwd()为当前工作目录
- data 对象里包含国家、省份、城市、运营商等信息,data的类型为Ipv4ToRegionResult或者Ipv6ToRegionResult
/**
* IP 解析结果
*/
export interface Ipv4ToRegionResult {
/** 城市 id */
id: number;
/** 国家 */
country: string;
/** 区域 */
region: string;
/** 省份 */
province: string;
/** 城市 */
city: string;
/** ISP 供应商 */
isp: string;
}
export interface Ipv6ToRegionResult {
/** 国家 */
country: string;
/** 省份 */
province: string;
/** 城市 */
city: string;
/** ISP 供应商 */
isp: string;
/** 原始数据 */
data: string;
}
-
db文件,在本地使用 pnpm i下载依赖时,ip2region库里是包含db文件的,但是使用docker打包时,下载的ip2region库里只有js和json文件了,于是,从本地的ip2region库拷贝出了db文件,放到了项目根目录下的db文件夹里了。
-
记得在dockerfile打包文件配置添加复制命令
COPY --from=builder /app/projects/$name/db /app/projects/$name/db
执行docker打包镜像命令
docker build -t registry.cn-hangzhou.aliyuncs.com/tarzanx/wikigpt:v0.1.9 --no-cache --build-arg name=app .
标签:ip2region,string,nodejs,IP,db,查询,IP地址,data
From: https://blog.csdn.net/weixin_40986713/article/details/140204049