2024年5月27日发(作者:)

数据链路层数据包抓包分析

实验内容

(1)安装Wireshark软件。

(2)掌握抓包软件的使用

(3)掌握通过抓包软件抓取帧并进行分析的办法

实验步骤

(1)常用的抓包软件包括Sniffer、NetXRay、

Wireshark

(又名EtheReal)。

我们采用免费的Wireshark,可以从或其他网站下载。安装

完成后,Wireshark的主界面和各模块功能如下:

命令菜单(command menus):最常用菜单命令有两个:File、Capture。File菜单允许你保存

捕获的分组数据或打开一个已被保存的捕获分组数据文件。Capture菜单允许你开始捕获分

组。

显示筛选规则(display filter specification):在该字段中,可以填写协议的名称或其他

信息,根据此内容可以对分组列表窗口中的分组进行过滤。

捕获分组列表(listing of captured packets):按行显示已被捕获的分组内容,其中包括:

Wireshark赋予的分组序号、捕获时间、分组的源地址和目的地址、协议类型、分组中所包含

的协议说明信息。在该列表中,所显示的协议类型是发送或接收分组的最高层协议的类型。

分组首部明细(details of selected packet header):显示捕获分组列表窗口中被选中分

组的头部详细信息。包括:与以太网帧有关的信息,与包含在该分组中的IP数据报有关的信

息。如果利用TCP或UDP承载分组, Wireshark也会显示TCP或UDP协议头部信息。最后,

分组最高层协议的头部字段也会被显示。

分组内容窗口(packet content):以ASCII码和十六进制两种格式显示被捕获帧的完整内容。

(2)下面我们进行抓包练习。

在capture菜单中选中options,可以设置抓包选项,如下图所示,这里我们需要选

择要对其进行抓包的网卡。选择完成后按“start”开始抓包。

过几秒钟后选择菜单capture->stop停止抓包。显示抓包结果:

任意选中一帧,可以看到该帧所在的各层分组的头部如下:

通过头部信息可以看出,该帧在数据链路层使用的是Ethernet II协议,到网络层被封装为IP

数据包,到传输层被封装为UDP数据包,没有应用层协议。

点开Ethernet II前的+号,可以看到该帧在数据链路层的详细信息:

可以看出该帧的源Mac地址为00:30:18:a9:c5:aa,目的Mac地址为:

94:0C:6d:66:00:8a, 类型特征码为0800(即表示IP封装),在数据区可以看到该帧的完

整数据(16进制表示,可以在数据区右键选择2进制表示)。从16进制表示的数据上可以看出

该帧完全符合以太网帧格式。

(3)下面我们进行抓包实战并按要求回答问题。假定如下拓扑:

交换机

主机A

主机B

我们用主机A ping 主机B,同时进行抓包:

在抓包结果中我们可以看到如下4个包:

依次选中这4个包,点开首部明细区Ethernet II前的+号,可以看到详细信息:

分析这些信息,可以发现ping的过程如下:(两人一组实验,按实际实验结果填写)

1.主机A发出ARP包询问“谁知道主机B的Mac,请告诉我”,该ARP包所在的帧的目的Mac

地址为_______________________________,说明这是一个广播包。

2. 机房中的所有机器都收到了这个广播包,其中有一台机器回答了一个ARP包,该包说:主机

B的Mac地址为_______________________________, 回答的机器是:

□主机B

□交换机

因为该ARP包所在的帧的源地址为_______________________________

3.主机A向主机B发出一个ping request(ping请求)包,该包所在的帧的类型字段的值为

____________ (16进制表示),说明该帧的上层协议为____________。

从首部明细区的封装过程可以看出,该包的最高层封装协议为

□Ethernet

□IP

□ICMP

4.主机B向主机A发出一个ping reply(ping响应)包。

网络层数据包抓包分析

相关理论

网络层使用的协议包括IP、ICMP、ARP等。其中IP数据包占据网络流量的大

部分。IP数据包分为“报头区”和“数据区”两部分,其格式如下:

格式中主要字段含义如下:

版本:长度为4位。取值一般为0100(Ipv4)或0110(Ipv6)。

