Bootstrap

FTP文件传输应用分析

 

应用分析 FTP文件传输应用分析

一、    FTP简介

1. 文件传输

文件传输服务是网络互联环境所必需的一种服务,当前网络中文件传输最主要的传输方式是使用FTP协议。

FTP,全称File Transfer Protocol,中文名为文件传输协议,它可以在网络中传输电子文档、图片、声音、影视、程序及程序等多种类型的文件。如果用户需要将文件从自己的计算机上发送到另一台计算机上,可使用FTP上传(upload)或(put)操作,而更多种的情况是用户使用FTP下载(download)或获取(get)操作从FTP服务器上下载文件。

2. FTP工作原理

一个完整的FTP文件传输需要建立两种类型的连接,一种为文件传输下命令,称为控制连接,另一种实现真正的文件传输,称为数据连接。

1)  控制连接

客户端希望与FTP服务器建立上传下载的数据传输时,它首先向服务器的TCP 21端口发起一个建立连接的请求,FTP服务器接受来自客户端的请求,完成连接的建立过程,这样的连接就称为FTP控制连接。

2)  数据连接

FTP控制连接建立之后,即可开始传输文件,传输文件的连接称为FTP数据连接。FTP数据连接就是FTP传输数据的过程,它有两种传输模式:主动传输模式(PORT)和被动传输模式(PASSIVE,简称PASV)。主动传输模式下,FTP服务器使用20端口与客户端的暂时端口进行连接,并传输数据,客户端只是处于接收状态。被动传输模式下,FTP服务器打开一个暂态端口等待客户端对其进行连接,并传输数据,服务器并不参与数据的主动传输,只是被动接受。

二、            具体分析FTP传输

1. 分析FTP传输的具体流程

FTP传输进行分析,首先需要知道的是这个FTP传输使用的是主动模式还是被动模式,因为这两种模式的实现方法不同,两种模式下的分析存在较大的差异,下面分别对两种模式下的FTP传输进行分析。

1)  主动传输模式

我们使用科来网络分析系统5.0捕获并分析一个主动模式下的FTP数据传输。客户端主机名为“wangym”,FTP服务器地址是192.168.2.100,客户端上使用的FTP客户端软件为SecureFX 2.1.4,传输模式采用主动(PORT)模式。

在客户端主机上打开科来网络分析系统5.0。为避免数据干扰,设定一个过滤器,只捕获本机的数据通讯。在FTP客户端软件SecureFX 2.1.4上,建立一个FTP会话连接到FTP服务器192.168.2.100,并上传一个名为t1.cap的文件到服务器,从服务器上下载一个名为Readme.txt的文件到客户端。完成操作后停止科来网络分析系统5.0的捕获。


1所示为科来网络分析系统5.0对上述操作进行捕获后的连接视图。

(图1 FTP主动传输模式下的连接及数据流重组信息)

从图1中可知,上述的操作在客户端和服务器之间建立了七个连接,其中第一个为FTP控制连接,其余六个为FTP数据连接。详细查看FTP控制连接对应的数据流重组信息,我们可以知道上述操作的原始步骤(即FTP主动传输模式下的步骤)如下:

A.   客户端(这里是wangym)使用暂时端口作为源端口(这里是1149)向FTP服务器(这里是192.168.2.100)的21端口发起TCP SYN的数据包,请求建立TCP连接;FTP服务器发送SYN/ACK(同步确认)包给客户端,源端口为21,目标端口为客户端上使用的暂时端口1149;客户端向FTP服务器发送一个ACK(确认)包,TCP三次握手成功建立;

B.   FTP服务器需要对服务器的身份进行验证,要求输入用户名和密码,此处用户名和密码都是ftpuser

C.   客户端使用SYST命令获取FTP服务器的操作系统,此处是Windows_NT version 5.0,即Windows 2000

D.   客户端使用PWD命令获取当前目录,当前为“/”,即当前处于FTP服务器的根目录;

E.   客户端使用PORT命令向FTP服务器发送一个上传或下载文件的请求,这个命令包含自己的地址(这里是192.168.2.44)和一个暂时端口(这里是是4126,目标端口的计算方法是,4*256+126=1150),FTP服务器在收到请求后,以20作为源端口,1150作为目标端口与客户端建立TCP连接;

F.   客户端使用LIST命令获取FTP服务器当前目录下的文件列表;

G.   客户端再次使用PWDCWD命令获取当前目录,当前为“/”;

H.   客户端再次使用PORT命令向FTP服务器发起上传或下载文件的请求,并同时给出暂时端口以用于建立TCP连接;

I.   客户端使用TYPE命令设置文件的传输类型,这里的传输类型为I。一般情况下传输类型有两种,默认为ASCII,简称A,另一种是二进制文件,简称I

J.   客户端使用STOR命令上传文件到FTP服务器,这里上传的文件是t1.cap

K.   FTP服务器使用226应答码告诉客户端t1.cap文件的传输成功完成;

