dns-sd:如何手动注册远程服务

时间:2011-11-16 15:17:16

标签: bonjour mdns avahi dns-sd

我在另一个远程系统上有一个服务,该系统位于另一个物理网络上,而且它的多播包没有到达我的本地系统,因此我看不到它的DNS-SD发布服务。

我有办法在本地计算机上手动注册它,以便只显示DNS-SD发现服务的应用程序显示它吗?

2 个答案:

答案 0 :(得分:7)

使用Avahi临时注册可以使用avahi-publish创建,并且可以通过编写静态服务文件来创建持久注册。有关前者的更多信息,请参阅man 1 avahi-publish;有关后者的更多信息,请参见man 5 avahi.service

使用Bonjour,dns-sd工具可用于代理注册服务:

dns-sd -P <Name> <Type> <Domain> <Port> <Host> <IP> [<TXT>...]

如果您代理注册的服务已经具有单播DNS主机名,则此类功能将起作用:

$ dns-sd -P Google _http._tcp local 80 google.com google.com path=/
Registering Service Google._http._tcp.local host google.com port 80 TXT path=/
 4:23:00.928  Got a reply for service Google._http._tcp.local.: Name now registered and active
^C

如果没有主机名,则应为主机使用唯一名称:

$ dns-sd -P Google _http._tcp local 80 google.local 74.125.237.144 path=/
Registering Service Google._http._tcp.local host google.local port 80 TXT path=/
 4:16:48.208  Got a reply for record google.local: Name now registered and active
 4:16:48.208  Got a reply for service Google._http._tcp.local.: Name now registered and active
^C

答案 1 :(得分:2)

这正是我所寻找的。我想在家庭网络外部显示一个非OS X系统上的服务。在这里的其他地方,我发现了如何使用scutil找到我的Back to My Mac网络:

echo show Setup:/Network/BackToMyMac | scutil | sed -n 's/.* : *\(.*\).$/\1/p' 

所以我可以接受并使用它来填充这个:

BTMM=`echo show Setup:/Network/BackToMyMac | scutil | sed -n 's/.* : *\(.*\).$/\1/p'`

dns-sd -P <advertised host name> _ssh._tcp ${BTMM} 22 <real host name> <real IP address—could be a hostname if it resolves> path=/

这样的美妙之处在于,只要ZeroConf的某些变体正在运行,我就不必记得在离开家之前做任何事情。我可以从任何地方广告远程服务,使用它,然后取消广告。所以我运行命令然后查看我的Shell - &gt;新的远程命令对话框就在那里。然后,我可以来回复制文件,运行命令,访问家庭网络,就像我在那里一样。