日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android域名解析优先ipv6,IPv6 域名解析原理及编程实现

發布時間:2023/12/31 Android 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android域名解析优先ipv6,IPv6 域名解析原理及编程实现 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

IPv6 域名解析原理及編程實現

2009-09-24 09:36:51

舊日重來

隨著 IPv4

資源逐漸耗盡,IPv6 (Internet Protocol version 6) 網絡的部署已開始進行,相信已經有不少朋友已經開始使用 v6 的網絡了。和 IPv4 最顯著的不同是每個 v6 的 IP

地址包含 128 位(16 個字節),相比 v4 來說極大的擴展了地址空間。但是,這也使得 v6 的網絡在使用時特別是編程的時候和 v4

的情況不大兼容。本文介紹了針對 IPv6 的 DNS 域名解析知識和編程實現。

由于 DNS 協議的特點,原有的 DNS 系統幾乎不需要做什么改變就已經直接支持 IPv6 的域名解析了。有意思的是,客戶機并不用接入 v6

的網絡甚至根本不需要安裝 v6 組件(例如默認的 Windows XP 系統)就可以請求解析 v6 的地址,只需要系統可以與一個有效的 DNS

服務器建立連接(例如通過 DHCP 自動獲取的 DNS 服務器),而無論這個 DNS 服務器是 v6 還是 v4 的。事實上,解析 v6 地址與 v4

唯一的不同就是 v4 查詢域名的 A 記錄而 v6 查詢域名的 AAAA 記錄。

下面的例子演示了如何通過 Windows 的 nslookup 命令和

BIND 中的 dig 命令查詢

gipv6.aulddays.com 這個

IPv6 域名的方法(注意,使用的

OpenDNS 服務器 208.67.222.222 就是通過 IPv4 連接的):

>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<

;; 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

下面說說如何在程序中解析 IPv6 的域名。傳統的 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() 錯誤\n");

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\n",

nStatus, gai_strerror(nStatus));

return -1;

}

// 打印所有找到的地址(一個域名可能對應多個 IP 地址)

printf("已解析出下列地址:\n");

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\n", pBuf);

}

// 一般來說,客戶端程序應輪詢或使用解析出的 IP 列表中的第一個即可

// (如果解析出多個地址的話)

in6_addr AddrToUse = ((sockaddr_in6 *)AddrList->ai_addr)->sin6_addr;

freeaddrinfo(AddrList);

WSACleanup();

}

注意:本站所有文章除特別說明外均為原創,版權所有,轉載請務必以超鏈接方式注明作者出處,并禁止用作商業用途

總結

以上是生活随笔為你收集整理的Android域名解析优先ipv6,IPv6 域名解析原理及编程实现的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。