我也想到了同样的事情,avahi-resolve
并且dig -p 5353 @224.0.0.251
做了同样的事情。
但是,我有一个可以使用avahi-resolve
但不能使用来解析其名称的设备dig
:
$ avahi-resolve --name ding-5cd80b3.local
ding-5cd80b3.local 192.168.0.248
$ dig +short -p 5353 @224.0.0.251 ding-5cd80b3.local
;; Warning: ID mismatch: expected ID 60466, got 0
我也无法进行反向查找:
$ avahi-resolve --address 192.168.0.248
Failed to resolve address '192.168.0.248': Timeout reached
$ dig +short -p 5353 @224.0.0.251 -x 192.168.0.248
;; connection timed out; no servers could be reached
广告宣传的设备是一个简单的物联网设备,因此我并不惊讶它具有非常基本的 mDNS 支持(如果使用mDNS支持由 ESP-IDF 提供)。
我尝试过对两者使用详细标志avahi-resolve
,dig
看看是否能让我了解正在发生的事情,但在任何一种情况下,我都没有得到任何额外的了解。
我猜这ID mismatch
意味着它dig
实际上得到了回应,但它拒绝显示它,因为它将此解释为DNS 欺骗同时也avahi-resolve
变得更加宽容。
除了使用 Wireshark 之外,还有什么方法可以变得dig
更加宽容(我试过了+besteffort
)或者有什么方法可以让我了解这里发生了什么?
我正在使用 Ubuntu,如上所述,有问题的设备正在使用ESP-IDF。
答案1
问题确实似乎出在底层 ESP-IDF 库及其 mDNS 支持上。
它没有在响应中包含原始查询中包含的 ID,它始终只使用 0。因此dig
出现错误ID mismatch: expected ID 60466, got 0
。
我已经记录了问题#5574针对 ESP-IDF 来解决这个问题。