ホスト名に対応するIPv4とIPv6のアドレスをすべて確認したいときは、getent ahostsを使う。

$ getent ahosts example.com
172.66.147.243  STREAM example.com
172.66.147.243  DGRAM  
172.66.147.243  RAW    
104.20.23.154   STREAM 
104.20.23.154   DGRAM  
104.20.23.154   RAW    

getent hostsは、同じ名前にIPv6のアドレスがあるとIPv6のアドレスだけを返す。getent ahostsは、IPv4とIPv6の両方を含め、名前解決で得られたアドレスをソケットタイプごとに返す。実行例はUbuntu 24.04(glibc 2.39)のもの。

参考: 【getent】/etc/hostsを含む実際の名前解決の結果を確認する (hosts)

出力の読み方

出力は3列である。

列内容
1列目IPアドレス
2列目ソケットタイプ(STREAMはTCPなどのストリーム、DGRAMはUDPなどのデータグラム、RAWはRAWソケット)
3列目正規名(先頭の行にだけ表示される)

1つのアドレスにつきソケットタイプごとに3行が出力される。アドレスだけを一覧したいときは、STREAMの行に絞る。

$ getent ahosts example.com | awk '$2=="STREAM"{print $1}'
172.66.147.243
104.20.23.154

3列目の正規名は、別名で引いたときに本来の名前を確認するために使える。/etc/hostsに10.3.3.3 canon.test alias1.testと書いた環境では、別名のalias1.testで引いても正規名のcanon.testが表示される。

$ getent ahosts alias1.test
10.3.3.3        STREAM canon.test
10.3.3.3        DGRAM  
10.3.3.3        RAW    

IPv4かIPv6だけに絞る

ahostsv4はIPv4のアドレスだけ、ahostsv6はIPv6のアドレスだけを返す。

$ getent ahostsv4 example.com
172.66.147.243  STREAM example.com
172.66.147.243  DGRAM  
172.66.147.243  RAW    
104.20.23.154   STREAM 
104.20.23.154   DGRAM  
104.20.23.154   RAW    

該当するアドレスが無いと、何も表示せず終了コードは2になる。

$ getent ahostsv6 myserver.test
$ echo $?
2

IPv6のアドレスが表示されないとき

/etc/hostsに、同じ名前のIPv4とIPv6のアドレスを書いた環境で確認する。

10.1.1.1 dual.test
fd00::1 dual.test

getent ahostsにはIPv4のアドレスしか表示されない。

$ getent ahosts dual.test
10.1.1.1        STREAM dual.test
10.1.1.1        DGRAM  
10.1.1.1        RAW    

getent ahosts系は、実行環境で使えないアドレスの種類を結果から除外する。実行例のコンテナにはループバック以外のIPv6アドレスが無いので、IPv6のアドレスが除外された。この環境でahostsv6を指定すると、何も表示されない。

$ getent ahostsv6 dual.test
$ echo $?
2

-A(--no-addrconfig)を付けると、除外せずにすべてのアドレスを表示する。

$ getent ahosts -A dual.test
10.1.1.1        STREAM dual.test
10.1.1.1        DGRAM  
10.1.1.1        RAW    
fd00::1         STREAM 
fd00::1         DGRAM  
fd00::1         RAW    

localhostも同様である。-AなしではIPv4の127.0.0.1だけになり、-Aを付けると::1が先頭に表示される。

$ getent ahosts -A localhost
::1             STREAM localhost
::1             DGRAM  
::1             RAW    
127.0.0.1       STREAM 
127.0.0.1       DGRAM  
127.0.0.1       RAW    

-Aはahosts・ahostsv4・ahostsv6のオプションである。getent hostsには効かない。getent hostsは除外をしないため、もともとIPv6のアドレスが返る。

$ getent hosts dual.test
fd00::1         dual.test

状況に応じた使い分け

目的コマンド
名前解決の結果を手早く確認getent hosts
使えるすべてのアドレスの一覧getent ahosts
環境に関係なく、すべてのアドレスの一覧getent ahosts -A
IPv4だけ、またはIPv6だけの一覧getent ahostsv4 / getent ahostsv6