在没有网络连接的情况下如何使用 avahi?

在没有网络连接的情况下如何使用 avahi?

当我的笔记本电脑与任何路由器断开连接时,如何测试使用 avahi 的软件?

所有服务都在同一台计算机上运行,​​因此 Avahi 将为所有服务通告 IP 地址 127.0.0.1。

例如,我使用 at 的文件/etc/avahi/services/postgresql.service来注册数据库:

$ cat /etc/avahi/services/postgresql.service
<?xml version="1.0" standalone="no"?><!--*-nxml-*-->
<!DOCTYPE service-group SYSTEM "avahi-service.dtd">
<service-group>
  <name>my_database_name</name>
  <service>
    <type>_postgresql._tcp</type>
    <port>5432</port>
  </service>
</service-group>

当我连接到路由器时,avahi-browse显示服务:

$ avahi-browse -a | grep my_database_name
+  wlan0 IPv6 my_database_name                              PostgreSQL Server    local
+  wlan0 IPv4 my_database_name                              PostgreSQL Server    local

当我与路由器断开连接时,avahi-browse不再显示任何服务,并且我的软件无法找到数据库:

$ avahi-browse -a

这是我断开连接时的界面信息:

$ ifconfig
eth0      Link encap:Ethernet  HWaddr f0:de:f1:ac:a6:37  
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
          Interrupt:20 Memory:f3900000-f3920000 

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:3637633 errors:0 dropped:0 overruns:0 frame:0
          TX packets:3637633 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:1242209987 (1.2 GB)  TX bytes:1242209987 (1.2 GB)

我正在运行 Ubuntu 14.04,但可能也需要在其他发行版上执行此操作。

更新:我的一位(忙碌的)朋友向我发送了以下内容,但我尚未弄清楚:

Avahi 本质上不会正确绑定到循环接口。您可以打开虚拟接口(最佳解决方案)或在物理接口上打开不可路由的号码。 (可以工作,但如果您使用临时连接,可能会出现问题。)

答案1

Avahi 要求接口设置MULTICAST标志。那是,

ifconfig dummy0 multicast

设置该MULTICAST标志后,avahi 将自动在该接口上通告服务,无需重新启动或以其他方式扰乱 avahi 配置,除非 avahi 配置中不允许该接口。

答案2

我做了一些挖掘,Chromim 项目问题跟踪器中的这张票听起来就像您所追求的。门票:问题 288385:P2P:编写一个假的 avahi/zeroconf 网络来模拟对等点的专用网络有如下描述:

项目成员 报告人[电子邮件受保护], 2013 年 9 月 9 日

我们希望在一台机器上运行 P2P 测试,伪造其他对等点。这需要隔离 avahi/zeroconf 流量,以防止看到来自同一网络上其他 DUT 的服务并将服务暴露给网络。

p2p 和 update_engine 使用的 libavahi 使用私有 API 通过 DBus 联系 avahi-daemon,因此用假实现替换 avahi-daemon 需要实现这个未记录的接口。替换 libavahi 需要编译不同的版本或使用假的 libavahi 接口,这会失去集成自动测试的意义。

要伪造对等网络,另一种选择是使用 python 脚本创建一个 TAP 接口,该脚本伪造所有所需的 avahi 流量,并让 avahi-daemon 在测试期间仅侦听该接口(我们可以通过 avahi-daemon 来做到这一点)配置文件)。

我浏览了这张票,它似乎包含了您需要的所有部分,但缺少弄清楚如何将它们组合在一起的信息。也许您可以向 Chromium 项目询问一些有关这些部分的帮助,这可能是一个不错的起点。

参考

相关内容