【发布时间】:2011-05-04 04:23:41
【问题描述】:
我正在使用 C 语言实现 DNS 查询,并且有兴趣在单个查询数据包中同时请求 A 和 AAAA(IPv4 和 IPv6)记录,但是当我将这两个数据包放入时,我没有收到来自名称服务器的任何响应像这样在一个数据包中一起查询。我尝试将查询发送到几个不同的名称服务器(本地和 8.8.8.8),但没有成功。这是不起作用的东西,还是我的查询数据包格式错误?
我附加 AAAA 查询(到现有的 A 请求数据包)的基本算法是增加数据包头中的 QDCOUNT 字段,然后附加一个 RR 查询,其中 TYPE 设置为 AAAA 和 NAME 作为指向主机名的指针现有 A 查询(字节 0xC0 0x0C 表示距数据包开头 12 个字节的偏移量)。这听起来对吗?
仅供参考,仅使用数据包中的 A 查询一切正常。
编辑: 显然我的查询都有点格式错误(我不知道与答案不同的查询没有 TTL 和 RDLENGTH/RDATA 字段)。修复此问题后,我将返回 RCODE=1 格式错误回复,确认存在 2 个查询。这是否意味着不支持每个数据包的多个查询?
编辑 2:这是查找 www.google.com 的十六进制转储:
d8 32 01 00 00 02 00 00 00 00 00 00 03 77 77 77 06 67 6f 6f 67 6c 65 03 63 6f 6d 00 00 01 00 01 c0 0c 00 1c 00 01
我看不出有什么问题。
【问题讨论】:
-
Wireshark 也没有,这通常是您正确阅读规范的好兆头。
标签: c sockets networking dns network-protocols