ホスト名検索を行うための標準のコマンドライン ツールはありますか?

ホスト名検索を行うための標準のコマンドライン ツールはありますか?

私はシェル内にいて、ホスト名に対応する IP アドレスを知りたいです。

Perl、PHP、Python、またはその他のスクリプト言語(おそらくawkでも!)でこれを実行できることはわかっています。これが回避策になりますが、これを行うためのコマンドラインツールや、単純なラッパーが存在しないことに驚いていますgetaddrinfo()

私が間違っているでしょうか? 何かありますか? hostdigおよびgetentカウントしません。私が欲しいのは、libc を使用し、 に従って動作するもの/etc/nsswitch.confで、おそらくデフォルトでどの (Linux) システムにもインストールされているものです。

ここから移動しましたhttps://stackoverflow.com/questions/20211326/ホスト名ルックアップを行うための標準的なコマンドラインツールはありますか?

回答: 私が間違っていました。getentを排他的に検索するのではなく/etc/hosts、実際に適切な検索を実行します。

答え1

ホスト名検索を行う従来のツールは、bind の nslookup ですが、これは dig に置き換えられています。どちらのツールも DNS 専用であり、nsswitch を使用しません。getent hosts は nsswitch を使用しますが、あまり使用されていません。

答え2

getentは確かにこの作業に適したツールですが、残念ながらどこでも利用できるわけではありません。その理由の 1 つは、POSIX で定義されていないため必須ではないことです。

一方、標準で指定されていないものの、arp名前解決を行うサーバーで使用できない可能性は非常に低いです。arp次のnsswitch.conf設定では、 のみが使用されlibc、Linux/Unix システムで使用でき、実装間で一貫性があると思われる出力を提供するため、その出力を解析することで目的を達成できます。

$ arp stackoverflow.com | sed -e 's/.*(//' -e 's/).*$//'
198.252.206.16

以下は、一部の特殊なケースで異なる出力形式に切り替わる Linux arp の問題を回避する、この方法を使用するシェル関数です。

resolve()
{
  : ${1:?Usage: resolve name}
  (
    PATH=$PATH:/usr/sbin
    ao=$(arp $1)
    [ "$(echo "$ao"|grep HWaddress)" ] && ao=$(arp -a $1)
    echo "$ao" | sed -e 's/.*(//' -e 's/).*$//'
  )
}

関連情報