Avahi 主机名解析:是否在某处缓存?

问题描述 投票:0回答:3

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

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

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

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

linux networking zeroconf mdns avahi
3个回答
9
投票

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

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


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

是的,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...)都会失败。


8
投票

我自己偶然发现了这个问题,并找到了不需要更改配置的解决方案。看来只要杀死守护进程(

avahi-daemon --kill
)就会刷新缓存。我使用的是 Ubuntu 18.04,守护进程会自动重新启动。如果在其他发行版上它被杀死后没有运行,可以使用
avahi-daemon --daemonize
重新启动它。

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


0
投票

刚刚偶然发现了这个老问题,遇到了同样的问题(一台机器被分配了一个新的IP地址,即使重新启动该机器后我也无法再通过

mymachine.local
连接 - 我的系统总是会尝试使用旧的IP地址)

这是我最后发现的:

出于性能原因,名称(主机名、用户名等)通常由

nscd
(名称服务缓存守护进程)服务进行缓存。

幸运的是,

nscd
提供了一个
invalidate
命令,它可以刷新给定类型名称的缓存。

例如

$ ping mymachine.local
PING mymachine.local (192.168.1.234) 56(84) bytes of data.
^C
--- lists.local ping statistics ---
2 packets transmitted, 0 received, 100% packet loss, time 0ms

$ sudo nscd -i hosts

$ ping mymachine.local
PING lists.local (192.168.1.27) 56(84) bytes of data.
64 bytes from 192.168.1.27: icmp_seq=1 ttl=64 time=0.621 ms
64 bytes from 192.168.1.27: icmp_seq=2 ttl=64 time=0.590 ms
^C
--- lists.local ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1001ms
rtt min/avg/max/mdev = 0.590/0.605/0.621/0.015 ms
© www.soinside.com 2019 - 2024. All rights reserved.