ホスト名に対応する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 |
