⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rfc959(china).txt

📁 本程序为在linux下实现FTP传输文件的实现
💻 TXT
📖 第 1 页 / 共 3 页
字号:
获得文件(RETR)此命令使服务器DTP传送指定路径内的文件复本到服务器或用户DTP。这边服务器上文件的状态和内容不受影响。保存(STOR)此命令使服务器DTP接收数据连接上传送过来的数据,并将数据保存在服务器的文件中。如果文件已存在,原文件将被覆盖。如果文件不存在,则新建文件。唯一保存(STOU)此命令和STOR差不多,此命令要求在此目录下的文件名是唯一的,对此命令的响应必须包括产生的用户名。附加(APPE)它和STOR的功能差不多,但是如果文件在指定路径内已存在,则把数据附加到原文件尾部,如果不存在则新建文件。分配(ALLO)此命令用于在一些主机上为新传送的文件分配足够的存储空间。参数是十进制的逻辑字节数。如果是记录或页结构,页或记录的最大大小也需要,这在第二个参数内以十进制指定。第二个参数是可选的,如果有它,它和第一个参数以Telnet字符<SP> R <SP>分隔。此命令在STOR或APPE命令后,对于不需要分配存储空间的机器,它的作用等于NOOP。重新开始(REST)参数域代表服务器要重新开始的那一点,此命令并不传送文件,而是略过指定点后的数据,此命令后应该跟其它要求文件传输的FTP命令。重命名(RNFR)这个命令和我们在其它操作系统中使用的一样,只不过后面要跟"rename to"指定新的文件名。重命名为(RNTO)此命令和上面的命令共同完成对文件的重命名。放弃(ABOR)此命令通知服务中止以前的FTP命令和与之相关的数据传送。如果先前的操作已经完成,则没有动作,返回226。如果没有完成,返回426,然后再返回226。关闭控制连接,数据连接不关闭。删除(DELE)此命令删除指定路径下的文件。用户进程负责对删除的提示。删除目录(RMD)此命令删除目录。创建目录(MKD)此命令在指定路径下创建新目录。打印工作目录(PWD)在响应是返回当前工作目录。列表(LIST)服务器传送列表到被动DTP,如果路径指定一个目录或许多文件,返回指定路径下的文件列表。如果路径名指定一个文件,服务器返回文件的当前信息,参数为空表示用户当前的工作目录或默认目录。数据传输在ASCII或EBCDIC下进行,用户必须确认这一点。因为文件信息因系统不同而不同,所以不可能被程序自动利用,但是人类用户却很需要。名字列表(NLST)服务器传送目录表名到用户,路径名应指定目录或其它系统指定的文件群描述子;空参数指当前目录。服务器返回文件名数据流,以ASCII或EBCDIC形式传送,并以<CRLF>或<NL>分隔。这里返回的信息有时可以供程序进行进一步处理。站点参数(SITE)服务器用来提供服务器系统信息,信息因系统不同而不同,格式在HELP SITE命令应答中给出。系统(SYST)用于确定服务器上运行的操作系统。状态(STAT)此命令返回控制连接状态,它可以在文件传送过程中发送,服务器返回操作进行的状态。也可以在文件传送之间发送,这时命令有参数,参数是路径名,此命令的功能除了数据在控制连接上传送以外和列表命令相似。如果指定部分路径,服务器以文件名或与说明相关的属性返回;如没有参数,服务器返回服务器FTP进程的状态信息,包括传输参数的当前值和连接状态。帮助(HELP)这条命令我们在平常系统中得到的帮助没有什么区别,响应类型是211或214。建议在使用USER命令前使用此命令。等待(NOOP)此命令不产生什么实际动作,它仅使服务器返回OK。FTP在控制连接上使用Telnet通信,因此有机会大家可以看看相关的协议说明。对下文的理解会很有好处。下面内容将对命令的应答和关于命令的详细信息作以说明。FTP命令可分为访问控制标记,数据传输参数或FTP服务请求,特定的命令(如ABOR,STAT)可以在数据传输过程中在控制连接上传输。有些服务器不能同时监视数据和控制链路,那就要另外采取措施了。请注意下面的几点建议:1. 用户系统将Telnet的"Interrupt Process"(IP)信息插入Telnet流;2. 用户系统发送Telnet的"Synch"信号;3. 用户系统将命令(如ABOR)插入Telnet流;4. 服务器PI在接收到IP后,在Telnet流中寻找仅有一个的FTP命令。4.2. FTP应答FTP命令的响应是为了对数据传输请求和过程进行同步,也是为了让用户了解服务器的状态。每个命令必须有最少一个响应,如果是多个,它们要易于区别。有些命令是有顺序性的,因此其中任何一个命令的失败会导致从头开始。FTP响应由三个数字构成,后面是一些文本。数字带有足够的信息命名用户PI不用检查文本就知道发生了什么。文本信息与服务器相关,用户可能得到不同的文本信息。文本和数字以<SP>间隔,文本后以Telnet行结束符结束。文本可能多于一行,这时文本必须在括号内,第一行内要有信息表示文本多于一行,最后一行也要有所标记。如果是多行,可以在数字代码后加上"-",最后一行以数字开始,后面是<SP>,再加上Telnet的行结束符就可以了。下面是一个例子:123-第一行第二行234 以数字开始的一行123 最后一行三位数字每位都有一定的意义,第一位确定响应是好的,坏的还是不完全的,通过检查第一位,用户进程通常就能够知道大致要采取什么行动了。如果用户程序希望了解出了什么问题,可以检查第二位,第三位留表示其它信息。第一位有五个值:1yz 确定预备应答请求的操作正在被初始化;在进入下一个命令前等待另外的应答。这类响应用于说明命令被接受,在实现中如何同步监视有困难,用户进程现在可以关注数据连接了。服务器FTP进程对第个命令几乎都返回1yz响应。2yz 确定完成应答要求的操作已经完成,可以执行新命令。3yz 确定中间应答命令已接受,但要求的操作被停止,停止接收更新的信息。4yz 暂时拒绝完成应答未接受命令,要求的操作未执行,但错误是临时的,过一会儿可以再次发送消息。用户应该返回命令序列的开始。这个暂时可是不好确定,此命令的意思就是让用户进程再次尝试使用此命令。5yz 永远拒绝完成应答它与暂时拒绝完成应答的区别就在于错误条件是一时半会不会消失。下面我们来看看第二位所代表的意义:x0z 格式错误;x1z 此类应答是为了请求信息的;x2z 此类应答是关于控制和数据连接的;x3z 关于认证和帐户登录过程;x4z 未使用;x5z 此类应答是关于文件系统的;第三个数字是在第二个数字的基础上对应答内容的进一步细化。一般来说,数字代码后要有文本信息。实现时应该尽量使用现有的代码,而不要随便添加新的意义不大的代码。有些命令如TYPE或ALLO,它们的成功不为用户进程提供任务新信息,所以不会有200应答返回。如果有些命令对于服务器来说不支持,也要返回确定完成应答,这样用户进程才有可能进行下面的命令。如果要求的不是可选实现的命令,而这个命令确实没有实现,那就要返回代码502。下面我们根据数字顺序列出各个应答码及其意义:110重新启动标记应答。在这种情况下文本是确定的,它必须是:MARK yyyy=mmmm,其中yyyy是用户进程数据流标记,mmmm是服务器标记。120服务在nnn分钟内准备好125数据连接已打开,准备传送150文件状态良好,打开数据连接200命令成功202命令未实现211系统状态或系统帮助响应212目录状态213文件状态214帮助信息,信息仅对人类用户有用215名字系统类型220对新用户服务准备好221服务关闭控制连接,可以退出登录225数据连接打开,无传输正在进行226关闭数据连接,请求的文件操作成功227进入被动模式230用户登录250请求的文件操作完成257创建"PATHNAME"331用户名正确,需要口令332登录时需要帐户信息350请求的文件操作需要进一步命令421不能提供服务,关闭控制连接425不能打开数据连接426关闭连接,中止传输450请求的文件操作未执行451中止请求的操作:有本地错误452未执行请求的操作:系统存储空间不足500格式错误,命令不可识别501参数语法错误502命令未实现503命令顺序错误504此参数下的命令功能未实现530未登录532存储文件需要帐户信息550未执行请求的操作551请求操作中止:页类型未知552请求的文件操作中止,存储分配溢出553未执行请求的操作:文件名不合法5. 说明5.1. 最小实现下面是FTP服务器的最小实现:类型 - ASCII Non-print模式 - Stream结构 - File, Record命令 - USER, QUIT, PORT,TYPE, MODE, STRU,RETR, STOR,NOOP.传输的默认参数为:类型 - ASCII Non-print模式 - Stream结构 - File所有主机都将上面的值作为默认值。5.2. 连接服务器协议解释器会在端口L侦听,用户或用户协议解释器初始化全双工控制连接,服务器和用户进程应该遵守Telnet协议的说明进行。服务器不提供对命令行的编辑功能,应该由用户负责这一切。在全部传送和应答结束后,在用户的请求下服务器关闭控制连接。用户DTP必须在指定的数据端口上侦听,它可以是默认端口U或由PORT命令指定的端口。服务器的默认数据端口为L-1。传输方向和端口均可由FTP命令决定。只有用户PI可以改变默认端口。当数据在服务器A和B之间传送时,用户PI,C,在两个服务器PI之间建立控制连接。其中一个服务器A,在接收到传输服务命令时接收PASV命令初始化连接,用户PI接收到PASV命令的确认时(确认内包括主机标识和端口),将端口以PORT命令发送到B。在接收到确认后,用户PI可以发送相应的命令给A和B了,B初始连接和传输进程,命令应答序列如下面所示,请根据位置注意时差:在任何时间,服务器和用户只要有一方关闭连接,另一方就要赶快读取缓冲中的数据,然后也关闭本方的连接。5.3. 命令本节主要讨论命令格式。命令对大小写不敏感。命令通常由命令码和相应的参数组成。中间由一个或几个空格分开。参数域由<CRLF>结束,服务器在未接收到行结束符时不会采取任何动作。下面描述的格式是以NVT-ASCII以准的,方括号代表可选的参数域,如果未选择可选的参数域则采用默认值。5.3.1. FTP命令下面是FTP命令,其中username代表用户名,password代表口令,pathname代表路径名,host-port代表主机端口,account-information代表帐户信息,typecode代表类型代码,decimal-integer代表十进制整数,marker代表标记,string代表字符串:USER <SP> <username> <CRLF>PASS <SP> <password> <CRLF>ACCT <SP> <account-information> <CRLF>CWD <SP> <pathname> <CRLF>CDUP <CRLF>SMNT <SP> <pathname> <CRLF>QUIT <CRLF>REIN <CRLF>PORT <SP> <host-port> <CRLF>PASV <CRLF>TYPE <SP> <type-code> <CRLF>STRU <SP> <structure-code> <CRLF>MODE <SP> <mode-code> <CRLF>RETR <SP> <pathname> <CRLF>STOR <SP> <pathname> <CRLF>STOU <CRLF>APPE <SP> <pathname> <CRLF>ALLO <SP> <decimal-integer>[<SP> R <SP> <decimal-integer>] <CRLF>REST <SP> <marker> <CRLF>RNFR <SP> <pathname> <CRLF>RNTO <SP> <pathname> <CRLF>ABOR <CRLF>DELE <SP> <pathname> <CRLF>RMD <SP> <pathname> <CRLF>MKD <SP> <pathname> <CRLF>PWD <CRLF>LIST [<SP> <pathname>] <CRLF>NLST [<SP> <pathname>] <CRLF>SITE <SP> <string> <CRLF>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -