FTP协议抓包详解

一、简介

文件传输协议(File Transfer Protocol,FTP)是用于在网络上进行文件传输的一套标准协议,是工作在应用层的协议,使用TCP进行传输。

FTP允许用户以文件操作的方式(如文件的增、删、改、查、传送等)与另一主机相互通信。然而, 用户并不真正登录到自己想要存取的计算机上面而成为完全用户, 可用FTP程序访问远程资源, 实现用户往返传输文件、目录管理以及访问电子邮件等等, 即使双方计算机可能配有不同的操作系统和文件存储方式。

二、环境

用户可以通过网络访问远程服务器上的文件,无需直接登录到远程服务器。同时,管理员可以轻松管理和配置用户的访问权限,以确保安全和有效的文件访问。
在这里插入图片描述

三、原理

1、工作原理

1.1 通道:FTP分为控制连接和数据连接,也叫命令通道和数据通道。
1.2 控制连接(命令通道):
       用于传送控制命令和响应信息,一般使用TCP协议的21端口。这个连接在整个FTP Session阶段一直保持打开状态。
1.3 数据连接(数据通道):
      用于实际文件传输,可以是从客户端到服务器(用于上传文件)或者从服务器到客户端(用于下载文件)的TCP连接。数据连接针对每个文件传输任务临时建立并关闭,可以使用TCP协议的20端口或大于1024的随机端口。
在这里插入图片描述

2、控制连接(命令通道)的建立(客户端和服务器均为FileZilla)

2.1 客户端向服务器的FTP端口(默认21,服务器可设置)发起TCP连接请求(三次握手)。
2.2 服务器接受连接请求,建立TCP连接,向客户端发送"220 Service ready"消息,表示服务端就绪。
2.3 客户端会尝试向服务器发起加密数据连接(TLS、SSL、SSH等),如果不支持,服务器会回502 Explicit TLS authentication not allowed表示不支持TLS连接。如果不支持加密连接,默认情况下客户端和服务器之间会建立明文的不安全数据连接。
2.4 客户端发送"USER username"命令,将用户名发送给服务器。
2.5 服务器响应"331 Username ok, need password"提示需要密码。
2.6 客户端发送"PASS password"命令,将密码发送给服务器。
2.7 服务器验证用户名和密码,如果通过,响应"230 Login succeeded"。
2.8 客户端发送SYST命令,检查服务器系统类型
2.9 服务器响应215 UNIX类型(也有其他,我这里是该类型)
2.10 客户端发送FEAT命令,查询服务器支持的特性
2.11 服务器响应211,列出支持的feature
到此基本上的控制连接就建立了,在这之后,客户端就可以向服务器发送PWD、CWD、TYPE等控制命令进行文件传输控制。

状态:	正在连接 192.168.2.80:21...
状态:	连接建立,等待欢迎消息...
响应:	220-FileZilla Server 中文版 0.9.60 beta
响应:	220-written by Tim Kosse (tim.kosse@filezilla-project.org)
响应:	220 Please visit https://filezilla-project.org/
命令:	AUTH TLS
响应:	502 Explicit TLS authentication not allowed
命令:	AUTH SSL
响应:	502 Explicit TLS authentication not allowed
状态:	不安全的服务器,不支持 FTP over TLS。
命令:	USER username
响应:	331 Password required for ljj
命令:	PASS *
响应:	230 Logged on
命令:	SYST
响应:	215 UNIX emulated by FileZilla
命令:	FEAT
响应:	211-Features:
响应:	 MDTM
响应:	 REST STREAM
响应:	 SIZE
响应:	 MLST type*;size*;modify*;
响应:	 MLSD
响应:	 UTF8
响应:	 CLNT
响应:	 MFMT
响应:	 EPSV
响应:	 EPRT
响应:	211 End
状态:	已登录

3、数据连接(数据通道)的建立

3.1 命令通道建立后,默认会获取当前工作目录,客户端发送PWD获取当前工作目录
3.2 服务器返回当前工作目录,这里是根目录
3.3 客户端发送TYPE I,设置为二进制传输模式,还有其他模式,例如ASCII(TYPE A)、本地(TYPE L)等
3.4 服务器回复200,表示设置成功。
3.5 对于主动模式:
      3.5.1 客户端发送PORT(h1,h2,h3,h4,p1,p2)命令,通知服务器自己打开的数据端口信息。
      3.5.2 服务器解析PORT命令,获取客户端的IP地址和端口号,其中h1到h4是客户端IP地址,h5和h6代表客户端的端口号(p1 * 256 + p2)。
      3.5.3 服务器主动向解析的主机和端口发起连接请求,客户端接收连接请求,建立数据连接。
在这里插入图片描述

16:51:32	状态:	读取“/***/***”的目录列表...
16:51:32	命令:	CWD /***/***
16:51:32	响应:	250 CWD successful. "/***/***" is current directory.
16:51:32	命令:	PWD
16:51:32	响应:	257 "/***/***" is current directory.
16:51:32	命令:	PORT 192,168,2,81,213,225
16:51:32	响应:	200 Port command successful
16:51:32	命令:	MLSD
16:51:32	响应:	150 Opening data channel for directory listing of "/jlshao/jlshao"
16:51:32	响应:	226 Successfully transferred "/***/***"
16:51:32	状态:	列出“/***/***”的目录成功

3.6 对于被动模式:
      3.6.1 客户端发送PASV命令
      3.6.2 服务器回应227 Entering Passive Mode (h1,h2,h3,h4,p1,p2)命令,携带者自己的IP和端口信息。
      3.6.3 客户端解析服务器的回应,,获取服务器的端口号,其中h1到h4是服务器的IP地址,h5和h6代表服务器的端口号(p1 * 256 + p2),向服务器的端口发起连接请求,服务器被动接收连接请求,建立数据连接。
在这里插入图片描述

命令:	PASV
响应:	227 Entering Passive Mode (192,168,2,80,196,113)
命令:	MLSD
响应:	150 Opening data channel for directory listing of "/"
响应:	226 Successfully transferred "/"
状态:	列出“/”的目录成功

主动和被动模式的概念是相对于服务器来说的,服务器主动发起连接请求是主动模式,被动接收连接请求是被动模式。

四、抓包分析(被动模式举例)

命令: STOR 11-2.jpg
响应: 150 Opening data channel for file upload to server of “/11-2.jpg”
响应: 226 Successfully transferred “/11-2.jpg”
状态: 文件传输成功,传输了 463,472 字节 (用时1 秒)

状态: 开始下载 /11-2.jpg
命令: PASV
响应: 227 Entering Passive Mode (192,168,2,80,243,60)
命令: RETR 11-2.jpg
响应: 150 Opening data channel for file download from server of “/11-2.jpg”
响应: 226 Successfully transferred “/11-2.jpg”
状态: 文件传输成功,传输了 463,472 字节 (用时1 秒)

1、连接

![在这里插入图片描述](https://img-blog.csdnimg.cn/62f6e82bddc6468896f1e6c562aa0200.png

1、第一阶段:

三次握手,建立TCP连接,客户端随机端口向服务器端口21发起连接。

2、第二部分:

连接完成服务器会发送欢迎消息。

3、第三部分:

建立命令通道(具体查看前面的3章节原理中的控制连接部分),客户端发送用户名、密码,验证通过,服务器回复230登陆成功

4、第四部分:

4.1 客户端向服务器确认类型以及支持的特性,列出当前的目录,同时建立数据通道,这里是被动模式,客户端发送PASV,服务器回应227 (192,168,2,80,196,113)携带自己的IP地址和监听端口信息给客户端,等待客户端的连接。
在这里插入图片描述
通过服务器携带的信息可以计算出,服务器监听端口为50289,。通过三次握手进行数据通道的建立
4.2 之后服务器在被动模式下执行MLSD(Machine List Directory)列出当前目录信息,从左边可以看到当前目录有一个文件16-2note.gif,一个文件夹jlshao。
4.3 此次数据交换完成,服务器发起关闭通道请求,完成一次数据交互。

2、上传、下载

上传下载
上传:
1、第一部分的红框是上传,可以看到也是建立了被动模式的数据通道,服务器的携带信息中端口计算后为58607,同时注意左上角的TCP包的序号为3,一会儿连起来看。
2、客户端发送STOR 文件名命令,服务器回应响应码150表示"File status okay; about to open data connection.",意思是文件状态良好,即将打开数据连接。这个响应告诉客户端,服务器已经准备好接受文件数据,并且将在数据通道上等待数据传输。
3、传输完成服务器回应226传输成功。
4、下面是数据通道传输的信息,可以看到TCP序号是4,连接的端口是58607
在这里插入图片描述
传输完成服务器关闭此次数据通道连接
在这里插入图片描述
下载:
1、第三部分的红框是下载,可以看到也是建立了被动模式的数据通道,服务器的携带信息中端口计算后为62268,同时注意左上角的TCP包的序号为3,一会儿连起来看。
2、下载与上传过程相同,唯一不同的是命令是RETY。这里也是和上文中提到的下载数据通道的端口62268相同,但是左边的TCP包序号是6,中间短了5。因为一开始的图片中,第二部分有一个列出当前目录的操作,所以略过了该部分。
在这里插入图片描述
3、最后传输完成也是会关闭此次数据通道的连接。
总结:上述抓包记录可以看出,每一次文件交互都会打开一个数据通道

五、总结

1、FTP分为两个通道,数据通道和命令通道,命令通道用于命令交互,数据通道用于数据交互。
2、传输模式分为被动模式和主动模式,主动被动是从服务器的角度出发来说的。
3、那么多选文件上传多个文件是会打开一个通道呢,还是一个文件一个通道呢?

此次总结只是个人学习记录分享,仅供参考,错误的地方可以评论指点。

  • 2
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值