当我的笔记本电脑与任何路由器断开连接时,如何测试使用 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 项目询问一些有关这些部分的帮助,这可能是一个不错的起点。