首页 理论教育 FTP协议和实例分析思路分享

FTP协议和实例分析思路分享

时间:2023-06-30 理论教育 版权反馈
【摘要】:在FTP 连接期间,控制连接始终保持通畅的连接状态。图3-4-13从FTP 服务器下载文件的操作过程先开启Wireshark 抓包工具,再完成上述操作,最后关闭抓包,抓包数据如图3-4-14。

FTP协议和实例分析思路分享

1.在FTP 会话过程中存在两个独立的TCP 连接

在FTP 会话过程中,存在两个独立的TCP 连接: 控制连接(control connection)和数据连接(data connection)。这两个连接可以选择不同的合适服务质量。例如,对控制连接而言,需要更短的延迟时间;对数据连接而言,需要更大的数据吞吐量

1)控制连接

控制连接主要用来传送在实际通信过程中需要执行的FTP 命令以及命令的响应,只需要很小的网络带宽。FTP 服务器监听端口号21 来等待控制连接建立请求,建立以后并不立即建立数据连接,而是服务器通过一定的方式来验证客户的身份,以决定是否可以建立数据连接。

2)数据连接

在需要文件夹列表、需要传输文件时,数据连接才临时建立,一旦数据传输完毕,这条临时的数据连接就中断。

在FTP 连接期间,控制连接始终保持通畅的连接状态。在数据连接存在期间内,控制连接是肯定存在的;一旦控制连接断开,数据连接就会自动关闭。

2.FTP 的两种连接模式

FTP 的连接模式有两种: PORT 和PASV。PORT 模式是主动模式;PASV 是被动模式。二者都是相对于服务器而言的。

1)PORT 模式

当用户要列出服务器上的文件夹结构时,就要建立一个数据通道,此时客户机会发出PORT 指令告诉服务器自己的什么端口打开了,可以来建立一条数据通道(这个命令由控制信道发送给服务器),当服务器接到这一指令时,服务器会使用20 端口来连接用户在PORT指令中指定的端口号,以发送文件夹结构。

例如,PORT 192,168,10,111,28,37 告诉服务器,当收到这个PORT 指令后,连接FTP客户机的端口7205 (即28 ×256 +37 =7205)。由于客户机打开某一端口,等待服务器端主动建立数据连接,因此PORT 模式为主动模式。

2)PASV 模式

当用户需要建立一个数据通道时,FTP 客户机发送一个PASV 的指令,FTP 服务器端应答返回一个已经打开的端口让FTP 客户机连接上,开始数据传输。

例如,FTP 服务器应答为227 Entering Passive Mode (200,10,211,111,13,113),则表明服务器已打开端口3441 (即13 ×256 +113 =3441),客户机可以连接这个端口。由于服务器端打开某一端口,等待客户机来建立数据连接,所以PASV 模式称为被动模式。

3.FTP 内部命令

在客户机和服务器端交换数据时,使用FTP 协议所规定的一系列FTP 命令。具体而言:客户机发出FTP 命令,服务器端对每个FTP 命令至少返回一个响应。这样,既能实现数据传输请求和传输过程的同步,又能让用户了解服务器的状态。

客户机发出的FTP 内部命令简介如下:

(1)USER name: 以name 为用户名访问FTP 服务器。

(2)PASS password: 发送口令。

(3)PWD: 显示服务器当前文件夹的名称。

(4)LIST [pathname]: 显示服务器指定(或当前)文件夹中的文件和文件夹列表。

(5)CWD pathname: 进入服务器的pathname 文件夹。

(6)MKD dirname: 在服务器当前文件夹下建立新目录dirname。

(7)RETR filename: 下载文件filename 到本地硬盘的当前文件夹。

(8)STOR filename: 上传文件filename 到服务器的当前文件夹。

(9)DELE filename: 删除服务器中的文件filename。

(10)RMD pathname: 删除服务器中的文件夹pathname。

(11)PORT h1,h2,h3,h4,p1,p2: 指定用于建立数据连接的主机地址和端口号。

(12)PASV: 请求服务器进入被动连接状态。

(13)QUIT: 断开连接,退出登录。

4.FTP 应答

FTP 应答由3 个数字开始,后面是一些文本。不同的应答码有不同的意义。简介如下:

(1)220: 服务器准备好了。

(2)331: 用户名正确,需要口令。

(3)230: 用户口令正确,登录成功。

(4)200: 命令成功。

(5)125: 打开数据连接。

(6)226: 关闭数据连接,请求文件的操作成功。

(7)221: 关闭控制连接,可以退出登录。

5.协议实例分析

客户机的IP 地址是172.22.97.20,服务器端的IP 地址是172.22.97.19,操作内容是以匿名方式登录FTP 服务器,发送dir 命令查看服务器当前文件夹中的文件清单,发送get 命令下载一个文件test.txt,最后发送quit 命令断开和FTP 服务器的连接。操作过程如图3-4-13所示。

图3-4-13 从FTP 服务器下载文件的操作过程

