google.com 上的 DNS 请求。和 QTYPE=0xff returns 没有条目

DNS request on google.com. and QTYPE=0xff returns no entries

我已经编写了自己的 DNS 请求客户端,但我有一些有趣的行为。

如果我发送 QTYPE 部分 = 0xff 的请求,我会收到一个有效的响应,但是没有任何条目。

My Request:
0x70 0x3c 0x1 0x0 0x0 0x1 0x0 0x0 0x0 0x0 0x0 0x0 0x6 0x67 0x6f 0x6f 0x67 0x6c 0x65 0x3 0x63 0x6f 0x6d 0x0 0x0 0xff 0x0 0x1 

Response: id=24729 query=google.com. answers=[] nameservers=[] additionals=[]
RAW:
0x60  0x99  0x83  0x80  0x0  0x1  0x0  0x0  0x0  0x0  0x0  0x0  0x6  0x67  0x6f  0x6f  0x67  0x6c  0x65  0x3  0x63  0x6f  0x6d  0x0  0x0  0xff  0x0  0x1 

但是,如果我将 QTYPE 更改为 0x01,则会得到条目

Response: id=5496 query=google.com. answers=[A: name=. ttl=235 address=/172.217.4.174] nameservers=[] additionals=[]
0x15  0x78  0x81  0x80  0x0  0x1  0x0  0x1  0x0  0x0  0x0  0x0  0x6  0x67  0x6f  0x6f  0x67  0x6c  0x65  0x3  0x63  0x6f  0x6d  0x0  0x0  0x1  0x0  0x1  0xc0  0xc  0x0  0x1  0x0  0x1  0x0  0x0  0x0  0xeb  0x0  0x4  0xac  0xd9  0x4  0xae 

我希望 0xff 到 return 至少考虑到它在 RFC 中被标记为“对所有记录的请求”。我对网络还很陌生,所以如果有人能帮助我确定为什么这是正确的行为,我将不胜感激。

RFC for reference

QTYPE=0xff 是所有条目

QTYPE=0x01 是主机地址

答案取决于您询问的服务器:

  • 在 8.8.8.8 中,您不会返回任何记录,但响应标志会清楚地显示“消息已被截断”。这是因为响应不符合正常 DNS 响应的 512 字节限制。使用 dig any ... 检查显示响应大小为 649 字节。这意味着您需要改用 TCP 或尝试使用 EDNS 来表示您支持更大的答案 - 请参阅 RFC 6891 4.3。为此请求切换到 TCP returns 完整响应。
  • 对于 1.1.1.1,您也不会返回任何记录,但响应标志会显示“未实现”。这意味着 1.1.1.1 不愿意回答您的任何请求,可能是出于安全原因,因为对小请求的大响应可用于 amplification attacks。尝试使用 TCP returns 相同的结果“未实现”。