@arcjet/ip
弧喷 用于查找请求的原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,可选) ——一些平台在请求对象上直接提供IPrequestContext(单位:千美元){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
特许使用 麻省理工学院 彼得・博吉诺夫.
我们的工作樱桃只选择我们需要的东西.