2011-05-12 9 views
1

IPv6 주소를 인수로 사용하는 함수를 찾고 도메인 이름을 반환합니다.도메인 이름에 대한 IPv6 주소

분명히 말하면 2a00 : 1450 : 8006 :: 68은 ipv6.google.com을 반환합니다.

은 (목표는한다 getaddrinfo 기능이 도메인 이름을 제공하는 것입니다.)

EDIT1 :-)

감사 : 나는 getaddrinfo("2a00:1450:8006::68", "http", NULL, &result);을 시도했습니다, 그것은 "호스트 이름 주소 패밀리는 지원되지 않습니다"를 반환 getaddrinfo("ipv6.google.com", "http", NULL, &result);은 "주소가 핫 이름과 연결되어 있지 않습니다"라는 오류를 반환합니다.

EDIT2 : 나는 IPV6 시스템에 문제를했습니다, 당신과 동의, 나는 http://test-ipv6.com/을 시도하고 내가 더 IPV6 adress은 없어했지만 ifconfig로 반환하는 나타납니다

adr inet6: fe80::15b:fcff:fe65:d516/64 Scope:Lien 
+2

나에게 주소 구조를 얻으려면 로터리 방식처럼 보입니다. "getaddrinfo"에 "2a00 : 1450 : 8006 :: 68"을 전달하지 않는 것이 어떻습니까? – Santa

+1

귀하의 컴퓨터처럼 들리거나 네트워크가 IPv6을 지원하지 않습니다 - 작동해야합니까? –

+0

코드에 대해 모르겠지만 2a00 : 1450 : 8006 :: 68에는 실제로 역 DNS가 없다는 것을 언급해야합니다. 실제로 역방향 DNS가있는 IPv6 주소를 사용하려고하면 도움이됩니다. –

답변

1

생각 유효한 IPv6 구성이 없습니다. getaddrinfo()은 도달 할 수있는 IPv6 응답 만 반환하므로 시스템에 전역 범위가있는 IPv6 주소와 확인 된 주소에 대한 경로가없는 경우 결과가 결과 집합에서 제거됩니다.

기본 아이디어는 getaddrinfo을 한 번 호출하고 연결할 주소 목록을 얻는 것입니다. 연결할 수없는 주소를 포함해야한다면 다른 주소를 시도하기 전에 프로그램이 시간 초과를 먼저 실행해야합니다.

"호스트 이름에 대한 주소 패밀리가 지원되지 않음"은 주소가 허용 된 주소 패밀리 목록과 일치하도록 DNS를 통해 확인할 필요가없는 IPv6 주소임을 인식하고 실패한 후 오류.

호스트 이름을 해석하면 로컬로 지원되는 유일한 주소 패밀리에 적합한 호스트 이름에 대한 "A"레코드를 얻으려고 시도합니다. 그러한 레코드가 존재하지 않으므로 레코드가 존재하지 않는 정보를 리턴합니다. IPv6 주소를 요구 한 적이 없기 때문에 (여기서는 무의미했을 것입니다.) 주소 패밀리가 일치하지 않는다고 불평하지 않습니다.

+0

나는 당신이 무슨 일이 일어나고 있는지 맞다고 생각하지만 이것이 또한 버그라고 생각합니다. 설명하는 동작은 힌트에 AI_ADDRCONFIG가 설정된 경우에만 발생합니다. –

+1

@R .: glibc의 경우'힌트 '를'NULL'로 제공하는 것은'ai_family = AF_SPEC' 및'ai_flags = AI_V4MAPPED | AI_ADDRCONFIG'. 이것은 POSIX 사양에 위배되는 것 같습니다. – caf

+0

'AF_SPEC '이란 무엇입니까? –

2

첫 번째 단계로는 getaddrinfo을 사용하는 것이 맞지만 역방향 DNS 조회는 수행 할 수 없습니다. getaddrinfo을 사용하여 주소 문자열 형식을 sockaddr으로 변환 한 다음 getnameinfo으로 전달하여 역방향 조회를 수행해야합니다.

Carl 's의 의견도 적절하다고 생각합니다. 귀하의 시스템이 IPv6를 지원하지 않도록 구성된 것처럼 보입니다 ...

관련 문제