出于调试原因,我想检索 DNS 响应的原始字节,例如:
dig -t https clickhouse.com
;; ANSWER SECTION:
clickhouse.com. 242 IN HTTPS 1 . alpn="h3,h3-29,h2" ipv4hint=172.66.40.249,172.66.43.7 ipv6hint=2606:4700:3108::ac42:28f9,2606:4700:3108::ac42:2b07
我怎样才能得到那些答案部分的字节,是否有一些现有的工具可以在解码为纯文本之前向我显示这些原始字节?
我尝试使用 wireshark 但它是加密的,尝试使用另一个 dns 服务器但我没有得到任何响应(似乎被 ISP 阻止)。
更新:
所以我采用手动方式,在 Go 中创建一个简单的程序:
m := &dns.Msg{
MsgHdr: dns.MsgHdr{
Authoritative: false,
AuthenticatedData: false,
CheckingDisabled: true,
RecursionDesired: true,
Opcode: dns.OpcodeQuery,
},
Question: make([]dns.Question, 1),
}
q := &m.Question[0]
q.Qclass = dns.ClassINET
q.Qtype = dns.TypeHTTPS
q.Name = "clickhouse.com."
// 0 = {uint8} 0
r, err := dns.Exchange(m, "9.9.9.9:9953")
将断点打开dns.Answer, off, err = unpackRRslice(int(dh.Ancount), msg, off)
然后github.com/miekg/dns/msg.go:840
复制粘贴msg
到文本文件。
根据
dig
(9.11.0 或更高版本)的版本,您可以传递+unknownformat
标志:例如,查询
example.com. IN SOA
给出此格式 ( RFC 3597
\# <rdata-length> <rdata>...
)以十六进制编码的格式呈现原始记录数据线格式rdata
,并且可以拆分为多个单词,因此以上是