DNS - 当其他应用程序没有从同一服务器获取响应时,为什么我的应用程序会得到“没有此名称”的响应?

DNS - 当其他应用程序没有从同一服务器获取响应时,为什么我的应用程序会得到“没有此名称”的响应?

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,并添加在前面。

相关内容