我在另一个远程系统上有一个服务,该系统位于另一个物理网络上,而且它的多播包没有到达我的本地系统,因此我看不到它的DNS-SD发布服务。
我有办法在本地计算机上手动注册它,以便只显示DNS-SD发现服务的应用程序显示它吗?
答案 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;新的远程命令对话框就在那里。然后,我可以来回复制文件,运行命令,访问家庭网络,就像我在那里一样。