[英]How do I bind local ipv6 address to my node.js program?
我剛剛在nodejs中創建了這個簡單的程序,但我無法將其綁定到我的NIC的ipv6地址。
我在API文檔中讀到了以下內容
localAddress:綁定網絡連接的本地接口。
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進行連接,至少它可以在節點v0.12.7上運行。 您的選項將如下所示:
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()函數只發出一般的getaddrinfo()調用並獲取第一個返回的結果,即在此示例中,目標主機的IPv4地址的A RR。
如果你檢查dns.js,你可以看到,當沒有指定系列時, lookup()只會從結果中彈出地址[0]:
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來查看此信息。 奇怪的是,您的localhost的IPv6地址現在已根據需要綁定。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.