これまでに説明したソリューションは、ほとんど単純なケースで機能します。ホスト名は、単一のIPv4アドレスに直接解決されます。ホスト名を解決する必要があるのはこれだけの場合がありますが、そうでない場合は、処理する必要がある場合のいくつかのケースについて説明します。
Chris DownとHeinziは、ホスト名が複数のIPアドレスに解決されるケースについて簡単に説明しました。この場合(および以下のその他の場合)、ホスト名が直接単一のIPアドレスに解決されるという仮定の下での基本的なスクリプトが壊れる可能性があります。以下に、ホスト名が複数のIPアドレスに解決される例を示します。
$ host www.l.google.com
www.l.google.com has address 209.85.148.147
www.l.google.com has address 209.85.148.103
www.l.google.com has address 209.85.148.99
www.l.google.com has address 209.85.148.106
www.l.google.com has address 209.85.148.105
www.l.google.com has address 209.85.148.104
しかし、何www.l.google.com
ですか?ここでエイリアスのケースを導入する必要があります。以下の例を確認してみましょう。
$ host www.google.com
www.google.com is an alias for www.l.google.com.
www.l.google.com has address 74.125.39.103
www.l.google.com has address 74.125.39.147
www.l.google.com has address 74.125.39.105
www.l.google.com has address 74.125.39.99
www.l.google.com has address 74.125.39.106
www.l.google.com has address 74.125.39.104
だから、www.google.com
直接IPアドレスに、それ自体が複数のIPアドレスに解決されることをエイリアスに解決されません。エイリアスの詳細については、こちらをご覧ください。もちろん、以下に示すように、エイリアスに単一のIPアドレスがある場合も可能です。
$ host g.www.ms.akadns.net
g.www.ms.akadns.net is an alias for lb1.www.ms.akadns.net.
lb1.www.ms.akadns.net has address 207.46.19.190
しかし、エイリアスは連鎖できますか?答えはイエスです。
$ host www.microsoft.com
www.microsoft.com is an alias for toggle.www.ms.akadns.net.
toggle.www.ms.akadns.net is an alias for g.www.ms.akadns.net.
g.www.ms.akadns.net is an alias for lb1.www.ms.akadns.net.
lb1.www.ms.akadns.net has address 207.46.19.254
$ host www.google.fr
www.google.fr is an alias for www.google.com.
www.google.com is an alias for www.l.google.com.
www.l.google.com has address 74.125.39.147
www.l.google.com has address 74.125.39.103
www.l.google.com has address 74.125.39.99
www.l.google.com has address 74.125.39.106
www.l.google.com has address 74.125.39.104
www.l.google.com has address 74.125.39.105
ホスト名がIPアドレスに解決されないエイリアスに解決される例は見つかりませんでしたが、その場合が発生する可能性があると思います。
複数のIPアドレスとエイリアス以外にも、特別なケースがいくつかあります... IPv6はどうですか?あなたが試すことができます:
$ host ipv6.google.com
ipv6.google.com is an alias for ipv6.l.google.com.
ipv6.l.google.com has IPv6 address 2a00:1450:8007::68
ホスト名ipv6.google.com
はIPv6のみのホスト名です。デュアルスタックホスト名はどうですか:
$ host www.facebook.com
www.facebook.com has address 66.220.153.15
www.facebook.com has IPv6 address 2620:0:1c08:4000:face:b00c::
繰り返しになりますが、ホストがIPv4のみの場合、IPv6アドレスを解決できます(IPv4のみのWinXPでテストし、ipv6.google.comでテストすると、Linuxで試すことができます)。この場合、解決は成功しますが、pingは失敗し、不明なホストエラーメッセージが表示されます。これは、スクリプトが失敗する場合があります。
これらの発言が役に立つことを願っています。
getent <ahosts|ahostsv4|ahostsv6|hosts> <hostname>
答えが下の近くのどこかにあるのは残念です。これは最も単純で、追加のパッケージを必要とせず、Bashスクリプトからも解析が簡単です。