Windows 8.1 上的 DNS 缓存位于哪里?

Windows 8.1 上的 DNS 缓存位于哪里?

我正在阅读有关 DNS 缓存的文章,特别是有关ipconfig /flushdns命令的文章。有很多资源(QA、博客、网站)解释了什么是 DNS 缓存,但没有一个说在哪里DNS 缓存位于我的 Windows 8.1 计算机上。如果我没记错的话,它应该是一个带有映射的文件,如下所示:

example.com 123.123.123.123
foo.net 123.123.0.0

在运行之前ipconfig /flushdns,我想查看 DNS 缓存文件。在我的计算机上哪里可以找到它?

答案1

如果您想查看 DNS 缓存,最新版本的 Microsoft Windows 支持IPConfig /displaydns

(我认为 Windows 98 不支持它;Win98 也不支持ipconfig /flushdns。我猜这两个选项都添加到了同一版本的 Microsoft Windows 中。)

这是查看此类信息的典型/简单方法。

我不确定这些信息存储在哪个文件中。我很确定它不使用您显示的类似 HOSTS 的格式,因为我确定它还会跟踪到期时间。使用 Process Explorer 可能有助于找出使用时访问了哪个文件IPConfig/displaydns

答案2

只是为了支持其他人所说的内容,使用Process Hacker搜索字符串,svchost.exe您可以看到存储在内存中的条目。例如。

在此处输入图片描述

与简单使用相比,输出远没有那么有用(如果您愿意,ipconfig /displaydns您可以随时使用它输出到文件中) 。ipconfig /displaydns>output.txt

答案3

缓存可能保存在内存中,并且本地 DNS 服务可能不会保留缓存文件,但还有更多内容。

我的 ipconfig /displaydns 在每次重启之间都会保留条目。它必须保存在磁盘上的某个地方。

我今天遇到了 DNS 问题,在检查旧虚拟机时,我在本地 DNS 缓存中发现了一些非常旧的条目。这些条目来自我以前的公司,起初我以为他们可能在入侵,或者我仍然以某种方式连接到他们的网络。但它们也包含我自己的一些很久以前的虚拟机条目。

ipconfig /flushdns 不会清除条目。我尝试停止并重新启动 dns 服务。没有帮助。我断开了路由器与互联网的连接,但条目仍然保留。然后我记得那个虚拟机很久以前曾经是域控制器和 dns 服务器,所以我怀疑有些东西没有正确卸载。

我使用了 procman.exe 并隔离了响应 ping 请求的 svchost.exe 实例。在 ping 时,它打开了 hosts 文件,没有其他任何东西。我真傻,我应该在开始这一切之前检查一下 hosts 文件。所有旧条目都在 hosts 文件中。一旦它们被清除,它们就不会出现在 ipconfig /displaydns 中。

当本地 DNS 服务停止并重新启动时,现有条目将被清除,因此这往往证实它们仅保存在缓存中。但是,是的,通过本地 DNS 进行 ping 使用的持久 ipconfig dns 条目位于 c:\windows\system32\drivers\etc\hosts。

希望这可以帮助其他试图解决此问题的人。

相关内容