@achingbrain/nat-port-mapper

中文文档
4.0.5发布于 2025/10/14Apache-2.0 OR MITTypeScriptES Module构建来源已验证近 30 天下载 11.1万

用 UPnP 和 NAT- PMP 绘制端口映射

中文使用文档
文档目录4 节
  1. 示例 - UPnP NAT
  2. 示例 - NAT- PMP
  3. 贷项
  4. 补充资料

@achingbrain/nat-port-mapper (英语)

codecov CI

用 UPnP 和 NAT- PMP 绘制端口映射

关于

通过将公共端口映射到您计算机上的端口来启用NAT traversal 无论是 在线 或者说 NAT- PMP 软件。 。 。 .

示例 - UPnP NAT

import { upnpNat } from '@achingbrain/nat-port-mapper'

const client = upnpNat()

for await (const gateway of client.findGateways({ signal: AbortSignal.timeout(10000) })) {
  // Map public port 1000 to private port 1000 with TCP
  await gateway.map(1000, '192.168.1.123', {
    protocol: 'tcp'
  })

  // Map port 3000 to any available host name
  for await (const mapping of gateway.mapAll(3000, {
    protocol: 'udp'
  })) {
    console.info(`mapped ${mapping.internalHost}:${mapping.internalPort} to ${mapping.externalHost}:${mapping.externalPort}`)
  }

  // Unmap previously mapped private port 1000
  await gateway.unmap(1000)

  // Get external IP
  const externalIp = await gateway.externalIp()

  console.log('External IP:', externalIp)

  // Unmap all mapped ports and cancel any in-flight network operations
  await gateway.stop()
}

示例 - NAT- PMP

import { pmpNat } from '@achingbrain/nat-port-mapper'
import { gateway4sync } from 'default-gateway'

const gateway = pmpNat(gateway4sync().gateway)

// Map public port 1000 to private port 1000 with TCP
await gateway.map(1000, '192.168.1.123', {
  protocol: 'tcp'
})

// Map public port 2000 to private port 3000 with UDP
await gateway.map(3000, '192.168.1.123', {
  externalPort: 2000,
  protocol: 'udp'
})

// Unmap previously mapped private port 1000
await gateway.unmap(1000)

// Get external IP
const externalIp = await gateway.externalIp()

console.log('External IP:', externalIp)

// Unmap all mapped ports and cancel any in-flight network operations
await gateway.stop()

贷项

依据 alxhotel/nat-api 数据

补充资料

安装

$ npm i @achingbrain/nat-port-mapper

API 文档

许可证

根据其中任何一项颁发的许可证

捐款

除非另有明确声明,Apache-2.0许可证中界定的、有意提交供列入作品的任何捐助,应具有上述双重许可证,不附加任何条件.

版本与发布记录

@achingbrain/nat-port-mapper 共发布 40 个版本,首次发布于 2022/02/27;过去 12 个月发布了 0 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
4.0.5latest2025/10/141.1 年前
4.0.42025/06/241.4 年前
4.0.32025/06/241.4 年前
4.0.22025/02/041.8 年前
4.0.12024/12/181.9 年前
4.0.02024/11/301.9 年前

关于 @achingbrain/nat-port-mapper 的常见问题

@achingbrain/nat-port-mapper 是什么?

用 UPnP 和 NAT- PMP 绘制端口映射

如何安装 @achingbrain/nat-port-mapper?

在项目目录运行 npm install @achingbrain/nat-port-mapper,或使用 pnpm add / yarn add / bun add。

@achingbrain/nat-port-mapper 支持 TypeScript 吗?

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

@achingbrain/nat-port-mapper 支持 ESM 还是 CommonJS?

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

@achingbrain/nat-port-mapper 可以商用吗?

@achingbrain/nat-port-mapper 使用 Apache-2.0 OR MIT 许可。可在 Apache-2.0、MIT 中任选其一遵守。选择 Apache-2.0 时,宽松许可:允许商业使用、修改和再分发,并附带明确的专利授权;分发时需保留许可与 NOTICE 文件,修改过的文件要注明改动。以上为概括,不构成法律意见,请以许可原文为准。

@achingbrain/nat-port-mapper 的下载量有多少?

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

@achingbrain/nat-port-mapper 还在维护吗?

最新版本 4.0.5 发布于 2025/10/14(1.1 年前);至今共发布 40 个版本,其中过去 12 个月发布了 0 个;首次发布于 2022/02/27。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。