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.mzph.cn/bicheng/41187.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

部署LVS+keepalived做网站的高可用,高负载。

LVSkeepalived keepalived背景 针对LVS的辅助工具,主要提供故障切换与健康检查。 工作场景:作为调度器的双机热备,以及节点服务器的健康检查以及故障切换(删除条目)。 借鉴了VRRP协议来实现高可用。 keepalived部署…

后端学习(一)

添加数据库包: 数据库连接时 发生错误: 解决方式: SqlConnection conn new SqlConnection("serverlocalhost;databaseMyBBSDb;uidsa;pwd123456;Encryptfalse;") ;conn.Open();SqlCommand cmd new SqlCommand("SELECT * FROM…

WAIC上官宣!大模型语料提取工具MinerU正式发布,开源免费“敲”好用

7月4日,2024 WAIC科学前沿全体会议在上海世博中心红厅隆重举行。上海人工智能实验室与商汤科技联合香港中文大学和复旦大学正式发布新一代大语言模型书⽣浦语2.5(InternLM2.5),同时全链条工具体系迎来重磅升级,对于大模…

Android 四大组件

1. Activity 应用程序中,一个Activity通常是一个单独的屏幕,它上面可以显示一些控件,也可以监听并对用户的事件做出响应。 Activity之间通过Intent进行通信,在Intent 的描述结构中,有两个最重要的部分:动…

Java跳出循环的四种方式

1、continue,break,return continue:跳出当前层循环的当前语句,执行当前层循环的下一条语句。   continue标签 break:跳出当前层循环。 break标签:多层循环时,跳到具体某层循环。 return:结束所有循环…

基于python 的动态虚拟主机

将自己电脑上的Python脚本文件上传到虚拟机/var/www/cgi-bin/目录下 [rootlocalhost conf.d]# cd /var/www/cgi-bin/ [rootlocalhost cgi-bin]# rz -E rz waiting to receive.编辑vhost.conf配置文件 [rootlocalhost conf.d]# vim vhost.conf<virtualhost 192.168.209.140…

树形结构C语言的实现

一.什么是树&#xff1a; 树形结构是一层次的嵌套结构。一个树形结构的外层和内层有相似的结构&#xff0c;所以这种结构多可以递归的表示。经典数据结构中的各种树状图是一种典型的树形结构&#xff1a;一棵树可以简单的表示为根&#xff0c;左子树&#xff0c;右子树。左子树…

java使用JAXBContext解析xml

java使用JAXBContext解析xml。 垃圾程序员才一会废话&#xff0c;直接不解释&#xff0c;上代码&#xff01; javabean对象 package com.configure.vo;import com.haier.configure.dto.ResourceCodeTextDTO; import lombok.Data;import javax.xml.bind.annotation.XmlAccess…

平替向日葵:Windows远程桌面+动态IP获取器

对于需要远程办公的人员来说&#xff0c;向日葵是一个操作简便的选择&#xff0c;但其免费版功能受限&#xff0c;且由于数据需经过向日葵服务器转发&#xff0c;安全性也无法得到完全保障。为此&#xff0c;以下提供一个更为简单且免费的替代方案&#xff1a; 使用Windows自带…

threejs 微信小程序原生版本的使用 obj模型的加载

直接上代码&#xff0c; <canvas class"webgl" type"webgl" id"gl" bindtouchstart"onTX" bindtouchend"onTX" bindtouchmove"onTX" style"width:100vw;height:90vh"></canvas> const co…

Java中的网络安全与防护策略

Java中的网络安全与防护策略 大家好&#xff0c;我是微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01; 在当今信息化时代&#xff0c;网络安全问题日益突出&#xff0c;尤其对于Java开发者来说&#xff0c;保障应用程序和数据…

从0到1构建渠道运营体系:实战案例与策略指南

引言 在当今竞争激烈的市场环境中&#xff0c;有效的渠道运营是企业实现产品或服务快速触达目标用户、提升市场份额的关键。从零开始构建一个高效的渠道运营体系&#xff0c;不仅需要深思熟虑的策略规划&#xff0c;还需要灵活应变的实战操作。本文将结合实战案例&#xff0c;…

react native中使用@react-navigation/native进行自定义头部

react native中使用react-navigation/native进行自定义头部 效果示例图实例代码 效果示例图 实例代码 /* eslint-disable react-native/no-inline-styles */ /* eslint-disable react/no-unstable-nested-components */ import React, { useLayoutEffect } from react; import…

七、Linux二进制安装Redis集群

目录 七、Linux二进制安装Redis集群1 安装Redis所需依赖2 单机安装Redis&#xff08;7.2.4&#xff09;2.1 下载Redis2.2 安装Redis 3 分布式部署模式&#xff08;Redis Cluster&#xff09;3.1 分布式部署模式的配置文件3.2创建集群 4 主从复制模式&#xff08;Redis Sentinel…

解决android native包webview,webview中的请求blocked by CORS policy

在stack overflow查&#xff0c;差不多查到的都是些webView.getSettings().setxxx&#xff0c;没用。在github上找别的类似的android native包webview运行pwa的项目&#xff0c;把它们的webView.getSettings().setxxx全搬过来&#xff0c;写了有一页多&#xff0c;一个有用的都…

鼠标自动点击器怎么用?鼠标连点器入门教程!

鼠标自动点击器是适用于Windows电脑的自动执行鼠标点击操作的工具&#xff0c;主要用于模拟鼠标点击操作&#xff0c;实现鼠标高速点击的操作。通过模拟鼠标点击&#xff0c;可以在用户设定的位置、频率和次数下自动执行点击动作。 鼠标自动点击器主要的应用场景&#xff1a; …

MySQL创建新用户并赋予指定数据库权限

创建账号时并赋予权限语法如下&#xff1a; grant all privileges on *.* to 用户名登录IP或者域名 identified by 登录密码 with grant option;all privileges: 表示授权用户全部权限&#xff0c;当然你也可以指定赋予具体权限&#xff0c;比如SELECT、UPDATE、CREATE、DROP等…

Wing FTP Server

文章目录 1.Wing FTP Server简介1.1主要特点1.2使用教程 2.高级用法2.1Lua脚本,案例1 1.Wing FTP Server简介 Wing FTP Server&#xff0c;是一个专业的跨平台FTP服务器端&#xff0c;它拥有不错的速度、可靠性和一个友好的配置界面。它除了能提供FTP的基本服务功能以外&#…

当心!不要在SpringBoot中再犯这样严重的错误

1. 简介 在Spring Boot中&#xff0c;Configuration注解用于声明配置类&#xff0c;以定义和注册Bean对象。这些Bean对象可以是普通的业务组件&#xff0c;也可以是特殊的处理器&#xff0c;如BeanPostProcessor或BeanFactoryPostProcessor&#xff0c;用于在Spring容器中对其…

比 PIP 快 100 倍的安装工具

uv 是一个由 Rust 开发的 pip 工具&#xff0c;比 pip 快 100 倍&#xff0c;难以置信&#xff0c;不过真的是快太多了。 安装 在 Mac 上直接通过 brew install uv 安装即可。 venv 创建运行环境&#xff0c;默认当前目录下 .venv uv venv 依赖安装 uv pip install -r re…