libresolvを使用して、DNSサーバへの要求を実行しています。dnsキャッシュでres_queryを動作させるには?
また、私はローカルDNSキャッシュを使用しています。 (dnsmasq/unbound)
を使用すると、たとえばdig google.com
と要求がキャッシュされ、次の要求ではキャッシュされた値が使用されます。
我々はdnsmasqのログでこれを見ることができます:
Nov 9 10:46:46 y dnsmasq[24003]: query[A] google.com from 127.0.0.1
Nov 9 10:46:46 y dnsmasq[24003]: forwarded google.com to **.**.**.**
Nov 9 10:46:46 y dnsmasq[24003]: reply google.com is 173.194.32.165
Nov 9 10:46:46 y dnsmasq[24003]: reply google.com is 173.194.32.160
Nov 9 10:46:49 y dnsmasq[24003]: query[A] google.com from 127.0.0.1
Nov 9 10:46:49 y dnsmasq[24003]: cached google.com is 173.194.32.165
Nov 9 10:46:49 y dnsmasq[24003]: cached google.com is 173.194.32.168
その後、私はres_query
を使用して、私はこれを取得:DNSサーバーからの応答がDNSに当たらないように
Nov 9 10:50:29 y dnsmasq[24003]: query[MX] google.com from 127.0.0.1
Nov 9 10:50:29 y dnsmasq[24003]: forwarded google.com to **.**.**.**
Nov 9 10:50:29 y dnsmasq[24003]: forwarded google.com to **.**.**.**
Nov 9 10:51:13 y dnsmasq[24003]: query[MX] google.com from 127.0.0.1
Nov 9 10:51:13 y dnsmasq[24003]: forwarded google.com to **.**.**.**
Nov 9 10:51:13 y dnsmasq[24003]: forwarded google.com to **.**.**.**
だからそれが見えますキャッシュされ、キャッシュされません。
res_query
からリクエストをキャッシュする方法はありますか?
これは私がDNSリゾルバへの要求を作っている方法です:
struct __res_state dnsstate;
int rc = res_ninit(&dnsstate);
if (rc < 0) {
return result;
}
dnsstate.retrans = timeout;
int len = res_nquery(&dnsstate, domain.c_str(), ns_c_in, ns_t_mx, nsbuf, sizeof(nsbuf));
私はres_nqueryは、ローカルDNSキャッシュをチェックしません、とDIGが行うこととします。
@Alnitakええと、私は管理者にlibresolvの仕組みについて尋ねるべきですか? Stackoverflowは非常にばかげた質問をする場所になった。 – Yaroslav
私は質問を誤解している可能性があります(今は分かりませんが、私は暴動の9時間があり、睡眠は3時間しかありませんでした)が、書かれているとおり、あなたが何を求めているのかは分かりません。 tcpdumpを見て、libresolvが送信しているものと送信しているものとの違いを(もしあれば)調べてみてください。また、libresolvを使用している_how_を表示するコードを表示することもできます。 – Alnitak
@Alnitak私は質問にいくつかのコードを入れました。 tcpdumpを使ってアドバイスしてください。私はすでにそれを試した。 res_nqueryのようなものはまだdnsをチェックするためのパケットを送信しますが、digは何も送信せず、dnsキャッシュをチェックします。 res_nqueryはDNSへのストレートリクエストでしか動作しないようです – Yaroslav