Wireshark之FTP协议分析(二)

以实际抓包来分析ftp协议,加深理解。linux

环境:服务器

win7电脑+linux设备,linux设备为ftp服务端,win7电脑经过WinSCP的ftp主动方式(我得版本winscp默认是被动方式,须要从高级选项修改)来链接ftp服务端。tcp

过程:3d

电脑(192.168.3.206)与设备创建ftp(192.168.3.100)链接,而后电脑向设备传输一个2084字节的文件。而后电脑主动关闭链接。blog

设备上进行抓包,只抓取tcp port 20和21的报文。class

实际抓包报文以下(一个一个包来分析):登录

第1-3包为tcp的三次握手,服务端端口21,即ftp控制链接创建;ftp

第4包为服务端应答客户端报文,220:服务就绪,附加参数为服务端ftp版本号;二进制

第5包客户端发送请求认证用户名,命令USER,参数实际用户名;请求

第6包为服务端tcp ack回应包;

第7包为服务端对客户端USER命令的应答,331:要求密码;

第8包客户端像服务端传送密码,命令PASS,后跟明文密码;

第9包为服务端tcp ack回应包;

第10包为服务端对客户端PASS命令的应答,230:登陆成功;

第11包为客户端像服务端请求系统版本,命令SYST;

第12包为服务端tcp ack回应包;

第13包为服务端对客户端SYST命令的应答,215:系统名;

第14包为客户端向服务端请求服务端采用的特性列表,命令FEAT;

第15包为服务端对客户端命令FEAT的应答,211:系统状态回复;

第16-24包为服务端应答回复;

第2五、26包为客户端tcp ack包;

第27-38包为客户端指定UTF8格式、获取服务器目录并切换命令及服务端的应答,再也不赘述;

第39包为客户端向服务端请求LIST命令;

第40-42为服务端与客户端的数据链接创建(注意:是服务端发起的链接请求),服务端端口为20,链接的客户端端口为192*256+13(根据第37包客户端PORT给服务端的端口,计算公式为256*倒数第二位+倒数第一位)

第43-44包为服务端开始向客户端发送文件列表,注意只有实际列表传送走的数据链接,即第44包,第43包仍是控制链接;

第45-47包为tcp 四次挥手包(剩余两个挥手包为第4九、50包),从这能够看出文件列表传送完毕,数据链接立马关闭;

第52-68包又是一次客户端获取服务端列表的通讯过程,能够看到又经历了一次创建数据链接并关闭的过程,不在赘述;

第68-89包为客户端向服务端传送文件的过程,先是肯定为二进制模式,传输文件为sysctl.conf文件,而后创建数据链接进行传输,实际传送数据大小为2084字节,而后关闭数据链接;

第86包服务端应答传输完成;

第88包客户端向服务端传入文件的修改时间,这里不清楚为啥是20171115,明明是2018年;

第89包服务端应答客户端文件时间已修改;

第90-106包又是一次文件列表的获取过程,再也不赘述;

第107-109为客户端主动断开与服务端的ftp链接的四次挥手包(闹么为啥只抓到三个包。。。);

四次挥手注意的是,由于数据链接采用的是服务端主动链接的,而控制链接为客户端主动链接的,屡一下,ftp客户端与服务端是针对控制链接而言的。数据链接主动模式下,实际是服务端充当客户端,不讲了有点乱,睡觉~~~