错误-getHostByAddr ENOTFOUND :: ffff:18.234.32.226

时间:2019-06-03 20:25:07

标签: node.js dns reverse-dns

当我将此实用程序与nodejs一起使用时:https://nodejs.org/api/dns.html#dns_dns_reverse_ip_callback

像这样:

  const {remoteAddress, remotePort} = req.connection; 

  dns.reverse(remoteAddress, (err, hostnames) => {

    if(err){
      console.error(err.message);
    }

  });

我收到该错误-

  

getHostByAddr ENOTFOUND :: ffff:18.234.32.226

在地址/ ip开头的ffff是什么?我想我应该在传递给dns.reverse lookup调用之前摆脱它吗?

1 个答案:

答案 0 :(得分:1)

::ffff:18.234.32.226是映射为IPv6地址的IPv4地址(18.234.32.226),由于使用了:而被检测到。

在配置为优先使用IPv6而不是IPv4的系统上会发生这种情况(您可以在Unix系统中使用文件/etc/gai.conf进行配置)。

https://tools.ietf.org/html/rfc3493第3.7节中进行了解释:

  

API还提供了另一种类型的兼容性:功能
  使IPv6应用程序与IPv4应用程序互操作。这个
  功能使用在IPv6中定义的IPv4映射的IPv6地址格式
  解决体系结构规范[2]。此地址格式
  允许将IPv4节点的IPv4地址表示为IPv6
  地址。 IPv4地址被编码为32位的低位
  IPv6地址,高阶96位保留固定前缀
  0:0:0:0:0:FFFF。映射IPv4的地址如下:

::FFFF:<IPv4-address>

您需要配置系统,使其不将IPv4地址映射为IPv6地址,或者使用知道如何处理这些IP地址(完全合法)的库。或者,更糟糕的是,确实确实要在开始时将::ffff:移开。