如何读取 mDNS 响应以便我可以解析它?

如何读取 mDNS 响应以便我可以解析它?

我知道 nmap 有 mDNS 服务发现脚本,但它对我的情况没有帮助,因为它不包含正确的服务名称。

因此,我想解析在 wireshark 中捕获的以下响应,关于如何在 C 或 Python 程序中获取此响应,您有什么想法吗?我可以使用 nmap 来实现这一点吗?或者可以使用一些可以通过 shell/Terminal 调用的特殊命令吗?

(蓝色突出显示的部分)

WireShark 的屏幕截图

换句话说,我有兴趣阅读以下内容:

请插入图片

答案1

如果您正在编写自己的使用 mDNS 的程序 – 忘记 Wireshark 和 Nmap。将 mDNS 视为您要实现的任何其他网络协议,并通过标准 UDP 多播套接字进行自己的 mDNS 查询和接收响应,而不是通过“数据包捕获”等。

有两种方法可以通过 mDNS 使用 DNS-SD 服务发现:要么使用操作系统提供的现有设施,要么使用直接构建查询和解析响应的库。

  • 例如,在 Linux 中,你经常会遇到avahi 守护进程作为发行版的一部分提供。它负责收集服务公告,因此您只需要“libavahi-client”C 库或“avahi”Python 模块。

    类似地,在 macOS 中,你可以使用系统内置的“DNS 服务发现”API 之一(通过 mDNSResponder),例如旧文档。Android和Windows UWP也内置了mDNS和DNS-SD。

  • 如果你不想依赖外部工具,那么你可以使用类似“零配置“通过套接字直接与 mDNS 通信的 Python 模块。

    我不确定哪个 C 库是首选,尽管mjansson/mdns看起来还不错。dns-sd GitHub 标签还有一些。

  • 事实上,您可以使用标准 DNS 库(可能是 libldns?)来解析 mDNS 消息,因为 mDNS 有线协议与 DNS 的兼容性为 99%;唯一的区别在于两个标志定义。但如果这样做,您仍然需要实现 DNS-SD 发现逻辑——它不仅仅是“被动等待响应”。

相关内容