我们知道,FTP服务是Internet上重要的、用途最广泛的服务之一。FTP是文件传输协议的简称。它支持两种工作模式,这两种模式分别是标准模式和被动模式。标准模式又叫PORT模式或主动模式,是目前大多数FTP客户端软件的默认数据传输方式。那么,FTP的标准模式是如何工作的呢?通过对捕获数据包的分析以及具体的FTP应用实战,我们可以对FTP的标准模式有一个较为完整的认识。(关于PASV模式的工作原理详见拙文《FTP之被动工作模式》)
第一部份 捕获FTP标准工作模式下的数据包
(一)实验环境
1、A机IP地址为10.4.152.16(本机)、 B机IP地址为10.4.144.5(FTP服务器);
2、工具:Netcat 和 Sniffer Pro;
(二)、实验步骤
1、Sniffer pro过滤器(捕获FTP流量);
图1
2、运行捕获(点击F10);
3、对B机进行FTP连接;
(1)在A机上打开两个DOS窗口;
(2)在1号DOS提示符状态窗口,打开本机的1356端口监听。(红色下划线部份为键盘输入的命令行)
图2
(3)在2号DOS提示符状态窗口,以PORT模式与B机建立连接。(红色下划线部份为键盘输入的命令行)
图3
4、1号DOS提示符状态窗口,接收到B机发送的目录列表。
图5
第二部份 实验说明
(一) Sniffer Pro 捕获过滤器(Filter)的设置过程
1、实验中使用的Sniffer Pro 版本号为4.60.01(英文版),这是一款比较好的网络嗅探工具,同时也是网络爱好者通过捕获各种数据包学习网络协议的好工具,在这里简单介绍一下实验中捕获FTP流量的过滤器的设置方法:(见图6、图7)
(1)从主菜单中选择“Capture”(捕获)—“Define Filter”(定义过滤器)。
(2)在定义过滤器窗口,单击“Profiles”(文件)按钮。
(3)在Capture Profiles(捕获文件)窗口,选择“New”(新建)。
(4)在New Profiles Name的输入框中打入新建过滤器名字“FTP”,OK退出。
(5)使用过滤器对话框定义这个新的捕获过滤器。本实验中笔者仅在“过滤器对话框窗口”中设置了“Adress”(地址卷标)及“Advanced”(高级)两项。在“Adress”窗口中,设置“Address Type”(地址类型)为“IP”,在“Dir”选项中确定捕获任何主机与本机(10.4.152.16)的数据流量。其次在“Advanced”(高级卷标)窗口中依次找到IP-TCP-FTP并选定。
图7
(二) Netcatc命令格式及参数介绍
Netcat的基本命令行格式是nc [option] host ports,其中host是要连接的主机名或IP地址,ports可以是一个单独的端口、是一个端口范围、也可以是一系列用空格隔开的单个端口。
本实验中用到的几个选项介绍。
-v 该选项可以让Netcat显示它连接或绑定的地址以及是否有问题发生;
-l 该选项与-P选项一起使用,以告诉Netcat绑定某个指定的TCP端口监听,等待到来的连接;
-p 指定一个Netcat应使用的本地端口号。
(三) PORT命令
PORT是客户端采用FTP标准模式进行数据传输时,必须使用的一条FTP控制命令。用于向服务器提供其监听的端口。命令行具体形式为:PORT n1,n2,n3,n4,n5,n6,其中IP地址为n1,n2,n3,n4;端口号n5,n6,实验中10.4.152.16首先在本机上打开了一个监听端口1356,并用Port命令将这个端口号告诉FTP服务器10.4.144.5(见图8)。其端口的计算方法为5×256+76=1356
(一)第一组 建立TCP连接
图9
我们知道在TCP/IP协议族中,FTP作为应用层的协议,它依靠TCP为其提供高可靠的端到端数据通信,这三行数据是A机与B机建立TCP连接的过程。(1)A机发送一个TCP SYN包给B机的FTP控制端口21,客户端使用大于1024的随机端口作为它的源端口(此例中A机使用的是1094端口);(2)B机发送一个SYN ACK包给A机;(3)A机发送一个ACK包,进行确认。通过三次握手,从而建立一个完整TCP连接。
(二)第二组 控制操作
图10
上图的数据有两层内容。
第四行、第六行、第七行、第九行、第十行、第十二行、第十三行、第十五行、第十六行、第十八行、第十九行数据是A机与B机利用建立的TCP通道,传送FTP控制命令以及服务器应答的对话过程。将图11的FTP头信息与图3对照,就会更清楚地理解这个过程。
第五行、第八行、第十一行、第十四行、第十七行数据则是接收端收到来自发送端的信息时,接受端发送一条应答信息,表示收到此信息。这是TCP提供的面向连接的、可靠字节流服务的必要手段。
图12
我们知道一个FTP文件传输过程,Client端除了与Server端的TCP21端口建立控制连接外,还需要建立另一个连接来进行真正的数据传输。而FTP标准模式的特点,就是当用户请求一个列表(list)、发起一个要求发送或者接受文件的请求,客户端使用PORT命令,PORT命令包含了客户端的IP地址以及客户端正在监听的端口号,服务器将从自己的TCP 20端口向客户端的这个监听端口发起连接。从图12的3行数据中我们可以看到,这次连接是由B机(FTP服务器)从TCP 20端口向A机发起的,A机端口号正是它向FTP服务器提供的监听端口1356。经过三次握手,又建立了一个新的TCP连接。而这条连接正是用于数据传输的。
(四)第四组 数据传输
图13
上图的数据包括三方面的内容。
1、 第23行、第24行、第25行是B机从TCP 20端口到A机TCP 1356端口的数据传输,以及接收方的ACK确认;
2、 我们知道在TCP断开连接过程中,通信一方要主动关闭连接,就会向对方发送带FIN标志的包,而另一方在收到FIN包后,返回带ACK标志的包,表示确认一方单方面提出的关闭连接请求。这时被动关闭方的读通道就被关闭了。图13中第26行、第27行、第28行是数据传输完成后,发送数据的B机以一个FIN命令来结束数据连接,A机收到后进行ACK确认,A机读通道关闭。但这时A机写通道还没有关闭,也就是说,A机还可以向B机发送数据。B机也可以正常读数据。因此,第31行、第32行,A在完成数据处理工作后,也要关闭连接,向B机发送一个FIN包,B机收到后,返回一个ACK包,这时B机读通道关闭,A机在收到ACK包后,写通道关闭。至此,这条数据传输通道彻底断开连接。
3、 大家应该注意到,在数据传输过程和断开数据传输通道过程中,FTP传输的控制通道也在工作(本例中这条控制通道是B机21端口到A机1094的连接)。第28、29、30行的数据正说明了这一点。
总之,通过上面的实验及分析,我们应该清楚地认识到FTP标准(PORT)模式的具体工作流程。FTP 客户端首先主动发起和FTP 服务器TCP 21端口的连接,通过“三次握手”成功建立控制通道,并通过这个通道发送命令(在这一点上无论PORT模式还是PASV模式,其实都是一样的)。客户端在需要接收数据的时候,利用这条通道发送PORT命令,告诉服务器端自己打开的监听端口号,由服务器端从TCP 20端口向客户端监听端口发起并建立数据传输连接,来进行真正的数据传输。
这种工作模式中,我们应该注意到FTP标准模式的两个特点,一是服务器端总是用默认的TCP 21以及TCP 20 端口分别与客户端的建立控制连接和数据传输连接;二是FTP数据传输通道总是由服器端发起建立的,这就是FTP标准工作模式,被称做主动模式的主要原因。
第四部份 实战应用
一般来说,FTP服务采用何种数据传输模式,是由客户端决定的,用户使用PORT和PASV命令就可以转换FTP服务器端的工作模式,当然这需要FTP服务器的支持。
(一)如何设置FTP服务器的工作模式
1、使用IIS发布FTP服务。IIS(Internet Information Server,互联网信息服务)是windows操作系统(Windows xp home版的组件中没有IIS,虽然可以用一定的方法配置,但太麻烦)自带的一种Web服务组件,其中包括Web服务器、FTP服务器、SMTP服务器,。Internet Information Server提供了一个图形界面的管理工具,称为 Internet服务管理器,通过其向导功能,可以很容易建立FTP站点,本文不再累述。通过IIS发布的FTP站点默认工作模式是混合模式,同时提供标准(PORT)和被动(PASV)模式数据传输连接,由客户端使用PORT和PASV命令进行模式选择。
2、使用Serv-u发布FTP服务。Serv-u默认情况下使用标准(PORT)模式,当然也可手动将Serv-u工作状态设为PASV,要想将设为被动模式的Serv-u改回其默认的PORT模式,可依下列步骤。
第一步:本地服务器-设置-高级-PASV端口范围-将填于其中的端口号删除
图14
第二步:域-设置-高级-允许被动模式传送,使用IP前面的勾去掉;
图15
FTP标准(PORT)和被动(PASV)模式是相对服务器而言。在FTP客户连接服务器的整个过程中,控制通道一直保持着连接,而数据传输通道是临时建立的。主动方式下服务器以TCP 20端口发起连接,而被动方式下服务器告诉客户一个动态端口,由客户发起连接(详见拙文《FTP之被动工作模式》)。实践中,如果你使用FTP客户端程序只能登录不能传数据时,不妨换一种工作模式试试。