constr
に2つのネームサーバーを設定してから、res_search
を使用してURIのIPアドレスを検索します。解決済みのネームサーバーを確認する
2つのネームサーバーのどちらが解決を行ったかを簡単に知る方法はありますか?私はres_search
にトレースを設定してstdoutをキャプチャできることを知っていますが、私の状況ではそれは不可能です。ネームサーバーのアドレスは結果のどこかにありますか?
constr
に2つのネームサーバーを設定してから、res_search
を使用してURIのIPアドレスを検索します。解決済みのネームサーバーを確認する
2つのネームサーバーのどちらが解決を行ったかを簡単に知る方法はありますか?私はres_search
にトレースを設定してstdoutをキャプチャできることを知っていますが、私の状況ではそれは不可能です。ネームサーバーのアドレスは結果のどこかにありますか?
res_search()
の呼び出しの結果を調べるだけで、どのネームサーバーが結果を返すかを知る方法はありません。その情報は、上位レベルのUDPパケットヘッダーにのみ存在し、パケットが開封されてからlibresolv
になっても使用できなくなります。
res_send_setrhook()
または
_res.rhook = &funcptr;
最初のパラメータ:
しかし、libresolv
のバージョンに応じて、使用してリゾルバと「応答フック」を登録することでそれを行うことが可能であるように思われますフックコールバックに供給される応答は、応答を送信したサーバのstruct sockaddr *
になります。以下のコードは、MacOS Xの10.5.6で動作します:
#include <stdlib.h>
#include <stdio.h>
#include <resolv.h>
#include <netinet/in.h>
res_sendhookact hook(const struct sockaddr *ns,
const u_char *query,
int querylen,
u_char *ans,
int anssiz,
int *resplen)
{
fprintf(stderr, "answer returned from %s\n",
inet_ntoa(((struct sockaddr_in *)ns)->sin_addr));
return res_goahead;
}
main() {
res_init();
_res.rhook = hook;
res_search(...);
}
ところで、それはそのと呼ばれる考えるものサーバーを依頼する(主に)可能です:
含むTXT
レコードを返します
dig @server hostname.bind ch txt
サーバーのホスト名(機能がDNSサーバーソフトウェアに存在し、無効にされていない限り)。
これは、特定の「DNS Anycast Cloud」のどのサーバが現時点であなたにサービスしているかを識別するのに便利です。
タイトルは私を奇妙に感じます! – dirkgently
私は、OPがそれがポストのタイトルではなく彼の*タイトルであると考えていると思います。価値がある編集、私は思う... –
私は投票に投票しました: "belongs on serverfault.com"。 –