当前位置:首页 » 文件管理 » ftprein

ftprein

发布时间: 2022-08-15 18:02:02

㈠ 如何异步读取ftp

一:开发背景
由于需要对多个服务器发布大的数据包,所以自己在linux用C语言,开发了一个传送器工具。因为上传时需要支持断点续传,所以自己参考ftp-rfc959和一些文章开发了这个支持断点续传的上传工具。整个工具分两部分开发的:一是支持断点续传的Ftp工具,包含下载和上传功能。二是同时对多个服务器发布不同数据包的传送器工具。本文只是对断点续传的商船和下载作探讨。

二:实现
其实Ftp上传下载的实现很简单,首先Ftp服务器端要支持文件的定位,
然后就是通过建立的Socket用Ftp服务器命令和服务器交互.
有些也可以通过Socket做自己的客户端和服务器端,但是有些服务器是自己能管理控制的,而且原来自己也写过一些这样C/S模式的工具,简单消息的传送接收还不错。
但用来传输文件效率很低,比文件传送协议FTP(File Transfer Protocol)差的太多。 利用Ftp的服务端可以省去服务器端的开发,而且可以向任何开放Ftp服务的服务器上传送文件,可以不考虑对方安装的
是什么的操作系统。

三:FTP
文件传送协议 FTP 只提供文件传送的一些基本的服务,它使用 TCP 可靠的运输服务。FTP 的主要功能是减少或消除在不同操作系统下处理文件的不兼容性。
FTP 使用客户服务器方式。
一个 FTP 服务器进程可同时为多个客户进程提供服务。FTP的服务器进程由两大部分组成:一个主进程,负责接受新的请求;另外有若干个从属进程,负责处理单个请求。
A、通常的方式:
控制连接在整个会话期间一直保持打开,FTP 客户所发出的传送请求通过控制连接发送给控制进程,但控制连接并不用来传送文件,实际用于传输文件的是“数据连接”。
控制进程在接收到 FTP 客户发送来的文件传输请求后就创建一个“数据传送进程”和一个“数据连接”,并将数据连接连接到“数据传送进程”,数据传送进程实际完成文件的传送,在传送完毕后关闭“数据传送连接”并结束运行
当客户进程向服务器进程发出建立连接请求时,要寻找连接服务器进程的熟知端口(21),同时还要告诉服务器进程自己的另一个端口号码,用于建立数据传送连接。接着,服务器进程用自己传送数据的熟知端口(20)与客户进程所提供的端口号码建立数据传送连接。

B、 被动模式:
FTP客户端发出的连接请求,一般通过服务器的21号端口建立控制连接,专门用来传输一些字符串命令和响应信息。控制命令通道一定是由客户端向服务器的连接(默认的端口是21,也可以指定端口,这要看服务器的设置)。
PASV:通过控制通道通过发送PASV 服务器命令到 FTP服务器。请求建立被动模式数据连接通道。 (客户端的命令 passive)
服务器返回连接的信息(227 Entering Passive Mode (70,0,10,62,120,18) )地址和端口。端口=最后第二位乘256再加上最后一位(120*256+18)。(注意端口设为0的情况) 如: *f_port = atoi(port_1) * 256 + atoi(port_2);
服务器端和客户端身份转换,原客户端在本地建立监听,监听来自原服务器远端的连接请求建立数据连接通道。
四、 实现方法:
A、下载:
1、向服务器发送“REST + 本地文件长度”,告诉服务器,客户端要断点下载了。这时服务器还不知道客户端要下载的文件名;
2、向服务器发送"RETR + 文件名",通知服务器要下载的文件名,这时服务器开始定位文件指针读文件并发送数据。
3、客户端定位本地文件指针偏移到文件末尾;
4、两端的准备工作都做完了以后,客户端创建socket,以被动或非被动方式建立数据链接,循环调用recv接收文件数据并追加到本地文件末尾;

B、上传:
1、获取服务器上和本地要上传文件的同名文件大小;
2、向服务器发送“APPE + 文件名”,通知服务器,从数据通道发送给你的数据要附加到这个文件末尾。
3、定位本地文件指针,文件指针偏移到指定位置,这个位置与FTP服务器上文件大小相同的位置。
4、从文件指针处读数据并发送。

