c - IPv6地址转域名

标签 c networking network-programming ipv6 getaddrinfo

我正在搜索一个将 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); 返回错误“没有地址与 hotname 关联”。

EDIT2:我同意你的看法,我在使用 IPV6 系统时遇到了问题,我试过了 http://test-ipv6.com/似乎我没有 IPV6 地址,但使用 ifconfig 它返回:

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

最佳答案

我认为您没有有效的 IPv6 配置。 getaddrinfo() 将只返回可访问的 IPv6 答案,因此如果您的系统没有具有全局范围的 IPv6 地址和到已解析地址的路由,则结果将从结果集中删除。

基本思想是您调用一次 getaddrinfo 并获得要连接的地址列表——如果该列表包含无法访问的地址,程序在尝试之前必须先遇到超时另一个地址。

“不支持主机名的地址族”意味着它已经识别出该地址是不需要通过 DNS 解析的 IPv6 地址,因此它尝试将其与允许的地址族列表进行匹配,失败并返回错误.

解析主机名会尝试获取主机名的“A”记录,因为这适用于本地支持的唯一地址系列。不存在该记录,因此返回不存在记录的信息。由于它从未询问过 IPv6 地址(那将毫无意义),因此它不会在这里提示地址族不匹配。

关于c - IPv6地址转域名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5985470/

相关文章:

c - 如何从字符数组中提取子字符数组

c - 如果 (n!=0) n=0; v/s n=0;哪个更有效,为什么?

linux - Windows 中的 AF_UNIX

java - 使用 Java 程序通信时创建的 HTTP、TCP 数据包在哪里?

c# - 通过 LAN 发送数据最快的方法是什么?

c++ - C++ 中通过网络的进程间通信

c++ - 将变量传递给函数的成本

c 一个数组到另一个数组的大小

java - java中的网络通信加密

有效网络掩码的 c 代码