3

アプリケーションからいくつかのホスト名を解決する必要があります。gethostbynameの代わりに、リゾルバーとして使用する独自のDNSサーバーをパラメーターとして指定できるものはありますか?

私はすでに自分の関数をコーディングしましたが、私が知らない関数があるかもしれないと思いました。

Linux/C言語を使用しています。私のlibcはuclibcです。しかし、GNULibCについても興味があります。

ありがとう。

4

2 に答える 2

5

独自のクエリを実行する必要がありますが、それは難しくありません。

これを行うにはres_query()、環境変数を介してリゾルバーを指定できる関数ファミリーを使用する必要があります。

res_init()関数は、構成ファイル(resolv.conf(5)を参照)を読み取り、デフォルトのドメイン名、検索順序、およびネームサーバーアドレスを取得します。サーバーが指定されていない場合は、ローカルホストが試されます。ドメインが指定されていない場合は、ローカルホストに関連付けられているドメインが使用されます。環境変数LOCALDOMAINでオーバーライドできます

IBMのドキュメントでは、変数の設定方法についてもう少し詳しく説明しています。

構成された検索リスト(structstate.defdnameおよびstructstate.dnsrch)は、環境変数LOCALDOMAINを、合計256文字(スペースを含む)の最大6つの検索ドメインのスペース区切りリストに設定することでオーバーライドできます。検索リストが指定されている場合、デフォルトのローカルドメインはクエリで使用されません。

ノート -

  • を呼び出すsetenv()前に電話する必要res_init()があります。そうしないと、設定が取得されません。該当する場合は、一度設定を解除することを忘れないでください

  • 検索ドメインにホスト名を使用する場合/etc/hostsでも、が優先されます。

  • res_init()2007年にuclibcで適切に再入可能にされたので、どんな目的にも使用できると確信しています。

これらの関数には、より詳細なデータ(MXなど)も取得できるという追加の利点があります。それでも、同じように機能する小さなものがある場合は、それを使用しない意味はありません。

于 2012-10-26T07:39:05.960 に答える
1

デフォルトのDNSを変更し、独自のDNSサーバーを使用して、アプリケーションでDNSサービスを使い終わったら、元のDNSに戻すことができます。

  1. 最初にDNSを照会し、古いDNSを保存します。

  2. 新しいDNSを設定する

  3. DNSサービスを実行します

  4. オリジナルを元に戻す

基本的に、上記のすべての手順は、Linuxのhttp://linux.die.net/man/3/resolverコマンドで実行/etc/resolv.confできる編集によって実行されます。

于 2012-10-26T07:37:35.740 に答える