Answers:
该dns-sd
命令行工具可以对您有帮助,但学习使用它是有点棘手。
运行dns-sd -B _services._dns-sd._udp
将返回当前正在播发的所有可用服务类型的列表。(该列表按接口列出,因此会有一些冗余。)如果在没有活动网络连接的Mac上完成此操作,则该列表当然将仅包含在该计算机上运行的服务。
使用该列表,您可以通过运行诸如dns-sd -B _home-sharing._tcp
(列出iTunes Home Sharing实例)之类的内容来请求有关各个服务类型的信息,然后,在给定实例名称的情况下,您可以运行dns-sd -L "Wes Campaigne’s Library" _home-sharing._tcp
以查找特定实例的信息。
不过,老实说,这整个过程相当繁琐,而这正是Discovery(以前称为Bonjour Browser)构建的目的,因此,我强烈建议您使用它。但是,无论采用哪种方式,都可能并不总是清楚哪个程序负责给定的服务条目。
您可以使用binarybob的答案中给出的策略尝试根据端口号将服务条目映射到正在运行的进程,但这可能并不总是有效。另一种策略是运行类似的操作dns-sd -B _home-sharing._tcp
,该操作保持打开状态,并在添加或删除实例时报告,然后逐个退出各种应用,并(假设它不是系统服务)查看哪个退出触发了删除消息。
尽管Tildesoft的Bonjour浏览器可能无法满足您的确切条件,但它可以列出在本地网络上发布的所有bonjour服务以及发布它们的主机。
我猜想可以在Bonjour Browser中向下钻取本地发布的服务,以查找在其上发布该服务的端口号,然后用于lsof
确定与其关联的应用程序,例如:
lsof -i | grep 57857
给
iTunes 36720 ... TCP *:57857 (LISTEN)
当我运行iTunes时。
尽管被归类为旧文章,但这很可能是您正在寻找的:DNSServiceMetaQuery。 如文档所述:
此示例使用DNSServiceQueryRecord发送多播DNS查询,该查询返回正在本地网络上发布的Bonjour服务类型的列表。机器必须运行mDNSResponder-58.6(Mac OS X 10.3.4)或更高版本才能响应此查询。
要在Mountain Lion上运行DNSServiceMetaQuery(随附的内部版本无法正常运行),请转到示例代码链接,然后单击“下载示例代码”。然后,如果尚未安装Xcode。在Mac OS X>应用程序> 命令行工具的模板下创建一个新项目。
打开并复制所有文本,~/Downloads/DNSServiceMetaQuery/DNSServiceMetaQuery.c
然后将其粘贴到main.c
新的命令行工具项目中(替换模板中的所有内容)。接下来,您需要通过单击侧边栏>构建阶段中的项目名称,将CoreFoundation.framework添加到项目中,并打开Link Binary With Libraries旁边的下拉箭头。 单击+按钮,搜索CoreFoundation.framework,然后添加它。然后单击“运行”按钮(看起来像“播放”按钮),然后等待“生成成功”图像。某些东西应该来自带有日志的窗口按钮;这将显示您的所有Bonjour服务。确保选中所有输出。
_daap
。