答案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 发现逻辑——它不仅仅是“被动等待响应”。