如何在nodejs expressjs中将ipv6地址转换为ipv4地址?

时间:2017-11-02 09:17:52

标签: node.js httprequest ipv6 ipv4 request-object

NODEJS的请求对象提供此方法 req.connection.remoteAddres 以获取客户端的IP地址,但它提供IPV6格式的地址,如何将其转换为更易读的IPV4格式?

2 个答案:

答案 0 :(得分:4)

如果IPv6地址以::ffff:开头,则客户端正在与IPv4通信以与IPv6应用程序通信。在这种情况下,地址的其余部分是IPv4地址。它可能写成::ffff:10.11.12.13,在这种情况下,您可以轻松查看IPv4地址。它也可以写成::ffff:0a0b:0c0d::ffff:a0b:c0d,在这种情况下,您需要将地址的最后一部分从十六进制转换为十进制。

如果IPv6地址不以::ffff:开头,则客户端实际上正在与IPv6通信,并且不能进行转换,因为IPv4和IPv6是具有不同地址的不同协议。系统只能有IPv4,只有IPv6或两者的组合。通过查看地址,你无法知道。

答案 1 :(得分:0)

问题是因为默认情况下,NodeJS 侦听 IPv6,因此它返回 IPv6 地址。如果您告诉它只侦听 IPv4,那么您将只能获得 IPv4 地址,并且它们将采用您期望的格式(没有 ::ffff: 前缀)。

如何执行此操作取决于您使用的库,但通常在指定要侦听的端口的位置,您还可以指定主机/接口/IP,并在此处输入 0.0.0.0 以说“仅 IPv4”,而不是默认的 ::,这意味着 IPv6+IPv4。

例如使用 NodeJS 套接字库:

server.listen({
    port: 80,
    host: '0.0.0.0',
})

对于 WebSocket:

...listen(80, '0.0.0.0');