L.   客户端使用PWDCWD命令再次获取当FTP服务器的当前目录,即刷新当前目录;

M.   客户端使用TYPE命令将FTP服务器的传输方式重新设置为默认的ASCII方式;

N.   客户端再次使用PORT命令向FTP服务器发起上传或下载文件的请求,并同时给出暂时端口以用于建立TCP连接;

O.   客户端使用RETR命令从FTP服务器下载文件到本地,这里下载的文件是Readme.txt

P.   FTP服务器使用226应答码告诉客户端Readme.txt的传输成功完成;

Q.   数据传输完成以后,客户端向FTP服务器发送一个TCP FIN的数据包通知FTP服务器结束连接。这个FIN数据包需要FTP服务器以TCP ACK数据包确认,同时FTP服务器发送一个TCP FIN的数据包给客户端,这个FIN数据包同样需要客户端以TCP ACK数据包确认,双方成功确认后,关闭FTP控制连接。

1中共有七个连接,其中第一个是FTP控制连接,客户端使用暂时端口与FTP服务器的21端口通讯。其余六个是FTP数据连接,客户端使用暂时端口与FTP服务器的20端口通讯,其作用分别是:第二个LIST命令列目录、第三个PORT命令请求传输文件、第四个STOR上传文件t1.cap、第五个PORT命令请求传输文件、第六个RETR命令下载文件Readme.txt、第七个关闭连接。

(注意:客户端在FTP控制连接上发送的不同命令,将打开和关闭另外的FTP数据连接。上传下载的每一个文件,都分别打开一个FTP数据连接来完成,当所有数据连接完成并关闭后,控制连接才会按照上面的方法进行关闭。)


2所示的是在进行主动模式的FTP数据传输后,科来网络分析系统5.0的日志视图记录下的FTP传输日志信息。从中可以知道,当前FTP数据传输操作的客户端、FTP服务器端、使用的账号、操作的类型(上传或下载)、传输的文件及路径、传输模式(主动或被动)等信息。要查看日志的所有信息,请在图2所示视图的列头(序号、客户端IP……)中,单击鼠标右键,在弹出的快捷菜单中,单击“More …”,在弹出的“列表选项”对话框中,选中所有的项,单击确定保存即可。

(图2 FTP主动传输模式下的日志信息)

2)  被动传输模式

我们使用科来网络分析系统5.0捕获并分析一个被动模式下的FTP数据传输。客户端主机名为“wangym”,FTP服务器地址是192.168.2.100,客户端上使用的FTP客户端软件为SecureFX 2.1.4,传输模式采用被动(PASSIVE)模式。

在客户端主机上打开科来网络分析系统5.0。为避免数据干扰,设定一个过滤器,只捕获本机的数据通讯。在FTP客户端软件SecureFX 2.1.4上,建立一个FTP会话连接到FTP服务器192.168.2.100,并上传一个名为t1.cap的文件到服务器,从服务器上下载一个名为Readme.txt的文件到客户端。完成操作后停止科来网络分析系统5.0的捕获。


3所示为科来网络分析系统5.0对上述操作进行捕获后的连接视图。

(图3 FTP被动传输模式下的连接及数据流重组信息)

从图3中可知,上述的操作在客户端和服务器之间建立了七个连接,其中第一个为FTP控制连接,其余六个为TCP连接。详细查看FTP控制连接对应的数据流重组信息,我们可以知道,上述操作的原始操作步骤(即FTP被动模式下的操作步骤)如下:

A.   客户端(这里是wangym)使用暂时端口作为源端口(这里是1204)向FTP服务器(这里是192.168.2.100)的21端口发起TCP SYN的数据包,请求建立TCP连接;FTP服务器发送SYN ACK(同步确认)包给客户端,源端口为21,目标端口为客户端上使用的暂时端口1204;客户端向FTP服务器发送一个ACK(确认)包,TCP三次握手成功建立;

B.   FTP服务器需要对服务器的身份进行验证,要求输入用户名和密码,此处用户名和密码都是ftpuser

C.   客户端使用SYST命令获取FTP服务器的操作系统,此处是Windows_NT version 5.0,即Windows 2000

D.   客户端使用PWD命令获取当前目录,当前为“/”,即当前处于FTP服务器的根目录;

E.   客户端使用PASV命令告诉FTP服务器,当前客户端使用的是被动传输模式;

F.   FTP服务器对客户端的PASV命令进行响应,响应内容包括FTP服务器的地址和一个暂时端口,这里是192.168.2.100,437,用437计算出目标端口是4*256+37=1061

G.   客户端使用LIST命令获取FTP服务器当前目录下的文件列表;

H.   客户端再次使用PWDCWD命令获取当FTP服务器的当前目录,即刷新当前目录;

I.   客户端再次使用PASV命令向FTP服务器发起上传或下载文件的请求,FTP服务器接受请求,并返回地址和暂时端口以用于建立连接;

