IPv 6 도 메 인 이름 분석 원리 및 프로 그래 밍 실현

IPv 4 자원 이 점차 소 진 됨 에 따라 IPv 6 (Internet Protocol version 6) 네트워크 의 배치 가 이미 진행 되 기 시 작 했 고, 이미 많은 친구 들 이 v6 네트워크 를 사용 하기 시작 했다 고 믿는다.IPv 4 와 가장 현저 한 차이 점 은 각 v6 의 IP 주 소 는 128 비트 (16 바이트) 를 포함 하고 v4 에 비해 주소 공간 을 크게 확장 한 것 이다.그러나 이 때문에 v6 의 네트워크 가 사용 할 때 특히 프로 그래 밍 할 때 v4 와 호 환 되 지 않 는 다.본 고 는 IPv 6 의 DNS 도 메 인 이름 분석 지식 과 프로 그래 밍 실현 을 소개 한다.
DNS 프로 토 콜 의 특징 으로 인해 기 존의 DNS 시스템 은 변경 할 필요 가 없 이 IPv 6 도 메 인 이름 분석 을 직접 지원 했다.재 미 있 는 것 은 클 라 이언 트 가 v6 의 네트워크 에 접속 하지 않 아 도 v6 구성 요소 (예 를 들 어 기본 Windows XP 시스템) 를 설치 하지 않 아 도 v6 의 주 소 를 분석 할 수 있다 는 것 이다. 시스템 은 효과 적 인 DNS 서버 와 연결 할 수 있다 (예 를 들 어 DHCP 를 통 해 자동 으로 가 져 오 는 DNS 서버). 이 DNS 서버 가 v6 이 든 v4 든 간 에.실제로 v6 주 소 를 분석 하 는 것 과 v4 의 유일한 차이 점 은 v4 도 메 인 이름 의 A 기록 을 조회 하 는 것 이 고 v6 도 메 인 이름 의 AAAA 기록 을 조회 하 는 것 이다.
다음 예 는 윈도 우즈 의 nslookup 명령 과 BIND 의 dig 명령 을 통 해 gipv6. aulddays. com 이라는 IPv 6 도 메 인 이름 을 조회 하 는 방법 을 보 여 줍 니 다.
>nslookup -querytype=AAAA gipv6.aulddays.com
Server:  resolver
Address:1.opendns.com  208.67.222.222

Non-authoritative answer:
Name:    gipv6.aulddays.com
Address:  2001:4860:b004::68
>dig AAAA gipv6.aulddays.com

; <<>> DiG 9.4.2 <<>> AAAA gipv6.aulddays.com
; (1 server found)
;; global options: printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 943
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;gipv6.aulddays.com. IN AAAA

;; ANSWER SECTION:
gipv6.aulddays.com. 1800 IN AAAA 2001:4860:b004::68

;; Query time: 360 msec
;; SERVER: 208.67.222.222#53(208.67.222.222)
;; WHEN: Sat Sep 19 16:13:18 2009
;; MSG SIZE rcvd: 64

프로그램 에서 IPv 6 도 메 인 이름 을 분석 하 는 방법 을 알려 드 리 겠 습 니 다.전통 적 인 v4 주 소 는 gethostbyname() 함수 해석 을 사용 합 니 다. 컴 파일 옵션 을 수정 하 는 방식 으로 v6 상태 에서 작업 하도록 강제 할 수 있 지만 호환성 을 잃 었 습 니 다.이 를 위해 업 데 이 트 된 getaddrinfo() 함 수 를 사용 하 는 것 이 좋 습 니 다. 이 함 수 는 v4 와 v6 도 메 인 이름 의 해석 을 동시에 지원 합 니 다. VC + 의 예제 코드 는 다음 과 같 습 니 다.
#include "stdio.h"
#include "Ws2tcpip.h"

#pragma comment(lib, "Ws2_32.lib")  // getaddrinfo     lib

int main(int argc, char * argv[])
{
    const char *strDomain2Resolve = "gipv6.aulddays.com";

    //     Winsock
    WSADATA wsaData;
    int nStatus = WSAStartup(MAKEWORD(2,2), &wsaData);
    if (NO_ERROR != nStatus)
    {
        printf("WSAStartup()   
"); return -1; } addrinfo Hints, *AddrList; memset(&Hints, 0, sizeof(Hints)); Hints.ai_family = PF_INET6; // IPv6 address family // nStatus = getaddrinfo(strDomain2Resolve, NULL, &Hints, &AddrList); if (NO_ERROR != nStatus) { // , // AAAA printf("getaddrinfo() , %d: %s
", nStatus, gai_strerror(nStatus)); return -1; } // ( IP ) printf(" :
"); char pBuf[64]; // for(addrinfo *i = AddrList; i; i = i->ai_next) { // in6_addr DnsAddr = ((sockaddr_in6 *)i->ai_addr)->sin6_addr; // inet_ntop(AF_INET6, &DnsAddr, pBuf, 64); printf("%s
", pBuf); } // , IP // ( ) in6_addr AddrToUse = ((sockaddr_in6 *)AddrList->ai_addr)->sin6_addr; freeaddrinfo(AddrList); WSACleanup(); }

보기: 원문 주소;출처: live. aulddays. com.

좋은 웹페이지 즐겨찾기