实验内容
- 学会安装使用自由软件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 | 01/01-01:40:15.948470 0:16:EC:D2:50:7D -> 0:19:21:57:7:85 type:0x800 len:0x3E |
上边为连接建立的第一次握手,可以看到数据包从主机A(104)发往主机B(105)的21号端口;
SYN位设置为1;
序号为0x75C7623D
。
1 | 01/01-01:40:15.948524 0:19:21:57:7:85 -> 0:16:EC:D2:50:7D type:0x800 len:0x3E |
上边为连接建立的第二次握手,可以看到数据包从105发往104,
SYN位设置为1;
ACK位设为1;
序号为0xF085016
;
确认号为0x75C7623E
,即确认号为上一次握手序号+1的值。
1 | 01/01-01:40:15.948661 0:16:EC:D2:50:7D -> 0:19:21:57:7:85 type:0x800 len:0x3C |
上边为连接建立的第三次握手,可以看到数据包从104发往105,
ACK位设为1;
序号为0x75C7623E
,即序号为上一次握手的确认号,本质是A上一次向B发出的请求的序号+1;
确认号为0xF085017
,即确认号为上一次握手序号+1的值。
数据传送
连接释放
注意:这里是服务器主动释放连接,与教材上写的客户机主动释放情况不同。
1 | 01/01-01:40:25.769622 0:19:21:57:7:85 -> 0:16:EC:D2:50:7D type:0x800 len:0x36 |
上边为连接释放的第一次握手,可以看到数据包从105发往104,
ACK位设为1;
FIN位设为1;
序号为0xF085092
;
确认号为0x75C7625B
。
1 | 01/01-01:40:25.769759 0:16:EC:D2:50:7D -> 0:19:21:57:7:85 type:0x800 len:0x3C |
上边为连接释放的第二次握手,可以看到数据包从104发往105,
ACK位设为1;
序号为0x75C7625B
,即序号等于上次握手确认号;
确认号为0xF085093
,即确认号等于上次握手序号+1。
1 | 01/01-01:40:25.771844 0:16:EC:D2:50:7D -> 0:19:21:57:7:85 type:0x800 len:0x3C |
上边为连接释放的第三次握手,可以看到数据包从104发往105,
ACK位设为1;
FIN位设置为1;
序号为0x75C7625B
,即序号等于上次握手序号;
确认号为0xF085093
,即确认号等于上次握手确认号。
1 | 01/01-01:40:25.771894 0:19:21:57:7:85 -> 0:16:EC:D2:50:7D type:0x800 len:0x36 |
上边为连接释放的第四次握手,可以看到数据包从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
欢迎讨论和交流!