报头长度:长度为4位。指明“报头区”的长度,以32bit为单位。在“报头区”中

只有“选项+填充”字段的长度是可变的,其他字段的长度都是固定的。例如:某IP

包的报头长度值为0111,表示该IP包的报头长度为7*32bit=28byte,可以计算出该

IP包“选项+填充”字段的长度为(7-5)*32bit=8byte。

总长度:长度为16位。表示包括“报头区”+“数据区”在内的IP包的总长度,以

字节(8bit)为单位。

生存周期:长度为8位。该字段设置了该IP包可以经过的最多路由器数, 一旦经过一个

处理它的路由器,它的值就减去1,当该字段的值为0时,数据报就被丢弃,并发送ICMP消息

通知源主机。这种机制可以防止网络出现环路时IP包被不断发送。初始值由源主机设置(通

常为32或64)。

协议:长度为8位,用于指定该IP包的上层协议,常见取值有6(TCP)、17(UDP)、1

(ICMP)。

源IP、目的IP:长度为32位。用于指定发送者和所期望的接收者的IP地址,在网络传输

的过程中基值不会发生变化。

实验内容

(1)使用Wireshark软件抓取指定IP包。

(2)对抓取的数据包按协议格式进行各字段含义的分析。

实验步骤

(1)打开Wireshark软件,关闭已有的联网程序(防止抓取过多的包),开始抓包;

(2)打开浏览器,输入,网页打开后停止抓包。

(3)如果抓到的数据包还是比较多,可以在Wireshark的过滤器(filter)中输入http,

按“Apply”进行过滤。过滤的结果就是和刚才打开的网页相关的数据包。

(4)在过滤的结果中选择第一个包括http get请求的帧,该帧用于向

网站服务器发出http get请求

(5)选中该帧后,点开该帧首部封装明细区中Internet Protocol前的”+”号,显示该

帧所在的IP包的头部信息和数据区:

(6)数据区目前以16进制表示,可以在数据区右键菜单中选择“Bits View”以2进

制表示:

(注意:数据区蓝色选中的数据是IP包的数据,其余数据是封装该IP包的其他层的数

据)

回答以下问题:

1、该IP包的“版本”字段值为_________(2进制表示),该值代表该IP包的协议版本

为:

□IPv4

□IPv6

2、该IP包的“报头长度”字段值为_________(2进制表示),该值代表该IP包的报头

长度为_________字节。

3、该IP包的“总长度”字段值为_______________________(2进制表示),该值代表

该IP包的总长度为_________字节,可以推断出该IP包的数据区长度为_________字

节。

4、该IP包的“生存周期”字段值为________________________ (2进制表示),该值

代表该IP包最多还可以经过_________个路由器

5、该IP包的“协议”字段值为___________________________ (2进制表示) ,该值

代表该IP包的上层封装协议为_________。

6、该IP包的“源IP地址”字段值为____________________________

_________________________ (2进制表示) ,该值代表该IP包的源IP地址为

_____._____._____._____。

7、该IP包的“目的IP地址”字段值为____________________________

_________________________ (2进制表示) ,该值代表该IP包的目的IP地址为

_____._____._____._____。

传输层数据包抓包分析

相关理论

(1)传输层:负责端到端的传输,只在数据传输的发送端和接收端工作,在传输过

程中数据最高只被封装到网络层。传输层使用的协议主要有TCP和UDP等。TCP

是面向连接的、可靠的传输层协议,UDP是非连接的、不可靠的传输层协议。

(2)端口:端口是传输层与应用层的服务接口。传输层的复用和分用功能都要通过

端口才能实现。使用传输层的每个终端有多个端口,用于区分同时进行的多项传输

任务。例如一台服务器即作为web服务器又作为数据库服务器,客户端连接时应选

择访问web服务还是数据库服务,由于两个服务在一个IP上,只用IP无法进行区

分,此时可以用不同的端口号区分。端口号范围为0~65535。

(3)TCP分组的格式如下:

格式中各字段说明如下:

源端口(Source Port):16位的源端口字段包含初始化通信的端口号。源端口和IP地址的

