FTP协议学习总结

  • Post author:
  • Post category:其他

文件传输协议(FTP)必将消亡

文件传输协议(FTP)在RFC 959中定义,于1985年10月发布。文件传输协议(FTP)被设计成为一个跨平台的、简单且易于实现的协议。

文件传输协议(FTP)有一个漫长的演化史,是互联网上最重要的应用之一,但时至今日,却已江河日下。本文作者从各方面列举了一些

文件传输协议(FTP)为人诟病的缺点。

1.数据传输模式不合理

不考虑文件自身的内容,一味使用ASCII模式传输数据是不合理的。文件传输协议(FTP)应该具有自动检测功能,当然用户也可以进行

自定义。

虽然现在许多Linux和Windows客户端已经支持自动传输模式,但多达数代的UNIX和Windows客户端都默认使用ASCII传输模式,这种传输

模式甚至会造成文件损坏。

2.工作方式设计不合理

文件传输协议(FTP)可以在主动模式(PORT)或被动模式(PASV)下工作,这决定了数据链接建立的方式。

在主动模式下,客户端首先向服务器端发送IP地址和端口号,然后等待服务器端建立TCP链接。在被动模式下,客户端同样首先建立到服

务器的链接,但服务器端会开启一个端口(1024到5000之间),等待客户端传输数据。

文件传输协议(FTP)中最让人不可思议的是,客户端会侦听服务器端!

3.与防火墙工作不协调

在文件传输协议(FTP)诞生在网络地址转换(NAT)和防火墙之前,那时的网络还不存在恶意攻击。今天大多数最终用户的IPv4地址已

不可路由,这是因为防火墙的使用和IPv4地址的短缺。

这对FTP意味着什么呢?这意味着如果FTP客户端IP地址不可路由,或者位于防火墙之后,那么就只能使用被动传输模式进行数据传输。

如果服务器端的IP地址也不可路由,或者位于防火墙之后呢?FTP将无法进行数据传输!

现在,许多防火墙适用于NAT环境,可以使用一些特殊的技巧(hacks)允许FTP在防火墙之后正常工作。当然,这需要对防火墙进行配置

4.密码安全策略不完善

在互联网早期,文件传输协议(FTP)并没有对密码安全作出规定。在FTP客户端和服务器端,数据以明文的形式传输,任何对通讯路径

上的路由具有控制能力的人,都可以通过嗅探获取你的密码和数据。

我们当然可以使用SSL封装FTP,但FTP是通过建立多次链接进行数据传输的,我们即便是保护了密码安全,也很难保护数据传输的安全性

自文件传输协议(FTP)发布以来,安全的数据传输也经历了长足发展,推荐使用SCP取代FTP进行文件传输。

5.FTP协议效率低下

从FTP服务器上检索一个文件,包含繁复的交换握手步骤:

客户端建立到FTP服务器端控制端口的TCP Socket链接,并等待TCP握手完成

客户端等待服务器端发送回执

客户端向服务器端发送用户名并等待响应

客户端向服务器端发送密码并等待响应

客户端向服务器端发送SYST命令并等待响应

客户端向服务器端发送TYPE I命令并等待响应

如果用户需要在服务器端切换目录,客户端仍然发送命令并等待响应

主动模式下,客户端需要发送PORT命令到服务器端,然后等待响应(被动模式与主动模式相反)

建立数据传输链接(需要经过三次握手,建立一条TCP Socket连接)

通过链接传输数据

客户端等待服务器端从控制连接发送2xx指令,以确保数据传输成功

客户端发送QUIT命令,并等待服务器响应

同样的情形,我们来看看HTTP协议:

HTTP客户端向HTTP服务器端建立一条TCP Socket连接

HTTP客户端向HTTP服务器端发送GET命令,包含URL、HTTP协议版本、虚拟主机名等等,并等待响应

HTTP服务器端的响应包含了所有想要的数据,完成!

传输一个文件,FTP需要往复10次,而HTTP只需要2次!如果传输多个文件,FTP可以省略发送用户名和密码的步骤,而HTTP则可以使用固

定的套接字(Socket),在相同的TCP连接中传输文件。

综上所述,虽然文件传输协议(FTP)曾经显赫一时,但现在已经过时了,它是一个既不不安全,也不不友好,而且效率低下的协议,势

必被取而代之。

========

FTP协议详解

FTP 是File Transfer Protocol(文件传输协议)的英文简称,而中文简称为“文传协议”。用于Internet上的控制文件的双向传输。

同时,它也是一个应用程序(Application)。用户可以通过它把自己的PC机与世界各地所有运行FTP协议的服务器相连,访问服务器上

的大量程序和信息。FTP的主要作用,就是让用户连接上一个远程计算机(这些计算机上运行着FTP服务器程序)察看远程计算机有哪些

文件,然后把文件从远程计算机上拷到本地计算机,或把本地计算机的文件送到远程计算机去。

工作原理

举例说明

  以下载文件为例,当你启动FTP从远程计算机拷贝文件时实际上启动了两个程序:一个本地机上的FTP客户程序,它向FTP服务器提出

拷贝文件的请求。另一个是启动在远程计算机的上的FTP服务器程序,它响应你的请求把你指定的文件传送到你的计算机中。FTP采用“

客户机/服务器”方式,用户端要在自己的本地计算机上安装FTP客户程序。FTP客户程序有字符界面和图形界面两种。字符界面的FTP的

命令复杂、繁多。图形界面的FTP客户程序,操作上要简洁方便的多。

文件传输协议

  简单地说,支持FTP协议的服务器就是FTP服务器,下面介绍一下什么是FTP协议。(文件传输协议)

 

  一般来说,用互联网的首要目的就是实现信息共享,文件传输是信息共享非常重要的一个内容之一。Internet上早期实现传输文件

,并不是一件容易的事,我们知道 Internet是一个非常复杂的计算机环境,有PC,有工作站,有MAC,有大型机,而连接在Internet上

的计算机有上千万台,并且这些计算机可能运行不同的操作系统,有运行Unix的服务器,也有运行Dos、Windows的PC机和运行MacOS的苹

果机等等,而各种操作系统之间的文件交流问题,需要建立一个统一的文件传输协议,这就是所谓的FTP。基于不同的操作系统有不同的

FTP应用程序,而所有这些应用程序都遵守同一种协议,这样用户就可以把自己的文件传送给别人,或者从其它的用户环境中获得文件。

服务器系统

  与大多数Internet服务一样,FTP也是一个客户机/服务器系统。用户通过一个支持FTP协议的客户机程序,连接到在远程主机上的

FTP服务器程序。用户通过客户机程序向服务器程序发出命令,服务器程序执行用户所发出的命令,并将执行的结果返回到客户机。比如

说,用户发出一条命令,要求服务器向用户传送某一个文件的一份拷贝,服务器会响应这条命令,将指定文件送至用户的机器上。客户

机程序代表用户接收到这个文件,将其存放在用户目录中。

 

  在FTP的使用当中,用户经常遇到两个概念:”下载”(Download)和”上传”(Upload)。”下载”文件就是从远程主机拷贝文件至自己

的计算机上;”上传”文件就是将文件从自己的计算机中拷贝至远程主机上。用Internet语言来说,用户可通过客户机程序向(从)远程

主机上传(下载)文件。

 

  使用FTP时必须首先登录,在远程主机上获得相应的权限以后,方可下载或上传文件。也就是说,要想同哪一台计算机传送文件,就

必须具有哪一台计算机的适当授权。换言之,除非有用户ID和口令,否则便无法传送文件。这种情况违背了Internet的开放性,

Internet上的FTP主机何止千万,不可能要求每个用户在每一台主机上都拥有帐号。匿名FTP就是为解决这个问题而产生的。

 

  匿名FTP是这样一种机制,用户可通过它连接到远程主机上,并从其下载文件,而无需成为其注册用户。系统管理员建立了一个特殊

的用户ID,名为anonymous, Internet上的任何人在任何地方都可使用该用户ID。

 

  通过FTP程序连接匿名FTP主机的方式同连接普通FTP主机的方式差不多,只是在要求提供用户标识ID时必须输入anonymous,该用户

ID的口令可以是任意的字符串。习惯上,用自己的E-mail地址作为口令,使系统维护程序能够记录下来谁在存取这些文件。

 

  值得注意的是,匿名FTP不适用于所有Internet主机,它只适用于那些提供了这项服务的主机。

 

  当远程主机提供匿名FTP服务时,会指定某些目录向公众开放,允许匿名存取。系统中的其余目录则处于隐匿状态。作为一种安全措

施,大多数匿名FTP主机都允许用户从其下载文件,而不允许用户向其上传文件,也就是说,用户可将匿名FTP主机上的所有文件全部拷

贝到自己的机器上,但不能将自己机器上的任何一个文件拷贝至匿名FTP主机上。即使有些匿名FTP主机确实允许用户上传文件,用户也

只能将文件上传至某一指定上传目录中。随后,系统管理员会去检查这些文件,他会将这些文件移至另一个公共下载目录中,供其他用