C、Ftp服务器命令
我们平时使用的命令,大多是客户端的。服务器端的命令可以参考下面:
命令 描述
ABOR 中断数据连接程序 ACCT <account> 系统特权帐号
ALLO <bytes> 为服务器上的文件存储器分配字节 APPE <filename> 添加文件到服务器同名文件
CDUP <dir path> 改变服务器上的父目录 CWD <dir path> 改变服务器上的工作目录
DELE <filename> 删除服务器上的指定文件 HELP <command> 返回指定命令信息 LIST <name> 如果是文件名列出文件信息,如果是目录则列出文件列表 MODE <mode> 传输模式(S=流模式,B=块模式,C=压缩模式)
MKD <directory> 在服务器上建立指定目录 NLST <directory> 列出指定目录内容
NOOP 无动作,除了来自服务器上的承认 PASS <password> 系统登录密码
PASV 请求服务器等待数据连接 PORT <address> IP 地址和两字节的端口 ID PWD 显示当前工作目录 QUIT 从 FTP 服务器上退出登录
REIN 重新初始化登录状态连接 REST <offset> 由特定偏移量重启文件传递
RETR <filename> 从服务器上找回(复制)文件 RMD <directory> 在服务器上删除指定目录
RNFR <old path> 对旧路径重命名 RNTO <new path> 对新路径重命名
SITE <params> 由服务器提供的站点特殊参数 SMNT <pathname> 挂载指定文件结构
STAT <directory> 在当前程序或目录上返回信息 STOR <filename> 储存(复制)文件到服务器上
STOU <filename> 储存文件到服务器名称上 STRU <type> 数据结构(F=文件,R=记录,P=页面)
SYST 返回服务器使用的操作系统 TYPE <data type> 数据类型(A=ASCII,E=EBCDIC,I=binary)
USER <username>> 系统登录的用户名
D、服务器返回的部分数字代码含义
125 Data connection already open; Transfer starting.
226 Transfer complete.
227 Entering Passive Mode (127,0,0,1,4,18).
230 User xxxxx logged in.
331 Password required for xxxxx.
425 Can’t open data connection.
226 Closing data connection.
200 return a state of TYPE or MODE commond
220 connection state
五、关于Socket
关于Socket编程有很多参考资料,这里不作详细说明
Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口
Socket 是一个基本的通信机制Socket把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议.
Socket也具有一个类似于打开文件的函数调用Socket(),该函数返回一个整型的Socket描述符,随后的连接建立、数据传输等操作都是通过该Socket实现的。
常用的Socket类型有两种:
A、流式Socket(SOCK_STREAM):流式是一种面向连接的Socket,针对于面向连接的TCP服务应用。
B、数据报式Socket(SOCK_DGRAM):数据报式Socket是一种无连接的Socket,对应于无连接的UDP服务应用。
Socket的程序是一种C/S结构,分客户端和服务器端。
A、客户端
– 初始化Socket
– 连接服务器(connect),如果连接成功,这时客户端与服务器端的连接就建立了
– 客户端发送数据请求,服务器端接收请求并处理请求,然后把回应数据发送给客户端
– 客户端读取数据,最后关闭连接,一次交互结束。
B、服务器端
- 初始化Socket
- 端口绑定(bind)
- 监听(listen)端口
- 调用accept阻塞,等待客户端连接
在这里我们使用的就是面向连接的流式Socket,只编写客户端的程序。

六、代码:
下面仅提供一个编译过并在使用中的函数简单的说明其实现原理,
需要有一点C语言和Linux/UNIX的socket编程基础即可理解。
只是建立连接和传输部分的一个函数。当文件传出结束或断开时,
可以调用检查函数看是否成功,字节是否正常等,如果不正常结束,
可以再次循环调用它并定为服务器文件的字节,继续传输。
其他的控制和功能都在其他函数中实现。为移植方便使用标准C语法符合C89标准。
code:
/*****************************************************************
* FileName: uftt_ver5.c *
* Company: algorithmics china lib Co.,Ltd. *
* Author: G.L.Zhang --- zglcl008 *
* Time: [2006-12-20] *
* Description: uninterrupted file transfers tools *
*****************************************************************/

