通过dig直接询问您的名称服务器来查询DNS-SD条目的内容非常简单; 但对于多播DNS,我不知道在哪里看.
编辑:我的动机是能够看到示例DNS条目,以便我可以更好地为我的OS X机器配置静态bonjour条目.
我使用Fedora 18和avahi命令行工具(版本0.6.31)
我使用avahi-resolve-host-name来发现我子网上单元的IP地址,以便在开发过程中进行测试.我使用Wireshark监控请求和响应.在一次成功的请求和响应之后,Wireshark上没有进一步的请求,但该工具仍然返回一个IP地址.计算机/ avahi守护进程/其他东西是否有可能"缓存"结果?
问题:我希望通过每次调用avahi-resolve-host-name发送请求数据包.这可能吗?
原因:可以说我得到'误报'.我尝试解决'test1.local',我得到了一个结果IP,但该单元不再位于此IP.我希望每次都发送请求,这样我就可以避免看到IP地址不正确的单位.
我正在尝试创建一个基于ubuntu 17.04的Docker容器,该容器可以浏览我的网络(在docker网络外部)上的mDNS并在mDNS上向我的网络(在docker网络外部)做广告。
我希望能够在macOS主机(在开发过程中)和Linux(Debian)主机上运行此docker容器进行生产。
https://github.com/ianblenke/docker-avahi似乎已经为Linux主机解决了这一问题(利用avahi守护程序并将/ var / run / dbus卷映射到主机)。在Macbook上进行开发时,我想使用mDNSResponder。
如何创建一个可以在本地网络上做广告和浏览的容器,该容器也可以在我的macOS笔记本电脑和Linux服务器上运行?
这是我到目前为止所拥有的。
Docker文件
FROM ubuntu:17.04
WORKDIR /app
RUN apt-get update && apt-get install -yq avahi-daemon avahi-utils libnss-mdns \
&& apt-get -qq -y autoclean \
&& apt-get -qq -y autoremove \
&& apt-get -qq -y clean
RUN update-rc.d avahi-daemon enable
COPY docker/etc/nsswitch.conf /etc/nsswitch.conf
COPY docker/etc/avahi-daemon.conf /etc/avahi/avahi-daemon.conf
COPY docker/start.sh /app
CMD ["/bin/bash","start.sh"]
Run Code Online (Sandbox Code Playgroud)
start.sh
#!/bin/bash
service avahi-daemon restart
service avahi-daemon status
avahi-browse -a
Run Code Online (Sandbox Code Playgroud)
nsswitch.conf
hosts: files mdns_minimal [NOTFOUND=return] dns
avahi-daemon.conf
...
enable-dbus=no
... …Run Code Online (Sandbox Code Playgroud) 我经常访问已设置为使用.local顶级域名下的域的Windows域.这与Bonjour/Zeroconf有冲突,后者保留.local供自己使用.许多平台支持Bonjour开箱即用(包括Mac OS,iPhone和Ubuntu),并且在出现这种混淆时会出现许多名称解析问题.
我有一个适当的手动(每个工作站)的解决方法为Mac OS通过建立一个/etc/resolver/ntdomain.local按resolver(5)效果很好.不幸的是,这需要在每个工作站上进行手动更改,并且无法在iPhone上运行.
我正在寻找的是一种将*.ntdomain.local通过mDNS进入的请求重定向到特定的单播DNS服务器的方法.如果需要,我不介意编写一些代码.我可以在Debian或Windows 2003上部署.看起来Avahi可能是我正在寻找的库.
这可以在不注册子域中的每个地址的情况下完成,或者是否可以ntdomain.local将该点的单个NS记录注册到Windows DNS服务器?
当您安装Bonjour for Windows时,您可以从系统中的任何位置解析任何".local"mDNS名称.
例如,您可以"ping some_computer.local"并且mDNSResponder.exe(Bonjour/mDNS守护程序)将响应.
但是,mDNS在端口5353上运行,那么Windows如何知道如何解决这些DNS查询呢?
mDNSResponder.exe以某种方式挂钩到Windows DNS解析器吗?
链路本地多播名称解析(LLMNR)是一种基于多播DNS的服务发现的Microsoft技术.它与Bonjour/Zeroconf兼容吗?如果是这样,API在哪里?我认为服务发现以某种方式融入了vanilla DNS解析(gethostbyname()?),但是服务广告呢?
在对我的网络应用程序进行故障排除时,我发现了Draft-mdns-ice-candidates,它是关于使用 mDNS 来混淆候选主机中的地址。
\n我发现,当两个对等点(代理 L、代理 R)处于如下图 7 所示的拓扑时,WebRTC 对等点连接失败,因为代理 R 的主机地址被混淆,并且代理 R 的 srflx 地址被丢弃,因为代理 R 不在 NAT 后面。rfc8445中的相关表述如下。
\n\n\n5.1.3. 消除多余的候选人
\n
\n\n接下来,ICE 代理(发起和响应)消除冗余\n候选者。两个候选者可以具有相同的传输地址,但\n不同的基数,并且这些不会被视为冗余。\n当代理不在 NAT 之后时,\n通常,服务器自反候选者和主机候选者\n将是冗余的。当且仅当一个候选者的传输地址和基址等于另一个候选者的传输地址和基址时,\n该候选者才是冗余的。代理应该消除具有较低优先级的冗余候选。- rfc8445 第 5.1.3 节
\n
\n\n\n
\n\n(图7来自rfc8445的15.1节)
\n
在Draft-mdns-ice-candidates 的第 5 节中,我没有找到有关图 7 的情况的解释。当我测试最新版本的 Chrome、Firefox 和 Safari 时,WebRTC 对等连接在所有浏览器中均失败在图7的情况下,由于我上面写的\xe2\x80\x94的原因,代理R的主机地址被混淆,并且代理R的srflx地址被丢弃。
\n通过更改浏览器设置关闭本地地址混淆(默认情况下进行混淆)时,WebRTC 对等连接已成功建立。(我在 Chrome 和 FireFox 上测试了此成功连接。在 Chrome 中,通过Anonymize local IPs exposed by WebRTC …
在我看来,DNS的许多问题,特别是安全问题,都是通过UDP实现DNS的根本原因; 例如,响应者不必是他所说的那个人.
我不知道mDNS协议的细节(我假设它比DNS更新),也许它在应用程序级别处理这些问题.任何人都可以为我阐明这一点吗?
我想弄清楚为什么我的iMac 2011频繁醒来(每2分钟)如果有人可以提供帮助,我会非常感激.
这是我的pmset日志:
2017-05-03 22:14:31 +0300 Wake Requests [*proc=mDNSResponder request=Maintenance inDelta=5662]
2017-05-03 22:15:28 +0300 Assertions PID 214(mDNSResponder) Created MaintenanceWake "mDNSResponder:maintenance" 00:00:00 id:0x0xd00008556 [System: DeclUser BGTask SRPrevSleep kCPU kDisp]
2017-05-03 22:15:30 +0300 Assertions PID 214(mDNSResponder) Released MaintenanceWake "mDNSResponder:maintenance" 00:00:02 id:0x0xd00008556 [System: DeclUser BGTask kDisp]
2017-05-03 22:15:43 +0300 DarkWake DarkWake from Normal Sleep [CDN] due to GIGE/Network: Using AC 45 secs
2017-05-03 22:15:43 +0300 WakeDetails DriverReason:Enet.Service - DriverDetails:
2017-05-03 22:15:43 +0300 Kernel Client Acks Delays to Wake notifications: [PRT1 driver is slow(msg: …Run Code Online (Sandbox Code Playgroud) 我正在使用 Flutter 的 multicast_dns 包,但在 iOS 上出现异常。
它在 Android 上按预期工作。我已经使用随包提供的代码示例对此进行了测试,请参阅https://pub.dev/packages/multicast_dns
错误是:
OS Error: Can't assign requested address, errno = 49 in
_NativeSocket.joinMulticast. (socket_patch.dart)
Run Code Online (Sandbox Code Playgroud)
我曾尝试过各种组播地址,默认224.0.0.251,230.180.0.1和239.0.180.1。
OS Error: Can't assign requested address, errno = 49 in
_NativeSocket.joinMulticast. (socket_patch.dart)
Run Code Online (Sandbox Code Playgroud)
颤振医生:
import 'package:multicast_dns/multicast_dns.dart';
Future<void> main() async {
const String name = '_dartobservatory._tcp.local';
final MDnsClient client = MDnsClient();
await client.start(mDnsAddress: InternetAddress('239.0.180.1'));
await for (PtrResourceRecord ptr in client
.lookup<PtrResourceRecord>(ResourceRecordQuery.serverPointer(name))) {
await for (SrvResourceRecord srv in client.lookup<SrvResourceRecord>(
ResourceRecordQuery.service(ptr.domainName))) {
final …Run Code Online (Sandbox Code Playgroud)