DNS Query Structure
当我向DNS发送DNS查询时,它将返回带有格式位设置的标头。
表示格式有问题,但是我看不到它是什么。我可能误解了RFC或误读了RFC,但现在我似乎无法解决它。
我正在发送的DNS结构以十六进制形式显示。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | Header 00 01 - ID = 1 01 00 - RD = 1 00 01 - QD = 1 00 00 - AN 00 00 - NS 00 00 - NR Question for www.google.com 03 77 - 3 w 77 77 - w w 06 67 - 6 g 6f 6f - o o 67 6c - g l 65 03 - e 3 63 6f - c o 6d 00 - m 0 00 01 - QTYPE 00 01 - QCLASS |
然后,我翻转两个字节的任何字段的字节,以将其转换为网络格式的big endian。所以标题的每一行,然后是QTYPE和QCLASS ...
要获得这些,可以使用netcat和dig。
1 2 3 | # nc a€"uip 53 > dnsreqdump # dig www.example.com @localhost # nc a€"u 8.8.8.8 53 <dnsreqdump >dnsrespdump |
现在您可以在hexedit或您最喜欢的hex编辑器中检查它们。
以下是该查询数据包的逐字节十六进制转储的样子(经过测试并可以正常工作!):?pb>
1 2 | 00000000 00 01 01 00 00 01 00 00 00 00 00 00 03 77 77 77 |.............www| 00000010 06 67 6f 6f 67 6c 65 03 63 6f 6d 00 00 01 00 01 |.google.com.....| |
我认为您的问题是数据包的第三个和第四个字节(
我倾向于认为您的问题取决于您实际如何"翻转位以转换为网络格式"。
典型的C库实现提供
当然,在没有看到代码的情况下,我不能确定这是问题所在。