アプリケーションからいくつかのホスト名を解決する必要があります。gethostbynameの代わりに、リゾルバーとして使用する独自のDNSサーバーをパラメーターとして指定できるものはありますか?
私はすでに自分の関数をコーディングしましたが、私が知らない関数があるかもしれないと思いました。
Linux/C言語を使用しています。私のlibcはuclibcです。しかし、GNULibCについても興味があります。
ありがとう。
アプリケーションからいくつかのホスト名を解決する必要があります。gethostbynameの代わりに、リゾルバーとして使用する独自のDNSサーバーをパラメーターとして指定できるものはありますか?
私はすでに自分の関数をコーディングしましたが、私が知らない関数があるかもしれないと思いました。
Linux/C言語を使用しています。私のlibcはuclibcです。しかし、GNULibCについても興味があります。
ありがとう。
独自のクエリを実行する必要がありますが、それは難しくありません。
これを行うには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など)も取得できるという追加の利点があります。それでも、同じように機能する小さなものがある場合は、それを使用しない意味はありません。
デフォルトのDNSを変更し、独自のDNSサーバーを使用して、アプリケーションでDNSサービスを使い終わったら、元のDNSに戻すことができます。
最初にDNSを照会し、古いDNSを保存します。
新しいDNSを設定する
DNSサービスを実行します
オリジナルを元に戻す
基本的に、上記のすべての手順は、Linuxのhttp://linux.die.net/man/3/resolverコマンドで実行/etc/resolv.conf
できる編集によって実行されます。