@achingbrain/nat-port-mapper

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

Port mapping with UPnP and NAT-PMP

原始使用文档
文档目录4 节
  1. Example - UPnP NAT
  2. Example - NAT-PMP
  3. Credits
  4. Additional Information

@achingbrain/nat-port-mapper

codecov CI

Port mapping with UPnP and NAT-PMP

About

Enable NAT traversal by mapping public ports to ports on your computer using either UPnP or NAT-PMP.

Example - 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()
}

Example - 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()

Credits

Based on alxhotel/nat-api

Additional Information

Install

$ npm i @achingbrain/nat-port-mapper

API Docs

License

Licensed under either of

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

版本与发布记录

@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 是什么?

Port mapping with UPnP and 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 和提交记录判断。