Android 刷新应用程序下的 DNS 缓存



我正在为连接质量做一些事情,所以我每次做 A 时都需要刷新 DNS 缓存。请求(不是系统缓存,因为它可能会导致其他问题(,我抬头我没有找到这样做的方法,

那么有什么机制可以做到这一点吗?

由于目标是测量实际DNS请求的延迟.etc.,因此您有几个选择。

不幸的是,我认为您无法强制设备将DNS缓存清除为Android上的常规应用程序。我的理由是,如果您继续这样做,这可能会导致拒绝向其他应用程序提供服务。我还没有在 android 中看到任何允许这样做的权限,除非您有根设备。

在我看来,您的选择是:

  1. 要求你的用户拥有root设备,并执行Linux所做的一切。
  2. 使用具有低 TTL 的记录运行您自己的 DNS 服务器,以便您可以进行网络调用、获取统计信息并在下一个请求之前等待配置的 TTL。这有一些注意事项。
    • 某些域注册机构不允许您设置非常小的 TTL,因为这可能会使其服务器过载。购买前检查。Azure和AWS提供托管DNS,你可以使用它们。
    • Android 操作系统或中间的任何其他 DNS 服务器可能会决定不尊重 TTL 以防止它们过载。
    • 当连接到家庭或更可能是公司 WiFi 时,基础设施/IDS 可能会标记设备,因为这看起来非常像来自外部的 DNS 重新绑定攻击。
    • Android上有一个错误,使他们不尊重JellyBean以下版本的DNS TTL。

安卓下有两种DNS缓存

  1. 爪哇:2s
  2. 本机:DNS 响应 TTL 时间逻辑

它在接口下并且没有暴露,所以我无法强制它在没有缓存的情况下进行DNS查询

PS:如果你有root,你可以用ndc命令清除

PSPS:由于我的要求是测量延迟,最后我用OKHttp和它的DNS接口提出了我的请求,有了这个接口,只需从系统属性中获取DNS并自己进行DNS查询(UDP(

最新更新