16

我正在使用 Fedora 18 和 avahi 命令行工具(版本 0.6.31)

我使用 avahi-resolve-host-name 来发现我的子网中单元的 IP 地址,以便在开发期间进行测试。我使用 Wireshark 监控请求和响应。在一个成功的请求和响应之后,Wireshark 上不会再显示更多请求,但该工具仍会返回一个 IP 地址。计算机/avahi守护进程/其他东西是否有可能“缓存”结果?

问题:我希望每次调用 avahi-resolve-host-name 都发送请求数据包。这可能吗?

原因:可以这么说,我得到了“误报”。我尝试解析“test1.local”,我得到了一个结果 IP,但该单元不再位于该 IP。我希望每次都发送请求,这样我就可以避免看到 IP 地址不正确的单元。

4

2 回答 2

7

我自己偶然发现了这个问题,并找到了不需要更改配置的解决方案。似乎简单地杀死守护进程 ( avahi-daemon --kill) 会刷新缓存。我在 Ubuntu 18.04 上,守护程序会自动重新启动。如果在其他发行版上它在被杀死后没有运行,则可以使用avahi-daemon --daemonize.

请注意,杀死 avahi 守护程序需要 root,因此在某些情况下这可能不是最佳选择。

于 2019-01-05T14:50:09.477 回答
7

我看到我回答你的问题有点晚了,但我会留下一个通用的答案,以防其他人偶然发现这个问题。

我的回答是基于 avahi-0.6.32_rc。


计算机/avahi守护进程/其他东西是否有可能“缓存”结果?

是的,avahi-daemon 正在缓存查找结果。虽然这似乎没有在功能中明确列出,但avahi-daemon(8)手册页提示它:

守护进程 [...] 为本地程序提供了两个 IPC API,以利用 avahi 守护进程维护的 mDNS 记录缓存。


我希望每次调用 avahi-resolve-host-name 都发送请求数据包。这可能吗?

是的。相关选项是cache-entries-max(来自avahi-daemon.conf(5)):

cache-entries-max=接受一个无符号整数,指定每个接口缓存多少资源记录。较大的值允许 mDNS 在大型 LAN 中正常工作,但也会增加内存消耗。

要达到预期的效果,您可以简单地设置:

cache-entries-max=0

这将完全禁用缓存并强制 avahi-daemon 在每个请求上重新发出 MDNS 数据包,因此您可以监控它们。

但是,我应该在这里指出,这也会使 avahi 对于正常使用几乎毫无用处。虽然 avahi-daemon 将发出查找数据包,但它无法存储结果,并且每次调用avahi-resolve-host-name(以及其他命令行工具、nss-mdns、D-Bus API……)都会失败。

于 2016-01-04T13:34:31.943 回答