2012-06-26 4 views
2

방금 ​​nodejs에이 간단한 프로그램을 만들었지 만 NIC의 ipv6 주소에 바인드 할 수 없습니다. 네트워크 연결 바인딩 로컬 인터페이스 : 로컬 ipv6 주소를 node.js 프로그램에 어떻게 바인드합니까?

본인은 API 문서에 다음

보이나 인근을 참조하십시오.

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 

답변

0

불행히도이 문제와 A 및 AAAA RR이 모두 게시 된 다른 호스트와는 다른 것입니다.

http.js() dns.js을에 FUNC 그냥 일반 를 발행 호출의 보텀 조회에서, 그래서 스택 아래로 인 AddressType (주소 패밀리를) 전달하지 않습니다 getaddrinfo()을 호출하고이 예제에서 대상 호스트의 IPv4 주소에 대한 A RR 인 첫 번째로 반환 된 결과를 사용합니다.

당신이 조회를 (볼 수 당신은은 주소를 팝업) dns.js을 선택하면 [0] 가족이 지정되지 않은 결과를 OFF :

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 주소는 당신이 원하는대로 바운드되었습니다.

1

노드가 ipv6을 사용하여 강제로 연결할 수 있습니다. 적어도 노드 v0.12.7에서 작동합니다. 옵션은 다음과 같습니다.

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