Dokładne wyjście z mojego terminala:
$ 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
Myślałem, że oboje (przynajmniej ahosts ) powinni drukować zarówno adresy IPv4, jak i IPv6. Dlaczego drukują różne typy adresów?
$ uname -srvmpio
Linux 3.2.0-31-generic #50-Ubuntu SMP Fri Sep 7 16:17:36 UTC 2012 i686 i686 i386 GNU/Linux
Edycja : wygląda na to, że może to być związane z tym raportem błędu .
Odpowiedzi:
Zarówno
getent hosts
igetent ahosts
potencjalnie może drukować zarówno adresy IPv4 i IPv6, ale oni zdecydować, który adres (y), aby wydrukować inaczej (to jest sens posiadania dwóch różnych poleceń).hosts
połączeńgethostbyname2
(wariant obsługujący IPv6gethostbyname
). Zachowanie jest zakodowane na stałe : wyszukaj adres IPv6, a jeśli nie istnieje, wyszukaj adres IPv4.ahosts
połączeniagetaddrinfo
. Ta funkcja wylicza wszystkie protokoły dla danej nazwy, dzięki czemu może zwrócić adresy IPv4 i IPv6 w tym samym wywołaniu. To, co zwraca, zależy od ustawień w/etc/gai.conf
. Ponieważ wiele aplikacji wciąż ma trudności z poradzeniem sobie z IPv6, większość dystrybucji domyślnie preferuje IPv4 i używa IPv6 tylko na wyraźne żądanie.Kilka przydatnych lektur na temat
ahosts
igai.conf
wokół Stack Exchange:źródło