Дословный вывод с моего терминала:
$ 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
Изменить : Похоже, это может быть связано с этим сообщением об ошибке .
Ответы:
Оба
getent hosts
иgetent ahosts
потенциально могут печатать адреса как IPv4, так и IPv6, но они решают, какой адрес (а) печатать по-разному (это смысл наличия двух разных команд).hosts
звонкиgethostbyname2
(вариант с поддержкой IPv6gethostbyname
). Поведение жестко запрограммировано : ищите адрес IPv6, а если его нет, ищите адрес IPv4.ahosts
звонкиgetaddrinfo
. Эта функция перечисляет все протоколы для данного имени, поэтому она может возвращать адреса IPv4 и IPv6 в одном вызове. То, что он возвращает, определяется настройками в/etc/gai.conf
. Поскольку многие приложения все еще пытаются справиться с IPv6, большинство дистрибутивов предпочитают IPv4 по умолчанию и используют IPv6 только по явному запросу.Некоторое полезное чтение на
ahosts
иgai.conf
вокруг Stack Exchange:источник