@arcjet/ip

中文文档
1.15.0发布于 2026/10/29Apache-2.0TypeScriptES Module零依赖构建来源已验证近 30 天下载 35.6万

寻找请求原生IP的Arcjet 工具

中文使用文档
文档目录13 节
  1. 这是什么?
  2. 我什么时候用这个?
  3. 安装
  4. 使用
  5. API 密码
  6. Cidr
  7. Options
  8. Platform
  9. RequestLike
  10. findIp(request[, options])
  11. parseProxy(value)
  12. 考虑因素
  13. 许可证
Arcjet Logo

@arcjet/ip

npm badge

弧喷 用于查找请求的原IP的公用事业.

这是什么?

这是帮助我们处理IP地址的内部用途. 它包括从 Rust 标准库代码到解析的代码 IPv4 和 IPv6 数据 并包含一些代码来自 pbojinov/request-ip。 。 。 . 我们把 Rust IP 解析器转换成 TypeScript 这样我们才有完全相同的 两种语言的功能. 替代 JavaScript 库中的类似功能经常使用常规 表达式,但这些可以导致 ReDoS 攻击. 我们回避这个问题,因为 Rust IP 解析算法没有使用 常规表达式. 我们选择了从 request-ip 这样我们才能保持功能 我们使用和保持我们的依赖树 尽可能光. 我们的代码是不同的: 如果我们知道我们在Cloudflare上运行 我们不相信通常由 fly.io 设定的头条.

我什么时候用这个?

你不应该用这个,而应该用一个替代品. 这个套装符合我们目前的需要 可能与你的不同.

安装

这套方案只是无害环境管理. 在 Node.js 用 npm 安装 :

npm install @arcjet/ip

使用

import { findIp } from "@arcjet/ip";

const ip = findIp({ headers: { "x-real-ip": "1.1.1.1" } });
console.log(ip); // => "1.1.1.1"

API 密码

此软件包导出标识符 findIp 财务报告和审定财务报表 parseProxy。 。 。 . 默认导出为 findIp。 。 。 .

此套件导出 类型脚本 类型 Cidr, (中文(简体) ), Options, (中文(简体) ), Platform,以及 RequestLike。 。 。 .

Cidr

此类型代表一个解析的 CIDR 范围, 您可以用作信任的代理 .

类型
type Cidr = Ipv4Cidr | Ipv6Cidr;
// Where each is an instance roughly equivalent to
// `{bits: number, partSize: 8 | 16, parts: Array<number>, type: "v4" | "v6"}`,
// with a `contains` function that can be passed an array of octets.

Options

您可以通过这些选项来配置 findIp 查一下客户端IP.

字段
  • platform (单位:千美元)Platform,可选) – 您的代码运行在平台上; 我们只用这个来信任 已知由该平台设定的标题
  • proxies (单位:千美元)Array<Cidr | string>,可选) ——解决客户端 IP 时要跳过的可信任代理列表

Platform

该类型代表平台名称 findIp 承认.

类型
type Platform = "cloudflare" | "firebase" | "fly-io" | "render" | "vercel";

RequestLike

此类型代表了类似请求的对象 findIp 可以提取一个 IP 地址从。 它支持几个形状 因为不同的平台暴露 请求不同的信息.

字段
  • headers (单位:千美元)Headers | Record<string, Array<string> | string | undefined>(中文(简体) ) 请求头
  • info (单位:千美元){remoteAddress?: string},可选) ——一些平台在此传递连接信息
  • ip (单位:千美元)unknown,可选) ——一些平台在请求对象上直接提供IP
  • requestContext (单位:千美元){identity?: {sourceIp?: string}},可选) ——一些平台通过带有身份信息的请求上下文
  • socket (单位:千美元){remoteAddress?: string},可选) ——一些平台通过一个带有远程地址的套接字

findIp(request[, options])

从类似请求的对象中查找客户端 IP 地址。 如果你通过一个 platform 在选项中,我们只信任已知被设定的标题 在那个平台旁边.

参数
  • request (单位:千美元)RequestLike(中文(简体) ) ——要求从
  • options (单位:千美元)Options,可选) — 平台和可信代理的配置
回返

已找到的 IP 地址 (string),或者如果没有 IP 可能是一个空字符串 决定.

parseProxy(value)

将 CIDR 地址串分析为 a Cidr 对象,或返回 如果是一个普通的 IP 地址, 则该值为- 是 。 你可以用这个来构建一个 列表中信任的代理人.

参数
  • value (单位:千美元)string(中文(简体) ) ——一个IP地址或CIDR范围来解析
回返

一个解析 Cidr 如果值是一个范围,或给定的 value 如果是一个普通的IP,则字符串 .

考虑因素

IP不应该被信任,因为它在大多数情况下都可以被欺骗,特别是当 通过 Headers 对象。 增加月台守卫,如果 平台在 options 参数.

如果遇到私人/内部地址,将跳过。 如果只有这些 ,返回空字符串.

许可证

Apache 许可证,2.0版本 © Arcjet实验室股份有限公司.

基于 Parser 内 std::net, (中文(简体) ), is_global 打开 Ipv4Addr,以及 is_global 打开 Ipv6Addr 从 rust-lang/rust, (中文(简体) ), 双重许可证 麻省理工学院 财务报告和审定财务报表 阿帕奇 - 2.0 捐款者. 我们的工作端口到 TypeScript 这样我们两个都有相同的功能 语言.

基于 getClientIp 从 request-ip 特许使用 麻省理工学院 彼得・博吉诺夫. 我们的工作樱桃只选择我们需要的东西.

版本与发布记录

@arcjet/ip 共发布 79 个版本,首次发布于 2023/12/08;过去 12 个月发布了 30 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
1.15.0latest2026/10/298 天前
1.14.12026/10/0730 天前
1.14.02026/10/021 个月前
1.13.02026/09/171 个月前
1.12.02026/09/091 个月前
1.11.02026/08/272 个月前

其他发布通道:rc → 1.10.0-rc.1。

关于 @arcjet/ip 的常见问题

@arcjet/ip 是什么?

寻找请求原生IP的Arcjet 工具

如何安装 @arcjet/ip?

在项目目录运行 npm install @arcjet/ip,或使用 pnpm add / yarn add / bun add。

@arcjet/ip 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@arcjet/ip 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

@arcjet/ip 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js >=22.21.0 <23 || >=24.5.0。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

@arcjet/ip 可以商用吗?

@arcjet/ip 使用 Apache-2.0 许可。宽松许可:允许商业使用、修改和再分发,并附带明确的专利授权;分发时需保留许可与 NOTICE 文件,修改过的文件要注明改动。以上为概括,不构成法律意见,请以许可原文为准。

@arcjet/ip 的下载量有多少?

根据 npm 官方下载统计,@arcjet/ip 在 2026/10/07 – 2026/11/05 这 30 天内被下载 355,529 次,日均约 11,851 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@arcjet/ip 还在维护吗?

最新版本 1.15.0 发布于 2026/10/29(8 天前);至今共发布 79 个版本,其中过去 12 个月发布了 30 个;首次发布于 2023/12/08。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。