作用是标识报文的返回地址。

目的端口(Destination Port):16位的目的端口字段定义传输的目的。这个端口指明接收方计

算机上的应用程序接口。

序列号(Sequence Number):该字段用来标识TCP源端设备向目的端设备发送的字节流,

它表示在这个报文段中的第几个数据字节。

确认号(Acknowledge Number):TCP使用32位的确认号字段标识期望收到的下一个段的

第一个字节,并声明此前的所有数据已经正确无误地收到,因此,确认号应该是上次已成功

收到的数据字节序列号加1。收到确认号的源计算机会知道特定的段已经被收到。确认号的

字段只在ACK标志被设置时才有效。

数据偏移(Data Offset):这个4位字段包括TCP头大小。由于首部可能含有选项内容,因

此TCP首部的长度是不确定的。首部长度的单位是32比特或4个八位组。首部长度实际上

也指示了数据区在报文段中的起始偏移值。

保留(Reserved):6位置0的字段。为将来定义新的用途保留。、

控制位(Control Bits):共6位,每一位标志可以打开一个控制功能。

➢ URG(Urgent Pointer Field Significant,紧急指针字段标志):表示TCP包的紧急指针字段

有效,用来保证TCP连接不被中断,并且督促中间齐备尽快处理这些数据。

➢ ACK(Acknowledgement field significant,确认字段标志):取1时表示应答字段有效,

也即TCP应答号将包含在TCP段中,为0则反之。

➢ PSH(Push Function,推功能):这个标志表示Push操作。所谓Push操作就是指在数据包

到达接收端以后,立即送给应用程序,而不是在缓冲区中排队。

➢ RST(Reset the connection,重置连接):这个标志表示感谢连接复位请求,用来复位那

些产生错误的连接,也被用来拒绝错误和非法的数据包。

➢ SYN(Synchronize sequence numbers,同步序列号):表示同步序号,用来建立连接。

➢ FIN(No more data from sender,结束):表示发送端已经发送到数据末尾,数据传送

完成,发送FIN标志位的TCP段,连接将被断开。

窗口(Window):目的主机使用16位的窗口字段告诉源主机它期望每次收到的数据通的字

节数。

校验和(Checksum):TCP头包括16位的校验和字段用于错误检查。

紧急指针(Urgent Pointer):紧急指针字段是一个可选的16位指针,指向段内的最后一个

字节位置,这个字段只在URG标志被设置时才有效。

(4)TCP建立连接过程:俗称三次握手:

第一次握手:A的TCP向B发出连接请求报文段,其首部中置同步比特SYN =1,并选择

序号x,表明传送数据时的第一个数据字节的序号是x。

第二次握手:B的TCP收到连接请求报文段后,如同意,则发回确认。B在确认报文段中

应置SYN=1,其确认号应为x+1,同时也为自己选择序号y。

第三次握手:A收到此报文段后,向B给出确认,其确认号应为 y+1。

A和B的TCP通知上层应用进程,连接已经建立。

实验内容

(1)使用Wireshark软件抓取指定TCP数据包。

(2)对抓取的数据包按协议格式进行各字段含义的分析。

实验步骤

(1)打开Wireshark软件,关闭已有的联网程序(防止抓取过多的包),开始抓包;

(2)打开浏览器,输入,网页打开后停止抓包。

(3)如果抓到的数据包还是比较多,可以在Wireshark的过滤器(filter)中输入tcp,

按“Apply”进行过滤。在过滤的结果中找到如下三行:

即为3次握手的过程。分析这3个TCP包,回答如下问题:

1、第一个TCP包的目的端口为______,封装它的IP包的目的IP为

______________________,为什么____________________________

__________________________________________________________

2、第一个TCP包的SYN值为_____,ACK值为_____,SEQ值为______。

3、第二个TCP包的SYN值为_____,ACK值为_____,SEQ值为______。

4、第三个TCP包的SYN值为_____,ACK值为_____,SEQ值为______。

5、这三个数据包中有应用层协议(本例中为http)传来的数据吗?为什么?

6、在数据经过的路由器上能看到这三个TCP包吗?为什么?

五、实验思考与体会