如何将本地ipv6地址绑定到我的node.js程序?

我刚刚在nodejs中创build了这个简单的程序,但是我不能将它绑定到我的NIC的ipv6地址。

我在API文档中读到以下内容

localAddress:绑定networking连接的本地接口。

var http = require('http'); var options = { hostname: 'www.whatismyipv6.com', localAddress: '2a01:xxxx:xxxx:xxxx::2' //a real ipv6 address here }; var req = http.request(options, function(res) { res.on('data', function (chunk) { console.log(chunk.toString()); }); }); req.on('error', function(e) { console.log('ERROR: ' + e.message); }); req.end(); 

但是,当我执行程序,我得到这个。 请注意ipv4地址。

 <head> <title>WhatIsMyIPv6? (IPv4: xx.xx.xxx.xxx)</title> <meta name="bitly-verification" content="984886d337a6"/> </head> 

它看起来像nodejs忽略localAddress并直接绑定到ipv4地址。

 # node --version v0.8.0 

可以使用ipv6强制节点连接,至less它可以在节点v0.12.7上工作。 您的select将如下所示:

 var options = { hostname: 'www.whatismyipv6.com', localAddress: '2a01:xxxx:xxxx:xxxx::2', //a real ipv6 address here family: 6 }; 

不幸的是,你不幸在这一个,并与任何其他主机同时发布A和AAAA RR。

http.js不会将addressType (地址族)传递给堆栈,所以在调用的底部, dns.js中lookup() func只是发出一个getaddrinfo()调用,并返回第一个返回的结果,即本例中目标主机的IPv4地址的A RR。

如果你检查dns.js,你可以看到,当没有指定系列的时候, lookup()只是将地址[0]从结果中popup:

 function onanswer(addresses) { if (addresses) { if (family) { callback(null, addresses[0], family); } else { callback(null, addresses[0], addresses[0].indexOf(':') >= 0 ? 6 : 4); } } else { callback(errnoException(process._errno, 'getaddrinfo')); } } 

正如你所看到的,它确实为这个结果设置了家庭。 在你的例子中,第一个结果被识别为IPv4系列,当这个过滤完成后,堆栈绑定就会相应地完成,超过你的localAddress规范。

您可以通过将您的目标主机更改为ipv6.whatismyipv6.com; 神奇地,你的本地主机的IPv6地址现在已经绑定,如你所愿。