【问题标题】:Avahi Hostname Resolution: Is it caching somewhere?Avahi 主机名解析:它是否在某处缓存?
【发布时间】:2013-08-25 15:35:11
【问题描述】:

我正在使用 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


    【解决方案1】:

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

    我的答案基于 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……)都会失败。

    【讨论】:

    • 是否有清除缓存而不是更改conf的命令?
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2014-07-04
      • 1970-01-01
      • 2012-05-16
      • 1970-01-01
      • 1970-01-01
      • 2011-04-14
      • 1970-01-01
      • 1970-01-01
      • 2011-05-28
      相关资源
      最近更新 更多