户下载,利用这种方式,远程主机的用户得到了保护,避免了有人上传有问题的文件,如带病毒的文件。

 

  作为一个Internet用户,可通过FTP在任何两台Internet主机之间拷贝文件。但是,实际上大多数人只有一个Internet帐户,FTP主

要用于下载公共文件,例如共享软件、各公司技术支持文件等。 Internet上有成千上万台匿名FTP主机,这些主机上存放着数不清的文

件,供用户免费拷贝。实际上,几乎所有类型的信息,所有类型的计算机程序都可以在Internet上找到。这是Internet吸引我们的重要

原因之一。

匿名ftp

  匿名FTP使用户有机会存取到世界上最大的信息库,这个信息库是日积月累起来的,并且还在不断增长,永不关闭,涉及到几乎所有

主题。而且,这一切是免费的。

 

  匿名FTP是Internet网上发布软件的常用方法。Internet之所以能延续到今天,是因为人们使用通过标准协议提供标准服务的程序。

像这样的程序,有许多就是通过匿名FTP发布的,任何人都可以存取它们。

 

  Internet中的有数目巨大的匿名FTP主机以及更多的文件,那么到底怎样才能知道某一特定文件位于哪个匿名FTP主机上的那个目录

中呢?这正是Archie服务器所要完成的工作。Archie将自动在FTP主机中进行搜索,构造一个包含全部文件目录信息的数据库,使你可以

直接找到所需文件的位置信息。

 

FTP的用户分类及权限归属

Real帐户

  这类用户是指在FTP服务上拥有帐号。当这类用户登录FTP服务器的时候,其默认的主目录就是其帐号命名的目录。但是,其还可以

变更到其他目录中去。如系统的主目录等等。

Guest用户

  在FTP服务器中,我们往往会给不同的部门或者某个特定的用户设置一个帐户。但是,这个账户有个特点,就是其只能够访问自己的

主目录。服务器通过这种方式来保障FTP服务上其他文件的安全性。这类帐户,在Vsftpd软件中就叫做Guest用户。拥有这类用户的帐户

,只能够访问其主目录下的目录,而不得访问主目录以外的文件。

Anonymous(匿名)用户

  这也是我们通常所说的匿名访问。这类用户是指在FTP服务器中没有指定帐户,但是其仍然可以进行匿名访问某些公开的资源。

 

  在组建FTP服务器的时候,我们就需要根据用户的类型,对用户进行归类。默认情况下,Vsftpd服务器会把建立的所有帐户都归属为

Real用户。但是,这往往不符合企业安全的需要。因为这类用户不仅可以访问自己的主目录,而且,还可以访问其他用户的目录。这就

给其他用户所在的空间 带来一定的安全隐患。所以,企业要根据实际情况,修改用户所在的类别。[1]

 

FTP客户端

  ftp客户端。体积可以说是最小的了,只有330K,免费中文版不需要汉化和破解的缘故吧。功能也非常强大,应有尽有。可以支持多

线程上传;还支持直接上传压缩包后在空间上直接解压。

 

  8uftp是非常精辟的ftp客户端。目前体积最小的FTP客户端工具。

 

  终身免费中文版,非汉化版,非破解版。

 

  涵盖其它FTP工具功能

 

  独家支持多线程上传,使上传速度更快更稳定。

 

  同时支持直接上传压缩包,可在空间上直接解压。也可以在空间上压缩后直接下载压缩包。

 

  8uftp 2.6 升级功能

 

  1.增加远程ftp目录的复制URL功能

 

  2.增加远程ftp目录和本地目录对比的工具

 

通过FTP传输文件的一般步骤

命令提示

  需要进行远程文件传输的计算机必须安装和运行ftp客户程序。在windows操作系统的安装过程中,通常都安装了tcp/ip协议软件,

其中就包含了ftp客户程序。但是该程序是字符界面而不是图形界面,这就必须以命令提示符的方式进行操作,很不方便。

 

  启动ftp客户程序工作的另一途径是使用ie浏览器,用户只需要在ie地址栏中输入如下格式的url地址:ftp://[用户名:口令@]ftp

服务器域名[:端口号]

 

  (在CMD命令行下也可以用上述方法连接,通过put命令和get命令达到上传和下载的目的,通过ls命令列出目录,除了上述方法外还

可以在cmd下输入ftp回车,然后输入open IP来建立一个连接,此方法还适用于linux下连接ftp服务器)

 

  通过ie浏览器启动ftp的方法尽管可以使用,但是速度较慢,还会将密码暴露在ie浏览器中而不安全。因此一般都安装并运行专门的

ftp客户程序。

 

  1.在本地电脑上登陆到国际互联网.

 

  2.搜索有文件共享主机或者个人电脑(一般有专门的FTP服务器网站上公布的,上面有进入该主机或个人电脑的名称,口令和路径).

 

  3.当与远程主机或者对方的个人电脑建立连接后,用对方提供的用户名和口令登陆到该主机或对方的个人电脑.

 

  4.在远程主机或对方的个人电脑登陆成功后,就可以上传你想跟别人分享的东西或者下载别人授权共享的东西(这里的东西是指能放

到电脑里去又能在显示屏上看到的东西).

 

  5.完成工作后关闭FTP下载软件,切断连接.

 

  为了实现文件传输,用户还要运行专门的文件传输程序,比如网际快车就有这方面的功能,其它还有很多专门的FTP传输软件,FlashFxp

为其中的杰出软件。有兴趣的网友可以试试其他的软件,如LeapFTP总归各有各的特色.

FTP协议

  TCP/IP协议中,FTP标准命令TCP端口号为21,Port方式数据端口为20。FTP协议的任务是从一台计算机将文件传送到另一台计算机,

它与这两台计算机所处的位置、联接的方式、甚至是是否使用相同的操作系统无关。假设两台计算机通过ftp协议对话,并且能访问

Internet, 你可以用ftp命令来传输文件。每种操作系统使用上有某一些细微差别,但是每种协议基本的命令结构是相同的。

 

  FTP的传输有两种方式:ASCII传输模式和二进制数据传输模式。

 

  1.ASCII传输方式:假定用户正在拷贝的文件包含的简单ASCII码文本,如果在远程机器上运行的不是UNIX,当文件传输时ftp通常

会自动地调整文件的内容以便于把文件解释成另外那台计算机存储文本文件的格式。

 

  但是常常有这样的情况,用户正在传输的文件包含的不是文本文件,它们可能是程序,数据库,字处理文件或者压缩文件(尽管字

处理文件包含的大部分是文本,其中也包含有指示页尺寸,字库等信息的非打印字符)。在拷贝任何非文本文件之前,用binary 命令告

诉ftp逐字拷贝,不要对这些文件进行处理,这也是下面要讲的二进制传输。

 

  2.二进制传输模式:在二进制传输中,保存文件的位序,以便原始和拷贝的是逐位一一对应的。即使目的地机器上包含位序列的文

件是没意义的。例如,macintosh以二进制方式传送可执行文件到Windows系统,在对方系统上,此文件不能执行。

 

  如果你在ASCII方式下传输二进制文件,即使不需要也仍会转译。这会使传输稍微变慢 ,也会损坏数据,使文件变得不能用。(在

大多数计算机上,ASCII方式一般假设每一字符的第一有效位无意义,因为ASCII字符组合不使用它。如果你传输二进制文件,所有的位

都是重要的。)如果你知道这两台机器是同样的,则二进制方式对文本文件和数据文件都是有效的。

 

  5. FTP的工作方式

 

  FTP支持两种模式,一种方式叫做Standard (也就是 PORT方式,主动方式),一种是 Passive (也就是PASV,被动方式)。 Standard

模式 FTP的客户端发送 PORT 命令到FTP服务器。Passive模式FTP的客户端发送 PASV命令到 FTP Server。

 

  下面介绍一个这两种方式的工作原理:

 

  Port模式FTP 客户端首先和FTP服务器的TCP 21端口建立连接,通过这个通道发送命令,客户端需要接收数据的时候在这个通道上发

送PORT命令。 PORT命令包含了客户端用什么端口接收数据。在传送数据的时候,服务器端通过自己的TCP 20端口连接至客户端的指定端

口发送数据。 FTP server必须和客户端建立一个新的连接用来传送数据。

 

  Passive模式在建立控制通道的时候和Standard模式类似,但建立连接后发送的不是Port命令,而是Pasv命令。FTP服务器收到Pasv

命令后,随机打开一个临时端口(也叫自由端口,端口号大于1023小于65535)并且通知客户端在这个端口上传送数据的请求,客户端连

接FTP服务器此端口,然后FTP服务器将通过这个端口进行数据的传送,这个时候FTP server不再需要建立一个新的和客户端之间的连接



 

  很多防火墙在设置的时候都是不允许接受外部发起的连接的,所以许多位于防火墙后或内网的FTP服务器不支持PASV模式,因为客户

端无法穿过防火墙打开FTP服务器的高端端口;而许多内网的客户端不能用PORT模式登陆FTP服务器,因为从服务器的TCP 20无法和内部

