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    

Я думал, что они оба (по крайней мере, призраки ) должны печатать адреса 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

Изменить : Похоже, это может быть связано с этим сообщением об ошибке .

l0b0
источник
Название неверно (противоположно выводу)
whoan

Ответы:

8

Оба getent hostsи getent ahostsпотенциально могут печатать адреса как IPv4, так и IPv6, но они решают, какой адрес (а) печатать по-разному (это смысл наличия двух разных команд).

hostsзвонки gethostbyname2(вариант с поддержкой IPv6 gethostbyname). Поведение жестко запрограммировано : ищите адрес IPv6, а если его нет, ищите адрес IPv4.

ahostsзвонки getaddrinfo. Эта функция перечисляет все протоколы для данного имени, поэтому она может возвращать адреса IPv4 и IPv6 в одном вызове. То, что он возвращает, определяется настройками в /etc/gai.conf. Поскольку многие приложения все еще пытаются справиться с IPv6, большинство дистрибутивов предпочитают IPv4 по умолчанию и используют IPv6 только по явному запросу.

Некоторое полезное чтение на ahostsи gai.confвокруг Stack Exchange:

Жиль "ТАК - перестань быть злым"
источник