- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在使用 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/
是res_query (int res_query(const char *dname, int class, int type,unsigned char *answer, int anslen);
我正在使用 libresolv 执行对 DNS 服务器的请求。 我还使用本地 dns 缓存。 (dnsmasq/未绑定(bind)) 当我使用 dig 时,例如 dig google.com,请求被缓
我是一名优秀的程序员,十分优秀!