网络的客户端建立一个新的连接,造成无法工作。

 

  FTP软件可以更好的帮助你管理FTP目录 提供更系统的工具

 

  FTP工具推荐使用 cuteftp

 

  主动和被动模式FTP有两种使用模式:主动和被动。主动模式要求客户端和服务器端同时打开并且监听一个端口以建立连接。在这种

情况下,客户端由于安装了防火墙会产生一些问题。所以,创立了被动模式。被动模式只要求服务器端产生一个监听相应端口的进程,

这样就可以绕过客户端安装了防火墙的问题。

 

  一个主动模式的FTP连接建立要遵循以下步骤:

 

  客户端打开一个随机的端口(端口号大于1024,在这里,我们称它为x),同时一个FTP进程连接至服务器的21号命令端口。此时,

源端口为随机端口x,在客户端,远程端口为21,在服务器。

 

  客户端开始监听端口(x+1),同时向服务器发送一个端口命令(通过服务器的21号命令端口),此命令告诉服务器客户端正在监听

的端口号并且已准备好从此端口接收数据。这个端口就是我们所知的数据端口。

 

  服务器打开20号源端口并且建立和客户端数据端口的连接。此时,源端口为20,远程数据端口为(x+1)。

 

  客户端通过本地的数据端口建立一个和服务器20号端口的连接,然后向服务器发送一个应答,告诉服务器它已经建立好了一个连接

========

FTP协议

FTP(File Transfer Protocol,文件传输协议) 是 TCP/IP 协议组中的协议之一。FTP协议包括两个组成部分,其一为FTP服务器,其

二为FTP客户端。其中FTP服务器用来存储文件,用户可以使用FTP客户端通过FTP协议访问位于FTP服务器上的资源。在开发网站的时候,

通常利用FTP协议把网页或程序传到Web服务器上。此外,由于FTP传输效率非常高,在网络上传输大的文件时,一般也采用该协议。

默认情况下FTP协议使用TCP端口中的 20和21这两个端口,其中20用于传输数据,21用于传输控制信息。但是,是否使用20作为传输数据

的端口与FTP使用的传输模式有关,如果采用主动模式,那么数据传输端口就是20;如果采用被动模式,则具体最终使用哪个端口要服务

器端和客户端协商决定。

    FTP协议

    File Transfer Protocol

服务器

同大多数Internet服务一样,FTP也是一个客户/服务器系统。用户通过一个客户机程序连接至在远程计算机上运行的服务器程序。依照

FTP 协议提供服务,进行文件传送的计算机就是 FTP服务器,而连接FTP服务器,遵循FTP协议与服务器传送文件的电脑就是FTP客户端。

用户要连上FTP 服务器,就要用到 FTP 的客户端软件,通常 Windows自带“ftp”命令,这是一个命令行的 FTP客户程序,另外常用的

FTP 客户程序还有FileZilla、 CuteFTP、Ws_FTP、Flashfxp、LeapFTP、流星雨-猫眼等。

工作方式

FTP支持两种模式,一种方式叫做Standard (也就是 PORT方式,主动方式),一种是 Passive(也就是PASV,被动方式)。 Standard模式

FTP的客户端发送 PORT 命令到FTP服务器。Passive模式FTP的客户端发送 PASV命令到 FTP Server。

下面介绍一个这两种方式的工作原理:

Port

FTP 客户端首先和FTP服务器的TCP 21端口建立连接,通过这个通道发送命令,客户端需要接收数据的时候在这个通道上发送PORT命令。

PORT命令包含了客户端用什么端口接收数据。在传送数据的时候,服务器端通过自己的TCP 20端口连接至客户端的指定端口发送数据。

FTP server必须和客户端建立一个新的连接用来传送数据。

Passive

在建立控制通道的时候和Standard模式类似,但建立连接后发送的不是Port命令,而是Pasv命令。FTP服务器收到Pasv命令后,随机打开

一个高端端口(端口号大于1024)并且通知客户端在这个端口上传送数据的请求,客户端连接FTP服务器此端口,然后FTP服务器将通过

这个端口进行数据的传送,这个时候FTP server不再需要建立一个新的和客户端之间的连接。

很多防火墙在设置的时候都是不允许接受外部发起的连接的,所以许多位于防火墙后或内网的FTP服务器不支持PASV模式,因为客户端无

法穿过防火墙打开FTP服务器的高端端口;而许多内网的客户端不能用PORT模式登陆FTP服务器,因为从服务器的TCP 20无法和内部网络

的客户端建立一个新的连接,造成无法工作。

FXP

FXP说简单点就是一个FTP客户端控制两个FTP服务器,在两个FTP服务器之间传送文件。FXP的全称为File Exchange Protocol――文件交

换协议,可以认为FXP本身其实就是FTP的一个子集,因为FXP方式实际上就是利用了FTP服务器的Proxy命令,不过它的前提条件是FTP服

务器要支持PASV,且支持FXP方式。

FXP传送时,文件并不下载至本地,本地只是发送控制命令,故FXP传送时的速度只与两个FTP服务器之间的网络速度有关,而与本地速度

无关。因FXP方式本地只发送命令,故在开始传送后,只要本地不发送停止的命令,就算是本地关机了,FXP仍在传送,直至一个文件传

送完成或文件传送出错后,FTP服务器等待本地发送命令时,才会因不能接收到命令而终止FXP传送。

因为上述的原因,FXP传送出错时,本地的用户进程还留在FTP服务器中,并没有退出,如此时再次连接FTP服务器,可能会因用户线程超

过允许,FTP服务器提示客户已登陆并拒绝客户端的连接,直至服务器中的傀儡进程因超时或其他原因被FTP服务器杀死后,才能再次连

接FTP服务器。

成功FXP有两个必要条件:①两个FTP服务器均支持FXP;②两个FTP服务器均支持PASV方式。但并不是说满足这两个条件的FTP服务器均经

本地操作成功FXP,这还与本地与FTP服务器的网络状况有关。故有时会出现同样两个FTP,别人可以FXP,而你不可以的情况。

用户授权

授权

要连上 FTP 服务器(即“登陆”),必须要有该 FTP 服务器授权的帐号,也就是说你只有在有了一个用户标识和一个口令后才能登陆

FTP服务器,享受FTP服务器提供的服务。

地址格式

FTP地址如下:

ftp://用户名:密码@FTP服务器IP或域名:FTP命令端口/路径/文件名

上面的参数除FTP服务器IP或域名为必要项外,其他都不是必须的。如以下地址都是有效FTP地址:

ftp://foolish.6600.org

ftp://list:list@foolish.6600.org

ftp://list:list@foolish.6600.org:2003

ftp://list:list@foolish.6600.org:2003/soft/list.txt

匿名

互连网中有很大一部分 FTP 服务器被称为“匿名”(Anonymous)FTP 服务器。这类服务器的目的是向公众提供文件拷贝服务,不要求

用户事先在该服务器进行登记注册,也不用取得FTP服务器的授权。

Anonymous(匿名文件传输)能够使用户与远程主机建立连接并以匿名身份从远程主机上拷贝文件,而不必是该远程主机的注册用户。用

户使用特殊的用户名“anonymous”登陆FTP服务,就可访问远程主机上公开的文件。许多系统要求用户将Email地址作为口令,以便更好

地对访问进行跟综。匿名FTP一直是Internet上获取信息资源的最主要方式,在Internet成千上万的匿名FTP主机中存储着无以计数的文

件,这些文件包含了各种各样的信息,数据和软件。人们只要知道特定信息资源的主机地址,就可以用匿名FTP登录获取所需的信息资料

。虽然目前使用WWW环境已取代匿名FTP成为最主要的信息查询方式,但是匿名FTP仍是 Internet上传输分发软件的一种基本方法。如red

hat 、autodesk等公司的匿名站点。

传输模式

FTP协议的任务是从一台计算机将文件传送到另一台计算机,它与这两台计算机所处的位置、联接的方式、甚至是是否使用相同的操作系

统无关。假设两台计算机通过ftp协议对话,并且能访问Internet,

你可以用ftp命令来传输文件。每种操作系统使用上有某一些细微差别,但是每种协议基本的命令结构是相同的。

FTP的传输有两种方式:ASCII传输模式和二进制数据传输模式。

ASCII传输模式

假定用户正在拷贝的文件包含的简单ASCII码文本,如果在远程机器上运行的是不同的操作系统,当文件传输时ftp通常会自动地调整文

件的内容以便于把文件解释成另外那台计算机存储文本文件的格式。但是常常有这样的情况,用户正在传输的文件包含的不是文本文件

,它们可能是程序,数据库,字处理文件或者压缩文件(尽管字处理文件包含的大部分是文本,其中也包含有指示页尺寸,字库等信息

的非打印字符)。

在拷贝任何非文本文件之前,用binary 命令告诉ftp逐字拷贝,不要对这些文件进行处理,这也是下面要讲的二进制传输。

二进制传输模式

在二进制传输中,保存文件的位序,以便原始和拷贝的是逐位一一对应的。即使目的地机器上包含位序列的文件是没意义的。例如,

