我可以列出所有正在运行的启用Bonjour的服务吗?


21

我想知道哪些程序在我的计算机上使用Bonjour做广告。有没有办法做到这一点?

Answers:


36

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,该操作保持打开状态,并在添加或删除实例时报告,然后逐个退出各种应用,并(假设它不是系统服务)查看哪个退出触发了删除消息。


似乎现在已调用了音乐共享服务_daap
zneak

实际上,DAAP指的是iTunes中两种较旧的库共享形式。通过“首选项”>“共享”>“在本地网络上共享我的库”启用DAAP。iTunes 9中添加的“家庭共享”通过“文件”>“家庭共享”启用。它使用您的Apple ID进行身份验证。
Wes Campaigne

5

尽管Tildesoft的Bonjour浏览器可能无法满足您的确切条件,但它可以列出在本地网络上发布的所有bonjour服务以及发布它们的主机。

我猜想可以在Bonjour Browser中向下钻取本地发布的服务,以查找在其上发布该服务的端口号,然后用于lsof确定与其关联的应用程序,例如:

lsof -i | grep 57857

iTunes    36720   ...     TCP *:57857 (LISTEN)

当我运行iTunes时。


2

尽管被归类为旧文章,但这很可能是您正在寻找的: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服务。确保选中所有输出。


我是一个熟练的程序员,所以我对Xcode有所了解(这是一件好事,因为我不确定我是否愿意为此专门安装Xcode)。我会检查出来的,谢谢!
zneak 2012年

苹果已经删除了代码,但是可以在镜子上找到
陶先生

@陶先生该代码仍存在于Apple网站上。我已经更新了答案中的链接
Jay O'Conor
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.