私はシェル内にいて、ホスト名に対応する IP アドレスを知りたいです。
Perl、PHP、Python、またはその他のスクリプト言語(おそらくawkでも!)でこれを実行できることはわかっています。これが回避策になりますが、これを行うためのコマンドラインツールや、単純なラッパーが存在しないことに驚いていますgetaddrinfo()
。
私が間違っているでしょうか? 何かありますか? host
、dig
および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/).*$//'
)
}