我正在寻求改进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) 我正在运行一个基于 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: …
自从我在 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.1
和eth0
广告10.14.146.62
。
当我ping <hostname>.local
从 ubuntu 机器内 ping 时,它解析为10.14.146.62
. 对于同一网络上的其他机器也是如此。
然而,一段时间(30 分钟)后,会发生以下情况:
ping <hostname>.local
开始返回未知主机<hostname>
解析时看到的地址)解析为 192.168.254.1
.解决此问题的唯一方法(暂时)是:
<hostname>.local
这让我回到了内部和外部都决心 …
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 服务器源地址而不是当我自己执行它时,这将对我有很大帮助!
我需要在 Android 模拟器上运行测试。我需要测试的应用程序使用 mdns 来发现设备。有什么方法可以将 android 模拟器直接连接到我的 wifi 网络,或者将所有 mdns 流量转发到 android 模拟器?
我正在使用 NsdManager 在本地网络上注册 Web 服务。我的问题是设备名称称为“android”,因此我可以从笔记本电脑上以“android.local”身份访问手机。我怎样才能改变这个名字?我想要一些更独特的东西。
我有一个 IOT 设备破坏了 mDNS 响应器,有没有办法通过react-native/Expo 应用程序找到该设备?
我找到了一个react-native库(react-native-zeroconf)。然而,它需要react-native-link,而expo不支持。
我还找到了一个纯 Java 脚本库 ( multicast-dns )。但是,我不确定是否可以将其移植到react-native/Expo。
我应该分离并使用本机模块吗?我现在把它作为最后的手段。
我正在尝试使用多播 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) 我的应用程序在使用 mDNS 来广告和发现服务方面非常成功。但是,我在查找文档时发现 Apple 已将其 Bonjour 类标记为已弃用: https: //developer.apple.com/documentation/foundation/bonjour我一直在搜索,但没有找到任何指示我应该用它来代替。如果 Apple 在将来某个时候放弃 NetService 和 NetServiceBrowser,我应该使用什么框架来执行 mDNS?
我想制作在 Linux 和 Windows 上运行的 dart 程序。我的应用程序将使用 mDNS 与程序对话,以查找程序计算机 IP 并发送请求。
在我的搜索中,我只找到了 mDNS 查找/发现包。
是否可以广告/广播与计算机主机名不同的 mDNS 名称。
如果是这样,我如何使用 dart 设置我选择的 mDNS 广播名称。
在mDNS的multicast_dns flutter官方包的示例中,我没有看到任何仅查找的示例。