gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 03:26:50 25 4
gpt4 key购买 nike

我正在使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com