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 中被标记为“对所有记录的请求”。我对网络还很陌生,所以如果有人能帮助我确定为什么这是正确的行为,我将不胜感激。
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 相同的结果“未实现”。
我已经编写了自己的 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 中被标记为“对所有记录的请求”。我对网络还很陌生,所以如果有人能帮助我确定为什么这是正确的行为,我将不胜感激。
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 相同的结果“未实现”。