首页 > 编程语言 >nodejs 安装使用ip2region - 实时精准的IP地址到区域运营商查询

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

时间:2024-07-05 18:27:24浏览次数:15  
标签:ip2region string nodejs IP db 查询 IP地址 data

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 .

标签:ip2region,string,nodejs,IP,db,查询,IP地址,data
From: https://blog.csdn.net/weixin_40986713/article/details/140204049

相关文章

  • ip地址多久刷新一次比较好
    在网络世界中,IP地址作为每台联网设备独一无二的标识符,承载着网络通信的关键职责。然而,IP地址的刷新频率一直是用户和网络管理员关心的话题。那么,IP地址多久刷新一次比较好呢?下面一起来了解一下吧。一、IP地址刷新的重要性IP地址的刷新频率对于网络性能和安全性至关重要。过......
  • ip地址多长时间自动更换一次
    IP地址自动更换的时间不是固定的,它取决于多个因素。首先,如果日常使用的WiFi或有线网络的IP地址是动态的。这意味着,例如,当路由器的默认设置是7天或14天自动重启一次时,IP地址就会改变。此外,公共场所的WiFi可能由于管理需要,IP地址更改的频率会更快。对于手机用户来说,当从一个城......
  • 服务器忘记IP后找回IP地址
    在工程现场,我们时常会遇到忘记BMCIP地址的情况,在忘记BMCIP后有两种方法可以帮助我们找回忘记的IP地址1、外接显示器(在服务器开机过程中右下角会显示出IP地址)2、通过抓包软件(Wireshark)来抓取设备发到广播报前提条件服务器先完全断电电脑网口和IPMI口直连,确保正常有速率......
  • windows安装以及切换使用nodejs多版本
    1安装nvmnvm是一个简单的bash脚本,它是用来管理系统中多个已存的Node.js版本。可以先把系统已有的node卸载掉,也可不卸载,但是以防没必要的冲突,尽量还是卸掉。1.1下载nvm下载地址:https://github.com/coreybutler/nvm-windows/releases,下载.zip后缀的这个文件,下载后解压安装即可......
  • 在SelfHost项目中获取客户端IP地址
    在SelfHost项目中,获取客户端的IP地址比OwinSelfHost项目要复杂一些,可以通过以下方法获得:base.Request.Properties["System.ServiceModel.Channels.RemoteEndpointMessageProperty"].Address创建一个SelfHost项目的大概过程:创建名称为SelfHostSample的Windows窗体应用(.NETF......
  • 在OwinSelfHost项目中获取客户端IP地址
    在OwinSelfHost项目中,获取客户端的IP地址可以通过以下方法获得:base.Request.GetOwinContext().Request.RemoteIpAddress创建一个OwinSelfHost项目的大概过程:创建名称为OwinSelfHostSample的Windows窗体应用(.NETFramework)项目;在NuGet包管理器中添加中添加Microsoft.AspNe......
  • [NodeJS] timers阶段的源码解析
    timers阶段是Nodejs事件循环中的一个阶段,这一阶段主要是检查是否有到期的定时器,如果有则执行其回调。相关源码位置:timers阶段:node/deps/uv/src/timer.catmain·nodejs/node(github.com)timers阶段的代码比较少,这里直接贴出来,你也可以点进去上面的源码看自己感兴趣的部分......
  • [NodeJS] NodeJS事件循环
    JS是单线程的,如果出现阻塞会严重影响代码执行效率。NodeJS通过事件循环,尽可能地将耗时任务委派给系统内核来实现非阻塞IO。NodeJS提供了许多和异步相关的API,除了语言标准规定的setTimeout和setInterval,还有setImmediate和process.nextTick。经常和这几个出现在面试题里的还有Pr......
  • 关于巴图自动化Profinet协议转Modbus协议网关模块怎么配置IP地址教学
    Profinet协议和Modbus协议是工业领域中常用的两种通讯协议,除此以外还有较为常见的:ModbusTCP协议,Profibus协议,ProfibusDP协议,EtherCAT协议,EtherNET协议,CAN,CANOPEN等它们在自动化控制系统中发挥着重要作用。而将Profinet协议和Modbus协议这两种协议设备进行连接的关键就是通过巴图......
  • Linux下使用arping检测IP地址是否冲突
    arping简介在Linux中,arping是一个用来发送ARP请求到一个相邻主机的工具,通常用于检测网络上的IP地址冲突。使用arping检测IP地址是否冲突的方法例1:使用如下命令检测10.206.216.95是否冲突(使用-I参数指定网络接口)#arping-Ieth010.206.216.95ARPING10.206.216.95......