我正在尝试在我的应用程序中实现 DNS 服务发现(不,我不是在寻求程序化的答案)。我认为我最大的痛点之一是生成查询。我知道我需要在端口 5353 上发送多播广播,并希望查找类型_ipp._tcp
和的设备_print._tcp
,但我不知道问题部分应该是什么样子。
例如,在 SSDP 中我发送了如下查询:
"M-SEARCH * HTTP/1.1\r\n"
"HOST: 239.255.255.250:1900\r\n" +
"MAN: \"ssdp:discover\"\r\n"
"ST: urn:schemas-upnp-org:device:Printer:1\r\n"
"MX: 5000\r\n\r\n"
根据我对 DNS 查询的了解,我需要发送类似以下内容的内容:
"_ipp.tcp,all,all"
但我知道还需要更多。
如能提供任何指向文档等的指针,我们将不胜感激!
更新 rfc1035似乎包含有关消息结构的有希望的信息。
答案1
之间rfc1035和wireshark,我对查询的样子有了一个相当清晰的印象。对于标准查询,答案/权限/附加字段基本上是空白的。标题包含一般信息,包括包含多少个问题部分。
+---------------------+
| Header |
+---------------------+
| Question | the question for the name server
+---------------------+
| Answer | RRs answering the question
+---------------------+
| Authority | RRs pointing toward an authority
+---------------------+
| Additional | RRs holding additional information
+---------------------+
Wireshark甚至会为您提供 DNS 查询的位和十六进制视图。这是一个很酷的工具,我希望早点知道。