nodejs 安装使用ip2region - 实时精准的IP地址到区域运营商查询

ip2region 简介

ip2region 是一个高性能且高准确度的离线 IP 地址定位库和 IP 定位数据管理框架。它能够根据 IP 地址解析出对应的位置信息,包括国家、地区、省份、城市以及互联网服务提供商(ISP)。以下是 ip2region 的一些关键特性:

  1. 高准确率:它声称有 99.9% 的准确率,这使得它在 IP 地址定位方面非常可靠。

  2. 快速查询:查询速度达到 0.0x 毫秒级别,即大约 10 微秒级别,这意味着查询响应非常迅速。

  3. 小体积数据库:尽管包含大量数据,但 ip2region.db 数据库文件通常只有几 MB 的大小,这使得它易于部署和使用。

  4. 多语言支持:提供了多种编程语言的查询绑定,包括 Java、PHP、C、Python、Node.js、Go、C#、Rust 和 Lua 等。

  5. 查询算法:支持 Binary(二进制)、B树和纯内存三种查询算法,以适应不同的性能和资源需求。

  6. 标准化数据格式:每个 IP 数据段的区域信息都有固定的格式,例如“国家|区域|省份|城市|ISP”。对于中国数据,大部分可以精确到城市级别,而其他国则可能只定位到国家级别。

  7. 数据管理与定制ip2region 不仅是一个定位库,还是一个数据管理框架,允许用户自定义数据格式,比如添加 GPS 信息、国际统一地域信息编码或邮政编码等。

  8. 数据去重与压缩:其数据库生成工具会自动去除重复数据并进行压缩,保持数据库的精简高效。

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 .
  • 24
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

泰山AI

原创不易,感谢支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值