int f_file_trans(const char *ft_addr, int ft_port, const char *ft_usr,const char *ft_pwd, const char *ft_opt, const char *ft_src, char *ft_obj, int ft_flg)
{
int cmd_sock = -1;
int dat_sock = -1;
int stream_sock= -1;
int dat_port = 0;
char dat_buffer[1024*5];
struct sockaddr_in f_server;
struct sockaddr_in f_datasvr;
unsigned char *pasv_ip = NULL;
unsigned char *pasv_port = NULL;
unsigned int len_addr = 0;
long rc_size = 0;
/* long svr_file_size = 0; */
long file_size = 0;
int rc = 0;
if (ft_addr == NULL || ft_usr == NULLft_pwd == NULL ||
ft_opt == NULL || ft_src == NULL || ft_obj == NULL ||
ft_port == 0 || ft_flg < 0) {
err_quit("--- file transfers parameter error");
}
/* get ftp commomd socket */
if ((cmd_sock = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
perror("cmmond socket");
err_quit("--- command sock error");
}

bzero(&f_server, sizeof(f_server));
f_server.sin_family = AF_INET;
f_server.sin_port = htons(ft_port);
f_server.sin_addr.s_addr = inet_addr(ft_addr);

if (connect(cmd_sock, (struct sockaddr *)&f_server, sizeof(f_server)) < 0) {
perror("connect");
err_quit("--- command sock error");
}
rc = uftt_cmd(dat_buffer, cmd_sock, NULL);
if (rc == 220)
printf("-1- %d OK\n", rc);
else
printf("-1- %d ERR\n", rc);

rc = uftt_cmd(dat_buffer, cmd_sock,"USER %s",ft_usr);
if (rc == 331)
printf("-2- %d OK\n", rc);
else
printf("-3- %d ERR\n", rc);
rc = uftt_cmd(dat_buffer, cmd_sock,"PASS %s",ft_pwd);
if (rc == 230)
printf("-3- %d OK\n", rc);
else
printf("-3- %d ERR\n", rc);
rc = uftt_cmd(dat_buffer, cmd_sock, "TYPE I");
if (rc == 200)
printf("-41- %d OK\n", rc);
else
printf("-41- %d ERR\n", rc);
rc = uftt_cmd(dat_buffer, cmd_sock, "MODE S");
if (rc == 200)
printf("-42- %d OK\n", rc);
else
printf("-42- %d ERR\n", rc);

memset(dat_buffer, ''\0'', sizeof(dat_buffer));
rc = uftt_cmd(dat_buffer, cmd_sock, "PASV");
if (rc == 227)
printf("-5- %d OK\n", rc);
else
printf("-5- %d ERR\n", rc);
#ifdef ZGL_DEBUG
printf("-5- %d %s\n", rc, dat_buffer);
#endif
/* get passive port */
dat_port = 0;
if ((rc = get_svr_port(dat_buffer, (int *)&dat_port)) < 0)
err_quit("data stream port error");
#ifdef ZGL_DEBUG
printf("--- pasive port=[%d]\n", dat_port);
#endif
if ((dat_sock = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
perror("data socket");
err_quit("--- data sock error");
}
len_addr = sizeof(f_datasvr);
bzero(&f_datasvr, sizeof(f_datasvr));
rc = getsockname(cmd_sock, (struct sockaddr *)&f_datasvr, (unsigned int *)&len_addr);
f_datasvr.sin_port = htons(dat_port);
/* 0=all port or appoint port TEST OK ***
f_datasvr.sin_port = htons(dat_port);
f_datasvr.sin_port = 0;
*/
if (bind(dat_sock,(struct sockaddr *)&f_datasvr,len_addr) == -1)
err_sys("--- data sock bind error");
if (listen(dat_sock,1) == -1)
err_sys("--- data sock bind error");
rc = getsockname(dat_sock, (struct sockaddr *)&f_datasvr, (unsigned int *)&len_addr);
pasv_ip = (unsigned char *)&f_datasvr.sin_addr;
pasv_port = (unsigned char *)&f_datasvr.sin_port;
rc = uftt_cmd(dat_buffer, cmd_sock,"PORT %d,%d,%d,%d,%d,%d",pasv_ip[0],
pasv_ip[1], pasv_ip[2], pasv_ip[3], pasv_port[0], pasv_port[1]);
if (rc == 200)
printf("-6- %d OK\n", rc);
else
printf("-6- %d ERR\n", rc);

/* get RETR put STOR append APPE */
if (ft_flg == 0) {
rc = uftt_cmd(dat_buffer, cmd_sock, "STOR %s", ft_obj);
}
else if (ft_flg > 0){
rc = uftt_cmd(dat_buffer, cmd_sock, "APPE %s", ft_obj);
}
if (rc == 150)
printf("-7- %d OK\n", rc);
else
printf("-7- %d ERR\n", rc);
stream_sock = accept(dat_sock, (struct sockaddr *)&f_datasvr, (unsigned int *)&len_addr);
if (stream_sock < 0)
err_sys("--- stream socket error");
rc_size = f_put_file(stream_sock, ft_src, ft_obj, ft_flg, file_size);
/* do without ***
rc = uftt_cmd(dat_buffer, dat_sock,"QUIT");
printf("-8- %d \n", rc);
*/
close(stream_sock);
close(dat_sock);
rc = uftt_cmd(dat_buffer, cmd_sock,"QUIT");
if (rc == 226)
printf("-9- %d OK\n", rc);
else
printf("-9- %d ERR\n", rc);
close(cmd_sock);
return rc_size ;
}

㈡ ftp的解读

、什么是FTP:文件传输协议原理

互联网文件传输协议(File Transfer Protocol ,FTP) 标准是在RFC959说明的。该协议定义了一个从远程计算机系统和本地计算机系统之间传输文件的一个标准。一般来说,传输文件的用户需要先经过认证以后才能登录网站,然后方能访问在远程服务器的文件。而大多数的FTP服务器往往提供一个GUEST的公共帐户来允许没有远程服务器的用户可以访问该FTP服务器。

一个FTP会话通常包括五个软件元素的交互。

用户接口 提供了一个用户接口并使用客户端协议解释器的服务
客户 PI 客户协议解释器,其项远程服务器协议机发送命令并且驱动客户数据传输过程
服务器PI 服务器协议解释器,响应客户协议机发出的命令并驱动服务器端数据传输过程
客户 DTP 客户数据传输过程,其负责完成和服务器数据传输过程及客户端本地文件系统的通信
服务DTP 服务器数据传输过程,其负责完成和客户数据传输过程及服务器端文件系统的通信

在RFC 959中,一般使用用户这个名词来指代客户。RFC 959定义了客户PI和服务器PI交互的方式和规范。用户接口与PI和DTP交互的机理都并不是协议标准的一部分。PI和DTP往往通常是在同一个程序模块中实现的。

在FTP会话中,一共会存在有两个独立的网络连接,一个是由两端的PI使用的,另一个是由两端的DTP使用的。PI之间的连接一般被称作控制连接(control connection),DTP之间的连接被称做数据连接(data connection)

使用TCP服务的控制和数据连接

通常情况下,FTO服务器监听端口号21来等待控制连接建立请求。而数据连接端口号的选择依赖于控制连接上命令。通常是客户发送一个控制消息来指定客户监听并等待服务器端发送数据连接建立请求的端口号。

对数据传输和控制命令传输来使用不同的独立连接有如下优点:两个连接可以选择不同的合适服务质量,如:对控制连接来说高需要更小的延迟时间,对数据连接来说需要更大的数据吞吐量;而且可以避免实现数据流中的命令的通明性及逃逸。

当传输建立时,总是由客户端首先发起。然而客户和服务器都可能是数据发送者。除了传输用户请求下载文件,数据传输过程同样在客户端请求列服务器端目录结构时建立。

1.命令选择

当一个传输建立时,一般通常需要指定四个方面的属性:

文件类型
该属性指定如何将文件的数据匹配成适于传输的格式,一共有四种可能的选择:

ASCII文件类型
在发送端,文件从本地文本文件格式转换为 NVT ASCII格式,每行结束有一个CR/LF对来标识。 在接收端,再被转换为本地的文本格式。

这说明了为什么Unix主机之间传输文本文件为何传输的数据量要大于文件的实际大小。若传输一段端或传输两端都不使用ASCII文本编码,则是应该由数据传输过程来实现本地编码和NVT ASCII 编码之间的转换。

EBCDIC文件类型
类似于ASCII,区别仅仅上使用EBCDIC字符编码

图象 (或二进制)文件类型
文件以本地传输内容传输,在远端以同本地完全相同的内容存储。

本地文件系统
用在字节大小不是8位的环境下。没字节位数由发送者指定。

在实际应用中,只有ASCII和图象格式使用的较多。

格式控制
该属性是和将文本文件最后传送到打印设备相关的,其中有多种方式来实现将垂直格式信息编码到文件中,包括指示一个新页开始的方式。有如下方式可供选择:

无须打印格式控制,这是缺省值
Telnet打印控制,在telnet协议中定义的控制字符包含在数据流中。.
Fortran打印控制,
该属性在实际中很少使用。

结构
文件可以拥有内部结构,在传输中该结构被保留。由数据传输过程来负责在传输中的结构及本地结构之间相互匹配,有三种可能性:

文件结构
这实际上意味着文件被看作没有内部结构的连续的字节流。

记录结构
文件是有一系列记录组成的结构。这只适用于文本文件。

页面结构
也可以称做块结构。每一页都伴随一个页号来传输,从而以顺序的方式来完成传输。

页面结构很少在实际中遇到。记录结构也不是很常见。对于文本文件使用ASCII文件类型可以获得相同的效果。

传输模式
该属性可以取三个不同的值:

流模式
文件的以字节流的方式传输。

块模式
文件以一个块连接一个块的方式传输,每个块的开头都有一个头。

压缩模式
一个简单的运程长度压缩编码被应用,来压缩连续的相同的字节。

实际中,一般只有流模式被使用。而压缩一般通过使用各种其他的工具程序来获得。

当一次传输被建立,客户端一般指定一个或多个前面说明的属性。若服务器端不能支持某个选项,服务器将用一个错误信息来响应客户端,并不具有协商机制。

FTP提供了充足的命令来使用户和远程建立连接并访问远程文件系统。

2.命令格式

命令以NVT ASCII串的格式被传输。每个命令以三个或四个大写的NVT ASCII字符开始,后面带有选项参数和一个CR/LF对来标识命令结束

应答由三个NVT ASCII数字及一个选项消息组成。

一个长的应答也许会有多个消息组成,第一个消息的三个数字后带有一个破折号,最后的消息不带有破折号。中间的消息无须携带三个数字,但是如果带了三个数字,则也需要破折号。

下面是所有的命令的列表。带有星号的命令一般很少使用,所以往往在具体实现中不支持。

String Meaning
ABOR 放弃传输
*ACCT 某些系统将帐号和用户与文件系统相关联
*ALLO 为即将传送的文件分配空间。后面携带的参数来确定字节数
*APPE 将文件附加到已经存在的文件后面
CDUP 在远程系统上将当前目录切换到上级父目录
CWD 改变远程系统的工作目录
DELE 删除远程系统的文件
HELP 读取服务器的帮助信息,如:支持的命令的列表
LIST 在一个新建立的数据连接上发送当前工作目录下的文件名列表
MKD 创建目录
MODE 指定传输模式,可携带的参数是:S、B或 C.
NLST 在一个新建立的数据连接上发送一个当前目录下的“完全”的目录列表
NOOP 空操作,防止连接断掉
PASS 提供一个用户登录密码,必须立即跟随在USER命令后
*PASV 指定服务器数据传输过程监听等待客户端的数据连接连接建立请求
PORT 指定客户端监听等待服务器端建立的连接的端口号
PWD 显示服务器端的当前工作目录名
QUIT 退出登录并终止连接
*REIN 重新初始化,退出登录但是并不断开连接,后面必须随后发出一个新的USER命令
*REST 从服务器的一个标识处重新开始传输
RETR 从远程系统取回一个文件
RMD 删除一个目录
*RNFR 指定要被命名的文件的老的路径名,随后必须是一个RNTO命令
*RNTO 指定要被命名的文件的新的路径名
*SITE 站点特有的服务器提供的服务
*SMNT 结构加载,提供一个文件系统结构的远程系统路径名
*STAT 状态信息
STOR 上载一个文件到服务器上,若文件已经存在则覆盖
*STOU 上载一个文件到服务器上,不覆盖已经存在的文件
STRU 指定文件结构,参数可以是F、R或P.
*SYST 报告远程系统的操作系统类型
TYPE 指定文件类型,参数可以是A、E、I、L只有TYPE A和TYPE I常用

控制连接命令应答有如下形式:

Type Description
1yz 主动初步应答,在发送另一个命令以前等待另一个应答
2yz 主动最后应答,最后一个命令成功结束
3yz 主动中间应答,必须再发送一个命令
4yz 暂时被动应答,要求的动作当时不能完成,但可以重试
5yz 永久被动应答,要求的动作不能完成,不应该重试

"y"数字编码进一步的信息

Digit Meaning
0 语法错误
1 信息
2 连接状态
3 认证和记帐
4 保留
5 File s文件系统状态

下面是一些典型的消息:

Number Meaning
125 数据连接打开,传输开始
200 命令OK
331 用户名OK 需要输入密码
425 不能打开数据连接
452 错误写文件
500 语法错误-不可识别的命

具体的详细情况可以参见RFC

㈢ 请教FTP命令

带有星号的命令一般很少使用,所以往往在具体实现中不支持。

ABOR 放弃传输

*ACCT 某些系统将帐号和用户与文件系统相关联

*ALLO 为即将传送的文件分配空间。后面携带的参数来确定字节数

*APPE 将文件附加到已经存在的文件后面

CDUP 在远程系统上将当前目录切换到上级父目录

CWD 改变远程系统的工作目录

DELE 删除远程系统的文件

HELP 读取服务器的帮助信息,如:支持的命令的列表

LIST 在一个新建立的数据连接上发送当前工作目录下的文件名列表

MKD 创建目录

MODE 指定传输模式,可携带的参数是:S、B或 C.

NLST 在一个新建立的数据连接上发送一个当前目录下的“完全”的目录列表

NOOP 空操作,防止连接断掉

PASS 提供一个用户登录密码,必须立即跟随在USER命令后

*PASV 指定服务器数据传输过程监听等待客户端的数据连接连接建立请求

PORT 指定客户端监听等待服务器端建立的连接的端口号

PWD 显示服务器端的当前工作目录名

QUIT 退出登录并终止连接

*REIN 重新初始化,退出登录但是并不断开连接,后面必须随后发出一个新的USER命令

*REST 从服务器的一个标识处重新开始传输

RETR 从远程系统取回一个文件

RMD 删除一个目录

*RNFR 指定要被命名的文件的老的路径名,随后必须是一个RNTO命令

*RNTO 指定要被命名的文件的新的路径名

*SITE 站点特有的服务器提供的服务

*SMNT 结构加载,提供一个文件系统结构的远程系统路径名

*STAT 状态信息

STOR 上载一个文件到服务器上,若文件已经存在则覆盖

*STOU 上载一个文件到服务器上,不覆盖已经存在的文件

STRU 指定文件结构,参数可以是F、R或P.

*SYST 报告远程系统的操作系统类型

TYPE 指定文件类型,参数可以是A、E、I、L只有TYPE A和TYPE I常用

㈣ 请解释一下FTP连接的命令及响应

FTP命令
命令 描述
ABOR 中断数据连接程序
ACCT <account> 系统特权帐号
ALLO <bytes> 为服务器上的文件存储器分配字节
APPE <filename> 添加文件到服务器同名文件
CDUP <dir path> 改变服务器上的父目录
CWD <dir path> 改变服务器上的工作目录
DELE <filename> 删除服务器上的指定文件
HELP <command> 返回指定命令信息
LIST <name> 如果是文件名列出文件信息,如果是目录则列出文件列表
MODE <mode> 传输模式(S=流模式,B=块模式,C=压缩模式)
MKD <directory> 在服务器上建立指定目录
NLST <directory> 列出指定目录内容
NOOP 无动作,除了来自服务器上的承认
PASS <password> 系统登录密码
PASV 请求服务器等待数据连接
PORT <address> IP 地址和两字节的端口 ID
PWD 显示当前工作目录
QUIT 从 FTP 服务器上退出登录
REIN 重新初始化登录状态连接
REST <offset> 由特定偏移量重启文件传递
RETR <filename> 从服务器上找回(复制)文件
RMD <directory> 在服务器上删除指定目录
RNFR <old path> 对旧路径重命名
RNTO <new path> 对新路径重命名
SITE <params> 由服务器提供的站点特殊参数
SMNT <pathname> 挂载指定文件结构
STAT <directory> 在当前程序或目录上返回信息
STOR <filename> 储存(复制)文件到服务器上
STOU <filename> 储存文件到服务器名称上
STRU <type> 数据结构(F=文件,R=记录,P=页面)
SYST 返回服务器使用的操作系统
TYPE <data type> 数据类型(A=ASCII,E=EBCDIC,I=binary)
USER <username>> 系统登录的用户名

FTP响应码

响应代码 解释说明
110 新文件指示器上的重启标记
120 服务器准备就绪的时间(分钟数)
125 打开数据连接,开始传输
150 打开连接
200 成功
202 命令没有执行
211 系统状态回复
212 目录状态回复
213 文件状态回复
214 帮助信息回复
215 系统类型回复
220 服务就绪
221 退出网络
225 打开数据连接
226 结束数据连接
227 进入被动模式(IP 地址、ID 端口)
230 登录因特网
250 文件行为完成
257 路径名建立
331 要求密码
332 要求帐号
350 文件行为暂停
421 服务关闭
425 无法打开数据连接
426 结束连接
450 文件不可用
451 遇到本地错误
452 磁盘空间不足
500 无效命令
501 错误参数
502 命令没有执行
503 错误指令序列
504 无效命令参数
530 未登录网络
532 存储文件需要帐号
550 文件不可用
551 不知道的页类型
552 超过存储分配
553 文件名不允许

㈤ ftp命令中有没有删除文件夹,包括该文件夹下的文件一起删除的命令(VC)

命令 描述
ABOR 中断数据连接程序
ACCT <account> 系统特权帐号
ALLO <bytes> 为服务器上的文件存储器分配字节
APPE <filename> 添加文件到服务器同名文件
CDUP <dir path> 改变服务器上的父目录
CWD <dir path> 改变服务器上的工作目录
DELE <filename> 删除服务器上的指定文件
HELP <command> 返回指定命令信息
LIST <name> 如果是文件名列出文件信息,如果是目录则列出文件列表
MODE <mode> 传输模式(S=流模式,B=块模式,C=压缩模式)
MKD <directory> 在服务器上建立指定目录
NLST <directory> 列出指定目录内容
NOOP 无动作,除了来自服务器上的承认
PASS <password> 系统登录密码
PASV 请求服务器等待数据连接
PORT <address> IP 地址和两字节的端口 ID
PWD 显示当前工作目录
QUIT 从 FTP 服务器上退出登录
REIN 重新初始化登录状态连接
REST <offset> 由特定偏移量重启文件传递
RETR <filename> 从服务器上找回(复制)文件
RMD <directory> 在服务器上删除指定目录
RNFR <old path> 对旧路径重命名
RNTO <new path> 对新路径重命名
SITE <params> 由服务器提供的站点特殊参数
SMNT <pathname> 挂载指定文件结构
STAT <directory> 在当前程序或目录上返回信息
STOR <filename> 储存(复制)文件到服务器上
STOU <filename> 储存文件到服务器名称上
STRU <type> 数据结构(F=文件,R=记录,P=页面)
SYST 返回服务器使用的操作系统
TYPE <data type> 数据类型(A=ASCII,E=EBCDIC,I=binary)
USER <username>> 系统登录的用户名
这就是FTP协议的命令集,是有删除指令的,我们老师以前让我们自己对照着自己编写过FTP协议,删除文件时候不分文件或者文件夹的,只要路径正确就可以删除,跟你电脑上点右键删除东西一样,如果是文件夹,内部所有也都会删除的。

㈥ FTP客户端程序设计(java)

mina.apache.org 服务器端,客户端都有!开源的!

㈦ 名词解释----文件传输协议

文件传输协议(FTP)使得主机间可以共享文件。 FTP 使用 TCP 生成一个虚拟连接用于控制信息,然后再生成一个单独的 TCP 连接用于数据传输。控制连接使用类似 TELNET 协议在主机间交换命令和消息。

FTP 的主要功能如下:

提供文件的共享(计算机程序 / 数据);
支持间接使用远程计算机;
使用户不因各类主机文件存储器系统的差异而受影响;
可靠且有效的传输数据。
FTP ,尽管可以直接被终端用户使用,但其应用主要还是通过程序实现。

FTP 控制帧即指 TELNET 交换信息,包含 TELNET 命令和选项。然而,大多数 FTP 控制帧是简单的 ASCII 文本,可以分为 FTP 命令或 FTP 消息。 FTP 消息是对 FTP 命令的响应,它由带有解释文本的应答代码构成。

协议结构

命令 描述
ABOR 中断数据连接程序
ACCT <account> 系统特权帐号
ALLO <bytes> 为服务器上的文件存储器分配字节
APPE <filename> 添加文件到服务器同名文件
CDUP <dir path> 改变服务器上的父目录
CWD <dir path> 改变服务器上的工作目录
DELE <filename> 删除服务器上的指定文件
HELP <command> 返回指定命令信息
LIST <name> 如果是文件名列出文件信息,如果是目录则列出文件列表
MODE <mode> 传输模式(S=流模式,B=块模式,C=压缩模式)
MKD <directory> 在服务器上建立指定目录
NLST <directory> 列出指定目录内容
NOOP 无动作,除了来自服务器上的承认
PASS <password> 系统登录密码
PASV 请求服务器等待数据连接
PORT <address> IP 地址和两字节的端口 ID
PWD 显示当前工作目录
QUIT 从 FTP 服务器上退出登录
REIN 重新初始化登录状态连接
REST <offset> 由特定偏移量重启文件传递
RETR <filename> 从服务器上找回(复制)文件
RMD <directory> 在服务器上删除指定目录
RNFR <old path> 对旧路径重命名
RNTO <new path> 对新路径重命名
SITE <params> 由服务器提供的站点特殊参数
SMNT <pathname> 挂载指定文件结构
STAT <directory> 在当前程序或目录上返回信息
STOR <filename> 储存(复制)文件到服务器上
STOU <filename> 储存文件到服务器名称上
STRU <type> 数据结构(F=文件,R=记录,P=页面)
SYST 返回服务器使用的操作系统
TYPE <data type> 数据类型(A=ASCII,E=EBCDIC,I=binary)
USER <username>> 系统登录的用户名

标准 FTP 信息如下:

响应代码 解释说明
110 新文件指示器上的重启标记
120 服务器准备就绪的时间(分钟数)
125 打开数据连接,开始传输
150 打开连接
200 成功
202 命令没有执行
211 系统状态回复
212 目录状态回复
213 文件状态回复
214 帮助信息回复
215 系统类型回复
220 服务就绪
221 退出网络
225 打开数据连接
226 结束数据连接
227 进入被动模式(IP 地址、ID 端口)
230 登录因特网
250 文件行为完成
257 路径名建立
331 要求密码
332 要求帐号
350 文件行为暂停
421 服务关闭
425 无法打开数据连接
426 结束连接
450 文件不可用
451 遇到本地错误
452 磁盘空间不足
500 无效命令
501 错误参数
502 命令没有执行
503 错误指令序列
504 无效命令参数
530 未登录网络
532 存储文件需要帐号
550 文件不可用
551 不知道的页类型
552 超过存储分配
553 文件名不允许

㈧ redhat怎么安装ftp服务器

1、下载源码到服务器,其下载地址是 ftp://vsftpd/users/cevans/,当前的版本是vsftpd-2.0.6.tar.gz 。强烈建议使用源码安装,即可摆脱类似rpm包依赖的困惑,又可以实现在不同unix/linux下自如的工作。2、解压安装:tar zxvf vsftpd-2.0.5.tar.gz ; make; make install3、添加ftp的用户,如果用户数目不多,简单些,用系统用户吧。Useradd –d /home/sery sery ;passwd ******.4、拷贝配置文件,这里有2个。Cp vsftpd.conf /etc/vsftpd.conf ;cp Redhat/vsftpd.pam /etc/pam.d/ftp .不拷贝vsftpd.pam这个文件,将导致ftp用户不能登陆的问题。这个文件在debian下也是可以的。5、修改配置文件/etc/vsftpd.conf。这个配置文件是vsftpd的关键所在,修改下列值,以实现不同的功能:(1)修改的部分:把 local_enable=yes write_enable=yes和local_umask=022前面的注释取消。(2)增加部分:listen=YES(ftp作为独立的守护进程)chroot_local_user=yes(用户被定位在自己的主目录里,用cd / 并不能切换到根目录)cmds_allowed=ABOR,CWD,LIST,MDTM,MKD,NLST,PASS,PASV,PORT,PWD,QUIT,RETR,RMD,RNFR,RNTO,SITE,SIZE,STOR,TYPE,USER,ACCT,APPE,CDUP,HELP,MODE,NOOP,REIN,STAT,STOU,STRU,SYST(只许上传文件和目录,但不许删除。注意:这些必须一行写完)6、启动ftp服务。Vsftpd&我安装完成后,却无法运行:报错如下:500 00PS: could not bind listening IPv4 socket端口有冲突。查看下:#netstat -utl grep 21 是不是被占用还真有耶。因为是redhat9所以想到了xinetd因为xinetd已经启动了vsftpd,而vsftpd设置成了stardalone模式,所以,先停止xinetd服务, service xinetd stop ,然后:/usr/local/sbin/vsftpd &OK启动正常。改端口:在vsftpd.conf最后加:listen_port=2121取消anonymous 登入 anonymous_enable=NO老大原文提到,让用户不能切换到别的目录,需要添加一个文件:vim /etc/vsftpd/chroot_list 加入你所要限制的用户vsftpd.conf也去掉相应的注释:chroot_list_file=/etc/vsftpd/chroot_list

㈨ ftp rnfr 550 怎么办

(1) 访问命令 USER命令 格式:USER <username> 功能:指定登录的用户名,以便服务器进行身份验证。 PASS命令 格式:PASS <password> 功能:指定用户口令,该命令必须跟在登录用户名命令之后。 ACCT命令 格式:ACCT <account> 功能:指定用户账号。 REIN命令 格式:REIN 功能:表示重新初始化用户信息。 QUIT命令 格式:QUIT 功能:关闭与服务器的连接。 2) 模式设置命令 PASV命令 格式:PASV 功能:该命令告诉FTP服务器,让FTP服务器在指定的数据端口进行监听,进入被动接收请求的状态。 PORT命令 格式:PORT<address> 功能:该命令告诉FTP服务器,客户端监听的端口号是address,让FTP服务器采用主动模式连接客户端。 TYPE命令 格式:TYPE<data type> 功能:指定要传输的数据类型,有ASCII和BINARY。 MODE命令 格式:MODE<mode> 功能:指定传输模式,S表示流,B表示块,C表示压缩。

(3) 文件管理命令 CWD命令 格式:CWD <directory> 功能:改变工作目录。 PWD命令 格式:PWD 功能:返回当前工作目录。 MKD命令 格式:MKD <directory> 功能:在指定路径下创建新目录,参数为表示特定目录的字符串。 CDUP命令 格式:CDUP 功能:回到上层目录。 RMD命令 格式:RMD<directory> 功能:删除指定目录。参数为表示特定目录的字符串。 LIST命令 格式:LIST<name> 功能:返回指定路径下的子目录及文件列表,省略<路径>时,返回当前路径下的文件列表。 NLST命令 格式:NLST <directory> 功能:返回指定路径下的目录列表,省略<路径>时,返回当前目录。 RNFR命令 格式:RNFR <old path> 功能:重新命名文件,该命令的下一条命令应该用RNTO指定新的文件名。 RNTO命令 格式:RNTO<new path> 功能:该命令和RNFR命令共同完成对文件的重命名,紧跟在RNFR命令后。 DELE命令 格式:DELE<filename> 功能:删除指定路径下的文件 (4) 文件传输命令 RETR命令 格式:RETR<filename> 功能:请求服务器将指定路径内的文件复制到客户端,也即下载指定的文件。 STOR命令 格式:STOR<filename> 功能:上传一个指定的文件,并将其存储在指定的位置。 (5) 其他命令 常用的其他命令有SYST命令,该命令没有参数,它返回服务器使用的操作系统。

㈩ 在RedHat Linux上搭建ftp服务器的步骤

1、下载源码到服务器,其下载地址是 ftp://vsftpd.beasts.org/users/cevans/,当前的版本是vsftpd-2.0.6.tar.gz 。强烈建议使用源码安装,即可摆脱类似rpm包依赖的困惑,又可以实现在不同unix/linux下自如的工作。2、解压安装:tar zxvf vsftpd-2.0.5.tar.gz ; make; make install3、添加ftp的用户,如果用户数目不多,简单些,用系统用户吧。Useradd –d /home/sery sery ;passwd ******.4、拷贝配置文件,这里有2个。Cp vsftpd.conf /etc/vsftpd.conf ;cp Redhat/vsftpd.pam /etc/pam.d/ftp .不拷贝vsftpd.pam这个文件,将导致ftp用户不能登陆的问题。这个文件在debian下也是可以的。5、修改配置文件/etc/vsftpd.conf。这个配置文件是vsftpd的关键所在,修改下列值,以实现不同的功能:(1)修改的部分:把 local_enable=yes write_enable=yes和local_umask=022前面的注释取消。(2)增加部分:listen=YES(ftp作为独立的守护进程)chroot_local_user=yes(用户被定位在自己的主目录里,用cd / 并不能切换到根目录)cmds_allowed=ABOR,CWD,LIST,MDTM,MKD,NLST,PASS,PASV,PORT,PWD,QUIT,RETR,RMD,RNFR,RNTO,SITE,SIZE,STOR,TYPE,USER,ACCT,APPE,CDUP,HELP,MODE,NOOP,REIN,STAT,STOU,STRU,SYST(只许上传文件和目录,但不许删除。注意:这些必须一行写完)6、启动ftp服务。Vsftpd&我安装完成后,却无法运行:报错如下:500 00PS: could not bind listening IPv4 socket端口有冲突。查看下:#netstat -utl |grep 21 是不是被占用还真有耶。因为是redhat9所以想到了xinetd因为xinetd已经启动了vsftpd,而vsftpd设置成了stardalone模式,所以,先停止xinetd服务, service xinetd stop ,然后:/usr/local/sbin/vsftpd &OK启动正常。改端口:在vsftpd.conf最后加:listen_port=2121取消anonymous 登入 anonymous_enable=NO老大原文提到,让用户不能切换到别的目录,需要添加一个文件:vim /etc/vsftpd/chroot_list 加入你所要限制的用户vsftpd.conf也去掉相应的注释:chroot_list_file=/etc/vsftpd/chroot_list

热点内容
php旅游网站系统 发布:2024-05-07 20:27:32 浏览:610
jdk源码怎么看 发布:2024-05-07 20:18:22 浏览:519
编程c语言自学书 发布:2024-05-07 20:12:03 浏览:422
usb大容量存储驱动 发布:2024-05-07 19:02:01 浏览:815
红米1s没有存储空间 发布:2024-05-07 18:59:09 浏览:505
妖云解压密码 发布:2024-05-07 18:50:08 浏览:1002
sql语句等于怎么写 发布:2024-05-07 18:05:46 浏览:816
我的世界电脑版第三方服务器大全 发布:2024-05-07 18:00:46 浏览:627
主服务器的ip地址 发布:2024-05-07 17:58:50 浏览:546
组服务器打电脑游戏 发布:2024-05-07 17:46:19 浏览:866