5

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

我有一种方法可以在我的本地机器上手动注册它,以便只显示 DNS-SD 发现的服务的应用程序显示它?

4

2 回答 2

9

使用 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
于 2011-12-14T00:38:42.770 回答
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 -> New Remote Command 对话框,它就在那里。然后我可以来回复制文件,运行命令,访问家庭网络,就像我在那里一样。

于 2013-06-09T19:37:08.383 回答