我的终端逐字输出:
$ 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
我以为他们都是(至少主机)应该打印 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
编辑: 看来可能有关系这个错误报告。
答案1
getent hosts
和都getent ahosts
可以打印 IPv4 和 IPv6 地址,但它们决定以不同方式打印哪个地址(这就是使用两个不同命令的要点)。
hosts
来电gethostbyname2
(支持 IPv6 的变体gethostbyname
)。行为是硬编码的:查找IPv6地址,如果不存在,则查找IPv4地址。
ahosts
来电getaddrinfo
。此函数枚举给定名称的所有协议,因此它可以在同一调用中返回 IPv4 和 IPv6 地址。它返回的内容由中的设置决定/etc/gai.conf
。由于许多应用程序仍在努力应对 IPv6,因此大多数发行版默认情况下更喜欢 IPv4,并且仅在明确请求时才使用 IPv6。
关于Stack Exchangeahosts
及其周围的一些有用的读物:gai.conf