我使用avahi-resolve-host-name来发现我子网上单元的IP地址,以便在开发过程中进行测试.我使用Wireshark监控请求和响应.在一次成功的请求和响应之后,Wireshark上没有进一步的请求,但该工具仍然返回一个IP地址.计算机/ avahi守护进程/其他东西是否有可能“缓存”结果?
问题:我希望通过每次调用avahi-resolve-host-name发送请求数据包.这可能吗?
原因:可以说我得到’误报’.我尝试解决’test1.local’,我得到一个结果IP,但该单位不再位于此IP.我希望每次都发送请求,这样我就可以避免看到IP地址不正确的单位.
解决方法
我的回答是基于avahi-0.6.32_rc.
Is it possible the computer/avahi daemon/something else is ‘caching’ the result?
是的,avahi-daemon正在缓存查找结果.虽然这似乎没有在功能中明确列出,但avahi-daemon(8)手册页提示:
The daemon […] provides two IPC APIs for local programs to make use of the mDNS record cache the avahi-daemon maintains.
I wish to send out the request packet with EVERY CALL of avahi-resolve-host-name. Is this possible?
是的.相关选项是cache-entries-max(来自avahi-daemon.conf(5)):
cache-entries-max=
Takes an unsigned integer specifying how many resource records are cached per interface. Bigger values allow mDNS work correctly in large LANs but also increase memory consumption.
要达到预期效果,您只需设置:
cache-entries-max=0
这将完全禁用缓存并强制avahi-daemon在每个请求上重新发出MDNS数据包,从而使您可以监视它们.
但是,我应该在这里注意,这也会使avahi对于正常使用几乎没用.虽然avahi-daemon将发出查询数据包,但它将无法存储结果,并且每次调用avahi-resolve-host-name(以及其他命令行工具,nss-mdns,D-Bus API ……)都将失败.