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 域名解析原理及编程实现相关推荐

  1. android手机裸眼3D技术原理和编程实现

    1.裸眼3D手机从去年开始流行.做为一个卖点或者噱头,为手机的输入输出提供一抹灵动的色彩.裸眼3D可以在二维的手机屏幕上不需要配戴VR眼镜或者谷歌纸盒就能展示三维的世界的效果,一般来说要给用户提供好的 ...

  2. 群晖设置公网ipv6方式域名解析访问

    1.环境说明 上网:电信光猫+tplink路由器(电信送的) 群晖:DSM 7.1.1-42962 Update 2 域名服务商:腾讯云 2.光猫设置 2.1 获取光猫超级用户密码 拨打电信10000 ...

  3. 群晖NAS通过IPV6设置域名解析

    群晖NAS通过IPV6设置域名解析 为了更好的浏览体验,欢迎光顾勤奋的凯尔森同学个人博客http://www.huerpu.cc:7000 现在都2022年了,不会还有小伙伴追着运营商死乞白赖地要公网 ...

  4. IPv6 auto config 原理详解之-----前缀公告

    Technorati 标签: IPv6,IPv6 prefix,IPv6 auto config 人们常说,IPv6的一大特性就是移动性. 那么对于IP终端来说,如何去理解他的移动性呢? 其实就是IP ...

  5. IPv6, DAD 工作原理详解

    Technorati 标签: IPv6,IPv6 DAD 关于DAD --> duplicate address detection 和IPv4是一样的,不同的是ipv6发送的目的不是广播了.而 ...

  6. IPv6技术精要--第8章 IPv6动态地址分配原理

    文章目录 8.1 IPV6公网地址3种动态配置 8.2 ICMPv6路由器恳求与通告消息 8.2.1 执行 ipv6 unicast-routing命令后: 8.2.2 通告消息RA 8.3 3种IP ...

  7. 【Android 插件化】插件化原理 ( 类加载器 )

    Android 插件化系列文章目录 [Android 插件化]插件化简介 ( 组件化与插件化 ) [Android 插件化]插件化原理 ( JVM 内存数据 | 类加载流程 ) [Android 插件 ...

  8. 【Android 热修复】热修复原理 ( 多 Dex 打包机制 | 多 Dex 支持 | Dex 分包设置 | 开发和产品风格设置 | 源码资源 )

    文章目录 一.Dex 打包设置 1.多 Dex 支持 2.Dex 分包设置 3.开发和产品风格设置 ( 非必须 ) 二.完整 build.gradle 配置 1.build.gradle 配置 2.d ...

  9. 【Android 热修复】热修复原理 ( 合并两个 Element[] dexElements | 自定义 Application 加载 Dex 设置 | 源码资源 )

    文章目录 一.合并两个 Element[] dexElements 二. 完整修复包加载工具类 三. 源码资源 一.合并两个 Element[] dexElements 在 [Android 热修复] ...

  10. 【Android 热修复】热修复原理 ( Dex 文件拷贝后续操作 | 外部存储空间权限申请 | 执行效果验证 | 源码资源 )

    文章目录 一.Dex 文件准备 二.外部存储空间权限申请 1.清单文件申请权限 2.动态申请权限 三.文件拷贝 1.文件拷贝 2.执行效果 四. 源码资源 一.Dex 文件准备 在 [Android ...

最新文章

  1. BZOJ 2818 Gcd 线性欧拉筛(Eratosthenes银幕)
  2. 关于写代码的几个看法
  3. webpage not available是什么意思_MySQL很想啊,为什么还要有noSQL?
  4. 唐僧肉长生不老到底隐藏了哪些骗局?唐僧的妈妈真的吃过唐僧肉吗?
  5. 论文浅尝 | 基于未知谓词与实体类型知识图谱的 Zero-Shot 问题生成
  6. 入门云数据库Redis,满足你的高读写性能场景需求
  7. 如何做研究-精辟分析
  8. 蚂蚁金服入职考试_程序员入职蚂蚁金服被质疑,网友评论人生污点,不把外包当人?...
  9. 【Flink】JobException: Recovery is suppressed by NoRestartBackoffTimeStrategy
  10. 数据文件shrink_SQL Server中的Shrink TempDB数据库概述
  11. Linux英伟达驱动程序下载和安装
  12. PLSQL Developer 12 破解注册码
  13. 内外网同时上怎么设置
  14. 对指定网站渗透的一些总结
  15. 蓝牙耳机买什么品牌好一些?2022蓝牙耳机品牌排行榜10强
  16. 动态代理的好处是什么
  17. 台式电脑怎么添加计算机硬盘,如何在台式电脑增加硬盘的安装及设置方法
  18. 软件设计模式—命令模式
  19. 关于Mongodb的全面总结,学习mongodb的人,可以从这里开始
  20. 爪哇国新游记之三----自创动态数组类

热门文章

  1. 鸟哥的Linux私房菜服务器架设篇 第三版
  2. 使用switchhost进行host文件管理
  3. 【目标检测算法系列】一、R-CNN算法
  4. MySql 语法(完整版)
  5. SQL Server 2012 数据库可疑问题解决
  6. 原生JS实现HTML文件上传,简单实现js上传文件功能
  7. 新题速看~2021阿里、腾讯、字节都在问的SQL数据库笔试题及答案都给你整理好啦
  8. html及css经典面试题
  9. Java PC端微信、支付宝扫码支付(一)
  10. 大数据工程师简历_大数据毕业生简历该怎么写?