npm 包 nat-upnp 使用教程

阅读时长 6 分钟读完

#npm 包 nat-upnp 使用教程

如果你曾经使用过路由器来连接网络,你肯定知道 UPnP 是什么。UPnP 是通用即插即用协议的缩写,它允许设备在局域网内自动发现和连接到其他设备,让设备之间的通信变得更加便捷。UPnP 协议中,有一种叫做 NAT-PMP(Network Address Translation - Port Mapping Protocol)的子协议,它可以帮助设备将内部 IP 地址和端口映射到外部 IP 地址和端口。nat-upnp 是一个基于 node.js 的 npm 包,它提供了一种方便的方式来使用 NAT-PMP 协议,本文将详细介绍如何使用该 npm 包。

安装

nat-upnp 可以通过 npm 来安装:

快速开始

下面的代码演示了如何使用 nat-upnp 包来将本地计算机的端口映射到外部端口:

-- -------------------- ---- -------
--- ------- - --------------------
--- ------ - -----------------------

--------------------
  ------- -----
  -------- -----
  ---- --
-- ------------- -
  --------------- - ---- - ------
---

上述代码会将本地计算机的 3000 端口映射到外部的 3000 端口,端口的映射会持续 10 秒钟。如果映射失败,程序将输出 "失败",否则输出 "成功"。

api 说明

createClient([options])

创建一个 NAT-PMP 客户端。options 参数是可选的,它是一个包含以下字段的对象:

  • udptruefalse,表示是否使用 UDP 协议。默认为 true
  • host:UPnP 网关的 IP 地址。如果省略,将使用本地默认网关的 IP 地址。
  • port:UPnP 网关的端口号。默认为 1900。

返回一个 client 对象,它是一个 EventEmitter 实例。

client.portMapping(options, [callback])

将本地计算机的端口映射到外部端口。options 参数是一个对象,包含以下字段:

  • public:外部端口号。
  • private:本地计算机的端口号。
  • ttl:映射的有效时间,单位为秒。如果省略,将使用默认值 3600 秒。
  • description:映射的描述信息。如果省略,将使用默认值 "nat-upnp"。
  • protocol:映射的协议类型。取值可以是 'tcp' 或 'udp'。如果省略,将使用默认值 'tcp'。

callback 是一个可选的回调函数,它有一个参数 err 表示执行结果。如果执行成功,err 为 null,否则为一个 Error 对象。注意,由于 nat-upnp 使用异步方式执行映射操作,因此如果要执行多个映射操作,必须等待上一个操作完成后,才能执行下一个操作。否则,映射操作可能会失败。以下代码演示了如何执行连续的映射操作:

-- -------------------- ---- -------
--------------------
  ------- -----
  -------- -----
  ---- --
-- ------------- -
  -----------------------
  
  --------------------
    ------- -----
    -------- -----
    ---- --
  -- ------------- -
    -----------------------
  ---
---

client.portUnmapping(options, [callback])

取消本地计算机端口到外部端口的映射。options 参数是一个对象,包含以下字段:

  • public:外部端口号。
  • protocol:映射的协议类型。取值可以是 'tcp' 或 'udp'。如果省略,将使用默认值 'tcp'。

callback 是一个可选的回调函数,它有一个参数 err 表示执行结果。如果执行成功,err 为 null,否则为一个 Error 对象。

client.getMappings(callback)

获取当前 UPnP 网关的 NAT 映射列表。callback 是一个回调函数,它有两个参数。第一个参数是一个 Error 对象,如果执行成功,则为 null。第二个参数是一个数组,包含多个 NAT 映射对象。每个 NAT 映射对象包含以下字段:

  • public:外部端口号。
  • private:本地计算机的端口号。
  • ttl:映射的有效时间,单位为秒。
  • description:映射的描述信息。
  • protocol:映射的协议类型。

client.externalIp([callback])

获取本地计算机的外部 IP 地址。callback 是一个回调函数,它有两个参数。第一个参数是一个 Error 对象,如果执行成功,则为 null。第二个参数是一个字符串,表示本地计算机的外部 IP 地址。如果获取失败,则该参数为 null。

示例

下面的代码演示了如何使用 nat-upnp 包将本地计算机的端口映射到外部:

-- -------------------- ---- -------
--- ------- - --------------------
--- ------ - -----------------------

-- ----------
--------------------
  ------- -----
  -------- -----
  ---- --
-- ------------- -
  -- ----- -
    ---------------------- -----
    -------
  -
  
  ------------------------------- ---------------
  
  -- --------
  -------------------------------- --------- -
    -- ----- -
      ------------------------ -----
      -------
    -
    
    ---------------------- ----------
    
    -- --------------
    ----------------------
      ------- ----
    -- ------------- -
      -- ----- -
        ---------------------- -----
        -------
      -
      
      ----------------------------------
    --
  ---
---

如上所述,我们首先使用 portMapping 方法将本地计算机的端口 3000 映射到外部的端口 3000 上,方法会在映射成功或失败时执行回调。回调中,我们通过调用 getMappings 方法来获取当前所有的映射列表,方法同样会在回调中返回结果。最后,我们使用 portUnmapping 方法将本地计算机的端口 3000 从外部端口上取消映射。

结语

nat-upnp 是一个方便的 npm 包,它可以帮助开发者使用 NAT-PMP 协议来管理映射操作。通过使用 nat-upnp 包,我们可以轻易地将本地计算机的端口映射到外部端口,为我们的项目带来更多便捷和灵活性。希望这篇文章能对你掌握 nat-upnp 包的使用有所帮助。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/155822