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 .

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/776950.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Drools开源业务规则引擎(一)- 安装与介绍

文章目录 [toc] Drools开源业务规则引擎(一)- 安装与介绍0.何为规则引擎1.Drools介绍1.1.依赖模块1.2.规则引擎 2.Drools安装2.1.依赖导入2.2.规则的输入和输出类型输入类型输出类型 2.3.创建规则文件2.4.构建可执行规则库2.5.执行结果: 3.Dr…

Oracle Database 23ai新特性:增加聚合函数对INTERVAL数据类型支持

在Oracle早期的版本,聚合函数和分析函数MIN/MAX 就支持了INTERVAL 数据类型。但是,当我们使用SUM或AVG函数对INTERVAL 数据类型进行运算时,就会报错。 随着Oracle Database 23ai 的发布,增加了 AVG 以及 SUM 函数对INTERVAL 数据…

Keepalived+LVS实现负责均衡,高可用的集群

Keepalived的设计目标是构建高可用的LVS负载均衡群集,可以调用ipvsadm工具来创建虚拟服务器,管理服务器池,而不仅仅用作双机热备。使用Keepalived构建LVS群集更加简便易用,主要优势体现在:对LVS负责调度器实现热备切换…

七、MyBatis-Plus高级用法:最优化持久层开发-个人版

七、MyBatis-Plus高级用法:最优化持久层开发 目录 文章目录 七、MyBatis-Plus高级用法:最优化持久层开发目录 一、MyBatis-Plus快速入门1.1 简介1.2 快速入门回顾复习 二、MyBatis-Plus核心功能2.1 基于Mapper接口CRUDInsert方法Delete方法Update方法Se…

实战某大型连锁企业域渗透

点击星标,即时接收最新推文 本文选自《内网安全攻防:红队之路》 扫描二维码五折购书 实战域渗透测试流程 对黑客来说,拿下域控制器是终极目标。然而攻击者空间是如何通过采取信息收集、权限提升、横向移动等一系列手段,从而一步步…

Maven基本使用

1. Maven前瞻 Maven官网:https://maven.apache.org/ Maven镜像:https://mvnrepository.com 1.1、Maven是什么 Maven是一个功能强大的项目管理和构建工具,可以帮助开发人员简化Java项目的构建过程。 在Maven中,使用一个名为 pom.…

Nginx-http_auth_basic_module使用

文章目录 前言一、ngx_http_auth_basic_module二、指令1.auth_basic1.auth_basic_user_file 示例生成密码文件配置basic认证浏览器验证 总结 前言 nginx可以通过HTTP Basic Authutication协议进行用户名和密码的认证。 一、ngx_http_auth_basic_module 生效阶段: …

Apache DolphinScheduler 与 AWS 的 EMR/Redshift 集成实践分享

引言 这篇文章将给大家讲解关于DolphinScheduler与AWS的EMR和Redshift的集成实践,通过本文希望大家能更深入地了解AWS智能湖仓架构,以及DolphinScheduler在实际应用中的重要性。 AWS智能湖仓架构 首先,我们来看一下AWS经典的智能湖仓架构图…

软件运维服务方案(Word原件2024)

软件运维服务方案(Word原件) 1. 服务简述 我们提供全面的软件运维服务,确保软件系统的稳定运行。 1.1 服务内容 包括监控、维护、故障排查与优化。 1.2 服务方式 结合远程与现场服务,灵活响应客户需求。 1.3 服务要求 高效响应&am…

计算机应用数学--第三次作业

第三次作业计算题编程题1 基于降维的机器学习2 深度学习训练方法总结 第三次作业 计算题 (15 分)对于给定矩阵 A A A(规模为 42),求 A A A 的 SVD(奇异值分解),即求 U U U, Σ …

Spring 6.1.10版本源码编译

每篇一句 我们对时间的感知其实非常主观,我们越习惯于我们的生活方式,生活里面的新鲜感就越少,我们对时间 的感知就越快,生命就越短。 1.源码下载 进入Spring官网 https://spring.io/ 按照上图步骤进入如下Spring Framework链…

数据结构--单链表实现

欢迎光顾我的homepage 前言 链表和顺序表都是线性表的一种,但是顺序表在物理结构和逻辑结构上都是连续的,但链表在逻辑结构上是连续的,而在物理结构上不一定连续;来看以下图片来认识链表与顺序表的差别 这里以动态顺序表…

实现沉浸式体验的秘诀:深入了解折幕投影技术!

在当今多媒体技术的浪潮中,投影技术已蜕变成为超越传统内容展示范畴的非凡工具,它深度融合了互动性与沉浸感,成为连接观众与虚拟世界的桥梁。折幕投影技术,作为这一领域的璀璨明珠,更是以其独特而神奇的手法&#xff0…

小酌消烦暑|人间正清欢

小暑是二十四节气之第十一个节气。暑,是炎热的意思,小暑为小热,还不十分热。小暑虽不是一年中最炎热的时节,但紧接着就是一年中最热的节气大暑,民间有"小暑大暑,上蒸下煮"之说。中国多地自小暑起…

开发必备基础知识【字符编码合集】

开发必备基础知识【字符编码合集】 大家在日常开发交流中会发现,别人那里运行的好好的文件,在你电脑上却无法编译,甚至出现一堆莫名其妙的字符,比如:��� 程序中经常遇到一些关于乱码…

科普文:如何进行有效沟通

概叙 你会沟通吗? 你知道正确的沟通应该怎么做吗? 在日常生活和工作中,不会沟通带来的困扰是否让你感同身受? 在工作中,你是否因表达不清让观点无法被同事理解和采纳,影响职业发展? 与上级交流是…

开源全新H5充值系统源码/自定义首页+充值页面/灵活对接上游渠道接口

开源全新H5充值系统源码,系统基于thinkphp框架开发,功能已全完善,可灵活对接其他上游渠道接口,默认对接了大猿人接口,另外可无限制自定义创建充值页面,首页支持后台自定义修改,支持三级分销&…

STM32嵌入式工业机器人控制系统教程

目录 引言环境准备工业机器人控制系统基础代码实现:实现工业机器人控制系统 4.1 数据采集模块 4.2 数据处理与分析 4.3 运动控制系统实现 4.4 用户界面与数据可视化应用场景:工业自动化与优化问题解决方案与优化收尾与总结 1. 引言 工业机器人控制系统…

Java基础(六)——继承

个人简介 👀个人主页: 前端杂货铺 ⚡开源项目: rich-vue3 (基于 Vue3 TS Pinia Element Plus Spring全家桶 MySQL) 🙋‍♂️学习方向: 主攻前端方向,正逐渐往全干发展 &#x1…

计算机应用数学--第二次作业

第二次作业计算题编程题 第二次作业 计算题 给定图 G G G(如图 1,图中数值为边权值),图切割将其分割成多个互不连通的⼦图。请使⽤谱聚类算法将图 G G G 聚类成 k 2 k 2 k2 类,使得: (a) RatioCut 最…