AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 118652
Accepted
Roman
Roman
Asked: 2010-03-04 01:23:28 +0800 CST2010-03-04 01:23:28 +0800 CST 2010-03-04 01:23:28 +0800 CST

如何使用卓悦?

  • 772
  1. 首先,Bonjour 到底做了什么(请阅读我下面写的猜测)?
    在这里,我发现 Bonjour 可以自动发现 IP 网络上的计算机、设备和服务。但我认为它不仅“发现 IP 网络上的设备”,它还通过将 IP 地址分配给运行 Bonjour 的设备来创建 IP 网络。我对吗?

  2. 我仍然怀念本质。它是否以下列方式工作?首先,我以物理方式连接设备(例如笔记本电脑),以便它们可以相互通信。然后,假设在一些笔记本电脑上我运行 Bonjour,然后,这些笔记本电脑会自动为它们分配 IP 地址。因此,笔记本电脑(运行 Bonjour 的地方)构建了一个 IP 网络。它以这种方式工作吗?

  3. 或者可能是运行 Bonjour 的计算机不被视为一项服务,并且它不会仅仅因为 Bonjour 在这台计算机上运行而广播自己。我的意思是计算机上运行的应用程序需要使用 Bonjour 进行广播。因此,是应用程序自己广播(而不是计算机)并且它不是自动完成的(应用程序需要明确地广播自己)。这样对吗?

  4. 我的应用程序究竟如何广播自己?我可以使用命令行注册服务(以便所有使用 Bonjour 的应用程序都知道出现了新服务)吗?

  5. 此外,我想要一个使用 Bonjour 创建的 IP 网络的应用程序。为此,我的应用程序需要知道网络中存在哪些设备/服务。更详细地说,我的应用程序需要有一个服务列表。列表中的每个服务都应该有一个名称、运行它的 IP 地址和应用程序使用的端口。Bonjour 能否以某种方式提供此信息?如果是这样,它究竟是如何工作的。我的程序如何从 Bonjour 获取这些信息?我的程序可以读取一些由 Bonjour 创建并包含上述信息的文件吗?我可以在命令行中使用一些命令来检索这些信息吗?

  6. 我对从文件、环境变量或命令行中的命令访问有关服务的信息特别感兴趣。这些选项在我看来是最简单的!因为在这些情况下,我不需要使用任何其他库来通过特定编程语言与 Bonjour 进行通信。

PS如果我的问题不清楚,请提出问题。我将尝试以更清晰的方式提出我的问题。

PPS我使用的是 Windows 7。

补充:我打算用 PHP 编写我的应用程序。每台计算机都应该运行 Apache Web 服务器。我想使用 Bonjour 帮助计算机发现彼此(计算机在本地网络中工作)。

networking bonjour mdns
  • 3 3 个回答
  • 44450 Views

