我正在尝试在我的 Windows 7 机器上使用“dns-sd”命令行工具。
我已经可以做点什么了。例如,我可以使用“dns-sd -R ...”注册服务。我还可以使用“dns-sd -B ...”浏览(查看)注册服务。我仍然想念的是如何取消注册服务。
在我输入“dns-sd -R ...”的那一刻,dns-sd 不会让我返回命令提示符。要返回命令提示符,我需要按 Ctrl-C。并且该服务保持注册状态,直到我按下 Ctrl-C。
我想要的是在后台运行“dns-sd -R ...”,然后我希望有可能从命令行取消注册服务。
我还不明白的另一件事是“查找服务”是什么意思。在我的图片中,注册服务、查看服务然后取消注册就足够了。但显然我需要查找服务。这是什么意思,为什么我需要这样做?
补充: 正如所要求的,我澄清一下。我指的是我在 Windows 7 中使用的“dns-sd”命令行工具。我认为这个命令是 Windows 的 Bonjour 软件的一部分(来自 Apple)。好吧,我在安装 Bonjour 之前没有检查我是否有这个命令,但我假设我没有它。所以,我的问题是关于这个命令。
我不清楚您到底要完成什么,但听起来您可能使用了错误的工具。dns-sd 是多播 DNS 和 DNS 服务发现 (DNS-SD) 的命令行测试工具。顾名思义,DNS 服务发现的目的是宣传网络服务。DNS-SD 操作如下:
枚举:
发现主机上配置的浏览和注册域。将始终返回“.local”,广域域(例如:example.com)也可能可用:
dns-sd -E
浏览:
浏览服务实例(可选,在特定域中):
dns-sd -B _http._tcp
dns-sd -B _http._tcp dns-sd.org
解决:
将服务实例(由 Browse 返回)解析为要连接的主机和端口以及包含任何服务特定参数的文本记录:
dns-sd -L \ *\ Google,\ searching\ the\ Web _http._tcp dns-sd.org
登记:
注册一个服务实例,以便其他浏览给定域的客户端可以浏览和解析它。
dns-sd -R Example _http._tcp local 80
您能否更具体地说明您要完成的工作?
如果您
dns-sd
在终端(或“DOS 框”)中运行命令来注册服务,则该进程将在前台保持活动状态,并且不会向您返回 shell 提示。只要dns-sd
进程继续运行,相应的服务就会保持注册状态。一旦您通过点击'[ctrl]+[c]'取消该过程,服务就会取消注册。因此,要在终端中恢复提示,您必须
dns-sd
在后台启动命令(= 进程)(或在启动后将其发送到后台)。要取消注册相应的服务,您必须通过任何方式终止该进程:再次将其提取到前台并'[ctrl]+[c]'它,或者
杀死相应的PID(进程ID)。
使用 Apple 的 mDNS 守护程序处理注销服务的方式是,在注册服务时,向注册过程提供服务描述符,并且需要该描述符才能注销服务。这意味着通常只有注册 a 的进程才具有注销它的必要信息。进程无法启动和取消注册该进程最初未注册的服务。
这种设计的一个原因是提供服务的进程也应该负责注册和注销它,这确保了服务注册的状态与实际的服务可用性同步。
当使用 dns-sd 进行代理注册时,该进程会继续运行,以便在您关闭它时,该进程可以进行正确的注销。如果您需要长寿命服务注册,您需要安排 dns-sd 进程长寿命。Launchd 可用于在 OS X 上进行管理。
浏览服务只是告诉您存在哪些服务实例;它没有提供足够的信息来实际连接和使用它们。要使用服务,您需要通过浏览发现的用户友好名称并“查找”或“解析”服务实例。这会告诉您连接到它所需的其他信息:主机、端口号等。
这减少了流量(附加数据可能相对较大,因此您不想为每个服务实例获取它)并且还将稳定的服务实例名称与可能不太稳定的服务实例连接数据分离,类似于主机名和 IP 地址是解耦的。