macintosh以二进制方式传送可执行文件到Windows系统,在对方系统上,此文件不能执行。

如果你在ASCII方式下传输二进制文件,即使不需要也仍会转译。这会使传输稍微变慢 ,也会损坏数据,使文件变得不能用。(在大多

数计算机上,ASCII方式一般假设每一字符的第一有效位无意义,因为ASCII字符组合不使用它。如果你传输二进制文件,所有的位都是

重要的。)如果你知道这两台机器是同样的,则二进制方式对文本文件和数据文件都是有效的。

========

FTP协议(指令集)收藏

FTP协议采用一系列简单的协议来完成文件传输的各种任务,在发送命令的时候,总是在命令的最后加上一个回车换行符,在VB中可以用

“vbcrlf”来实现,vc中以“\r\n”表示。以下的命令是从Postel和Reynolds所著的RFC 929修改而来,如果读者想查看详细内容,可以

参见英文版RFC 929。注意以下出现地标志符CRLF表示的是回车符号,即相当于VC中的“\r\n”。

1.  ABOT(Abort,中止)命令

说明:告诉服务器中止上一次FTP服务命令及所有相关的数据传输。

用法:ABOR﹝CRLF﹞

参数:无。

例子:

SendData “ABOR” + “\r\n”

注释:中止命命令可以请求“特殊操作”以强行引起服务器的重视(详情请参看RFC959)。如果上一次命令已经完成(包括数据传输)

,就不会导致任何操作。服务器不会关闭控制连接,但必须关闭数据连接。

服务器在接收到此命令时可能处于两种状态下:(1)FTP服务命令已经完成,(2)FTP服务命令尚在处理中。

在第一种状态下,服务器关闭数据连接(如果它是打开的)并响应以226应答,表示已成功执行了中止命令。

在第二种状态下,服务器中止正处理中的FTP服务并关闭数据连接,返回426应答,表示该服务请求被异常终止。然后服务器发送226应答

,表示成功执行了中止命令。

l         225  数据连接打开,没有正在进行的传输

l         226  关闭数据连接,请求的文件操作成功。

l         421  服务不可用,关闭控制连接。

如果某项服务获知自己即将关闭,会向所有命令做出这个应答。

l         226  连接关闭,传输终止。

l         500  语法错误,无法识别命令。

这其中包括命令行过长之类的错误。

l         501  参数或变元中有语法错误。

l         502  命令还没有被实现。

2.  ACCT(Account,帐号)命令

说明:指定用户的帐号信息。这条命令只能在发送PASS命令并接收到332代码之后发送。

用法:ACCT

参数:Account是用户的帐号,访问某些服务时可能另外需要它。

例子:

SendData “ACCTN322s”  + “\r\n

注释:当登录需要帐号信息时,一条成功的PASS命令的响应是应答代码332。反之,如果登录不需要帐号信息,成功的PASS命令的应答是

230;如果在对话中后来发出的命令需要帐号信息,服务器会返回332或532应答,这分别取决于它是保存(在接收ACCT命令期间)还是丢

弃此命令。

返回值(粗体表示成功):

l         202  命令还没有被实现,在此站点上是多余的。

l         230  用户已登录,请继续。

l         421  服务不可用,关闭控制连接。

如果某项服务获知自己即将关闭,会向所有命令做出这个应答。

l         500  语法错误,无法识别命令。

这其中包括命令行过长之类的错误。

l         501  参数或变元中有语法错误。

l         502  命令还没有被实现。

l         503  命令的顺序不对。

l         530  无法登录。

3.  ALLO(Allocate,分配)命令

说明:发送文件前在服务器上分配X个字节

用法:ALLO]

参数:NumberBytes是一个整数,代表为该文件保留的内存字节数(使用逻辑字节大小计算)。MaxSize是在使用记录或页数据结构时可

选的最大记录或页大小。

例子:

SendData “ALLO 3000 128”  + “\r\n

注释:一些要保留足够内存以容纳将要传输的新文件的服务,会请求这条命令。对于用记录或页结构发送的文件来说,最大记录或页大

小(以逻辑字节计)也可能是必需的;它以这条命令的第二个参数字段中的十进制整数表示。这第二个参数是可选的,但在出现时应该

与第一个参数三个ASCII字符P分隔开。这条命令后跟一条STORe或APPEnd命令。那些不要求事先声明最大文件大小的服务器应该把ALLO命

令视为NOOP(不操作),而那些只关心最大记录或页大小的服务器应该受第一个参数的值,然后忽略它。

返回值(粗体表示成功):

l         200  命令成功。

l         202  命令还没有被实现,在此站点上是多余的。

l         421  服务不可用,关闭控制连接。

如果某项服务获知自己即将被关闭,会向所有命令做出这个应答。

l         500  语法错误,无法识别命令。

这其中包括命令行过长之类的错误

l         501  参数或变元中有语法错误

l         504  命令中还没有实现该参数

l         530  无法登录。

4.  APPE(Append with create,附加和创建)命令

说明:让服务器准备接收一个文件并指示它把这些数据附加到指定的文件名,如果指定的文件尚未存在,就创建它。

用法:APPE

参数:FileName是服务器站点上一个完全合格的路径和文件名。

例子:

SendData “APPE” & szFileName  + “\r\n

返回值如下(粗体表示成功)。

l         110  重新启动标记应答。

在此情况下,文本是精确的,而且不会留给特殊的实现处理;它必须读取:

MARK yyyy=mmmm

其中yyyy是用户进程的数据流标记,mmmm是服务器上的相应标记(请注意标记和“=”之间的空格)。

l         125  数据连接已打开,传输启动。

l         150  文件状态没问题,准备打开数据进行连接。

l         226  关闭数据连接,请求的文件操作已成功。

l         250  请求的文件操作没问题,已完成。

l         421  服务不可用,关闭控制连接。

如果某项服务获知自己即将关闭,会向所有命令做出这个应答。

l         425  无法打开数据连接。

l         426  连接关闭;传输中止。

l         450  请求的文件操作无法执行,文件不可用(例如文件正忙)。

l         451  请求的操作被中止,处理中发生本地错误。

l         452  请求的操作无法执行,系统的存储空间不足。

l         500  语法错误,无法识别命令。

这其中包括命令行过长之类的错误。

l         501  参数或变元中有语法错误。

l         502  命令还没有被实现。

l         530  无法登录。

l         532  文件的存储需要帐号。

l         550  请求的操作无法执行,文件不可用(例如找不到文件,无访问权)。

l         551  请求的操作被中止,未知的页类型。

l         552  请求的文件操作被中止,超过了分配的存储单元(对当前目录或数据集而言)。

l         553  请求的操作无法执行,不允许的文件名。

5.  CDUP(Change to Parent Directory,变为父目录)命令

说明:把当前目录改为远程文件系统的根目录,无需改变登录、帐号信息或传输参数。

用法:CDUP

参数:无。

例子:

SendData “CDUP”  + “\r\n

注释:CDUP目录可改为父目录。MS-DOS中的等效命令是cd\。创建这条命令是为了适应FTP的不同操作系统。

返回值如下(粗体表示成功):

l         250  请求的文件操作正常进行,已完成。

l         421  服务不可用,关闭控制连接。

如果某项服务获知自己即将关闭,会向所有命令做出这个应答。

l         500  语法错误,无法识别命令。这其中包括命令行过长之类的错误。

l         501  参数或变元中有语法错误。

l         502  命令还没有被实现。

l         530  无法登录。

l         550  请求的操作无法执行,文件不可用(例如找不到文件,无访问权)。

6.  CWD(Change Working Directory,改变工作目录)命令

说明:把当前目录改为远程文件系统的指定路径,而无需改变登录、帐号信息或传输参数。

用法:CWD

参数:Path是远程系统上的一个工作目录。

例子:

SendData “CWD/pub/cgvb/uploads”  + “\r\n

返回值如下(粗体表示成功):

l         250  请求的文件操作正常进行,已完成。

l         421  服务不可用,关闭控制连接。

如果某项服务获知自己即将关闭,会向所有命做出这个应答。

l         500  语法错误,无法识别命令。这其中包括命令行过长之类的错误。

l         501  参数或变元中有语法错误。

l         502  命令还没有被实现。

l         530  无法登录。

l         550  请求的操作无法执行,文件不可用(例如找不到文件,无访问权)。

7.  DELE(Delete,删除)命令

说明:删除服务器站点上在路径名中指定的文件。

用法DELE

参数:FileName是服务器站点上一个完全合格的路径和文件名。

例子:

SendData “DELE temp.fil” + “\r\n

注释:如果期望有额外的保护级别(例如选项”确实要删除此文件吗?”),这应该由客户软件提供。

返回值如下(粗体表示成功):

l         250  请求的文件操作正常进行,已完成。

l         421  服务不可用,关闭控制连接。

如果某项服务获知自己即将关闭,会向所有命令做出这个应答。

l         450  请求的文件操作无法执行,文件不可用(例如文件正忙)。