3 个回答

  • Voted
  1. Best Answer
    Spiff
    2010-03-06T16:52:52+08:002010-03-06T16:52:52+08:00
    1. 是的。Stuart Cheshire 是 Apple Rendezvous/Bonjour 的创建者和主要维护者,他也是 IETF ZeroConf 工作组的联合主席,并撰写了 O'Reilly 关于零配置网络的书,他将 Bonjour 描述为“三-腿凳”,腿在哪里:

      1. IPv4(和 IPv6)链路本地寻址
      2. 多播名称解析 (mDNS)
      3. DNS 服务发现 (DNS-SD)

      IETF ZeroConf 工作组和 Apple 都认为链路本地寻址,尤其是 IPv4 链路本地寻址(169.254.0.0/16地址)是 ZeroConf/Bonjour 的一部分,尽管链路本地寻址比其他两个“凳子腿”早了好几年。

      请注意,由于即使没有安装 Apple 的 Bonjour for Windows 软件,Windows 也已经支持自动链接本地寻址,因此许多 Windows 用户不认为 IPv4 链接本地寻址是 Bonjour/ZeroConf 的一部分。

    2. 是的。默认情况下,Mac 和 Windows 机器如果配置为 DHCP 但没有可用的 DHCP 服务器,则执行 IPv4 链路本地寻址。安装了 Avahi(或可能其他 ZeroConf 实现)的 Linux 和 BSD 机器也将执行此操作。

    3. 如果一台计算机正在运行 Bonjour,它的主机名会通过 mDNS 在 LAN 上发布。如果您的机器名称是“Alice”,它将Alice.local通过 mDNS。在同一 LAN(特别是在同一个本地链路多播域)上的另一台计算机(我们称之为“Bob”)上,您应该能够简单地键入ping Alice.local,并且 Bob 应该进行 mDNS 查找Alice.local以发现 Alice 的 IP 地址( es),并 ping (其中一个) 它返回的地址。

      但请注意,Bonjour 区分主机名和服务名。例如,如果您有两台单独的 USB 打印机,比如说“HP”和“Canon”,它们连接到 Alice,并且 Alice 充当lpr它们两者的打印服务器,它们都可以显示为自己的服务,它映射回Alice.local主机。

      他们的服务名称将向用户显示为“HP”和“Canon”,而没有提及 Alice。在幕后,它们被称为HP._printer._tcp.localand Canon._printer._tcp.local,对这些服务名称的 DNS-SD 查找将显示这些服务Alice.local在两个不同的 TCP 端口上可用。

      所以是的,应用程序必须通知 Bonjour 守护程序(mDNSResponder在 Apple 的实现中调用)他们有他们想要宣传的服务。macOS 具有自动处理原生服务不支持 Bonjour 的服务广告的机制。例如,macOSsshd是 OpenSSH,它不直接支持 Bonjour,但 macOS 负责ssh通过 Bonjour 宣传该服务,这样您就可以ssh [email protected]从 LAN 上的其他机器上进行服务。

    4. 在 macOS 上,有一个“dns-sd”命令行工具可以使用以下语法注册服务:

      dns-sd -R <Name> <Type> <Domain> <Port> [<TXT>...]  
      # (Register a service)
      

      例如:

      dns-sd -R MyWebsite _http._tcp local 80
      

      如果它包含在 Windows 的 Bonjour 或 Windows 的 Bonjour SDK 中,或者您可以从 Apple 的mDNSResponder开源项目为 Windows 编译它,我不会感到惊讶。谷歌搜索dns-sd.exe,我看到这样的事情存在。我不确定我是否会为它下载一个二进制文件。相反,我会尝试从上面提到的软件包之一中获取它,或者自己从 mDNSResponder 项目源中编译它。

    5. 您还可以使用dns-sd命令行工具浏览和查找服务。以下是查找本地 Web 服务的示例:

      使用以下命令浏览本地 Web 服务-B:

      $ dns-sd -B _http._tcp local  
      Browsing for _http._tcp.local  
      Timestamp     A/R Flags if Domain                    Service Type              Instance Name  
      16:30:59.870  Add     3  6 local.                    _http._tcp.               My Cool Web App  
      16:30:59.871  Add     3  6 local.                    _http._tcp.               Someone Else's Web Service  
      16:30:59.871  Add     3  6 local.                    _http._tcp.               A Third One  
      ^C
      

      使用以下命令查找我想要的“My Cool Web App” -L:

      $ dns-sd -L "My Cool Web App" _http._tcp local  
      Lookup My Cool Web App._http._tcp.local  
      16:31:52.678  My\032Cool\032Web\032App._http._tcp.local. can be reached at MyWebServer.local.:80 (interface 6)  
      ^C  
      

      使用以下命令查询 MyWebServer.local 的 IP 地址-Q:

      $ dns-sd -Q MyWebServer.local  
      Timestamp     A/R Flags if Name                             T   C Rdata  
      16:32:40.786  Add     2  6 MyWebServer.local.               1   1 169.254.45.209  
      ^C  
      

      请注意,在这些示例中,您必须Ctrl-C退出该dns-sd工具。否则它将永远保持打开状态,持续观察网络并报告您发出的查询结果的任何变化(例如网络服务器在网络上来来往往,而您坐着-B浏览查询打开)。我发现由于这个和其他原因,该dns-sd工具不太适合从脚本调用。毕竟,您可能想看看您首选语言的 ZeroConf 库。

    要回答您的其他问题之一,我不知道有任何 ZeroConf 实现允许您仅通过读取/写入文件来执行查询并获得结果。大多数使用 Bonjour 的应用程序都是通过直接调用 API(C/C++/Obj-C/Swift 应用程序)或通过特定于语言的库(解释/脚本语言)来实现的。

    • 57
  2. caelyx
    2010-03-06T04:58:23+08:002010-03-06T04:58:23+08:00

    首先,Bonjour 到底做了什么(请阅读我下面写的猜测)?在这里,我发现 Bonjour 可以自动发现 IP 网络上的计算机、设备和服务。但我认为它不仅“发现 IP 网络上的设备”,它还通过将 IP 地址分配给运行 Bonjour 的设备来创建 IP 网络。我对吗?

    不完全的; 正如 Jon 指出的那样,DHCP(通常)用于分配 IP 地址。与普通 DNS 将域名转换为 IP 地址的方式非常相似,Bonjour 用于将临时域名(在本地网络内)转换为提供它们的 IP 地址。

    我仍然怀念本质。它是否以下列方式工作?首先,我以物理方式连接设备(例如笔记本电脑),以便它们可以相互通信。然后,假设在一些笔记本电脑上我运行 Bonjour,然后,这些笔记本电脑会自动为它们分配 IP 地址。因此,笔记本电脑(运行 Bonjour 的地方)构建了一个 IP 网络。它以这种方式工作吗?

    没有; 笔记本电脑很可能从本地 DHCP 服务器获取 IP 地址。Bonjour 只是帮助他们确定每个人可以为其他人提供哪些服务。

    或者可能是运行 Bonjour 的计算机不被视为一项服务,并且它不会仅仅因为 Bonjour 在这台计算机上运行而广播自己。我的意思是计算机上运行的应用程序需要使用 Bonjour 进行广播。因此,是应用程序自己广播(而不是计算机)并且它不是自动完成的(应用程序需要明确地广播自己)。这样对吗?

    是的 - 通常,您的应用程序需要明确宣传其存在。这通常可以使用系统提供的库(在 OS X 上常见)或自定义库(例如 perl 的 Net::Bonjour)来完成。

    我的应用程序究竟如何广播自己?我可以使用命令行注册服务吗(以便所有使用 Bonjour 的应用程序都知道出现了新服务)

    我不知道执行此操作的命令行工具,但许多主要编程语言都有可用的库来执行此操作。

    此外,我想要一个使用 Bonjour 创建的 IP 网络的应用程序。为此,我的应用程序需要知道网络中存在哪些设备/服务。更详细地说,我的应用程序需要有一个服务列表。列表中的每个服务都应该有一个名称、运行它的 IP 地址和应用程序使用的端口。Bonjour 能否以某种方式提供此信息?

    大多数 Bonjour 库应该能够为您执行此操作;请参阅http://search.cpan.org/~chlige/Net-Bonjour-0.96/lib/Net/Bonjour.pm的第一个示例

    如果是这样,它究竟是如何工作的。我的程序如何从 Bonjour 获取这些信息?我的程序可以读取一些由 Bonjour 创建并包含上述信息的文件吗?我可以在命令行中使用一些命令来检索这些信息吗?

    使用适当的库,该程序使用 Bonjour 协议询问本地网络中的所有其他计算机,告诉它它们有哪些可用的服务。然后,该库将解析响应并以更有用的格式呈现给您。

    我对从文件、环境变量或命令行中的命令访问有关服务的信息特别感兴趣。这些选项在我看来是最简单的!因为在这些情况下,我不需要使用任何其他库来通过特定编程语言与 Bonjour 进行通信。

    我不知道有什么工具可以做到这一点,但它可能存在。

    PS如果我的问题不清楚,请提出问题。我将尝试以更清晰的方式提出我的问题。

    有关您正在编写的程序将做什么以及您正在使用什么语言编写的更多信息将使帮助变得更容易。

    有关更多介绍性信息,请同时尝试:

    • Apple 常见问题解答:http: //developer.apple.com/networking/bonjour/faq.html
    • 维基百科页面:http://en.wikipedia.org/wiki/Bonjour_(software)
    • 4
  3. Jon Rhoades
    2010-03-04T02:11:43+08:002010-03-04T02:11:43+08:00

    Bonjour 不分配 IP 地址 - 它是一种发现协议 - 您仍然需要 DHCP/静态/链路本地 (APIPA) IP 地址才能使其工作。

    它使用多播 DNS (mDNS) 来发现哪些主机与它自己在同一个广播域上,本质上它成为它自己的 DNS 服务器。

    请参阅Bonjour和Zeroconf了解详情。

    除非您的应用程序用于家庭/非托管网络,也就是说,缺少本地 DNS 服务器,否则您根本不需要它。

    • 3

相关问题

  • 10 Gb 网络:在光纤和双绞线之间做出决定

  • 如何在 Windows Server PPTP VPN 中自动为客户端分配路由?

  • 为什么我的电脑休眠时 VPN 连接会中断?[关闭]

  • 有什么软件可以模拟局域网?

  • 带宽利用工具?[关闭]

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    从 IP 地址解析主机名

    • 8 个回答
  • Marko Smith

    如何按大小对 du -h 输出进行排序

    • 30 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    MikeN 在 Nginx 中,如何在维护子域的同时将所有 http 请求重写为 https? 2009-09-22 06:04:43 +0800 CST
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    0x89 bash中的双方括号和单方括号有什么区别? 2009-08-10 13:11:51 +0800 CST
  • Martin Hope
    Kyle Brandt IPv4 子网如何工作? 2009-08-05 06:05:31 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve