标签: mdns

倾倒Avahi和Bonjour,DNS-SD区域文件

我正在寻求改进mDNS的Go库:https://github.com/davecheney/mdns/

我和作者谈过,他简单地说"我把它弄到了适合我的地步",这很好,完全符合开源的精神.

他提到Avahi,Bonjour和dns-sd发现工具的一些互操作性问题没有找到他导出的服务.

我想了解Avahi在使用端口进行简单服务时发布的记录,以及简单的名称.

我曾预料到适当的版本:

dig @localhost .local -t AXFR
Run Code Online (Sandbox Code Playgroud)

可能让Avahi导出它的区域,但它对我不起作用(提示"你做错了"!) - 我想了解典型Avahi服务导出的最小记录,并自动检查Lee-Hambleys-Macbook.local从笔记本上的Apple实现中导出,我可以改进对mDNS的Go lang支持.

当其他人正在使用Avahi/Bonjour/mDNS时,他们使用什么工具来挖掘并检查事情是否按预期工作?

#avahi的善良人士非常友好地给我以下提示:

 killall -USR1 avahi-daemon
Run Code Online (Sandbox Code Playgroud)

这导致avahi-daemon将其区域文件转储到syslog.

但理想情况下,我想知道如何最好地查询服务器,tcpdump看起来也很有希望,但它仍然只显示得到查找的记录,而不是完全转储区域中的所有内容:

sudo tcpdump dst port 53
Password:
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on en0, link-type EN10MB (Ethernet), capture size 65535 bytes
09:43:28.883763 IP 192.168.178.41.50916 > resolver2.opendns.com.domain: 50479+ A? e3191.c.akamaiedge.net. (40)
09:43:29.046201 IP 192.168.178.41.61989 > resolver2.opendns.com.domain: 55378+ PTR? 251.0.0.224.in-addr.arpa. (42)
09:43:29.123784 IP …
Run Code Online (Sandbox Code Playgroud)

dns mdns multicast go avahi

6
推荐指数
1
解决办法
3356
查看次数

如何从 docker 容器“avahi-browse”?

我正在运行一个基于 ubuntu:14.04 的容器,我需要能够在其中使用avahi-browse。然而:

(.env)root@8faa2c44e53e:/opt/cluster-manager# avahi-browse -a
Failed to create client object: Daemon not running
(.env)root@8faa2c44e53e:/opt/cluster-manager# service avahi-daemon status
Avahi mDNS/DNS-SD Daemon is running
Run Code Online (Sandbox Code Playgroud)

我遇到的实际问题是pybonjour错误;pybonjour.BonjourError: (-65537, 'unknown')但我读过这与 avahi-daemon 的问题有关。

所以; 如何从容器连接到 avahi-daemon?

PS 我必须在 avahi-daemon.conf 填充中关闭 dbus 才能启动它,否则 avahi-daemon 将无法启动,出现如下 dbus 错误: (.env)root@8faa2c44e53e:/opt/cluster-manager# avahi-daemon Found user 'avahi' (UID 103) and group 'avahi' (GID 107). Successfully dropped root privileges. avahi-daemon 0.6.31 starting up. dbus_bus_get_private(): Failed to connect to socket /var/run/dbus/system_bus_socket: No such file or directory WARNING: …

mdns avahi docker

6
推荐指数
1
解决办法
5401
查看次数

Docker 网络接口干扰 mDNS 地址

自从我在 Ubuntu 机器上安装了 docker 以来,我一直在使用它所公布的 mDNS 地址时遇到问题。

为了让我在不知道 IP 的情况下 ssh 进入我的盒子,我需要使用<hostname>.local,我需要将其解析为 eth0 接口。在我配置 docker 之前,这一直在进行。

我将 /etc/docker/daemon.json 设置为:

{
"bip": "192.168.254.1/24"
}
Run Code Online (Sandbox Code Playgroud)

我通过以下简单命令启动 docker 守护进程:sudo service docker start。我确认适当的 docker 桥(接口 docker0)和防火墙(ip 表)符合预期。我的所有服务都按预期相互通信。

当我跑步时ifconfig,我看到docker0广告192.168.254.1eth0广告10.14.146.62

当我ping <hostname>.local从 ubuntu 机器内 ping 时,它解析为10.14.146.62. 对于同一网络上的其他机器也是如此。

然而,一段时间(30 分钟)后,会发生以下情况:

  1. ping <hostname>.local开始返回未知主机
  2. 通告的地址(同一网络上的其他计算机在尝试 ping<hostname>解析时看到的地址)解析为 192.168.254.1.

解决此问题的唯一方法(暂时)是:

  1. 停止 docker 守护进程
  2. 重新启动 avahi 守护进程
  3. 启动docker守护进程

<hostname>.local这让我回到了内部和外部都决心 …

dns mdns docker

6
推荐指数
0
解决办法
1659
查看次数

将 mDNS 查询从 WSL 子网重新路由到 Windows 主机子网

Heya 编码员/开发人员/网络人员/Devops/...

我在 WSL2(Windows 10 2004 版本)上下文中遇到mDNS/DNS-SD设置问题

我在家里有一个非常简单的设置,有一个主服务器和一个 Raspberry Pi,我想激活 DNS 服务发现,从而让我有一种简单的方法在我的 Raspberry PI 上自动发现我的服务器。

使用像dnssd这样的简单库,甚至自己广播正确的数据,我设法在不使用 WSL2 时使其轻松工作。但是我有一个要求让它在 WSL2 上工作,这就是事情变得复杂的地方。

由于 WSL2 在其自己的子网上运行,因此广播不再起作用。在子网上使用 mDNS 仅适用于该子网。然而,Windows 已经重新路由了主机和 WSL 之间的一些广播流量。

这很容易测试:Ping从我的服务器到依赖 mDNS 的 Pi 的 Avahi 地址做一个简单的工作。

在此处输入图片说明

在屏幕左侧,您可以看到 Wireshark 在主机网络接口上捕获的流量,在右侧,您可以看到 Wireshark 在 WSL 网络接口上捕获的流量。前3行是一个简单的ping:它是在WSL的上下文中执行的,但是这里出现的IP地址172.28.192.1——不是WSL客户端的IP地址,而是WSL内部DNS服务器的IP地址。正如您在右侧看到的那样,它在主机上完美地重新路由,带有 Windows 主机的 IP 地址:192.168.0.39

但是,由脚本执行的第二个查询具有 WSL 源 IP ( 172.28.204.42),并且该查询不会在主机上重新路由。

我的网络知识非常有限,我不明白这是如何工作的,以及如何让 WSL 在主机上路由我自己的 mDNS 查询。一个疯狂的猜测是它与 iptables 有关,但就我而言。

如果有人知道为什么它适用于 DNS 服务器源地址而不是当我自己执行它时,这将对我有很大帮助!

编辑 1:WSL 路由表 在此处输入图片说明

routes mdns subnet dns-sd windows-subsystem-for-linux

6
推荐指数
1
解决办法
1266
查看次数

如何将 mdns 转发到 android 模拟器

我需要在 Android 模拟器上运行测试。我需要测试的应用程序使用 mdns 来发现设备。有什么方法可以将 android 模拟器直接连接到我的 wifi 网络,或者将所有 mdns 流量转发到 android 模拟器?

testing android udp mdns emulation

6
推荐指数
0
解决办法
178
查看次数

如何更改 NsdManager 使用的 Android 设备名称?

我正在使用 NsdManager 在本地网络上注册 Web 服务。我的问题是设备名称称为“android”,因此我可以从笔记本电脑上以“android.local”身份访问手机。我怎样才能改变这个名字?我想要一些更独特的东西。

android mdns dns-sd

5
推荐指数
1
解决办法
1258
查看次数

react-native/Expo 上的网络服务发现 (mDNS)

我有一个 IOT 设备破坏了 mDNS 响应器,有没有办法通过react-native/Expo 应用程序找到该设备?

  • 我找到了一个react-native库(react-native-zeroconf)。然而,它需要react-native-link,而expo不支持。

  • 我还找到了一个纯 Java 脚本库 ( multicast-dns )。但是,我不确定是否可以将其移植到react-native/Expo。

我应该分离并使用本机模块吗?我现在把它作为最后的手段。

javascript mdns zeroconf react-native expo

5
推荐指数
1
解决办法
3046
查看次数

如何在 Android 中使用 mDNS 从“.local”解析 Ipv4 和 Ipv6

我正在尝试使用多播 DNS 从“.local”解析 IPv4 和 IpV6,我尝试了https://github.com/posicks/mdnsjava但它无法解析所需的 ipv4/ipv6。或者,我找到了一个适合我的应用程序,但不知道它是如何工作的。

应用程序链接: https://play.google.com/store/apps/details? id=com.dokoden.dotlocalfinder

另外,我尝试使用Linux“终端 -
用于解析 ipv4 的命令”用于 avahi-resolve-host-name abc.local -4
解析 ipv6 的命令来解析 “.local” avahi-resolve-host-name abc.local -6
,并且已成功解析。

我在 Android 中尝试了相同的命令来解析“.local”,但得到Cannot run program “avahi-resolve-host-name”: error=13, Permission returned

我正在 Android 中尝试这段代码 -

  Process process = Runtime.getRuntime().exec("avahi-resolve-host-name abc.local -4");
  BufferedReader in = new BufferedReader(new InputStreamReader(process.getInputStream()));
  Log.d("OutPut",in.readLine());
Run Code Online (Sandbox Code Playgroud)

android mdns multicast ipv4 ipv6

5
推荐指数
1
解决办法
2982
查看次数

如果 NetService 已弃用,我应该如何在 macOS 上进行 mDNS?

我的应用程序在使用 mDNS 来广告和发现服务方面非常成功。但是,我在查找文档时发现 Apple 已将其 Bonjour 类标记为已弃用: https: //developer.apple.com/documentation/foundation/bonjour我一直在搜索,但没有找到任何指示我应该用它来代替。如果 Apple 在将来某个时候放弃 NetService 和 NetServiceBrowser,我应该使用什么框架来执行 mDNS?

macos mdns ios

5
推荐指数
1
解决办法
2097
查看次数

dart 中的 mDNS 广告

我想制作在 Linux 和 Windows 上运行的 dart 程序。我的应用程序将使用 mDNS 与程序对话,以查找程序计算机 IP 并发送请求。

在我的搜索中,我只找到了 mDNS 查找/发现包。

是否可以广告/广播与计算机主机名不同的 mDNS 名称。

如果是这样,我如何使用 dart 设置我选择的 mDNS 广播名称。

在mDNS的multicast_dns flutter官方包的示例中,我没有看到任何仅查找的示例。

mdns avahi dart flutter

5
推荐指数
0
解决办法
451
查看次数