l         500  语法错误,无法识别命令。这其中包括命令行过长之类的错误。

l         501  参数或变元中有语法错误。

l         502  命令还没有被实现。

l         530  无法登录。

l         550  请求的操作无法执行,文件不可用(例如找不到文件,无访问权)。

8.  HELP(Help,帮助)命令

说明:让服务器通过到客户的控制连接发送有关其实现状态的帮助信息。

用法:HELP[]

参数:Topic是一个可选的命令,或是请求哪条命令有关文本的其他参数。

例子:

SendData “HELP” + “\r\n

注释:HELP可以带一个参数(例如任何命令的名称),以在响应中返回更具体的信息。应答为类型211或214。建议在输入USER命令前允

许使用HELP命令。服务器可以使用这个应答来指定站点相关的参数,例如在对HELP SITE的响应中。

返回值如下(粗体表示成功):

l         211  系统状态,或系统的帮助应答。

l         214  帮助消息。

描述如何使用服务器或某条不常用的具体命令的方法。这个应答只对用户有用,因为帮助消息没有标准的格式。

l         421  服务不可用,关闭控制连接。

如果某项服务获知自己即将关闭,会向有命令做出这个应答。

l         500  语法错误,无法识别命令。这其中包括命令行过长之类的错误。

l         501  参数或变元中有语法错误。

l         502  命令还没有被实现。

9.  LIST(List,列表)命令

说明:让服务器给客户发送一份列表。

用法:LIST[]

参数:PathName是服务器系统上的一个有效路径和文件规范。

例子:

