《Linux平台下建立的ftp客户端的命令处理》由会员分享,可在线阅读,更多相关《Linux平台下建立的ftp客户端的命令处理(7页珍藏版)》请在金锄头文库上搜索。
1、 Linux平台下建立的ftp客户端的命令处理 冯媛媛+刘建科Summary:FTP(File Transfer Protocol,文件传输协议) 是用于在网络上进行文件传输的一套标准协议。它属于网络协议组的应用层。本文介绍在Linux平台下建立的ftp客户端的控制连接。Key: 客户端;服务器;控制连接;数据连接:TP393 :A :1009-3044(2016)20-0044-02当FTP运行程序开始后,首先根据传递参数创建控制连接,用来和服务器进行通信。控制连接创建成功后,客户依次向服务器发USER和PASS命令。1 命令处理函数支持的用户命令主要分三种。1)只在控制连接进行通信。如de
2、lete,quit,mkdir,rmdir,pwd,rename等。2)在控制连接进行通信,在数据连接进行数据传输。如put,get等。3)不进行网络通信的。如help等。2 单连接命令这类命令比较容易,向服务器发送一个命令,然后接收响应码。实现方式基本上一样,不同的是传送给服务器的FTP命令不一样。函数模型:1)对用户命令进行处理。2)发送命令到服务器,并接收服务器响应码,根据响应码判断命令是否成功。其中cd发送给服务器的命令为CWD(将工作的路径进行改变),该命令可以在用户登录与账户状态都保持不变的情况下运行,在进行数据或者是工作目录下载或者是存储的时候改变其原来的路径。但是在这个过程中传
3、输的参数是不会变化的。传输参数就是指的特定目录的路径名称或者是标志其他文件的符号。其中delete发送给服务器的命令为删除指令,该指令的发出删除的目标路径文件是从服务器的站点上进行的。假设需要进行特殊的保护(像是,在删除时再次询问),这个功能是user-FTP进行提供的。其中quit发送给服务器的命令为QUIT(退出现在的登录模式)此指令是对一个用户进行终止活动,假设还用户内没有正在运行的文件时,系统会直接将连接关闭控制,但是假设此时正在有数据传输,在传输得到回应以后系统连接关闭程序。其中mkdir发送给服务器的命令为MKD(创建新的目录):该指令是对目标路径创建新的目录(这是在绝对路径中)也
4、或者是在相对路径中对现在工作的路径进行新目录的创建。其中rmdir发送给服务器的命令为RMD(目录删除):在绝对的路径下对目标路径进行删除或者是在相对的路径中对现在正在运行的工作子目录进行删除。其中pwd发送给服务器的命令为PWD(打印工作目录):此指令在回应中返回当前工作目录名。其中rename发送给服务器的命令为RNFR和RNTO。RNFR(重新命名):该指令是对原来的路径名称进行重新命名。该指令在执行时一定跟着一个重新命名的指令来说明新的名称下的路径名称。RNTO(重新命名以后):该指令是紧跟上面的指令说明新更改的路径名称的。在对文件进行更名时需要上述两个指令同时完成。3 双连接命令这类
5、命令除了要在控制连接进行通信,还要在数据连接上传输数据。根据FTP数据连接建立的不同形式,将工作形式分为两种,一是Standard又叫做PORT方式该方式是主动形式,一种是Passive又叫做PASV是一种被动形式。FTP的服务器内Standard模式下发送一个PORT指令到相应的服务器上。FTP服务器内Passive模式下发出一个PASV指令到相应的服务器上。上两种形式的工作原理如下所述:在Port模式下客户端会先于相关服务器上的TCP 21端口进行连接,指令是借助该通道发出的,当客户端口接收到需要的数据时就需要通过这个端口发出一个POR的指令。客户使用怎样的端口接收相关数据这是包含在POR
6、T的指令内的。数据的传输是通过服务器上自己的端口与客户指定的端口连接实现数据的传输。在数据的传输过程中FTP服务器需要与客户端构建一个新连接实现数据的传输。连接过程如下:1)所有跟FTP服务器的连接都要与21端口相连(客户端的初始状态是SC)3)在 FTP服务器上所有的20端口都比端口1024大(服务器上与客户端数据端口连接的最初端口值为S-C)4)既比1024端口大又与服务器上的20端口相连接(服务器接受客户端发送的ACK指令的数据端口为S-C)Passive模式与Standard模式在构建控制通道上是具有相似性的,但是区别之处在于前者发出的是Pasv指令后者发送的是Prot指令。Pasv指
7、令发送到服务器以后,任意打开一个级别比较高端的数据端口值大于1024的,同时要求客户端发出请求数据的指令,服务器上的端口与客户端口连接,服务器上的数据借助该通道进行数据的传输,此时服务器上就不需要构建一个与客户端新的连接方式了。连接过程如下:1)所有跟FTP服务器的连接都要与21端口相连(客户端的初始状态是SC)3)随便一个端口连接到任意一个比端口1024大的端口(服务器上与客户端数据端口连接的最初端口值为SC)ls命令执行时首先判断一下当前客户端采用的是主动模式还是被动模式。 主动模式下ls命令向服务器发送的命令依次如下:PORT h1,h2,h3,h4,p1,p2LIST其中PORT命令将
8、客户端用来进行数据连接的地址和端口传送给服务器,然后服务器主动与客户端建立数据连接。连接建立成功后,发送LIST命令,通知服务器发送文件列表,并在数据连接读取服务器发来的文件列表。被动模式下ls命令向服务器发送的命令依次如下:PASVLIST其中PASV命令发出后,服务器会返回用来建立数据连接的服务器端的IP地址和端口,让客户端进行连接,连接建立成功后,发送LIST命令,通知服务器发送文件列表,并在数据连接读取服务器发来的文件列表。对于PORT数据端口:连接数据的端口是借助该指令的参数实现的。客户与服务器都对数据缺口比较缺省,并且通常下该指令不需要必须的相应指令进行回复。假设使用该指令那么相应
9、的参数是由主机的32位和端口的16位串联而成。地址信息以每8位分为一组,每一组的值都是用十进制数表示的,逗号将那个小组分开。例如端口的数据指令是PORT h1,h2,h3,h4,p1,p2。那么被动形式PASV:此指令在不缺省的端口等待连接的命令,并不是接到指令后马上将数值初始化。服务器的主机以及端口的地址是该指令回应所包含的内容。LIST(列表):该指令指示服务器向DTP被动列表发送指令。假设对路径名进行明确的确定,那么服务器会将相关的路径名称发送到文件列表中。但是假设路径确定的是文件,那么服务器传输的信息就是文件现在状态的一个信息。不用参数就用现阶段用户的目录或缺省的那部分目录。put和g
10、et命令实现方式和ls一样,只是在数据连接建立成功后,发送给服务器的命令不一样,分别STOR和RETR。STOR(保存):是把server-DTP接收到的数据存储成服务器站点上的文件的指令。倘若接收来的路径文件在原服务器站点上已经有了,那原有的文件就会被新接收的文件数据所替换。相反若是接收来的路径文件原本没有,这样就会在服务站点重新建立一个存储文件。RETR(获得文件):一个文件的副本用过这个指令用特定的路径传送到数据连的另一端。而原服务器站点的原文件状态以及内容不会发生变化。4 无连接命令这类命令不进行任何网络通信。其中help命令,仅仅打印出系统支持的命令。passive则是通过修改全局变
11、量passivemode来改变FTP的工作方式。5 结束语上述为在运行过程中客户向服务器发出命令后接收支持用户命令的三种状态。Reference:1 Reynolds J, Request for Comments:959, Network Working Group, October 1985.2 Richard Stevens, Stephen A. Rago. Advanced Programming in the UNIX Environment: Second Edition, Addison Wesley Professional,2005.3 谢希仁.计算机网络M.5版.电子工业出版社,2008. -全文完-