c++ - 如何使 res_query 与 dns 缓存一起工作?

标签 c++ c caching dns libresolv

我正在使用 libresolv 执行对 DNS 服务器的请求。

我还使用本地 dns 缓存。 (dnsmasq/未绑定(bind))

当我使用 dig 时,例如 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 得到这个:

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 **.**.**.**

所以看起来 dns 服务器的响应没有命中 dns 缓存,也没有被缓存。

有什么方法可以缓存来自 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 会。

最佳答案

dig 和 res_nquery() 都会将查询发送到您的 /etc/resolv.conf 文件中的任何内容,即您的 dnsmasq 实例。两者还将默认设置 RD 位以请求递归。

dnsmasq 然后将从缓存中提供答案,或者如果 TTL 已过期则去获取它们。然而,据我所知,客户端可以设置的 DNS 协议(protocol)本身(因此 res_nquery 设置中也没有任何内容)会影响该行为

关于c++ - 如何使 res_query 与 dns 缓存一起工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40502207/

相关文章:

c++ - 控制 `T` 绑定(bind)什么样的引用

c++ - vundle 不能与 ftplugin 一起正常工作

c++ - 当小部件太大时的 Gtk 3

c - 评论 2 免费时出现段错误(推箱子游戏)

html - iOS7 主屏幕应用程序似乎不使用 AppCache list

cakephp - 在 CakePHP 3 中即时更改缓存配置

c# - 字典查找与数组查找;数组分配与字典分配

c - Linux,不能包含系统模块

mysql - 搜索非常大的彩虹表文件

php - 大流量下的网站PHP+MySQL