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

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

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

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

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

答案1

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

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

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

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

答案2

nscd是名称服务缓存守护进程。这是 Linux、Solaris 和其他操作系统用来缓存名称服务查找的实用程序。这里的名称服务是一个通用术语,并不严格限于主机解析,还包括用户、组等。

我不知道如何查看缓存的实际内容,尽管您可以使用/usr/sbin/nscd -g.

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

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

答案3

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

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

答案4

您可以将 SIGUSR1 发送到 systemd-resolved 进程以使用 journalctl 查看缓存。

killall -USR1 systemd-resolved && journalctl -u systemd-resolved | grep -A 100000 "CACHE:"

相关内容