J.   客户端使用TYPE命令设置文件的传输类型,这里的传输类型为I

K.   客户端使用STOR命令上传文件到FTP服务器,这里上传的文件是t1.cap

L.   FTP服务器使用226应答码告诉客户端t1.cap文件的传输成功完成;

M.   客户端使用PWDCWD命令再次获取当FTP服务器的当前目录,即刷新当前目录;

N.   客户端使用TYPE命令将FTP服务器的传输方式重新设置为默认的ASCII方式;

O.   客户端再次使用PASV命令向FTP服务器发起上传或下载文件的请求,FTP服务器接受请求,并返回地址和暂时端口以用于建立连接,方法与第9步相同;

P.   客户端使用RETR命令从FTP服务器下载文件到本地,这里下载的文件是Readme.txt

Q.   FTP服务器使用226应答码告诉客户端Readme.txt文件的传输成功完成;

R.   数据传输完成以后,客户端向FTP服务器发送一个TCP FIN的数据包通知FTP服务器结束连接。这个FIN数据包需要FTP服务器以TCP ACK数据包确认,同时FTP服务器发送一个TCP FIN的数据包给客户端,这个FIN数据包同样需要客户端以TCP ACK数据包确认,双方成功确认后,关闭FTP控制连接。

3中共有七个连接,其中第一个是FTP控制连接,客户端使用暂时端口与FTP服务器的21端口通讯。其余六个是FTP数据连接,客户端使用暂时端口与FTP服务器暂时端口通讯,其作用分别是:第二个LIST命令列目录、第三个PASV命令请求传输文件、第四个STOR上传文件t1.cap、第五个PASV命令请求传输文件、第六个RETR命令下载文件Readme.txt、第七个关闭连接。

(注意:客户端在FTP控制连接上发送的不同命令,将打开和关闭另外的FTP数据连接。上传下载的每一个文件,都分别打开一个FTP数据连接来完成,当所有数据连接完成并关闭后,控制连接才会按照上面的方法进行关闭。)

注意图1和图3的比较,图1为主动传输模式,图3为被动传输模式,图1中连接视图列表里的第2到第7个连接的协议显示的是FTP Data,而图3中,显示的是TCP,原因是FTP在使用被动模式进行数据传输时,其数据连接的端口是不固定的,FTP服务器并不使用主动模式下的20端口进行通讯,而在连接的两端都使用随机的暂时端口,因为暂时端口为随机的,所以就显示为TCP连接。


4所示的是在进行被动模式的FTP数据传输后,科来网络分析系统5.0的日志视图记录下的FTP传输日志信息。从中可以知道,当前FTP数据传输操作的客户端、FTP服务器端、使用的账号、操作的类型(上传或下载)、传输的文件及路径、传输模式(主动或被动)等信息。要查看日志的所有信息,请在图2所示视图的列头(序号、客户端IP……)中,单击鼠标右键,在弹出的快捷菜单中,单击“More …”,在弹出的“列表选项”对话框中,选中所有的项,单击确定保存即可。

(图4 FTP被动传输模式下的日志信息)

2. FTP命令

从上面的分析及截图中我们可以知道,FTP传输过程中所有的操作都是通过在客户端发送命令完成的,FTP常见的命令如表1所示。

命令

描述

USER

为用户验证提供用户名

PASS

为用户验证提供密码

PWD

输出FTP服务器的当前工作目录

TYPE

设置传输的文件类型

SYST

获取FTP服务器的操作系统

LIST

获取FTP服务器上当前目录的文件列表

PORT

指定使用主动模式进行数据传输

PASV

指定使用被动模式进行数据传输

HELP

FTP服务器上获取帮助文件

STOR

从客户端上传指定的文件到FTP服务器

RETR

FTP服务器下载指定的文件到客户端

DELE

删除FTP服务器上指定的文件

MKD

FTP服务器上新建目录

RMD

删除FTP服务器上的指定目录

QUIT

退出关闭FTP连接

(表1 FTP常见命令)

3. FTP应答

从上面的分析及截图中我们可以知道,对客户端发出的所有命令,FTP服务器都会对其做出应答,FTP常见的应答代码如表2所示。

应答代码

描述

125

打开数据连接,且此连接可用于数据传输

200

命令被成功执行

211

FTP服务器忙

212

FTP服务器返回当前的目录状态给客户端

213

FTP服务器返回当前的文件状态给客户端

214

FTP服务器返回用户请求的帮助信息

226

FTP服务器返回文件传输完成的消息给客户端

331

FTP服务器返回用户名正确,需要密码的消息给客户端

425

FTP服务器返回不能打开数据连接的消息给客户端

452

FTP服务器返回写文件错的消息给客户端,可能是空间不足

500

FTP服务器返回客户端命令不能识别的消息给客户端

501

FTP服务器返回客户端命令的参数不能识别的消息给客户端

502

FTP服务器返回未实现的模式类型的消息给客户端

(表2 FTP常见应答代码)

;