计算机网络-实验(四)TCP抓包分析

实验内容

  • 学会安装使用自由软件SNORT
  • 截获以太网数据包,并描述以太网数据包的各层的帧结构。
  • 截获ARP,TCP协议数据包并进行分析

实验步骤

实验需要两个主机A(192.168.1.104)和B(192.168.1.105),A访问B,B进行TCP和ARP抓包,本实验报告为抓包主机B视角。

环境配置

主机B需要进行环境配置:设置账户密码、打开FTP站点

设置账户密码

控制面板——用户账户——设置密码

打开FTP站点

控制面板——管理工具——Internet信息服务——FTP站点——属性——用户名——浏览——查找账户——选择ligong——应用——确认

A访问B

  • ftp
  • open 192.168.1.105
  • 输入用户名(ligong)和密码(123,也就是刚才设置的密码)
  • 一些操作,如dir
  • quit,退出,断开连接

B进行抓包

使用Snort软件进行抓包,进入D:/snort/bin目录。

输入snort -dev -l /snort/log,开始抓包,按下Ctrl+C停止抓包。

如果主机B抓到了A发出的FTP请求,在D:/snort/log目录下可以找到文件夹192.168.104,在其中可以看到名如TCP_1980-21.ids的文件,21为端口号。

数据包分析

ARP抓包失败,原因未知,其他同学似乎也未抓到,抓到的都是3号机器广播的ARP包。下边进队TCP数据包进行分析。

TCP数据包分析

  • TCP是面向连接的协议,所以TCP运输连接的建立和释放时每一次通信中必不可少的过程。

  • 运输连接分为三个阶段:连接建立数据传送连接释放

    每一次握手大概包括以下内容:

    第一行数据包括了时间戳、源物理地址、目的物理地址、类型、长度;

    第二行数据包括了源IP、目的IP、TCP、TTL、TOS、ID、IP长度、Dgm长度;

    第三行数据包括SYN位、ACK位、序号、确认号、窗口大小、TCP长度;

    第四行信息包括TCP选项等。

以下主要选取TCP数据包中连接建立(三次握手)和连接释放(四次握手)的相关内容进行分析。

连接建立

1
2
3
4
5
6
01/01-01:40:15.948470 0:16:EC:D2:50:7D -> 0:19:21:57:7:85 type:0x800 len:0x3E
192.168.1.104:1980 -> 192.168.1.105:21 TCP TTL:128 TOS:0x0 ID:11743 IpLen:20 DgmLen:48 DF
******S* Seq: 0x75C7623D Ack: 0x0 Win: 0xFFFF TcpLen: 28
TCP Options (4) => MSS: 1460 NOP NOP SackOK

=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+

上边为连接建立的第一次握手,可以看到数据包从主机A(104)发往主机B(105)的21号端口;

SYN位设置为1;

序号为0x75C7623D

1
2
3
4
5
6
01/01-01:40:15.948524 0:19:21:57:7:85 -> 0:16:EC:D2:50:7D type:0x800 len:0x3E
192.168.1.105:21 -> 192.168.1.104:1980 TCP TTL:128 TOS:0x0 ID:11647 IpLen:20 DgmLen:48 DF
***A**S* Seq: 0xF085016 Ack: 0x75C7623E Win: 0xFFFF TcpLen: 28
TCP Options (4) => MSS: 1460 NOP NOP SackOK

=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+

上边为连接建立的第二次握手,可以看到数据包从105发往104,

SYN位设置为1;

ACK位设为1;

序号为0xF085016

确认号为0x75C7623E,即确认号为上一次握手序号+1的值

1
2
3
4
5
01/01-01:40:15.948661 0:16:EC:D2:50:7D -> 0:19:21:57:7:85 type:0x800 len:0x3C
192.168.1.104:1980 -> 192.168.1.105:21 TCP TTL:128 TOS:0x0 ID:11744 IpLen:20 DgmLen:40 DF
***A**** Seq: 0x75C7623E Ack: 0xF085017 Win: 0xFFFF TcpLen: 20

=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+

上边为连接建立的第三次握手,可以看到数据包从104发往105,

ACK位设为1;

序号为0x75C7623E,即序号为上一次握手的确认号,本质是A上一次向B发出的请求的序号+1;

确认号为0xF085017,即确认号为上一次握手序号+1的值

数据传送

TCP数据包.png

连接释放

注意:这里是服务器主动释放连接,与教材上写的客户机主动释放情况不同。

1
2
3
01/01-01:40:25.769622 0:19:21:57:7:85 -> 0:16:EC:D2:50:7D type:0x800 len:0x36
192.168.1.105:21 -> 192.168.1.104:1980 TCP TTL:128 TOS:0x0 ID:11666 IpLen:20 DgmLen:40 DF
***A***F Seq: 0xF085092 Ack: 0x75C7625B Win: 0xFFE2 TcpLen: 20

上边为连接释放的第一次握手,可以看到数据包从105发往104,

ACK位设为1;

FIN位设为1;

序号为0xF085092

确认号为0x75C7625B

1
2
3
01/01-01:40:25.769759 0:16:EC:D2:50:7D -> 0:19:21:57:7:85 type:0x800 len:0x3C
192.168.1.104:1980 -> 192.168.1.105:21 TCP TTL:128 TOS:0x0 ID:11763 IpLen:20 DgmLen:40 DF
***A**** Seq: 0x75C7625B Ack: 0xF085093 Win: 0xFF84 TcpLen: 20

上边为连接释放的第二次握手,可以看到数据包从104发往105,

ACK位设为1;

序号为0x75C7625B,即序号等于上次握手确认号

确认号为0xF085093,即确认号等于上次握手序号+1

1
2
3
01/01-01:40:25.771844 0:16:EC:D2:50:7D -> 0:19:21:57:7:85 type:0x800 len:0x3C
192.168.1.104:1980 -> 192.168.1.105:21 TCP TTL:128 TOS:0x0 ID:11764 IpLen:20 DgmLen:40 DF
***A***F Seq: 0x75C7625B Ack: 0xF085093 Win: 0xFF84 TcpLen: 20

上边为连接释放的第三次握手,可以看到数据包从104发往105,

ACK位设为1;

FIN位设置为1;

序号为0x75C7625B,即序号等于上次握手序号

确认号为0xF085093,即确认号等于上次握手确认号

1
2
3
01/01-01:40:25.771894 0:19:21:57:7:85 -> 0:16:EC:D2:50:7D type:0x800 len:0x36
192.168.1.105:21 -> 192.168.1.104:1980 TCP TTL:128 TOS:0x0 ID:11667 IpLen:20 DgmLen:40 DF
***A**** Seq: 0xF085093 Ack: 0x75C7625C Win: 0xFFE2 TcpLen: 20

上边为连接释放的第四次握手,可以看到数据包从105发往104,

ACK位设为1;

序号为0xF085093,即序号等于上次握手确认号

确认号为0x75C7625C,即确认号等于上次握手序号+1

心得体会

本次实验前在计算机网络课堂上还并没有学过TCP的连接过程如何建立与释放,仅仅听说过三次握手和四次握手。

通过这次实验,更加直观、具体地看到了TCP建立和释放连接的过程。在实验之后,又通过学习,对三次握手和四次握手的原理有了进一步的了解。

问:为什么建立连接是三次握手,释放连接是四次握手?

答:

  • 建立连接时,服务器收到客户的SYN连接请求报文,可以直接发送SYN+ACK报文,其中ACK报文是用来应答的,SYN报文是用来同步的。
  • 当释放连接时,当服务器收到FIN报文时,很可能并不会立即关闭SOCKET,所以只能先回复一个ACK报文,告诉客户端:“你发的FIN报文我收到了”。只有等到服务器所有的报文都发送完了,它才能发送FIN报文,因此ACK报文和FIN报文不能一起发送,故需要四步握手。

作者:@臭咸鱼

转载请注明出处:https://chouxianyu.github.io

欢迎讨论和交流!