getent主机打印IPv6,getent ahosts打印IPv4


9

我终端的逐字输出:

$ 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    

我认为他们(至少是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

编辑:看起来它可能与此错误报告有关


标题是错误的(与输出相反)
whoan

Answers:


8

双方getent hostsgetent ahosts有可能打印IPv4和IPv6地址,但他们决定哪些地址(ES)来打印不同(这是有两个不同的命令的点)。

hosts调用gethostbyname2(支持IPv6的变体gethostbyname)。该行为是硬编码的:查找IPv6地址,如果不存在,则查找IPv4地址。

ahosts来电getaddrinfo。此函数枚举给定名称的所有协议,因此它可以在同一调用中返回IPv4和IPv6地址。返回的内容取决于中的设置/etc/gai.conf。由于许多应用程序仍在努力应对IPv6,因此默认情况下,大多数发行版都更喜欢IPv4,仅在显式请求下才使用IPv6。

关于Stack Exchange ahosts及其gai.conf周围的一些有用的阅读:

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.