如何取消注册 dns-sd 的服务?

如何取消注册 dns-sd 的服务?

我正在尝试在我的 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 之前没有检查过是否有这个命令,但我认为我没有。所以,我的问题是关于这个命令的。

答案1

我不清楚您到底想做什么,但听起来您可能使用了错误的工具。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

解决:

将服务实例(由浏览返回)解析为要连接的主机和端口以及包含任何服务特定参数的文本记录:

  • dns-sd -L \ *\ Google,\ searching\ the\ Web _http._tcp dns-sd.org

登记:

注册一个服务实例,以便浏览给定域的其他客户端可以浏览和解析它。

  • dns-sd -R Example _http._tcp local 80

您能否更具体地说明您想要实现的目标?

答案2

如果您dns-sd在终端(或“DOS 框”)中运行命令来注册服务,则该进程在前台保持活动状态,并且不会向您返回 shell 提示。只要该dns-sd进程继续运行,相应的服务就会保持注册状态。只要您通过点击'[ctrl]+[c]',服务将变为未注册状态。

因此,要恢复终端中的提示符,您必须dns-sd在后台启动命令(= 进程)(或在启动后将其发送到后台)。要取消注册相应的服务,您必须通过任何方式终止该进程:

  • 再次将其提取到前台并'[ctrl]+[c]'它,或者

  • 终止相应的 PID(进程 ID)。

答案3

使用 Apple 的 mDNS 守护程序处理服务注销的方式是,在注册服务时,注册进程会获得一个服务描述符,而该描述符是注销服务所必需的。这意味着通常只有注册服务的进程才拥有注销服务的必要信息。进程无法启动并注销其最初未注册的服务。

这种设计的一个原因是,提供服务的进程也应该负责注册和注销服务,以确保服务注册的状态与实际服务可用性同步。

使用 dns-sd 进行代理注册时,该进程会继续运行,因此当您关闭它时,该进程可以执行正确的注销。如果您需要长期服务注册,则需要安排 dns-sd 进程长期存在。在 OS X 上,可以使用 Launchd 来管理此进程。


还有一件事我还没明白,“查找服务”是什么意思。在我看来,注册一个服务、查看它然后取消注册它就足够了。但显然我需要查找服务。这是什么意思,为什么我需要这样做?

浏览服务只会告诉您存在哪些服务实例;它无法提供足够的信息来实际连接和使用它们。要使用服务,您需要通过浏览找到用户友好的名称并“查找”或“解析”服务实例。这会告诉您连接它所需的其他信息:主机、端口号等。

这可以减少流量(额外的数据可能相对较大,因此您不想为每个服务实例获取它),并且将稳定的服务实例名称与可能不太稳定的服务实例连接数据分离,类似于主机名和 IP 地址的分离方式。

相关内容