偶尔,我需要对我的本地 DNS 缓存进行一次焦土清理。最常见的情况是,我使用 OpenDNS,当名称解析失败时(它是我本地网络上的主机名,但未运行),OpenDNS 会将我发送到他们可爱的广告页面。然后,一旦 DNS 问题得到解决,我仍然会解析到 OpenDNS。这种情况实际上不再经常发生,但偶尔,我还是需要重新开始使用我的 DNS。
现在,如果你有可能回答我的问题,我相信你会知道现代计算机到处隐藏 DNS 缓存。你的操作系统有它,你的浏览器有它,你的其他浏览器也有它,如果你正在运行 DNSMasq(我正在运行),那么你也必须清除它。所以我写了一个小的 shell 脚本来清除大部分这些缓存,但浏览器 DNS 缓存仍然需要手动完成。
在 Chrome 上,我转到 chrome://net-internals/#dns,然后单击“清除主机缓存”
在 Firefox 上,我确信有类似的过程,只是不知道它是什么。
但是,我真的很想从命令行清除这两者,这样我就可以将它们集成到我的 DNS-burninate 脚本中。这可以做到吗?如果可以,怎么做?
如果 Chrome 或 Firefox 提供命令行界面来执行此操作,那就太酷了。
如果不是,我假设 DNS 缓存存储在一个文件或一组文件中(这是真的吗,还是它们都存储在 RAM 中?)。如果我们可以识别这些文件并删除它们,也许会产生同样的效果?这样做有效吗,还是会破坏一切?这些文件在哪里?
还有其他想法吗?
答案1
Chrome/Chromium 的 DNS 缓存全部位于 RAM 中。看来彻底重启 Chrome 必然会将其清除。
Chromium 主机缓存源代码净/dns/host_cache.cc似乎没有将任何内容提交到硬盘以进行持久保存。我只能假设官方的 Google Chrome 也做了同样的事情。
Firefox 也是如此。似乎只需重新启动 Firefox 即可清除缓存,因为dom/html/HTMLDNSPrefetch.cpp(已移动2021 年 1 月)也不建议将其提交到硬盘。
答案2
您可以尝试清理 Windows(或 Linux)的 DNS 缓存
如果您使用 Windows,请执行以下操作:
1)以管理员身份运行命令提示符
2)写入以下内容:
ipconfig /flushdns
然后按回车键。
您还可以通过输入以下内容来检查 DNS 缓存:
ipconfig /displaydns
如果你使用 Linux,请尝试以下操作:
1)以 root 身份打开命令终端
2)运行命令
/etc/init.d/nscd restart
您还可以使用此 Firefox 插件来清除 DNS 缓存:DNS 刷新器
答案3
使用私人浏览器窗口打开相关站点/页面。这将忽略 Firefox 的其他 DNS 缓存(我发现这些缓存可能会持续存在)。一旦在私人浏览器窗口中访问了域,它应该可以在常规窗口中正常工作。此操作的命令行选项为:
firefox -private-window URL