SendData “LIST pub/*.*” + “\r\n

注释:如果路径名指定的是一个目录或其他文件组,服务器传送一份位于指定目录中的文件的列表。如果路径名指定的是一个文件,那

么服务应该发送此文件的当前信息。空变元则暗指用户的当前工作目录或默认目标。数据将在类型ASCII或类型EBCDIC中通过数据连接传

送(用户必须确保ASII或EBCDIC的类型适当)。

因为系统与系统之间的文件信息可能有很大差别,所以这项信息要在程序中自动使用可能很困难,但对用户来说会很有用。

返回值如下(粗体表示成功):

l         125  数据连接已打开,传输启动。

l         150  文件状态没问题,准备打开数据连接。

l         226  关闭数据连接,请求的文件操作已成功。

l         250  请求的文件操作正常进行,已完成。

l         421  服务不可用,关闭控制连接。

如果某项服务获知自己即将关闭,会向所有命令做出这个应答。

l         425  无法打开数据连接。

l         426  连接关闭,传输中止。

l         450  请求的文件操作无法执行,文件不可用(例如文件正忙)。

l         451  请求的操作被中止,处理中发生本地错误。

l         500  语法错误,无法识别命令。这其中包括命令行过长之类的错误。

l         501  参数或变元中有语法错误。

l         502  命令还没有被实现。

l         530  无法登录。

10.  MKD(Make Directory ,创建目录)命令

说明:创建一个在路径名中指定的目录(如果是绝对路径名)或当前工作目录的子目录(如果是相对路径名)。

用法:MKD

参数:Path是服务器端上的一个有效路径。

例子:

SendData “MKD /users/johnsmith” + “\r\n

返回值如下(粗体表示成功):

l         257  “PATHNAME”已创建。

l         421  服务不可用,关闭控制连接。

如果某项服务获知自己即将关闭,会向所有命令做出这个应答。

l         500  语法错误,无法识别命令。这其中包括命令行过长之类的错误。

l         501  参数或变元中有语法错误。

l         502  命令还没有被实现。

l         530  无法登录。

l         550  请求的操作无法执行,文件不可用(例如找不到文件,无访问权)。

11.  MODE(Transfer Mode,传输模式)命令

说明:指定传输模式。

用法:STRU

参数:Mode是如下ASCII值的其中之一:

S——Stream(流,默认值)

B——Block(块)

C——Compressed(经过压缩)

例子:

SendData “STRU B” + “\r\n

返回值如下(粗体表示成功):

l         200  命令成功。

l         421  服务不可用,关闭控制连接。

如果某项服务获知自己即将关闭,会向所有命令做出这个应答。

l         500  语法错误,无法识别命令。这其中包括令行过长之类的错误。

l         501  参数或变元中有语法错误。

l         504  命令中还没有实现该参数。

l         530  无法登录。

 

12.  NLST(Name List,名称列表)命令

说明:让服务器给客户发送一份目录列表。

用法:NLST[]

参数:PathName是服务器系统上的一个有效路径和文件规范。

例子:

SendData “NLST /pub/cgvB” + “\r\n

注释:路径名应该指定一个目录或其他由系统指定的文件组描述符,空变元则暗指当前目录。服务器将返回一个文件名称的流,除此之

外没有其他信息。数据将以ASCII或EBCDIC类型通过数据连接传送,其中的有效路径名字符串由或分隔(用户必须确保类型正确)。

NLST希望返回的信息可被程序用来进一步地自动处理这些文件。例如,在一个“断点续传”功能的实现中。

返回值如下(粗体表示成功):

l         125  数据连接已打开,传输启动。

l         150  文件状态正常,准备打开数据连接。

l         226  关闭数据连接,请求的文件操作已成功。

l         250  请求的文件操作正常进行,已完成。

l         421  服务不可用,关闭控制连接。

如果某项服务获知自己即将关闭,会向所有命令做出这个应答。

l         425  无法打开数据连接。

l         426  连接关闭,传输中止。

l         450  请求的文件操作无法执行,文件不可用(例如文件正忙)。

l         451  请求的操作被中止,处理中发生本地错误。

l         500  语法错误,无法识别命令。这其中包括命令行过长之类的错误。

l         501  参数或变元中有语法错误。

l         502  命令还没有被实现。

l         530  无法登录。

13.  NOOP(NOOP,无操作)命令

说明:这是一条不进行操作的命令,即它什么都不做。

用法:NOOP

参数:无。

例子:

SendData “NOOP” + “\r\n

注释:NOOP不会影响任何参数或以前输入的命令。除了让服务器发送一条OK应答外,它不指定任何操作。

返回值如下(粗体表示成功):

l         200  命令成功。

l         421  服务不可用,关闭控制连接。

如果某项服务获知自己即将关闭,会向所有命令做出这个应答。

l         500  语法错误,无法识别命令。

14.  PASS(Password,密码)命令

说明:向远程系统发送用户的密码,该命令在USER命令后使用。

用法:PASS

参数:Password是由USER命令指定的已注册用户密码。

例子:

SendData “PASS mypassworD” + “\r\n

注释:在连接到一台FTP服务器的端口21并接收到一个由代码220打头的行,表示服务器已准备好你向它发USER和PASS命令,以登录进此

FTP服务器之后,紧跟着发送USER命令。

PASS命令应该紧跟着USER命令。

如果你在此FTP服务器上有帐号,就可以指定自己的用户名和密码。如果想匿名登录,可以指定用户名为“Anonymous”,而用自己的电

子邮件地址当密码。

返回值如下(粗体表示成功):

l         202  命令还没有被实现,在此站点上是多余的。

l         230  用户已登录,请继续。

l         332  登录需要帐号(请参看ACCT命令)。

l         421  服务不可用,关闭控制连接。

如果某项服务获知自己即将关闭,会向所有命令做出这个应答。

l         500  语法错误,无法识别命令。这其中包括命令行过长之类的错误。

l         501  参数或变元中有语法错误。

l         530  无法登录。

15.  PASV(Passive,被动的)命令

说明:告诉服务器在一个非标准端口上收听数据连接。

用法:PASV

参数:这条命令请求server-DTP(服务器数据传送规约)“收听”某个数据端口(该端口不是它的默认数据端口),并等待一个连接而

不是在收到传输命令时初始化一个连接。对这条命令的响应包括主机地址和此服务器正在收听的端口地址。

例子:

SendData “PASV” + “\r\n

返回值如下(粗体表示成功):

l         227  输入被动模式(h1,h2,h3,h4,p1,p2)。

返回值包括一个在数据连接中使用的数据端口的HOST-PORT规约。此参数是一个32位Internet主机地地址和一个16位TCP端口地的拼接。

这个地址信息被拆分为8位的字段,并且每个字段的值是作为一个十进制数传输的(在字符串意义上)。H1是Internet主机地址的高位字

节,p1是端口地址的高位字节。

l         421  服务不可用,关闭控制连接。

如果某项服务获知自己即将关闭,会向所有命令做出这个应答。

l         500  语法错误,无法识别命令。这其中包括命令行过长之类的错误。

l         501  参数或变元中有语法错误。

l         503  无法登录。

16.  PORT(Data  Port,数据端口)命令

说明:为数据连接指定一个IP地址和本地端口。

用法:PORT

参数:Socket是数据连接中要使用的数据端口的一个HOST-PORT规约。用户和服务器都有默认的数据端口,在正常情况下不需要这条命令

和对它的应答。如果使用了这条命令,则参数是一个32个Internet主机地址和一个16位TCP端口地的拼接。这个地址信息被拆分为8位的

字段,并且每个字段的值是作为一个十制数传输的(在字符串意义上)。各个字段用逗号分隔开。一条端口命令可以是这样:

PORT h1,h2,h3,p1,p2

其中H1是Internet主机地址的高位字节,P1是本地端口的高位字节。

例子:

SendData “PORT 199,199,199,0,33,1” + “\r\n

返回值如下(粗体表示成功):

l         200  命令成功。

l         421  服务不可用,关闭控制连接。

如果某项服务获知自己即将关闭,会向所有命令做出这个应答。

l         500  语法错误,无法识别命令。

这其中包括命令行过长之类的错误。

l         501  参数或变元中有语法错误。

l         530  无法登录。

17.  PWD(Print Working Directory,打印工作目录) 命令

说明:在应答中返回当前工作目录的名称。

用法:PWD

参数:无

例子:

SendData “PWD” + “\r\n

返回值如下(粗体表示成功):

l         257  “PATHNAME”已创建

l         421  服务不可用,关闭控制连接。

如果某项服务获知自己即将关闭,会向所有命令做出这个应答。

l         500  语法错误,无法识命令。这其中包括命令行过长之类的错误。

l         501  参数或变元中有语法错误。

l         502  命令还没有被实现。

l         550  请求的操作无法执行,文件不可用(例如找不到文件,无访问权)。

18.  QUIT(Logout,注销)命令

说明:终止连接。

用法:QUIT

参数:无。

例子:

SendData “QUTI” + “\r\n

注释:QUIT将终止此USER,如果没有正在进行的文件传送,服务器将关闭控制连接。如果文件传送正在进行,该连接仍然打开直至结果

呼响应,然后服务器将其关闭。如果用户进程正在为几个USER传送文件,不想关闭后再逐个重新打开连接,那么应该使用REIN命令代替

QUIT。

控制连接的意外关闭会导致服导器采取有效的中止(ABORT)和注销(QUIT)操作。

返回值如下(粗体表示成功):

l         221  服务正在关闭控制连接。

l         500  语法错误,无法识别命令。

19.  REIN(Reinitialize,重新初始化) 命令

说明:终止一个用户。

用法:REIN

参数:无。

例子:

SendData “REIN” + “\r\n

注释:除了允许完成正在进行的传送之外,REIN将刷新所有的I/O和帐号信息。所有参数都被复位到默认设置,控制连接仍然打开。这和

用户在刚刚打开控制连接时的状态是一样的。如果后来想要登录,在发送USER命令之前送一条REIN命令。

返回值如下(粗体表示成功):

l         120  服务将在nnn分钟后准备好。

l         220  服务已为新用户准备好。

l         421  服务不可用,关闭控制连接。

如果某项服务获知自己即将关闭,会向所有命令做出这个应答。

l         500  语法错误,无法识别命令。这其中包括命令行过长之类的错误。

l         502  命令还没有被实现。

20.  REST(Restart,重新启动)命令

说明:标识出文件内的数据点,将从这个点开始继续传送文件。

用法:REST

参数:Marker代表文件传送将要由此重新启动的服务器标记。

例子:

SendData “REST 244” + “\r\n

注释:REST不会引起文件传送,而只是跳到文件中指定的数据检验点上。RSET后紧跟着适当的FTP服务命令,该命令才会引起文件的继续

传送。

返回值如下(粗体表示成功):

l         无响应即表示成功。

l         350  请求的文件操作在等待更进一步的信息。

l         421  服务不可用,关闭控制连接。

如果某项服务获知自己即将关闭,会向所有命令做出这个应答。

l         500  语法错误,无法识别命令。这其中包括命令行过长之类的错误。

l         501  参数或变元中有语法错误。

l         502  命令还没有被实现。

l         530  无法登录。

21.  RETR(Retrieve,检索)命令

说明:这条命令让服务器给客户传送一份在路径名中指定的文件的副本。这不会影响该文件在服务器站点上的状态和内容。

用法:RETR

参数:FileName是服务器站点上一个完全合格的路径和文件名。

例子:

SendData “RETR /pub/cgvb/misc/somefile.zip” + “\r\n

返回值如下(粗体表示成功):

l         110  重新启动标记应答。

在此情况下,文体是精确的,而且不会留给特定的实现处理;它必须读取:

MARK yyyy=mmmm

其中yyyy是用户进程的数据流标记,mmmm是服务器上的相应标记(请注意标记和“=”之间的空格)。

l         125  数据连接已打开,传输启动。

l         150  文件状态没问题,准备打开数据连接。

l         226  关闭数据连接,请求的文件操作已成功。

l         250  请求的文件操作正常进行,已完成。

l         421  服务不可用,关闭控制连接。

如果某项服务获知自己即将关闭,会向所有命令做出这个应答。

l         425  无法打开数据连接。

l         426  连接关闭,传输中止。

l         450  请求的文件操作无法执行,文件不可用(例如,文件正忙)。

l         451  请求的操作被中止,处理中发生本地错误。

l         500  语法错误,无法识别命令。

这其中包括命令行过长之类的错误。

l         501  参数或变元中有语法错误。

l         504  命令中还没有实现该参数。

l         530  无法登录。

l         550  请求的操作无法执行,文件不可用(例如找不到文件,无访问权)。

22.  RMD(Remove Directory,删除目录)命令

说明:删除一个在路径名中指定的目录(如果是绝对路径名)或当前工作目录的子目录(如果是相对路径名)。

用法:RMD

参数:Path是服务器端上一个完全合格的路径。

例子:

SeddData “RMD /users/johnsmith” + “\r\n

返回值(粗体表示成功):

l         250  请求的文件操作没问题,已完成。

l         421  服务不可用,关闭控制连接。

如果某项服务获知自己即将关闭,会向所有命令做出这个应答。

l         500  语法错误,无法识别命令。

l         501  参数或变元中有语法错误。

l         502  命令还没有被实现。

l         530  无法登录。

l         550  请求的操作无法执行;文件不可用(例如,找不到文件,无访问权)。

23.  RNFR(Rename From,把…重命名)命令

说明:文件重命名进程的前一半。指定要重命名的文件的旧路径和文件名。

用法:RNFR

参数:FileName是服务器站点上一个完全有效的路径和文件名。

例子:

SendData “RNFR source.zip” + “\r\n

RNFR后面必须紧跟着一条指定新路径和文件名的”Rename to”命令(RNTO)。

返回值如下(粗体表示成功):

l         无响应即表示成功

l         350  请求的文件操作在等待更进一步的信息。

l         421  服务不可用,关闭控制连接。

如果某项服务获知自己即将关闭,会向所有命令做出这个应答。

l         450  请求的文件操作无法执行,文件不可用(例如文件正忙)。

l         500  语法错误,无法识别命令。这其中包括命令行过长之类的错误。

l         501  参数或变元中有语法错误。

l         502  命令还没有被实现。

l         530  无法登录。

l         550  请求的操作无法执行,文件不可用(例如找不到文件,无访问权)。

24.  RNTO(Rename TO,重命名为)命令

说明:文件重命名进程的后一半。指定要重命名的文件的新路径和文件名。

用法:RNTO

参数:FileName是服务器站点上的一个有效文件名。

例子:

SendData “RNTO destination.ziP” + “\r\n

注释:RNTO前面必须是一条”Rename from”命令(RNFR)。RNER和RNTO合在一起才能重命名服务器上的一个文件。

返回值如下(粗体表示成功):

l         250  请求的文件操作正常进行,已完成。

l         421  服务不可用,关闭控制连接。

如果某项服务获知自己即将关闭,会向所有命令做出这个应答。

l         500  语法错误,无法识别命令。这其中包括命令行过长之类的错误。

l         501  参数或变元中有语法错误。

l         502  命令还没有被实现。

l         503  命令的顺序不对。

l         530  无法登录。

l         532  文件的存储需要帐号。

l         553  请求的操作无法执行,不允许的文件名。

25.  SITE(Site Parameters,站点参数)命令

说明:服务器使用SITE提供了某些服务特性,这些服务特性在系统中对文件传达而言是必要的,但又不是足够通用的可以包括到协议中

作为命令的那些服务特性。这些服务的本质和他们的语法规范可以陈述在对HELPSITE命令的应答中。

用法:SITE

参数:String可以是任何串参数。

例子:

SendData “SITE chmod 646 mylifle.ziP” + “\r\n

注释:举例来说,使用如下语法,你就可以使用SITE来改变一个文件的权限属性。

SITE CHMOD

返回值如下(粗体表示成功):

l         200  命令成功。

l         202  命令还没有被实现,在此站点上是多余的。

l         500  语法错误,无法识别命令。这其中包括命令行过长之类的错误。

l         501  参数或变无中有语法错误。

l         530  无法登录。

26.  SMNT(Structure Mount,结构装配)命令

说明:允许用户装配另一个文件系统的数据结构而无需改变登录、帐号信息或传输参数。

用法:SMNT

参数:Path是另一个文件数据系统的路径。

例子:

SendData “SMNT/users/johnsmith”&vbCrlf

返回值如下(粗体表示成功):

l         202  命令还没有被实现,在此站点上是多余的。

l         250  请求的文件操作没问题,已完成。

l         421  服务不可用,关闭控制连接。

如果某项服务获知自己即将关闭,会向所有命令做出这个应答。

l         500  语法错误,无法识别命令。这其中包括命令行过长之类的错误。

l         501  参数或变元中有语法错误。

l         502  命令还没有被实现。

l         530  无法登录。

l         550  请求的操作无法执行,文件不可用(例如找不到文件,无访问权)。

27.  STAT(Status,状态)命令

说明:使一个状态响应以应答的形式通过控制连接发送出去

用法:STAT[]

参数:PathName是服务器上的一个有效路径。

例子:

SendData “STAT /users/johnsmith/mylilE” + “\r\n

注释:STAT可以在文件传输(连同Telnet  IP和Synch信号一起——请参看RFC959的FTP Commands部分)期间发送,在此情况下服务器将

响应操作中的进程状态,或者在两次文件传输之间发送。在后一种情况下,这条命令可以带一参数字段。如果指定了一个完整的路径名

,STAT将类似于LIST命令,除了它的数据是通过控制连接传送的之外。如果指定的是一个局部路径,服务器将在响应中给出一份与指定

项相关联的文件名或属性列表。如果不指定参数,服务器将返回有关此服务器FTP进程的常规状态信息,这其中包括当前所有传输参数的

值和连接状态。

返回值如下(粗体表示成功):

l         211  系统状态,或系统的帮助应答。

l         212  目录状态。

l         213  文件状态。

l         421  服务不可用,关闭控制连接。

如果某项服务获知自己即将关闭,会向所有命令做出这个应答。

l         450  请求的文件操作无法执行,文件不可用(例如文件正忙)。

l         500  语法错误,无法识命令。这其中包括包令行过长类的错误。

l         501  参数或变元中有语法错误。

l         502  命令还没有被实现。

l         530  无法登录。

28.  STOR(Store,保存)命令

说明:让服务器接收一个来自数据连接的文件。

用法:STOR

参数:FileName是服务器站点上一个完全合格的路径和文件名。

例子:

SendData “STOR newfile.zip” + “\r\n

注释:Store命令让服务器接收通过数据连接传输而来的数据,并把数据存为务器站点上的文件。如果在路径名中指定的文件已经在服务

站点上存在,则此文件的内容将被传输过来的数据所替代。如果在路径名中指定的文件尚未存在,将创建一个新文件。

返回值如下(值体表示成功):

l         110  重新启动标记应答

在此情况下,文本是精确的,而且不会留给特殊的实现处理,它必须读取:

MARK yyyy=mmmm

其中yyyy是用户进程的数据流标记,mmmm是服务器上的相应相标记(请注意标记和“=”之间的空格)。

l         125  数据连接已打开,传输启动。

l         150  文件状态一切正常,准备打开数据连接。

l         226  关闭数据连接,请求的文件操作已成功。

l         250  请求的文件操作正常进行,已完成。

l         421  服务不可用,关闭控制连接。

如果某项服务获知自己即将关闭,会向所有命令做出这个应答。

l         425  无法打开数据连接。

l         426  连接关闭,传输中止。

l         450  请求的文件操作无法执行,文件不可用(例如文件正忙)

l         451  请求的操作被中止,处理中发生本地错误。

l         452  请求的操作无法执行,系统的存储空间不足。

l         500  语法错误,无法识别命令。这其中包括命令行过长之类的错误。

l         501  参数或变元中有语法错误。

l         504  命令中还没有实现该参数。

l         530  无法登录。

l         532  文件的存储需要帐号。

l         550  请求的操作无法执行,文件不可用(例如找不到文件,无访问权)。

l         551  请求的操作被中止,未知的页类型。

l         552  请求的文件操作被子中止,超过了分配的存储单元(对当前目录或数据集而言)。

l         553  请求的操作无法执行,不允许的文件名。

29.  STOU(Store Unique,存为唯一)命令

说明:让服务器准备接收一个文件,并指示服务器把这个文件用唯一的名称保存到目的目录中。

用法:STOU

参数:无。

例子:

SendData “STOU”&vbCrlf

注释:Store Unique命令和STOR所做的工作是基本一样的,只是前者在当前目录下生成的文件是以一个该目录中唯一的名称来创建的。

250 Transfer Started响应中必须包括这个生成的名称。

返回值如下(粗体表示成功):

l         110  重新启动标记应答

在此情况下,文本是精确的,而且不会留给特殊的实现处理,它必须读取:

MARKyyyy=mmmm

其中yyyy是用户进程的数据流标记,mmmm是服务器上的相应标记(请注意标记和“=”之间的空格)。

l         125  数据连接已打开,传输启动。

l         150  文件状态正常,准备打开数据连接。

l         226  关闭数据连接,请求的文件操作已成功。

l         250  请求的文件操作没问题,已完成(该行中包括一个唯一的文件名)。

l         421  服务不可用,关闭控制连接。

如果某项服务获知自己即将关闭,会向所有命令做出这个应答。

l         425  无法打开数据连接。

l         426  连接关闭,传输中止。

l         450  请求的文件操作无法执行,文件不可用(例如文件正忙)。

l         451  请求的操作被中止,处理中发生本地错误。

l         452  请求的操作无法执行,系统的存储空间不足。

l         500  语法错误,无法识别命令。这其中包括命令行过长之类的错误。

l         501  参数或变元中有语法错误。

l         504  命令中还没有实现该参数。

l         530  无法登录。

l         532  文件的存储需要帐号。

l         550  请求的操作无法执行,文件不可(例如找不到文件,无访问权)。

l         551  请求的操作作被中止,未知的页类型。

l         552  请求的文件操作被中止,超过了分配的存储单元(对当前目录或数据集而言)。

l         553请求的操作无法执行,存在不允许的文件名。

30.  STRU(File Structure,文件结构)命令

说明:指定传达数据的结构类型。

用法:STRU

参数:StructureType是如下ASCII字符的其中之一:

F——文件结构(默认值)

R——记录结构

P——页结构

有关使用非文件结构的信息请参看RFC959。

例子:

SendData “STRUR” + “\r\n

返回值如下(粗体表示成功):

l         200  命令成功。

l         421  服务不可用,关闭控制连接。

如果某项服务获知自己即将关闭,会向所有命令做出这个应答

l         500  语法错误,无法识别命令。这其中包括命令行过长之类的错误。

l         501  参数或变元中有语法错误。

l         504  命令中还没有实现该参数。

l         530  无法登录。

31.  SYST(System,系统)命令

说明:SYST用于查明服务器上操作系统的类型。

用法SYST

例子:

SendData “SYST” + “\r\n

注释:按照推测,应答中的第一个单词是在Assigned Numbers文档[4]的当前版本中列出的某一个系统名称。但是,并不一定都能成功,

新的系统每时每刻都在涌现。而公开的文档也许能跟上趟,也许不能。

返回值如下(粗体表示成功):

l                   215   NAME系统类型。NAME是来自Assigned Numbers文档中的一个正式的系统名称。

l         421  服务不可用,关闭控制连接。

如果某项服务获知自己即将关闭,会向所有命令做出这个应答

l         500  语法错误,无法识别命令。这其中包括命令行过长之类的错误。

l         501  参数或变元中有语法错误。

l         502  命令还没有被实现。

32.  TYPE(Representation Type,表达类型)命令

说明:确定数据的传输方式。

用法:TYPE

参数:Data type Code是一个(或几个)ASCII字符,它标识出一种数据表达类型。

例子:

‘—设置二进制模式

SendData “type I” + “\r\n

注释:最典型的情况就是使用TYPE命令在ASCII或二进制模式(Image,图像)之间切换。发送和接收任何类型的文件时都可以使用图像

类型。ASCII类型只在传送文本时使用。

有几种类型要用到第二个参数。第一个参数由一个单独的ASCII字符表示,ASCII和EBCDIC的第二个Format参数也是如此;本地字节的第

二个参数则是一个表示Byte大小的十进制整数。两个参数之间用(Space,即空格,ASCII代码为32)分隔开。

给类型分配如下代码:

A——ASCII*

E——EBCDIC*

I——Image(图像,传送二进制文件时用它)。

L——Local byte  Byte size(本地字节,字节大小)

————————————-

*——A和E类型的第二个Parameter要用到如下三个的其中一个:

N——Nonprint(非打印)

T——Telnet format effector(Telnet格式控制符)

C——Carriage Control(ASA)托架控制(美国国家标准)。

默认的表达类型是ASCII Nonprint。如果Format参数发生改变,后来只是第一个参数发生了改变,Format将随即返回到默认的Nonprint



返回值如下(粗体表示成功):

l         200  命令成功。

l         421  服务不可用,关闭控制连接。

如果某项服务获知自己即将关闭,会向所有命令做出这个应答

l         500  语法错误,无法识别命令。这其中包括命令行过长之类的错误。

l         501  参数或变元中有语法错误。

l         504  命令中还没有实现该参数。

l         530  无法登录。

命令:USER(User Name,用户名称)

说明:指定远程系统上的用户名称。和PASS命令一起使用来登录。

用法:USER

参数:UserName是FTP系统上已经注册的用户名称。

例子:

 

SendData “USER johns” + “\r\n

 

注释:在连接到一台FTP服务器的端口并接收到一个由代码220开头的行,表示服务器已经准备好用户向它发送USER和PASS命令以登录进

此FTP服务器之后,紧跟着发送USER命令。

PASS命令应该紧跟着USER命令。

如果在此FTP服务器上有帐号,就可以指定自己的用户名和密码。如果想匿名登录,可以指定用户名为“Anonymous”,而用自己的电子

邮件地址当密码。

在会话期间,可以随时发送USER和PASS命令,把控制权交给一个新用户。

返回值如下(粗体表示成功)

l         230  用户已经登录。

l         331  用户名正常,需要密码。

l         332  登录需要帐号。

l         421  服务不可用,关闭控制连接

如果某项服务获知自己即将关闭,会向所有命令做出这个应答

l         500  语法错误,无法识别命令。这其中包括命令行过长之类的错误。

l         501  参数或变元中有语法错误。

l         530  无法登录。

以上为大部分的FTP命令,如果想进行FTP高级编程,就必须掌握这些具体的FTP命令。

 

http://blog.csdn.net/code09/archive/2009/03/10/3975223.aspx

========

FTP协议的基本概念

从三个方面进行讲述:基本概念,工作原理和传输模式。

网络中的数据传输时一个复杂的过程,完成一个简单的数据传输,其实经过了很多道协议的规范和作用。那么现在我们就来介绍一下FTP

协议,这个远程文件传输协议。

1. 什么是FTP协议

FTP协议(File Transfer Protocol)即远程文件传输协议,是一个用于简化IP网络上系统之间文件传送的协议,FTP是TCP/IP的一种具

体应用,它工作在OSI模型的第7层,TCP模型的第四层上,即应用层,使用TCP传输而不是UDP,FTP建立的就是一个可靠的连接。采用FTP

协议可使 Internet用户高效地从网上的FTP服务器下载大信息量的数据文件,将远程主机上的文件拷贝到自己的计算机上。以达到资源

共享和传递信息的目的。由于FTP的使用使得Internet上出现大量为用户提供的下载服。Internet成为了一个巨型的软件仓库。

2. FTP工作原理

FTP有两个过程一个是控制连接,一个是数据传输。FTP协议不像HTTP协议一样需要一个端口作为连接(默认时HTTP端口是80,FTP端口是

21)。FTP协议需要两个端口,一个端口是作为控制连接端口,也就是FTP的21端口,用于发送指令给服务器以及等待服务器响应;另外

一个端口用于数据传输端口,端口号为20(仅用PORT模式),是用建立数据传输通道的,主要作用是从客户向服务器发送一个文件,从

服务器向客户发送一个文件,从服务器向客户发送文件或目录列表。

3. FTP的传输模式

FTP协议的任务是从一台计算机将文件传送到另一台计算机,它与这两台计算机所处的位置、联接的方式、甚至是是否使用相同的操作系

统无关。假设两台计算机通过ftp协议对话,并且能访问Internet, 你可以用ftp命令来传输文件。每种操作系统使用上有某一些细微差

别,但是每种协议基本的命令结构是相同的。

FTP的传输有两种方式:ASCII传输模式和二进制数据传输模式。

ASCII传输方式假定用户正在拷贝的文件包含的简单ASCII码文本,如果在远程机器上运行的不是UNIX,当文件传输时ftp通常会自动地调

整文件的内容以便于把文件解释成另外那台计算机存储文本文件的格式。但是常常有这样的情况,用户正在传输的文件包含的不是文本

文件,它们可能是程序,数据库,字处理文件或者压缩文件(尽管字处理文件包含的大部分是文本,其中也包含有指示页尺寸,字库等

信息的非打印字符)。在拷贝任何非文本文件之前,用binary 命令告诉ftp逐字拷贝,不要对这些文件进行处理,这也是下面要讲的二

进制传输。

二进制传输模式在二进制传输中,保存文件的位序,以便原始和拷贝的是逐位一一对应的。即使目的地机器上包含位序列的文件是没意

义的。例如,macintosh以二进制方式传送可执行文件到Windows系统,在对方系统上,此文件不能执行。如果你在ASCII方式下传输二进

制文件,即使不需要也仍会转译。这会使传输稍微变慢 ,也会损坏数据,使文件变得不能用。(在大多数计算机上,ASCII方式一般假

设每一字符的第一有效位无意义,因为ASCII字符组合不使用它。如果你传输二进制文件,所有的位都是重要的。)如果你知道这两台机

器是同样的,则二进制方式对文本文件和数据文件都是有效的。

========

实验 FTP协议分析

一、实验目的

分析FTP报文格式和FTP协议工作过程。

二、实验内容

试验主要分析FTP报文格式和FTP协议的工作过程。

三、实验环境和分组

l         三层交换机2台,标准网线4根,console线4条,计算机4台;

l         每4名同学为一组,其中每2名同学作为一个小组,每小组共同配置1台交换机。

四、实验组网

五、实验步骤

步骤 1 按照图5-9 所示连接各个试验设备正确配置PCA和PCB的IP地址。交换机的配置命令如下:

<Quidway>system

[Quidway]vlan 2

[Quidway-vlan 2]port e 0/1

[Quidway-vlan 2]port e 0/2            //在交换机上建立Vlan2并加入E0/1、E0/2端口

[Quidway-vlan 2]inter vlan 2       

[Quidway-Vlan-interface2]ip address 192.168.1.10 255.255.255.0  //配置Vlan2的IP地址

步骤 2 将交换机配置成FTP服务器,以便使用Ethereal截获报文。配置命令如下:

[Quidway]ftp server enable      //将交换机的FTP服务打开

 % Start FTP server

[Quidway]local-user user_a      //添加用户user_a

 New local user added

[Quidway-user-user_a]pass simple abc     //设定登录密码 abc

[Quidway-user-user_a]service-type ftp     //设定服务类型

步骤 3 在每台计算机上运行Ethereal,开始监测。

步骤 4 单击“开始/运行”,在“运行”框中输入cmd命令,打开命令行窗口。

步骤 5 在命令行窗口中,登录FTP服务器,根据步骤2中的配置信息输入用户名和密码。参考命令如下:

C:/>ftp                     //打开FTP

ftp> open 192.168.1.10        // 登录服务器

User(192.168.1.10:none)):user_a       //输入用户名

Password:                       //输入用户密码,密码不显示

如果在超级终端上出现如下内容:

%Sep 25 20:01:54 2003 Quidway FTPS/5/USERIN:Slot=1;User user_a(192.168.1.22)login succeeded

证明登录成功。

步骤 6 在命令行窗口中,查看FTP服务器文件夹中的内容。命令:

//执行上面命令后。看到了多少文件?填入试验报告中。

ftp>dir

答:以下为输出结果:从中可以看到有2个文件。

200 Port command okay.

150 Opening ASCII mode data connection for *.

-rwxrwxrwx   1 noone    nogroup   3483804 Nov 22  2003 S3526-S3526FM-S3526FS-VRP

310-0012.app

-rwxrwxrwx   1 noone    nogroup         4 Dec 27 15:15 snmpboots

226 Transfer complete.

ftp: 160 bytes received in 0.00Seconds 160000.00Kbytes/sec.

步骤 7 在命令行窗口中,退出FTP程序。命令:

ftp> quit

这时,在超级终端上出现如下内容:

 %Sep 25 20:03:48 2003 Quidway FTPS/5/USEROUT:Slot=1;User user_a(192.168.1.22)left

证明用户user_a已经退出。

步骤 8 停止Ethereal截获报文,分析已经截获的报文。

(1)               将截获的报文命名为FTP-学号,并上传到FTP服务器的“网络试验/应用层试验”目录下。

(2)               分析FTP报文的格式。指出在截获的报文中含有用户名的报文序号,以及含有密码信息的报文。

答:在截获的报文中含有用户名的报文序号为137,含有密码信息的报文序号为140。

(3)               对截获的报文进行综合分析,观察FTP协议的工作过程,分析控制连接和数据连接是如何工作的。

答:先是FTP 服务器准备完毕,用户输入用户名和密码后等待服务器回应。回应后,服务器允许用户登陆进行数据操作。之后用户退出

服务器,服务器关闭。

六、实验总结

        通过本次试验,我初步分析了FTP报文格式和FTP协议的工作过程。在通过FTP协议进行数据传输时,必须先建立控制连接,再建

立数据连接,明白了其中的过程。

思考:ftp是属于应用层的协议,它用到的是哪个端口?网络层给它提供了什么样的服务?(协议是水平的,服务是垂直的)。你能从你

捕获到的数据包中分析出tcp建立链接、释放链接的过程吗?

========