我的终端逐字输出:
$ getent hosts example.org
2001:500:88:200::10 example.org
$ getent ahosts example.org
192.0.43.10 STREAM 43-10.any.icann.org
192.0.43.10 DGRAM
192.0.43.10 RAW
Run Code Online (Sandbox Code Playgroud)
我认为它们(至少ahosts)都应该打印 IPv4 和 IPv6 地址。为什么这些打印不同的地址类型?
$ uname -srvmpio
Linux 3.2.0-31-generic #50-Ubuntu SMP Fri Sep 7 16:17:36 UTC 2012 i686 i686 i386 GNU/Linux
Run Code Online (Sandbox Code Playgroud)
编辑:看起来它可能与此错误报告有关。
Gil*_*il' 12
双方getent hosts
并getent ahosts
有可能打印IPv4和IPv6地址,但他们决定哪些地址(ES)来打印不同(这是有两个不同的命令的点)。
hosts
调用gethostbyname2
(支持 IPv6 的变体gethostbyname
)。该行为是硬编码的:查找 IPv6 地址,如果不存在,则查找 IPv4 地址。
ahosts
调用getaddrinfo
。此函数枚举给定名称的所有协议,因此它可以在同一调用中返回 IPv4 和 IPv6 地址。它返回的内容由 中的设置决定/etc/gai.conf
。由于许多应用程序仍在努力应对 IPv6,因此大多数发行版默认更喜欢 IPv4,并且仅通过显式请求使用 IPv6。
Stack Exchangeahosts
及其gai.conf
周围的一些有用阅读: