FTP主被动模式与抓包分析

FTP基于C/S架构,客户端和服务器会建立两条TCP连接,分别是控制连接和数据连接

FTP的主动和被动模式指的是FTP服务器在数据连接建立上的主、被动性

每次文件传输前客户端都要通过控制连接向服务器表明本次数据连接建立采用主/被动模式,然后建立数据连接

在了解主动和被动模式之前,最好对FTP的报文格式有一个清晰的认识,这部分可以参考我的另一篇文章 FTP报文格式

一、主动模式

首先客户端以一个随机的端口a向服务器的21端口发起TCP控制连接

当客户端每次有文件要传输时,其会开始监听另一个随机的用于数据连接的端口b,然后以PORT请求告知服务器本次建立采用主动模式,且客户端监听端口为b,例如

1
2
PORT 192,168,163,103,143,127\r\n
前四个逗号为IP,后两个为端口,此时客户端监听的端口为143*256+127=36735

服务器以20端口主动向客户端监听的端口b发起TCP连接

数据连接建立成功后,进行文件的传输,传输完成断开数据连接

注意,如果FTP服务器处在公网上,客户端位于NAT设备之后,则服务器无法主动建立与客户端的数据连接,此时只能选择被动模式

当服务器和客户端所在主机处于同一局域网,则可以使用主动模式

二、被动模式

首先客户端以一个随机的端口a向服务器的21端口发起TCP控制连接

客户端每次有文件要传输时,其在控制连接上发送PASV请求告知服务器本次数据连接使用被动模式

服务器收到PASV请求后开始监听另一个随机的用于数据连接的端口b,并作为PASV请求的相应,例如

1
2
227 Entering Passive Mode (192,168,163,105,109,134).\r\n
此时服务器监听的端口为109*256+134=28038

客户端收到响应后以另一个随机的端口c向服务器的端口b发起TCP数据连接

数据连接建立成功后,进行文件传输,传输完成断开数据连接

三、主被动模式切换

在linux自带的FTP客户端下,默认的模式为主动模式

输入passive,客户端会切换到被动模式,每次当有文件要传输时会发出PASV请求

再次输入passive,客户端会切换到主动模式,每次当有文件要传输时会发出PORT请求

四、抓包分析

通过WireShark进行抓包分析

服务器: VSFTPD(Very Secure File Transfer Protocol Daemon) ubuntu

客户端: ubuntu自带FTP客户端

主动模式抓包

终端输入ftp启动linux自带的FTP客户端

输入help列出的命令并非和FTP命令报文格式中的命令一一对应,但大多能对上

这里有一个图片

这里有一个图片

这里有一个图片

被动模式抓包

这里有一个图片

这里有一个图片

更多关于FTP的主被动模式的信息,请参阅RFC文档

https://datatracker.ietf.org/doc/html/rfc959


FTP主被动模式与抓包分析
https://www.pasiphae.top/2023/10/30/FTP主被动模式与抓包分析/
作者
pasiphae
发布于
2023年10月30日
许可协议