8.8.8.8
我正在编写一个小型 DNS 客户端,它向发送以下查询google.com
:
1337 10.324082781 192.168.0.10 8.8.8.8 DNS 70 Standard query 0xa689 A google.com
0000 60 2a d0 90 25 1f e0 69 95 c6 de 71 08 00 45 00 `*..%..i...q..E.
0010 00 38 8f 83 40 00 40 11 da 6f c0 a8 00 0a 08 08 .8..@[email protected]......
0020 08 08 e9 59 00 35 00 24 86 e7 a6 89 01 00 00 01 ...Y.5.$........
0030 00 00 00 00 00 00 0a 67 6f 6f 67 6c 65 2e 63 6f .......google.co
0040 6d 00 00 01 00 01 m.....
根据 wireshark,此查询格式正确,并且正确包含了对A
名称为 的记录进行 DNS 标准查询所需的所有字段google.com
。但是,我从 DNS 服务器收到了一个奇怪的响应:
1338 10.346529886 8.8.8.8 192.168.0.10 DNS 145 Standard query response 0xa689 No such name A google.com SOA a.root-servers.net
0000 e0 69 95 c6 de 71 60 2a d0 90 25 1f 08 00 45 00 .i...q`*..%...E.
0010 00 83 3e 2d 00 00 3b 11 70 7b 08 08 08 08 c0 a8 ..>-..;.p{......
0020 00 0a 00 35 e9 59 00 6f ac 0f a6 89 81 83 00 01 ...5.Y.o........
0030 00 00 00 01 00 00 0a 67 6f 6f 67 6c 65 2e 63 6f .......google.co
0040 6d 00 00 01 00 01 00 00 06 00 01 00 00 07 03 00 m...............
0050 40 01 61 0c 72 6f 6f 74 2d 73 65 72 76 65 72 73 @.a.root-servers
0060 03 6e 65 74 00 05 6e 73 74 6c 64 0c 76 65 72 69 .net..nstld.veri
0070 73 69 67 6e 2d 67 72 73 03 63 6f 6d 00 78 2a d2 sign-grs.com.x*.
0080 09 00 00 07 08 00 00 03 84 00 09 3a 80 00 01 51 ...........:...Q
0090 80 .
这是带有错误“没有这个名称 google.com”的标准响应,它还提供了 SOA 响应。这很奇怪,因为此后不久,我进入 Firefox 并导航到google.com
,使用 Wireshark 监听传出的 DNS 查询数据包:
2283 17.628229748 192.168.0.10 8.8.8.8 DNS 70 Standard query 0x7257 A google.com
0000 60 2a d0 90 25 1f e0 69 95 c6 de 71 08 00 45 00 `*..%..i...q..E.
0010 00 38 90 73 40 00 40 11 d9 7f c0 a8 00 0a 08 08 .8.s@.@.........
0020 08 08 f7 14 00 35 00 24 b1 89 72 57 01 00 00 01 .....5.$..rW....
0030 00 00 00 00 00 00 06 67 6f 6f 67 6c 65 03 63 6f .......google.co
0040 6d 00 00 01 00 01 m.....
并收到了适当的回应,内容记录A
如下google.com
:
2285 17.649603341 8.8.8.8 192.168.0.10 DNS 86 Standard query response 0x7257 A google.com A 172.217.3.174
0000 e0 69 95 c6 de 71 60 2a d0 90 25 1f 08 00 45 00 .i...q`*..%...E.
0010 00 48 6f d9 00 00 3b 11 3f 0a 08 08 08 08 c0 a8 .Ho...;.?.......
0020 00 0a 00 35 f7 14 00 34 bf 87 72 57 81 80 00 01 ...5...4..rW....
0030 00 01 00 00 00 00 06 67 6f 6f 67 6c 65 03 63 6f .......google.co
0040 6d 00 00 01 00 01 c0 0c 00 01 00 01 00 00 00 c6 m...............
0050 00 04 ac d9 03 ae ......
这可能是什么原因造成的?两个应用程序都向同一台服务器发送格式正确的 DNS 查询,但却收到了不同的响应。
答案1
根据以下信息,您查询中的域名格式似乎不正确:http://www.tcpipguide.com/free/t_DNSNameNotationandMessageCompressionTechnique.htm
DNS 协议不使用点 (ASCII 2E) 来划分域名的各个部分...而是使用长度。在您的第二个查询中,请注意“google”前面是 ASCII 06,而“com”前面是 ASCII 03。您似乎已将“google.com”的长度计算为 ASCII 0A,并添加在前面。