getent hostsは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

回答:


8

両方ともgetent hostsgetent ahostsIPv4アドレスとIPv6アドレスの両方を出力する可能性がありますが、それらはどのアドレスを異なる方法で出力するかを決定します(それが2つの異なるコマンドを持つポイントです)。

hosts呼び出しgethostbyname2(IPv6をサポートするバリアントgethostbyname)。動作はハードコーディングされています。IPv6アドレスを検索し、存在しない場合はIPv4アドレスを検索します。

ahostsを呼び出しますgetaddrinfo。この関数は、指定された名前のすべてのプロトコルを列挙するため、同じ呼び出しでIPv4アドレスとIPv6アドレスの両方を返すことができます。何が返されるかは、の設定によって決まります/etc/gai.conf。多くのアプリケーションはまだIPv6に対応するのに苦労しているため、ほとんどのディストリビューションはデフォルトでIPv4を好み、明示的な要求によってのみIPv6を使用します。

Stack Exchange ahostsgai.confその周辺で役立つ参考資料:

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.