用wireshark抓到DNS的报文,复制如下:
0010 00 39 0f c9 00 00 40 11 02 68 0b 80 b2 33 0b 80 .9....@..h...3..
0020 a1 50 e2 bb 00 35 00 25 39 4d 38 6701 00 00 01 .P...5.%9M8g....
0030 00 00 00 0000 00 01 69 05 62 61 69 64 75 03 63 .......i.baidu.c
0040 6f 6d 00 00 01 00 01 om.....
现开始分析
先来一张图了解以太网数据帧从数据进入协议栈的封包过程:
以太网首部结构:
对应数据
目MAC:00 00 0c 07 ac 0d
源MAC:44 39 c4 38 9c 3d
类型:08 00 (表示是IP类型)
下面到IP报文部分:
版本:4
首部长度:5
服务类型:00
总长度:00 39
16位标识:0f c9
3位标志 + 13位偏移:00 00
TTL生存时间:40
8位协议:11 (既是UDP协议)
16首部检验和:02 68
源IP:0b 80 b2 33 (即11.128.178.51)
目的IP:0b 80 a1 50(即11.128.161.80)
接下来到UDP协议:
源端口号:e2 bb (即58063)
目的端口:00 35 (即53端口)
封包长度:00 25 (长度为37)
校验和:39 4d
接下来到DNS部分了:
标识:38 67
标志:01 00
问题数;00 01 (1个)
资源记录数:00 00
授权资源记录数;00 00
额外资源记录数:00 00
这一共就是12个字节了
接下来就是查询问题:
01 69 05 62 61 69 64 75 03 63 6f 6d 这些对应字符串:
01 i 05 b a i d u 03 c o m
即 i.baidu.com这个网址了,这是打开百度是发送的DNS请求了。
后面几个ASCII码
00:应该表示结束
00 01:表示查询
00 01:表示Internet数据
到此报文分析结束
*****************分界线***************
接着用omnipeek抓DNS包,更清晰如下图: