IPv 6 도 메 인 이름 분석 원리 및 프로 그래 밍 실현
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.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Linux Shell 프로 그래 밍 - 텍스트 처리 grep, sed사용자 가 지정 한 '모드' 에 따라 대상 텍스트 를 일치 하 게 검사 하고 일치 하 는 줄 을 인쇄 합 니 다. ##포함 되 지 않 음, 역방향 일치 \ ##키워드 앞 뒤 가 맞지 않 고 키워드 만 일치 합 니 다...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.