先开启Wireshark 抓包工具,再完成上述操作,最后关闭抓包,抓包数据如图3-4-14。(www.xing528.com)

图3-4-14 从FTP 服务器下载文件的抓包数据

图3-4-14 从FTP 服务器下载文件的抓包数据(续)

当客户机发出命令“ftp 172.22.97.19”时,第3、4 帧数据是ARP 数据报,后面发起了和目标主机的建立控制连接的请求,对应图3-4-14 中第5 ~7 帧数据,完成和服务器的三次握手过程。

第8 帧数据是建立控制连接后,服务器发来的220 应答,告之服务器是Windows 操作系统及其主机名等信息。

客户机发送用户名及口令,服务器给出相应回答,对应图3-4-14 的第9 ~14 帧数据。可以看到,在抓包数据中,FTP 命令是USER 和PASS,FTP 应答是331 和230;还可以看到,用户名和口令是明文传递的。

客户机发送dir 命令,服务器返回其当前文件夹的文件清单,这一过程对应图3-4-14中第12 ~26 帧数据。分析这些数据如下:

(1)第16 ~21 帧: 数据通过控制连接交互,客户机发送一个PORT 命令,告诉服务器,客户机的49315 号端口做好了建立连接的准备。服务器发送200 应答,告之收到且同意。由第17 帧的PORT 172,22,97,20,192,163 可知,其端口为49315 (即192×256 +163 =49315)。

(2)第22 帧: 客户机 (172.22.97.20)发送LIST 命令,请求得到服务器 (172.22.97.19)。

(3)第23 帧: 服务器(172.22.97.19)发送125 应答,告诉客户机,端口49315 已经连接,开始传输数据。

(4)第24 帧: 服务器向客户机传送了263 字节的数据,其内容如图3-4-15 所示。和图3-4-13 比较可以看出,263 字节的数据就是文件清单。

(5)第25 帧: 服务器告诉客户机,数据传输完毕,准备断开TCP 连接。

(6)第26 帧: 226 服务器告诉客户机,FTP 数据传输完毕。

(7)第27 ~30 帧: 关闭49315 端口,断开客户机49315 端口和服务器上20 端口FTP 连接。(TCP 四次挥手)

(8)第31 帧: 客户机发送一个PORT 命令,告诉服务器,客户机的49318 号端口做好了建立连接的准备。由PORT 172,22,97,20,192,166 可知,其端口是49318 (即192 ×256 +166 =49318)。

(9)第32、33 帧: 服务器发送200 应答,告之收到且同意。

(10)第34、35 帧: 同步和确认信息。

(11)第36 帧: 客户机告诉服务器下载文件test.txt 到本地机。

图3-4-15 FTP 传输的数据

(12)第37、38 帧: 服务器发送125 应答,告诉客户机,数据链路已经打开,开始传输。客户机确认。

(13)第39 帧: 服务器172.22.97.19 向客户机172.22.97.20 传送23 字节数据。第39帧数据报内容如图3-4-16 所示。文件test.txt 的内容如图3-4-17 所示。

图3-4-16 第39 帧数据报

图3-4-17 文件tset.txt 的内容

(14)第40 帧: 客户机确认收到23 字节的数据。

(15)第41 帧: 服务器确认从20 号端口传送到客户机上49318 号端口的数据传输完毕。

(16)第42 帧: 服务器响应数据传输完毕,发送226 应答,表示传输完成。

(17)第43 ~46 帧: 关闭服务器上20 端口,同时关闭客户机上49318 号端口。(TCP 四次挥手)

(18)第47 帧: 客户机告诉服务器,希望结束FTP 连接。

(19)第48 帧: 服务器响应客户机,结束FTP 连接的请求。应答221 表示关闭连接退出登录。

(20)第49 ~52 帧: 关闭服务器上21 端口,同时关闭客户机上49312 号端口。(TCP 四次挥手)

【小结】

当用户发送dir 命令请求得到服务器文件清单时,FTP 协议实际上完成了以下4 个步骤:

第1 步,通过控制连接,协商数据连接的端口号并告之一些准备工作已做好。

第2 步,建立数据连接。

第3 步,通过数据连接传送请求的文件清单数据。

第4 步,关闭新建立的数据连接。

在客户机使用dir 命令就是下载服务器端的文件目录,此时客户机和服务器连接的端口是49315 号和20 号端口,要建立一次连接、传送数据和断开连接。

客户机发送命令 “get test.txt”,服务器将该文件传送到客户机,这一过程对应图3-4-14中的第33 ~46 帧数据。此时,客户机和服务器连接的端口是49318 号和20 号,要建立一次连接、传送数据和断开连接。

在客户机和服务器建立FTP 连接时,使用49312 号和21 号端口;在传送数据时,建立新的端口连接。

通过以上数据报可以看到,FTP 在传输账号、密码和数据时使用明码传送,这对安全构成一定隐患,所以在使用FTP 传输文件时,要考虑安全因素。和Telnet 不同的是,FTP 只限于文件,它不涉及系统环境和计算机的基本配置。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