簡體   English   中英

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

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM