我正在使用Fedora 18和avahi命令行工具(版本0.6.31)
我使用avahi-resolve-host-name来发现我子网上的设备的IP地址,以便在开发过程中进行测试。我使用Wireshark监控请求和响应。在一次成功的请求和响应之后,Wireshark上没有进一步的请求,但该工具仍然返回一个IP地址。是否有可能计算机/ avahi守护进程/其他东西正在“缓存”结果?
问题:我希望通过每次调用avahi-resolve-host-name发送请求数据包。这可能吗?
理由:我可以说'误报'。我尝试解决'test1.local',我得到了一个结果IP,但该单元不再位于此IP。我希望每次都发送请求,这样我就可以避免看到IP地址不正确的单位。
答案 0 :(得分:3)
我发现我回答你的问题有点迟了但是我会留下一个通用的答案以防万一其他人偶然发现这个问题。
我的回答是基于avahi-0.6.32_rc。
计算机/ avahi守护程序/其他东西是否可以“缓存”#39;结果?
是的,avahi-daemon正在缓存查找结果。虽然这似乎没有在功能中明确列出,但avahi-daemon(8)
联机帮助提示它:
守护进程[...]为本地程序提供了两个IPC API,以利用avahi-daemon维护的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 ...)的每次调用都将失败。
答案 1 :(得分:0)
我自己偶然发现了这个问题,并找到了不需要更改配置的解决方案。似乎简单地杀死守护程序(avahi-daemon --kill
)会刷新缓存。我在Ubuntu 18.04上,守护程序自动重启。如果在其他发行版上,它被杀死后仍未运行,则可以使用avahi-daemon --daemonize
重新启动。
请注意,需要root用户才能杀死avahi守护程序,因此在某些情况下这可能不是最佳选择。