对DNS报文的理解
在这段时间的学习中,我发现通过抓包来学习的方法不错,这样有助于更深刻的理解。下面是我对dns报文的一些理解。
![]() 学习了《tcp/ip卷一》 dns域名系统这一章,下面通过spynet capturenet抓一些dns通信报文进行一下分析,以加深理解。 本人是在windows 上使用nslookup工具来产生的dns通信,见上图。 -----------------------------dns查询报文------------------------------------ 首先是一个dns查询报文抓包: 0000: 00 14 78 b5 da ae 00 0c 6e ec 1e ae 08 00 45 00 ..x.....n.....e. 0010: 00 38 00 33 00 00 80 11 29 6f c0 a8 a8 02 dd 05 .8.3....)o...... 0020: cb 62 04 0f 00 35 00 24 17 95 00 02 01 00 00 01 .b...5.$........ 0030: 00 00 00 00 00 00 03 66 74 70 02 75 75 03 6e 65 .......ftp.uu.ne 0040: 74 00 00 01 00 01 t..... 对以太网首部和ip首部字段就不再加以解释说明,直接以udp首部开始分析. 04 0f---udp源端口号1039; 00 35---udp目的端口号53; 00 24---udp报文长度36字节; 17 95---udp检验和; 接下来就是dns请求报文的内容了: 00 02---标识符; 01 00---16 bit标志,二进制表示为00000001 000000000 从高位到低位,第一位0表示这是一个dns查询报文; 第2-5位0000是opcode字段,这里表示是一个标准查询; 第6位0表示授权回答未设置; 第7位0表示可截断位未设置; 第8位1表示期望递归已设置; 第9位0表示可用递归未设置; 第10-12位000表示zero字段; 第13-16位0000表示4位返回码字段,表示没有差错产生。 00 01---问题数为1 00 00---资源记录数为0 00 00---授权资源记录数为0 00 00---附加资源记录数为0 03 66 74 70 02 75 75 03 6e 65 74 00---问题部分的查询名字段,它是一个或多个标识符的序列,每个标识符以首字节的计数值来说明随后 标识符的字节长度,每个名字以最后字节为0结束。03(计数),66 74 70(ftp),02(计数),75 75(uu),03(计数),6e 65 74(net),00(结束) 00 01---表示查询类型字段,这里表示一个a记录的查询; 00 01---表示查询类字段,通常是1,指互联网地址 ---------------------------------------------------------------------------- -----------------------------dns响应报文------------------------------------ 下面是对上面的一个dns查询报文所产生的dns响应报文抓包: 0000: 00 0c 6e ec 1e ae 00 14 78 b5 da ae 08 00 45 00 ..n.....x.....e. 0010: 00 a1 1a 1c 00 00 18 11 77 1d dd 05 cb 62 c0 a8 ........w....b.. 0020: a8 02 00 35 04 0f 00 8d 31 fe 00 02 81 80 00 01 ...5....1....... 0030: 00 01 00 04 00 00 03 66 74 70 02 75 75 03 6e 65 .......ftp.uu.ne 0040: 74 00 00 01 00 01 c0 0c 00 01 00 01 00 00 0c 82 t............... 0050: 00 04 c0 30 60 09 c0 10 00 02 00 01 00 00 0d 2c ...0`.........., 0060: 00 0c 06 61 75 74 68 36 30 02 6e 73 c0 10 c0 10 ...auth60.ns.... 0070: 00 02 00 01 00 00 0d 2c 00 0a 07 61 75 74 68 32 .......,...auth2 0080: 30 30 c0 3f c0 10 00 02 00 01 00 00 0d 2c 00 0a 00.?.........,.. 0090: 07 61 75 74 68 32 31 30 c0 3f c0 10 00 02 00 01 .auth210.?...... 00a0: 00 00 0d 2c 00 09 06 61 75 74 68 30 30 c0 3f ...,...auth00.? 00 35---udp源端口号53; 04 0f---udp目的端口号1039; 00 8d---udp报文长度141字节; 31 fe---udp检验和; 00 02---标识符,与dns请求报文中的相对应. 81 80---16 bit标志,二进制表示为10000001 10000000 从高位到低位,第一位1表示这是一个dns响应报文; 第2-5位0000是opcode字段,这里表示是一个标准查询; 第6位0表示授权回答未设置; 第7个0表示可截断位未设置; 第8位1表示期望递归已设置; 第9位1表示可用递归已设置; 第10-12位000表示zero字段; 第13-16位0000表示4位返回码字段,表示没有差错产生。 00 01---问题数为1 00 01---资源记录数为1 00 04---授权资源记录数为4 00 00---附加资源记录数为0 [问题]部分 03 66 74 70 02 75 75 03 6e 65 74 00---问题部分的查询名字段,它是一个或多个标识符的序列,每个标识符以首字节的计数值来说明随后 标识符的字节长度,每个名字以最后字节为0结束。03(计数),66 74 70(ftp),02(计数),75 75(uu),03(计数),6e 65 74(net),00(结束) 00 01---表示查询类型字段,这里表示一个a记录的查询; 00 01---表示查询类字段,通常是1,指互联网地址 [回答]部分: c0 0c---回答字段部分中的域名字段。因为有重复域名的出现,这里使用了压缩方式。这里需要详细的讲解。 《tcp/ip卷一》书中是这样描述的:“当一个域名中的标识符是压缩的,它的单计数字节中的最高两位将被置为11。这表示它是一个16 bit指 针而不再是8 bit的计数字节。指针中的剩下14 bit说明在该dns报文中标识符所在的位置(起始位置由标识字段的第一字节起算)。一个指针 可能指向一个完整的域名,也可能只指向域名的结尾部分,因为给定域名的结尾标识符是相同的。” c0 0c二进制表示为11000000 00001100,最高两位被置为11,剩下的14位"000000 00001100"说明标识符所在的位置相对于dns报文起始位置偏 移了12字节,因此就是指向"03 66 74 70 02 75 75 03 6e 65 74 00"中(问题部分中的查询名字段)的03字节,而03相对于dns报文起始位置 的偏移量正好为12。也就是说指针指向的内容为ftp.uu.net 00 01---表示查询类型字段,这里表示一个a记录的查询; 00 01---表示查询类字段,通常是1,指互联网地址 00 00 0c 82---表示生存时间为3202秒 00 04---表示资源数据长度为4 c0 30 60 09---表示资源数据,这里表示的是一个32 bit ip地址 192.48.96.9 [授权资源记录]部分: c0 10---授权资源记录部分中的域名字段,根据上面的计算方法,这个16 bit指针,指向的内容偏移dns报文起始位置16字节,因此指向"02 75 75 03 6e 65 74 00"中的02字节,也就是说指针指向的内容为uu.net 00 02---表示查询类型字段,这里表示一个ns记录的查询; 00 01---表示查询类字段,通常是1,指互联网地址 00 00 0d 2c---表示生存时间为3372秒 00 0c---表示授权资源数据长度为12 06 61 75 74 68 36 30 02 6e 73 c0 10---表示授权资源数据,06(计数),61 75 74 68 36 30(auth60),02(计数),6e 73(ns),c0 10(仍然表示 一个16 bit指针,指向"02 75 75 03 6e 65 74 00"的内容,连起来,所表示的域名就是 auth60.ns.uu.net) 后面三条授权资源记录的解释就省略了,方法都是一样的。 ---------------------------------------------------------------------------- 在nslookup交互式命令中打入set debug开启调试状态,可以显示更丰富的信息。 我们对照抓图,可以发现我们的分析跟图中显示完全符合。 其它类型的dns报文在理解上也是一样的. 本文出自 51CTO.COM技术博客 |



run_compile
博客统计信息
热门文章
最新评论
友情链接