/etc/hostsを読むプログラム/アプリケーションまたはスクリプト

/etc/hostsを読むプログラム/アプリケーションまたはスクリプト

名前解決が必要なときに/ etc / hostsを開いて読み取るプログラムまたはスクリプトの名前は何ですか? Linux/Unixディストリビューションによって異なりますか?

ホストのマニュアルページを読み、whereisでホストというバイナリを見つけようとしましたが、whereisは/etc/hosts.allowや/etc/hosts.denyなどのファイル名を出力します。私はHosts.allowとHost.denyがTCPWrappers用の設定ファイルであるという印象を受け、それを始めたときよりもはるかに混乱しています。

ベストアンサー1

具体的ではないプログラムこのファイルを解析します。

多くの標準ファイル(例/etc/hosts:)は、標準ライブラリファイル(例:)によって解析されますgethostbyname(3)。しかし、物語ははるかに複雑かもしれません。

ホスト名解決は通常/etc/nsswitch.conf

例えば

% grep hosts /etc/nsswitch.conf
hosts:      files dns

このエントリはパーサールーチンに「ファイル」バックエンドを使用し、そこで結果が見つからない場合はDNSルックアップを実行するように指示します。ここに別の値(たとえば、ldapまたはnis)を入力すると、ホスト名の検索方法が変わる可能性があります。

これらのルーチンはしばしば「名前指定サービス」と呼ばれます。ユーザー名照会(passwd)、グループ項目(group)などにも同じ概念が使用されます。

したがって、これを行うと、ping a.remote.hostプログラムpingはglibcライブラリ関数を呼び出してロードされますnsswitch.conf。その結果、pingライブラリと NS ルーチンが独自に作業を実行するのを見ることはできません。

名前検索を実行するために使用できる名前検索と呼ばれるプログラムがありますgetent。 「データベース」(データベース内の項目の1つnsswitch.conf)と検索する値を指定します。

だから

getent hosts a.remote.host

名前の検索は、で定義されている規則に従って行われますnsswitch.conf。これはテスト目的に便利で、時にはスクリプトに役立ちます。

---付録----

この情報は以下のStephenのコメントからのものですが、非常に役に立つので、彼の答えに追加します。

strace getent hosts www.google.com 2>&1 | grep libnss_

名前の解決に使用するライブラリ(またはなし)を教えてください。と書いてあると使われるlibnss_files/etc/hostsです。これが表示されると、libnss_dnsDNSが使用されます。libnss_myhostname何も機能しておらず、バックアップGNUシステムが機能していないことを意味します(そしておそらくすでに失敗している可能性があります)。リストされているライブラリがない場合は、おそらく数値アドレス(たとえば)を使用しているので、127.0.0.1パーサーは必要ありません。

おすすめ記事