Dns数据包内容分析

DNS(Domain Name System,域名系统),因特网上作为域名和

IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互
联网,而不用去记住能够被机器直接读取的IP数串。通过主机名,
最终得到该主机名对应的IP地址的过程叫做域名解析(或主机名解
析)。DNS协议运行在UDP协议之上,使用端口号53。在RFC文档
中RFC 2181对DNS有规范说明,RFC 2136对DNS的动态更新进行
说明,RFC 2308对DNS查询的反向缓存进行说明。

一、 域名的命名规则

1、 只能包含的字符
26个英文字母
“0,1,2,3,4,5,6,7,8,9”十个数字
“-”(英文中的连词号)
2、 字符组合规则
在域名中,不区分英文字母的大小写
对于一个域名的长度是有一定限制的

域名例子:www.baidu.com
gd.122.gov.cn
www.chinaedu.edu.cn
www.zephyrproject.org

二、 域名请求数据包分析

如下图为抓取的一个dns请求包:
Dns数据包内容分析_第1张图片
Dns请求包的内容如下:
2f 1f 01 00 00 01 00 00 00 00 00 00 03 64 77 6e
03 72 6f 6f 02 62 6f 00 00 01 00 01

各个字段内容如下:
Transaction ID: 0x2f1f(2byte)
Flags: 0x0100 (2byte)
Questions: 1 (2byte)
Answer RRs: 0 (2byte)
Authority RRs: 0(2byte)
Additional RRs: 0(2byte)
Queries
Name: dwn.roo.bo (对应03 64 77 6e 03 72 6f 6f 02 62 6f 00)
Type: A (Host Address) (1) (2byte)
Class: IN (0x0001) (2byte)

Dns信息中大部分项的长度都是确定的,唯一就是Queries中Name
的长度是不定的,
Name的编码如下:Name: dwn.roo.bo (对应03 64 77 6e 03 72
6f 6f 02 62 6f 00)
其中”.”作为分割符,如上面:dwn(对应03 64 77 6e)表示这
一段长度为3,后面就是3个字符码,后面的各段都是一样方式,只
是在最后放置00表示结束。

三、 Dns应答数据包分析

如下图为应答数据包
Dns数据包内容分析_第2张图片

Dns应答包的内容如下:
2f 1f 81 80 00 01 00 02 00 00 00 00 03 64 77 6e
03 72 6f 6f 02 62 6f 00 00 01 00 01 03 64 77 6e
03 72 6f 6f 02 42 4f 00 00 05 00 01 00 00 01 ef
00 1c 03 64 77 6e 03 72 6f 6f 02 62 6f 01 77 09
61 6c 69 6b 75 6e 6c 75 6e 03 6e 65 74 00 c0 32
00 01 00 01 00 00 01 ef 00 04 70 5a 20 cc

各个字段内容如下:
Domain Name System (response)
Transaction ID: 0x2f1f(2byte)
Flags: 0x8180 (2byte)
Questions: 1(2byte)
Answer RRs: 2(2byte)
Authority RRs: 0(2byte)
Additional RRs: 0(2byte)
Queries
Name: dwn.roo.bo (对应03 64 77 6e 03 72 6f 6f 02 62 6f 00)
Type: A (Host Address) (1)(2byte)
Class: IN (0x0001)(2byte)
Answers
Name: dwn.roo.BO (对应03 64 77 6e 03 72 6f 6f 02 42 4f 00)
Type: CNAME (5) (2byte)
Class: IN (0x0001)(2byte)
Time to live: 495(4byte)
Data length: 28(2byte)
CNAME: dwn.roo.bo.w.alikunlun.net (对应03 64 77 6e 03 72 6f 6f 02 62 6f 01 77 09 61 6c 69 6b 75 6e 6c 75 6e 03 6e 65 74 00)
Name: dwn.roo.bo.w.alikunlun.net (2byte)
Type: A (Host Address) (1) (2byte)
Class: IN (0x0001)(2byte)
Time to live: 495(4byte)
Data length: 4(2byte)
Address: 112.90.32.204(4byte)

上面数据包中各个字段对应关系都是比较明确的。
其中Answers中Name: dwn.roo.BO最后一个段变成大写了,与
Queries中小写不同,所以该name需要使用(03 64 77 6e 03 72
6f 6f 02 42 4f 00)表示,若相同,就可以采用指针方式指示,只
需要2byte就够了。
而Answers中Name: dwn.roo.bo.w.alikunlun.net与CNAME:
dwn.roo.bo.w.alikunlun.net名称完全相同,可以用指针方式(c0
32)表示Name: dwn.roo.bo.w.alikunlun.net。(c0 32)这两个
byte中,最高两bit为11,表示指正方式(非指正方式,最高两bit
为00),剩下的14bit表示Name所在的位置为从DNS信息开头的偏
移位置,这里就表示Name在DNS开始偏移0x32的长度位置,如下
面红色标示的内容即从DNS 0x32位置开始。
2f 1f 81 80 00 01 00 02 00 00 00 00 03 64 77 6e
03 72 6f 6f 02 62 6f 00 00 01 00 01 03 64 77 6e
03 72 6f 6f 02 42 4f 00 00 05 00 01 00 00 01 ef
00 1c
下面就是从0x32位置开始的内容Name。
03 64 77 6e 03 72 6f 6f 02 62 6f 01 77 09
61 6c 69 6b 75 6e 6c 75 6e 03 6e 65 74 00

你可能感兴趣的:(网络)