当我将此实用程序与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调用之前摆脱它吗?
答案 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:
移开。