我在另一个物理网络上的另一个远程系统上有一个服务,它的多播包不能到达我的本地系统,因此我看不到它的DNS-SD发布的服务。
是否有一种方法可以在我的本地计算机上手动注册它,以便只显示DNS-SD发现的服务的应用程序显示它?
发布于 2011-12-14 08:38:43
有了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发布于 2013-06-10 03:37:08
这正是我要找的。我想让非OS系统上的服务在家庭网络之外可见。在这里的其他地方,我了解了如何使用scutil来查找我的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 ->新建远程命令对话框,它就在那里。然后,我可以来回复制文件,运行命令,访问家庭网络,就像我在那里一样。
https://stackoverflow.com/questions/8153979
复制相似问题