#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 来安装:
$ npm install nat-upnp
快速开始
下面的代码演示了如何使用 nat-upnp 包来将本地计算机的端口映射到外部端口:
-- -------------------- ---- ------- --- ------- - -------------------- --- ------ - ----------------------- -------------------- ------- ----- -------- ----- ---- -- -- ------------- - --------------- - ---- - ------ ---
上述代码会将本地计算机的 3000 端口映射到外部的 3000 端口,端口的映射会持续 10 秒钟。如果映射失败,程序将输出 "失败",否则输出 "成功"。
api 说明
createClient([options])
创建一个 NAT-PMP 客户端。options
参数是可选的,它是一个包含以下字段的对象:
udp
:true
或false
,表示是否使用 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