2

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

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

4

2 回答 2

2

由于目标是测量延迟等。对于真正的 DNS 请求,您有几个选择。

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

如我所见,您的选择是:

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

android下有两种DNS缓存

  1. 爪哇:2s
  2. Native:dns响应TTL时间逻辑

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

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

PSPS: 由于我的要求是测量延迟,最后我用 OKHttp 和它的DNS 接口发出请求,使用这个接口,只需从 SystemProperties 获取 DNS 并自己进行 DNS 查询(UDP)

于 2019-11-27T08:42:40.010 回答