如何读取本地DNS缓存内容?

Han*_* N. 48 linux cache dns

我知道在 Windows 上我可以发出ipconfig /displaydns并看到本地 DNS 的缓存内容。

如何在 Linux 中列出 DNS 的缓存内容?

我想获得尽可能多的跨发行版解决方案。

Ser*_*ndt 22

在 之前systemd,几乎没有操作系统级别的 DNS 缓存

在此之前,systemdLinux(可能还有大多数 Unix)上没有操作系统级别的 DNS 缓存,除非nscddnsmasq已安装并运行。

即便如此,nscd至少在 Debian 中默认情况下禁用了的 DNS 缓存功能,仅仅是因为它已损坏

至于dnsmasq,默认情况下缓存似乎发生在 RAM 中

  • 并且*这些天,任何使用`systemd`的东西都可能默认运行`systemd-resolved`,它会根据它们的TTL缓存DNS结果 (3认同)
  • 现在很多系统默认使用 `dnsmasq`,所以 https://unix.stackexchange.com/q/162973/79839 可能很有用。 (2认同)

Tim*_*edy 9

nscd是名称服务缓存守护进程。这是 Linux、Solaris 和其他用于缓存名称服务查找的实用程序。本例中的名称服务是一个通用术语,不仅限于主机解析,还包括用户、组等。

我不知道有什么方法可以查看缓存的实际内容,但您可以使用/usr/sbin/nscd -g.

这至少可以向您展示缓存的效率,尽管不完全是它正在解决的问题。

如果您使用备用缓存工具(如 DNSMASQ),您可能还有其他选择。


Ste*_*veK 5

如果您正在使用nscd,您可以通过显示二进制缓存文件中的 ASCII 字符串来查看内容(可能还有一些其他垃圾)。在 Debian/Ubuntu 中,该文件/var/cache/nscd/hosts用于主机/DNS 缓存,因此您可以运行strings /var/cache/nscd/hosts以查看缓存中的主机。

请注意,这完全是一种黑客攻击,因为在nscd不解码二进制格式的情况下似乎没有正确的方法来检查缓存。