4.3 ANCOUNT(Answer RRs)段

ANCOUNT(Answer RRs)段包含了查询到的记录信息,如图9和图10所示。

wireshark捕获DNS协议并分析_数据分析

图9 查询到的记录信息

wireshark捕获DNS协议并分析_数据分析_02

图10 查询到的记录信息

图9表示查询到的CNAME记录,图10表示查询到的A记录。

相关链接5 CNAME记录为要查询的子域名的别名。

ANCOUNT(Answer RRs)段的格式如图11所示。

wireshark捕获DNS协议并分析_wireshark捕获DNS协议并分析_03

图11 ANCOUNT(Answer RRs)段的格式

4.3.1 NAME段

NAME段的长度是16bit,即2个字节。该段指定了应答数据中资源记录相关的子域名,实际上该子域名就是“4.2 QDCOUNT(Queries)段”中的子域名。为了减少传输的数据量,NAME段中的子域名并不是真正的域名,因为该子域名保存在其他段中,NAME段中的数据是指向保存子域名段的指针。在“3.2 Question段的格式”中提到,保存子域名段的第一个字节表示子域名的长度,而一个子域名的最大长度是63个字节,所以第一个字节的前两位(bit)肯定是00,10和01保留将来使用,11则表示该数据为指向保存子域名段的指针。此时,NAME段的前两位应该为11,表示其后的14位是指针。图9中可以看到,NAME段的值是0xc00c,转换成二进制是b1100-0000-0000-1100,前两位的值是11,表示使用保存该字符串的指针,而后面的14位则是指针值00000000001100,即12。该指针表示“图1 DNS消息格式”中的偏移量,从图2中可以看到,DNS消息的Header长度是12个字节,所以该指针指向的是Header后面的Question段,即“4.2 QDCOUNT(Queries)段”,也就是要查找的子域名“a.baidu.com”。

4.3.2 TYPE段

TYPE段的长度是16bit,即2个字节。该段指定了应答数据中资源记录的类型,也就是RDATA段中数据的含义。图9中TYPE段的值是0x0005,表示该资源记录的类型是CNAME记录。

4.3.3 CLASS段

CLASS段的长度是16bit,即2个字节。该段指定了RDATA段中数据的类。从图9中可以看出,CLASS段的值是0x0001,表示表示该类为互联网地址。

4.3.4 TTL段

TTL段的长度是32bit,即4个字节。该段表示的是一个无符号的整型,以秒为单位表示资源记录被缓存的时间。如果该段的值是0,则表示资源记录只能被处理不能被缓存。从图9中可以看到,TTL段的值是0x00000005。

4.3.5 RDLENGTH段

RDLENGTH段的长度是16bit,即2个字节。该段表示的是一个无符号的整型,指定了RDATA段中数据的长度。从图9中可以看到,RDLENGTH段的值是0x0f,即RDATA段中有15个字节的数据。

4.3.6 RDATA段

RDATA段的长度是可变的。该段中保存的数据即为查询的结果,与TYPE段与CLASS段相关。该段中数据格式与“3.2.1 QNAME”中的格式相同,即“长度 子域名”。从图9中可以看到,a.baidu.com的CNAME,即别名是asp.e.shifen.com。

图10是查到的第二个资源记录,从图10中可以看出,资源记录是“asp.e.shifen.com”的A记录,即该子域对应的IP地址是“112.80.248.124”。