问题标签 [mdns]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
104 浏览

macos - mDNSResponder 是否有用于替代名称解析方案的插件系统?

我不确定从哪里开始寻找关于这个想法的指导,所以我认为 stackoverflow 是一个很好的起点。

我想在基于服务器的 DNS 之外添加替代名称解析机制。(我希望在不需要实际 DNS 服务器的情况下获得名称币解析。)

我知道 mDNSResponder 现在负责所有 DNS 解析,而不仅仅是“Bonjour” mDNS 查找,所以这似乎是一个合理的地方。

关于这种方法的任何指导?我将获取 API 文档的链接、熟悉 mDNSResponder 代码库的人的指导等。

0 投票
1 回答
220 浏览

qt - 如何在 OSX 上将 Bonjour 添加到 Qt Creator?

我正在创建一个类来在 OSX 上的 Qt Creator 中进行 Bonjour 注册。我想将 dns_sd.h 添加到我的 .pro 文件中的包含配置中,我假设按如下方式完成:

INCLUDEPATH += /usr/include/

我的下一个问题是在哪里以及如何添加正确的库?我在 OSX 上的 /usr/lib 文件夹或 /usr/lib/system 文件夹中都找不到 bonjour 库。

0 投票
2 回答
9727 浏览

linux - Avahi 主机名解析:它是否在某处缓存?

我正在使用 Fedora 18 和 avahi 命令行工具(版本 0.6.31)

我使用 avahi-resolve-host-name 来发现我的子网中单元的 IP 地址,以便在开发期间进行测试。我使用 Wireshark 监控请求和响应。在一个成功的请求和响应之后,Wireshark 上不会再显示更多请求,但该工具仍会返回一个 IP 地址。计算机/avahi守护进程/其他东西是否有可能“缓存”结果?

问题:我希望每次调用 avahi-resolve-host-name 都发送请求数据包。这可能吗?

原因:可以这么说,我得到了“误报”。我尝试解析“test1.local”,我得到了一个结果 IP,但该单元不再位于该 IP。我希望每次都发送请求,这样我就可以避免看到 IP 地址不正确的单元。

0 投票
1 回答
14569 浏览

ios - 使用 mDNS 发现 iOS 设备名称

我注意到一些更好的网络发现应用程序(例如 iOS 版 Fing 和 Mac 版 iNet)即使没有宣传 Bonjour 服务(例如 iTunes Wi-Fi Sync)也能够发现 iOS 设备和 Mac 设备的设备名称。这是怎么做到的?我知道如何进行反向 mDNS 查询https://serverfault.com/questions/143184/how-do-i-get-the-machine-name-from-an-ip-via-multicast-dns。但是,虽然反向 mDNS 查找(至少由 dig 命令完成)dig -x the.ip @224.0.0.251 -p 5353) 将适用于没有以其他方式广播任何 Bonjour 服务的 Mac,除非在 iOS 设备上运行 Wi-Fi 同步或其他一些 Bonjour 服务,否则它不起作用。我不知道如何获得名称,但这些应用程序可靠地获得它。我在 iNet 发现时使用了 Wireshark,我只看到 ICMP 和 NetBios 查询都返回 0 个答案。

另请注意,我已经通过广播 ping 然后解析 ARP 表获得了设备的 IP 地址。我想通过获取设备名称并查找字符串“iPhone”或“iPad”来发现以这种方式发现的哪些设备是 iOS 设备。

另请注意,iNet 应用程序网站提供了有关他们如何进行反向 IP 查找的以下内容。我认为这意味着他们对每个 IP 进行反向 DNS 查找和反向 mDNS 查找。

Reverse IP lookups (host­names) are per­formed as unicast and mul­ti­cast queries for every IP found.- http://www.bananaglie.de/inet/index_e.php

0 投票
1 回答
1461 浏览

bonjour - 从 IP 地址获取链路本地域名(即使用多播 DNS 和 DNS-SD 进行反向 DNS 查找)

我有一个服务器应用程序在 LAN 上的设备上运行,可通过 DNS-SD(即 Zeroconf/Bonjour/Avahi)发现。也在 LAN 上的客户端设备连接到此服务器。我无法控制使用什么应用程序连接到我的服务器应用程序,但我知道他们很可能使用 DNS-SD 和 mDNS 来发现并连接到服务器。仅在给定 C 或 C++ 中的 IP 地址的情况下,如何检索标识这些客户端设备的链接本地域名​​?

根据RFC 6762 Multicast DNS - Section 4. Reverse Address Mapping :
"Like ".local.",IPv4 和 IPv6 反向映射域也被定义为链路本地...因为此域下的名称对应于 IPv4 链路-本地地址,本地链接是查找与这些名称有关的信息的最佳位置是合乎逻辑的。”

所以理论上,应该可以通过IP地址查找链接本地域名​​。有谁知道怎么做?也许我没有在正确的地方寻找,但我没有在 Bonjour 文档中看到对此的 API 调用。

0 投票
1 回答
445 浏览

java - JmDNS 似乎在 Mac OS X 上根本不起作用

我在尝试让 JmDNS 在 Mac OS X 上运行时遇到问题。症状是我可以发现网络上的任何服务,但我自己的计算机上的服务除外。list他们是在本地主机上还是在我的计算机上运行的虚拟机上都没有关系 - 在任何一种情况下,他们都不会从通话中回来。

我设法将我们正在做的事情浓缩为一个在 Windows 上通过但在 Mac OS X 上失败的测试。现在的问题是我无法弄清楚问题出在哪里。

在调试器中,我可以看到它没有将套接字绑定到任何特定地址,只是绑定到特定端口。但它随后将其设置为特定界面。

我在 Wireshark 中看到的是数据包来自我机器的公共 IP(en0 的地址),即使 lo0 是我用于测试的接口。我还看到了查询和响应数据包。回应正在回来。

但是在 Java 方面,我看到它在调用DatagramSocket#receive(DatagramPacket)并且从未收到数据包。

(我还花了半天时间寻找 JmDNS 的替代品,但看起来其他声称可以替代它的库实际上还不能进行多播,这让它们有点毫无意义。:()

这里发生了什么?

0 投票
1 回答
3086 浏览

airplay - 如何使 AirPlay 按钮出现?

目前我正在尝试制作某种播放服务器,但失败了。问题是我的ios设备上没有出现airplay按钮。我已经关注了这个链接,但我被困在需要注册播放服务的地方。我正在使用 dns-sd -R MyAirplayService _airplay._tcp local 22555命令,服务显示为已注册,但我没有按钮。尝试将端口更改为 7000 或 7100,但结果相同。你能告诉我,我哪里错了吗?

0 投票
2 回答
1596 浏览

ios - 需要更多想法:如何检查 iPhone 是否在 Wifi 中

我有一个 Debian 服务器。此服务器应检查我的家庭 wifi 中是否有可用的 iPhone。问题是,如果移动数据可用,i-Devices 会将 wifi 模块暂停到安全电源。因此,一种解决方案是,只需关闭移动数据,wifi 中的发现就可以正常工作。(但这对我来说不是一个真正的解决方案,因为每次在家时手动执行此操作很烦人,而且其他人也会使用此软件。)

到目前为止使用 iPad Mini 和 iPhone5 (ios7) 进行了测试:

  1. 我已经完成了 android 的任务,如果我的网络连接发生变化,在 Android 中会有一个广播,所以我只需要以编程方式捕捉广播并在我的 Debianbox 上注册我。在 iDevice 上尝试了同样的方法,但似乎无法在后台拦截 Objective-C 中的 Wifi-Status-Changes。在前台,它可能通过 Apple-Reachability-Class。但我需要它在后台,所以这对我来说是不可能的。

  2. 扫描我 iPhone 的所有端口并尝试发出请求,希望这能唤醒我的 Wifi 模块:

    • 打开 UDP 端口:

      • 港口国服务版本
      • 999/udp 打开|过滤的应用程序
      • 1090/udp 打开|过滤 ff-fms
      • 5001/udp 打开|过滤的复杂链接
      • 5353/udp 打开|过滤的 zeroconf
      • 18134/udp 打开|过滤未知
      • 19141/udp 打开|过滤未知
      • 19717/udp 打开|过滤未知
      • 20919/udp 打开|过滤未知
      • 21354/udp 打开|过滤未知
      • 31625/udp 打开|过滤未知
      • 49191/udp 打开|过滤未知
      • 57409/udp 打开|过滤未知
    • 打开 TCP 端口:

      • 港口国服务版本
      • 62078/tcp 打开 tcpwrapped

    我尝试在端口 5353 UDP (Bonjour/MDNS) 上使用netcat发出请求。结果是 iDevices 在前 30 分钟内真正唤醒了 wifi 模块!在那段时间之后,如果请求唤醒 wifi 模块,这是一种幸运。我认为大约 30 分钟后可能会有“深度睡眠”。

  3. MacBookPro 作为 wifi 热点和连接到此的 iDevices。然后我用 Wireshark 嗅探整个流量以检查通过 Wifi 发送的消息。至少找到了一个由每个 iOS7 设备完成的 MDNS 多播。这个消息可以被一个小的 python 服务器捕获。-> 有效,但设备发送多播的时间是 1 分钟到 30 多分钟,所以它不是固定的。

  4. 一个创造性的方法:静默推送通知来唤醒iDevice,之后可以ping wifi。所以推送通知只是唤醒了我的wifi!-> 有效,但 APN 服务器不会告诉您推送消息是否已发送,因此它不是很可靠。我已经对此进行了测试,有时 APN 服务器会“吞下”该消息。每 5 分钟检查一次互联网连接和移动数据流量,以检查我的设备是否在 wifi 中……这并不是真正的最佳做法。但迄今为止电池寿命的最佳解决方案。

  5. 触发您在家中使用地理围栏区域。这是可能的,并且有效,但它的电池成本很高。但也许没有其他好的解决方案。

  6. arp-scan 是一个向 ip-range 发出 arp-request 的工具。如果打开移动数据,这不起作用,否则它会起作用。

所以我的问题:

  • 我可以发送特定端口上的请求以唤醒 iDevice 的 wifi 模块吗?
  • 是否有一种客观的方法来解决这个任务?
  • 我可以发送 MDNS 请求,iDevice 会回答吗?
  • 我可以创建一个具有后台监听套接字并且 Debianbox 连接到该套接字的应用程序吗?
  • 还有其他可以解决此任务的想法吗?我没主意了。

谢谢

0 投票
1 回答
4667 浏览

c - socket sendto 在 udp 数据包期间收到错误 22

我编写了一个客户端应用程序,它使用 mdnsreponder 进行一些服务发现。我有一个要求,我的客户端 IP 会非常频繁地更改。每当 IP 发生变化时,我都需要再次进行发现。所以我编写了简单的测试应用程序,它将每 1 分钟更改一次 IP 并进行发现。

一切正常,但经过几次 IP 更改(大约 7-10 次更改)后,它给出了以下套接字错误。

(下面是mdnsresponder代码中sendto socket函数的错误码)

之后,我的请求将不会将其放在具有新 IP 的接口上。

我再次必须重新启动我的应用程序,然后只有它才能工作......

有人可以帮助解决这个问题,为什么在几次试验后它就停止了?

0 投票
0 回答
440 浏览

windows - MinGW 上的 mDNSResponder 编译

我正在尝试在 MinGW 上为一个非常重要的项目构建 mDNSResponder。我已经安装了 MinGW,并且我已经从 Apple 的网站下载了最新版本的 mDNSResponder。似乎没有任何方法可以为 MinGW 构建。此外,它似乎需要 pthreads 才能构建

我还找到了 Bonjour SDK,但它似乎只有 MSVC 兼容的库,当我尝试在 MinGW 中使用 reimp 将它们转换为 DLL 时,我得到了“无效或损坏的库”错误。大概这是因为 MS 有时会更改其名称修改方案。

任何帮助将不胜感激!

格雷格