FTP服务器 详解+源代码
- 格式:doc
- 大小:322.50 KB
- 文档页数:59
FTP数据包的详细分析FTP协议分析与源码阅读一、什么是FTP协议FTP(File Transfer Protocal),是文件传输协议的简称。
用于Internet上的控制文件的双向传输。
同时,它也是一个应用程序(Application)。
用户可以通过它把自己的PC机与世界各地所有运行FTP协议的服务器相连,访问服务器上的大量程序和信息。
FTP(File Transfer Protocol)1、FTP的作用:正如其名所示:FTP的主要作用,就是让用户连接上一个远程计算机(这些计算机上运行着FTP服务器程序)察看远程计算机有哪些文件,然后把文件从远程计算机上拷到本地计算机,或把本地计算机的文件送到远程计算机去。
2、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 概述文件传输协议(FTP)作为网络共享文件的传输协议,在网络应用软件中具有广泛的应用。
FTP的目标是提高文件的共享性和可靠高效地传送数据。
在传输文件时,FTP 客户端程序先与服务器建立连接,然后向服务器发送命令。
服务器收到命令后给予响应,并执行命令。
FTP 协议与操作系统无关,任何操作系统上的程序只要符合FTP 协议,就可以相互传输数据。
本文主要基于LINUX 平台,对FTP 客户端的实现原理进行详尽的解释并阐述如何使用C 语言编写一个简单的FTP 客户端。
FTP 协议相比其他协议,如HTTP 协议,FTP 协议要复杂一些。
与一般的C/S 应用不同点在于一般的C/S 应用程序一般只会建立一个Socket 连接,这个连接同时处理服务器端和客户端的连接命令和数据传输。
而FTP协议中将命令与数据分开传送的方法提高了效率。
FTP 使用2 个端口,一个数据端口和一个命令端口(也叫做控制端口)。
这两个端口一般是21 (命令端口)和20 (数据端口)。
控制Socket 用来传送命令,数据Socket 是用于传送数据。
每一个FTP 命令发送之后,FTP 服务器都会返回一个字符串,其中包括一个响应代码和一些说明信息。
其中的返回码主要是用于判断命令是否被成功执行了。
命令端口一般来说,客户端有一个Socket 用来连接FTP 服务器的相关端口,它负责FTP 命令的发送和接收返回的响应信息。
一些操作如“登录”、“改变目录”、“删除文件”,依靠这个连接发送命令就可完成。
数据端口对于有数据传输的操作,主要是显示目录列表,上传、下载文件,我们需要依靠另一个Socket来完成。
如果使用被动模式,通常服务器端会返回一个端口号。
客户端需要用另开一个Socket 来连接这个端口,然后我们可根据操作来发送命令,数据会通过新开的一个端口传输。
如果使用主动模式,通常客户端会发送一个端口号给服务器端,并在这个端口监听。
服务器需要连接到客户端开启的这个数据端口,并进行数据的传输。
毕业设计(论文)IPv6环境下FTP系统的设计与实现毕业设计(论文)中文摘要IPv6环境下FTP系统的设计与实现摘要IPv4是目前广泛使用的互联网IP技术,IPv6则是下一代的IP协议,注入了许多新的内容。
随着互联网技术的不断发展,IP协议将慢慢从IPv4过渡到IPv6。
文件传输协议是互联网上广泛使用的在远程计算机系统和本地计算机系统之间传输文件的标准。
因此,本次毕业设计研究在IPv6环境下FTP系统的设计与实现。
本设计首先阐述了IPv6的发展状况,然后介绍了IPv6协议在各流行操作系统下的安装与配置,最后按照RFC959-《标准文件传输协议》和RFC2428-《FTP对IPv6和NAT的扩展》的要求,采用支持IPv6 Socket编程的JDK5.0,实现了绝大部分的FTP传输命令,包括一个服务端与一个客户端程序,经测试,均可工作于IPv4与IPv6环境。
关键字:IPv6 FTP C/S JDK5.0毕业设计(论文)外文摘要The Design and Implement of FTP System Base on IPv6 EnvironmentAbstract: While IPv4 is widely used technique at present in the internet, IPv6 is the next generation Internet Protocol that brings many new contents. Along with the development of internet technique, transition from IPv4 to IPv6 is necessary though maybe slowly. File Transfer Protocol is widely used in internet and is the standard of transfer file between remote computer system and local computer system. Consequently, I investigate the design and implement of ftp system in IPv6 environment.This paper first expounds the development of IPv6,then introduces IPv6's installation and configuration on popular operation systems, finally according to RFC595-<FILE TRANSFER PROTOCOL> and RFC2428-<FTP Extensions for IPv6 and NATs>,with JDK5.0 which supports IPv6 socket programming, implements a majority of FTP commands. This design presents a server site and a client site, which can work on IPv4 and IPv6 environment.Keywords: IPv6;FTP;C/S;JDK5.0目录1 引言 (1)1.1 课题的研究背景与意义 (1)1.1.1 课题的研究背景 (1)1.1.2 课题的研究意义 (2)1.2 问题定义及内容简介 (2)1.2.1 问题定义 (2)1.2.2 问题的内容简介 (2)1.3 课题调研与可行性分析 (3)1.3.1 课题调研 (3)1.3.2 可行性分析 (3)1.4 论文各章内容介绍 (4)2 系统需求分析 (5)2.1 IPv6发展现状 (5)2.2 系统环境的搭建 (9)2.3 基于C/S模型的网络开发 (9)2.4 支持IPv6的Socket编程 (12)3 文件传输协议 (15)3.1 介绍 (15)3.2 概览 (15)3.3 FTP的传输模式 (16)3.4 FTP的工作方式 (16)3.5 文件传输功能 (17)3.6 说明 (21)4 FTP对IPv6和NAT的扩展 (24)4.1 介绍 (24)4.2 EPRT命令 (24)4.3 EPSV命令 (25)4.4 命令使用 (25)5 FTP服务器的实现 (27)5.1 总体设计 (27)5.2 详细设计 (27)5.2.1 主函数设计 (27)5.2.2 服务线程 (27)5.2.3 其他主要命令 (30)5.2.4 数据库设计 (33)5.2.5 界面设计 (33)5.3 服务器测试 (33)6 FTP客户端的实现 (37)6.1 方案的选择 (37)6.2 界面的设计 (37)6.3 几个重要的类 (38)6.4 实现步骤 (38)7 用户使用手册 (40)7.1 系统功能简介 (40)7.2 运行环境简介 (40)7.2.1 系统环境配置 (40)7.2.2 JDK环境变量配置 (42)7.2.3 SQL Server2000的有关配置 (42)8 系统评价 (44)8.1 系统特色/优点介绍 (44)8.2 系统存在的不足与改进方案 (44)8.2.1 系统存在的不足 (44)8.2.2 系统的改进方案 (44)结论 (45)致谢 (46)参考文献 (47)1 引言1.1 课题的研究背景与意义1.1.1 课题的研究背景现有的互联网主要是基于IPv4协议的。
FTP服务器一、下载 /二、安装[root@localhost windows]# cp vsftpd-2.0.7.tar.gz /usr/src[root@localhost windows]# cd /usr/src[root@localhost src]# tar -zxvf vsftpd-2.0.7.tar.gz[root@localhost src]# cd vsftpd-2.0.7[root@localhost vsftpd-2.0.7]# cat -n INSTALL |less 查看帮助文件。
[root@localhost vsftpd-2.0.7]# make[root@localhost vsftpd-2.0.7]# make install[root@localhost vsftpd-2.0.7]# which vsftpd三、配置服务器[root@localhost vsftpd-2.0.7]# cp vsftpd.conf /etc 将配置示例文件copy到/etc目录下。
[root@localhost vsftpd-2.0.7]# cp RedHat/vsftpd.pam /etc/pam.d/ftp pam是一个身份验证模块,可对用户身份进行验证。
[root@localhost vsftpd-2.0.7]# vi /etc/vsftpd.conflisten=YES 最后一行加入此代码,需要服务器独立运行,所以自己监听端口。
[root@localhost vsftpd-2.0.7]# /usr/local/sbin/vsftpd & 启动服务并在后台运行。
[1] 15040 --->监听编号。
[root@localhost vsftpd-2.0.7]# ps -aux|grep vsftpd 查看到PID。
[root@localhost vsftpd-2.0.7]# netstat -tnl 查看一下有没有开放21的端口。
rem setlocal批处理中所作的环境更改只影响本批处理。
前面加@的作用,不显示此行命令本身@setlocal ENABLEEXTENSIONS ENABLEDELAYEDEXPANSIONrem 显示命令本身关@echo offrem 填ftp服务器地址或域名set ftpsvr=localhostrem 填用户名set user=lijrem 填密码set pass=jierem 填保存备份的文件夹set archdir=D:\abcrem 填WinRAR安装文件夹,如:C:\Program Files\WinRAR ----------- compress已经注释,无需此功能rem set rardir=C:\Program Files\WinRARrem 把要使用的临时文件夹的路径设为环境变量mytempset mytemp=%temp%\ftp.xrem 防止可能的同名文件夹或文件存在影响工作,全删一遍。
>nul不显示回显2>nul不显示错误信息rd /s /q "%mytemp%">nul 2>nuldel /a /f "%mytemp%">nul 2>nulmd "%mytemp%"rem 把一个斜杠写到%mytemp%\rdl里面。
斜杠表示远程的根文件夹。
rdl用作保存远程文件夹列表。
echo />"%mytemp%\rdl"rem 已下载文件的远程文件夹计数set dcount=0rem 标号cycle:cyclerem 获取远程文件夹内的文件和子文件夹列表。
rem 因为下面那个for要被执行多次,非第一次执行要跳过已处理的行,所以要写skip=n。
rem 但是,第一次执行时,写个skip=0出错。
所以第一次执行时不写ship= 。
if %dcount%==0 set oo=if not %dcount%==0 set oo=^ skip=%dcount%rem 跳过指定的行数,每次从rdl文件中取一行赋给%%I。
QT程序FTP服务器12级电子新能源本2班20120553049张恒一、 QT简介QT是一个跨平台的C++图形化用户界面的应用程序开发框架。
它既可以开发GUI程序,也用于开发非GUI程序,比如控制台工具和服务器。
在QT Creator 3.1.0正式发布后,QT实现了对IOS、Android、WP 的全面支持。
二、 FTP服务器FTP是文件传输协议的英文简称,用于Internet上的控制文件的双向传输。
同多数Internet服务器一样,FTP也是分为两部分,即客户端程序与服务器系统。
本次所做出的图形化界面程序为FTP的客户端程序。
三、程序介绍1.UI介绍FTP客户端程序的UI界面是图所示,在UI中主要由连接、上传、下载、退出、返回、FTP地址、用户名、密码等组成,并且在下方留出大窗口用于显示FTP服务器中的文件。
2.程序源代码介绍3.#include "ftp.h"4.#include "ui_ftp.h"5.6.Ftp::Ftp(QWidget *parent)7.: QWidget(parent), ui(new Ui::Ftp), ftpobj(0)8.{9.ui->setupUi(this);10.//ui->lineEdit->setText("");11.//ui->comboBox->addItem("192.168.1.253");12.ui->lineEdit_3->setEchoMode(QLineEdit::Password);13.//ui->treeWidget->setAcceptDrops(true);14.this->setAcceptDrops(true);15.//model = new QDirModel;16.//ui->treeView->setModel(model);17.//ui->treeView->setAcceptDrops(true);18.19.ui->label_2->setText(tr("Please enter the name of an FTP server."));20.ui->lineEdit_2->setText("");21.ui->lineEdit_3->setText("");22.23.ui->treeWidget->setEnabled(false);24.ui->treeWidget->setRootIsDecorated(false);25.//ui->treeWidget->setHeaderLabels(QStringList() <<tr("Name") <<tr("Size")<<tr("Owner") <<tr("Group") <<tr("Time"));26.ui->treeWidget->header()->setStretchLastSection(false);27.28.ui->pushButton_2->setDefault(true);29.ui->pushButton->setEnabled(false);30.ui->radioButton_2->setChecked(true);31.ui->pushButton_3->setEnabled(false);32.progressDialog = new QProgressDialog(this);33.34.connect(ui->checkBox, SIGNAL(clicked()), this, SLOT(enableCheckBox()));35.connect(ui->treeWidget, SIGNAL(itemActivated(QTreeWidgetItem *, int)),36.this, SLOT(processItem(QTreeWidgetItem *, int)));37.connect(ui->treeWidget, SIGNAL(currentItemChanged(QTreeWidgetItem *,QTreeWidgetItem *)),38.this, SLOT(enableDownloadButton()));39.connect(progressDialog, SIGNAL(canceled()), this, SLOT(cancelDownload()));40.connect(ui->pushButton_2, SIGNAL(clicked()), this, SLOT(connectOrDisconnect()));41.connect(ui->pushButton, SIGNAL(clicked()), this, SLOT(cdToParent()));42.connect(ui->pushButton_3, SIGNAL(clicked()), this, SLOT(downloadFile()));43.connect(ui->pushButton_4, SIGNAL(clicked()), this, SLOT(close()));44.connect(ui->pushButton_5, SIGNAL(clicked()), this, SLOT(uploadFile()));45.//红色代码用于设置信号槽,定义了PushButton、PushButton_2、PushButton_3等按钮的使用46.setWindowTitle(tr("FTP"));47.}48.49.Ftp::~Ftp()50.{51.delete ui;52.}53.54.55.QSize Ftp::sizeHint() const56.{57.return QSize(500, 300);58.}59.60.//![0]61.void Ftp::connectOrDisconnect()62.{63.if(!ui->checkBox->isChecked()){64.if(ui->lineEdit_2->text().isEmpty()||ui->lineEdit_3->text().isEmpty())65.{66.QMessageBox::information(this, tr("FTP"),tr("请检查ftp账号信息,用户名和密码都不允许为空。
FTP协议解析与实现关键词:FTP、协议解析、visual C++简述:在学习FTP协议偶有感悟,于是想起了写一篇文章来总结一下自己学习的东西。
同时也想与读者共同分享自己的劳动成果,也算是抛砖引玉吧。
错误和不当之处欢迎指正。
联系方式:lihualoveyou1983@。
本文主要对程序员关心的一些技术进行了总结。
并结合一个实例来进一步说明。
本文涉及内容主要是FTP原理、VC编程、Socket等。
正文:一、FTP通信原理简述1.1 FTP简介FTP是基于TCP/IP协议的一个应用协议。
主要实现在不同的计算机之间的数据共享。
FTP 采用的是C/S模式。
客户既可以下载文件也可以上传文件。
当然,FTP给用户一定的权限。
用户只能在权限下使用。
目前,FTP的服务器种类很多,比如常用的SERV-U,客户端程序也很多,比如:CuteFTP。
WINDOWS也提供了一个FTP客户程序。
它们都根据相同的协议标准来设计的,具体协议内容可参考RFC文档。
SERV-U工作界面windows提供的客户端1.2 FTP工作原理FTP工作原理与其它的应用协议有些不同。
它是用两个端口进行通信的。
一个端口用于命令交互。
这个端口在用户连接之后一直保持;而另一个端口只是在数据传时打开(比如:上传文件,下载文件,获取服务端文件列表),在数据传输时有两种不同的模式,一是用户开通这个数据端口,这种模式叫做主动模式;二是服务器提供一个接口,这个模式叫被动模式。
FTP原理图1.3 用户登录FTP服务器提供了用户的访问权限,有的服务器可以匿名登录,有的服务器要求用户使用密码登录。
在每一个与登录有关的命令时,服务器都会有一个返回信息。
下面显示了一个登录过程:1.4 数据传输在FTP中可以定义数据的传输格式,比如:二进制(进行图象和应用程序传输这种格式)。
下面是一个传输过程:二、FTP命令在WINDOWS中提供的命令不是FTP的标准命令。
有些命令是许多命令的合集。
QT程序FTP服务器12级电子新能源本2班20120553049张恒一、 QT简介QT是一个跨平台的C++图形化用户界面的应用程序开发框架。
它既可以开发GUI程序,也用于开发非GUI程序,比如控制台工具和服务器。
在QT Creator 3.1.0正式发布后,QT实现了对IOS、Android、WP 的全面支持。
二、 FTP服务器FTP是文件传输协议的英文简称,用于Internet上的控制文件的双向传输。
同多数Internet服务器一样,FTP也是分为两部分,即客户端程序与服务器系统。
本次所做出的图形化界面程序为FTP的客户端程序。
三、程序介绍1.UI介绍FTP客户端程序的UI界面是图所示,在UI中主要由连接、上传、下载、退出、返回、FTP地址、用户名、密码等组成,并且在下方留出大窗口用于显示FTP服务器中的文件。
2.程序源代码介绍3.#include "ftp.h"4.#include "ui_ftp.h"5.6.Ftp::Ftp(QWidget *parent)7.: QWidget(parent), ui(new Ui::Ftp), ftpobj(0)8.{9.ui->setupUi(this);10.//ui->lineEdit->setText("");11.//ui->comboBox->addItem("192.168.1.253");12.ui->lineEdit_3->setEchoMode(QLineEdit::Password);13.//ui->treeWidget->setAcceptDrops(true);14.this->setAcceptDrops(true);15.//model = new QDirModel;16.//ui->treeView->setModel(model);17.//ui->treeView->setAcceptDrops(true);18.19.ui->label_2->setText(tr("Please enter the name of an FTP server."));20.ui->lineEdit_2->setText("");21.ui->lineEdit_3->setText("");22.23.ui->treeWidget->setEnabled(false);24.ui->treeWidget->setRootIsDecorated(false);25.//ui->treeWidget->setHeaderLabels(QStringList() <<tr("Name") <<tr("Size")<<tr("Owner") <<tr("Group") <<tr("Time"));26.ui->treeWidget->header()->setStretchLastSection(false);27.28.ui->pushButton_2->setDefault(true);29.ui->pushButton->setEnabled(false);30.ui->radioButton_2->setChecked(true);31.ui->pushButton_3->setEnabled(false);32.progressDialog = new QProgressDialog(this);33.34.connect(ui->checkBox, SIGNAL(clicked()), this, SLOT(enableCheckBox()));35.connect(ui->treeWidget, SIGNAL(itemActivated(QTreeWidgetItem *, int)),36.this, SLOT(processItem(QTreeWidgetItem *, int)));37.connect(ui->treeWidget, SIGNAL(currentItemChanged(QTreeWidgetItem *,QTreeWidgetItem *)),38.this, SLOT(enableDownloadButton()));39.connect(progressDialog, SIGNAL(canceled()), this, SLOT(cancelDownload()));40.connect(ui->pushButton_2, SIGNAL(clicked()), this, SLOT(connectOrDisconnect()));41.connect(ui->pushButton, SIGNAL(clicked()), this, SLOT(cdToParent()));42.connect(ui->pushButton_3, SIGNAL(clicked()), this, SLOT(downloadFile()));43.connect(ui->pushButton_4, SIGNAL(clicked()), this, SLOT(close()));44.connect(ui->pushButton_5, SIGNAL(clicked()), this, SLOT(uploadFile()));45.//红色代码用于设置信号槽,定义了PushButton、PushButton_2、PushButton_3等按钮的使用46.setWindowTitle(tr("FTP"));47.}48.49.Ftp::~Ftp()50.{51.delete ui;52.}53.54.55.QSize Ftp::sizeHint() const56.{57.return QSize(500, 300);58.}59.60.//![0]61.void Ftp::connectOrDisconnect()62.{63.if(!ui->checkBox->isChecked()){64.if(ui->lineEdit_2->text().isEmpty()||ui->lineEdit_3->text().isEmpty())65.{66.QMessageBox::information(this, tr("FTP"),tr("请检查ftp账号信息,用户名和密码都不允许为空。
FTP服务器配置详细首先我们在网上下载好ftp-server的开源文件,这里我们准备了pure-ftpd-1.0.36.tar.gz的压缩包接下来我们启动虚拟机然后在启动远程控制软件secureCRT启动secureFX接着把我们下载的FTP压缩包进行上传,即把压缩包拖入到第一个窗口,我们把它放在/var/lib这个目录下结果如下:接着我们去远程控制端查看该文件的上传情况:我们从中看到了我们的FTP压缩文件然后我们对其进行解压:使用解压命令:tar –zxvf file.tar.gz具体演示如下:接着我们查看解压后的文件是否已存在:接着我们对解压文件进行编译安装:使用命令有:cd pure-ftpd-1.0.36./configure –with-everythingMakeMake install安装成功后我们为ftp服务器建立用户组为组员建立存储位置接下来我们要让它能够自动启动ftp服务这里我们已经建立好了FTP服务器接下来我们就要为其他用户开设账号密码和空间我们增加一个用户test03并生成用户数据,接着我们去本地机打开dos命令窗口,来实验这个用户能否登录到这个空间用户test03能够正常登陆接下来我们查看服务器的用户有哪些发现已经为三个用户开设了空间我们使用test01来进行上传下载,来看FTP服务器的配置我们先看test01的空间里面有什么文件我们在DOS命令窗口下载00.text显示下载成功我们去这个目录下查找是否存在00.txt这个文件然后我们再在这个目录下重新创建一个文件sun.doc我们把这个文件上传到服务器上传成功我们再去服务器那边查看test01空间下是否存在这个文件了已存在最后我们通过Dreamweaver连接FTP服务器对我们开发的网页进行更新上传首先建立站点建立好站点后,连接远程服务器我们建立了一个123.html的网页,将它上传到服务器服务器端文件:最后我们通过浏览器来访问我们创建的网页123网页如下:对一些命令的翻译如下:1.INSTALLThe simplest way to compile this package is:1. `cd' to the directory containing the package's source code and type `./configure' to configure the package for your system.Running `configure' might take a while. While running, it prints some messages telling which features it is checking for.2. Type `make' to compile the package.3. Optionally, type `make check' to run any self-tests that come with the package, generally using the just-built uninstalled binaries.4. Type `make install' to install the programs and any data files and documentation. When installing into a prefix owned by root, it is recommended that the package be configured and built as a regular user, and only the `make install' phase executed with rootprivileges.5. Optionally, type `make installcheck' to repeat any self-tests, but this time using the binaries in their final installed location.This target does not install anything. Running this target as aregular user, particularly if the prior `make install' requiredroot privileges, verifies that the installation completedcorrectly.6. You can remove the program binaries and object files from thesource code directory by typing `make clean'. To also remove the files that `configure' created (so you can compile the package for a different kind of computer), type `make distclean'. There isalso a `make maintainer-clean' target, but that is intended mainly for the package's developers. If you use it, you may have to get all sorts of other programs in order to regenerate files that came with the distribution.7. Often, you can also type `make uninstall' to remove the installed files again. In practice, not all packages have tested thatuninstallation works correctly, even though it is required by the GNU Coding Standards.8. Some packages, particularly those that use Automake, provide `make distcheck', which can by used by developers to test that all othertargets like `make install' and `make uninstall' work correctly.This target is generally not run by end users.最简单的方法编译这个包是:1。
FTP:指令及响应代码作者:佚名来源:百度文库发布时间:2011年07月31日点击数:135FTP 的主要功能如下:∙提供文件的共享(计算机程序 / 数据);∙支持间接使用远程计算机;∙使用户不因各类主机文件存储器系统的差异而受影响;∙可靠且有效的传输数据。
FTP ,尽管可以直接被终端用户使用,但其应用主要还是通过程序实现。
FTP 控制帧即指 TELNET 交换信息,包含 TELNET 命令和选项。
然而,大多数 FTP 控制帧是简单的 ASCII 文本,可以分为 FTP 命令或 FTP 消息。
FTP 消息是对 FTP 命令的响应,它由带有解释文本的应答代码构成。
命令描述ABOR 中断数据连接程序ACCT 系统特权帐号ALLO 为服务器上的文件存储器分配字节APPE 添加文件到服务器同名文件CDUP改变服务器上的父目录CWD改变服务器上的工作目录DELE 删除服务器上的指定文件HELP 返回指定命令信息LIST 如果是文件名列出文件信息,如果是目录则列出文件列表MODE 传输模式(S=流模式,B=块模式,C=压缩模式)MKD 在服务器上建立指定目录NLST 列出指定目录内容NOOP 无动作,除了来自服务器上的承认PASS 系统登录密码PASV 请求服务器等待数据连接PORTIP 地址和两字节的端口 IDPWD 显示当前工作目录QUIT 从 FTP 服务器上退出登录REIN 重新初始化登录状态连接REST 由特定偏移量重启文件传递RETR 从服务器上找回(复制)文件RMD 在服务器上删除指定目录RNFR 对旧路径重命名RNTO 对新路径重命名SITE 由服务器提供的站点特殊参数SMNT 挂载指定文件结构STAT 在当前程序或目录上返回信息STOR 储存(复制)文件到服务器上STOU 储存文件到服务器名称上STRU 数据结构(F=文件,R=记录,P=页面)SYST 返回服务器使用的操作系统TYPE 数据类型(A=ASCII,E=EBCDIC,I=binary)USER > 系统登录的用户名标准 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命令大全晨曦之光发表于3-9 14:56 1个月前, 0回/12阅( 0人收藏此话题, 我要收藏|举报) 讨论区 »技术分享顶0 踩文件传输软件的使用格式为:FTP<FTP地址>,若连接成功,系统将提示用户输入用户名及口令:LOGIN:(输入合法的用户名或者“ANONMOUS”):PASSWORD:(输入合法的口令,若以“ANONMOUS”方式登录,一般不用口令):第一节FTP命令基础进入想要连接的FTP站点后,用户就可以进行相应的文件传输操作了,其中一些重要的命令及相似的命令如下:1)HELP、?、RHEIP、REMOTEHELPHELP显示LOCAL端的命令说明,若不接受则显示所有可用命令;?相当于HELP,例如:?CD:RHELP同HELP,只是它用来显示REMOTE端的命令说明;REMOTEHELP相当于RHELP。
一个简单的FTP服务器实例目标FTP是网络上共享资源的常用方法,在本章中我们将实现一个简单的FTP服务器。
本章知识点:●FTP协议●Socket类和TcpListener类●System.Threading 名称空间5.1 实例功能本实例实现一个简单的FTP服务器,该服务器是一个控制台程序,编译后的可执行文件为ftpd.exe,在控制台中键入ftpd后就可启动服务器,若要改变ftp服务器的工作目录,可以键入ftpd –r 后接绝对路径。
服务器的ftp服务端口采用默认的21。
服务器启动后,用户就可从其他任何一台联网计算机进行访问。
下面是应用的一个例子:(服务器所在机器的ip为166.111.147.25)用户在自己计算机的控制台中输入ftp 166.111.147.25 回车后可以看到服务器传过来的欢迎信息,并要求输入登陆账号(图5-1)。
图5-1 登陆ftp精品感谢下载载输入用户名和密码后(为简化起见我们在程序中省去了验证过程,任何人都可以登陆),用户的控制台如图5-2所示,在服务器上,也出现了该用户的登陆情况(图5-3)。
图5-2 成功登陆 图5-3 服务端 接下来用户可以使用各种命令进行各种ftp 操作,比如列出目录下所有文件和文件夹(ls ),下载指定的文件(get ),上载文件(put )等等。
下面是客户端(图5-4)和服务端(图5-5)某时刻的运行状态。
图5-4 客户端运行情况图 5-5 服务端运行情况 5.2 编程思路要实现FTP 服务器,我们必须对FTP 协议有一定的了解,使用符合协议的指令集和网络传输方式,我们将在下一节详细介绍关于FTP 协议的基础知识。
另外,我们还采用了C#网络应用案例导航132TcpListener和Socket编程技术实现数据传输,所以这也是我们需要掌握的内容。
最后,为了同时给多个用户提供服务,FTP服务器还必须支持多线程。
FTP服务器程序的大框架是这样的:程序运行后,在服务器的某个端口有一个TcpListener一直在监听用户的请求,当有用户请求服务时,服务器立刻创建一个新的线程处理这个请求,我们称开始了一个新的会话。
在会话中,服务器通过Socket接收用户命令,对命令进行分析后采取相应的操作,并将结果返回。
一直到用户退出这个会话,服务器才销毁这个线程。
服务器和客户端的会话方式有两种,一是被动方式(passive),即服务器在某个特定端口有一个TcpListener在不断监听用户命令;二是主动方式,这种情况下,服务器在该客户端有服务请求时,创建一个套接字和它进行数据传输。
5.3 关键技术FTP协议1)概述FTP的目标是提高文件的共享性,提供非直接使用远程计算机,使存储介质对用户透明和可靠高效地传送数据。
图5-6是FTP服务示意图,为了让大家更好的理解,我们先解释一下相关的概念。
(1)字节大小,在FTP中字节大小有两个:逻辑字节大小和用于传输的字节大小。
后者通常是8位,而前者可不一定是多少了。
传输字节不必等于逻辑字节大小,也不必对数据结构进行解释。
(2)控制连接是建立在USER-PIT和SERVER-PI之间用于交换命令与应答的通信链路。
(3)数据连接是传输数据的全双工连接。
传输数据可以发生在服务器DTP和用精品户DTP之间也可以发生在两个服务器DTP之间。
(4)DTP:数据传输过程,DTP建立和管理数据连接,可以是主动的也可以是被动的。
(5)EOR代表记录尾。
(6)NTV代表网络虚拟终端。
(7)NVFS代表网络虚拟文件系统。
(8)FTP可以传输非连续的文件,这些文件的一部分称为页。
(9)PI代表协议解释器。
(10)服务器DTP代表一种传输过程,它通常处于“主动”状态,它和侦听端口建立数据连接,它还可以为传输和存储设置参数,并根据PI的指令传输数据。
当然,DTP也可以转入“被动”状态。
(11)服务器FTP进程,它是和用户FTP 进程一起工作的,它由PI和DTP组成。
至于用户FTP进程则是由PI,DTP和用户接口组成的。
图5-6 FTP 服务示意图注意:数据连接是双向的,它不用整个时间都存在。
上图中用户PI开始控制连接,控制连接与Telnet协议很象。
在开始阶段,标准FTP命令由用户PI产生并通过控制连接传送到服务器进程。
服务器PI向用户PI返回标准应答。
FTP命令指定数据连接参数和文件系统操作。
用户DTP在特定数据端口侦听,服务器开始数据连接并以指定的参数开始数据传输。
数据端口不必在开始FTP命令的机器上,但用户或用户FTP进程必须确定它在指定的数据端口感谢下载载C#网络应用案例导航134上侦听。
这个数据连接是全双工的。
在另外一种情况下,用户或许希望在两个主机间传送文件,不是两个本地主机。
用户在两台主机间建立控制连接,然后规划数据连接。
用这种方式,控制信息由用户PI获得,但是数据在服务器DTP之间传送。
图5-7就是一个例子:图5-7协议要求数据传输在处理时打开控制连接。
在完成FTP服务后由用户中止控制连接,而服务器具体操作。
如果在未接收命令时关闭了控制连接,服务器也会关闭数据传输。
数据传输功能数据连接只传输数据,控制连接传送命令和响应。
几个命令是关于在主机间传输数据的,数据传输基本上独立于物理结构的,但是如果在压缩传输模式下流式传输与文件结构有关,文件的属性与表示类型有关。
数据表示与保存数据是在主机间的存储设置间传送的。
因为两个系统的数据存储方式不同,因此需要对它进行转换,在传送文本时会有对ASCII表示的问题,在进行二进制传送的时候,会有不同系统对字节长度规定不同的问题,有的系统是7位,有的系统可能是32位,这也需要进行精品转换。
需要提供数据表示与传输模型函数,但是FTP提供这方面的功能不多,超过FTP提供功能的那一部分要用户自己实现。
数据表示是由用户指定的表示类型,它可以是隐含的,也可以是用户指定的。
请一定注意:逻辑字节长度与物理字节长度是不同的。
ASCII类型:这是所有FTP必须实现的默认类型,用于传送文本文件,当在主机间使用EBCDIC传送时更方便,则不使用ASCII类型。
发送方将内部表示转换为NVT-ASCII格式,接收方则进行相反的过程接收数据。
根据NVT标准,要在行结束处使用<CRLF>序列。
NVT-ASCII是8位的。
ASCII和EBCDIC的格式参数在下面讨论。
EBCDIC类型:它是作为ASCII的另一种方法在主机间传送数据的数据类型。
EBCDIC和ASCII很象,仅在类型的功能描述上有一些差别。
行结束符使用很少。
图象类型:在此类型下传送的数据被看作连续的位,发送方将数据打包到8位传输字节中传送。
因为结构的需要要对传送数据进行填充,填充字节全部为0,填充必须在文件结构时使用,而且要标记出以便接收方过滤掉。
它用于传送二进制数据和有效地传送和存储文件,因此所有FTP也必须实现。
本地类型:也可以以十进制指定逻辑字节大小。
如果物理字节大小和逻辑字节大小不同,直接将物理数据打包为逻辑字节,不用什么填充。
接收方根据逻辑字节大小进行和本机的存储特点进感谢下载载C#网络应用案例导航136行转换。
传输必须是可重复的,也就是说,相同的文件相同的参数,那内容必须是一样的。
数据结构除了有不同的数据类型外,FTP还允许有不同的文件结构,下面是三种文件结构:文件式结构:文件中没有内部结构,文件被看作是二进制流;记录结构:文件是由一系列记录组成的;页结构:文件是由不同的索引页组成的。
如果未使用STRU命令,文件结构是默认值。
文件的结构会影响传输模型,存储和数据表示。
文件本来的属性和保存它的主机有关,不同的机器会以自己的方式保存文件。
在不同主机间传送文件时必须使主机能够识别相互的表示。
有些主机上的文件是面向字节的,有些是面向记录的,在传送时就会出现问题。
那就要在接收方进行内部转换。
在进行转换的时候,需要区别记录的边界,在ASCII中使用<CRLF>,在EBCDIC中使用<NL>作为分隔符。
采用这种实现方法的必须保证转换是可逆的。
文件结构:如果未使用STRU命令,文件结构是默认值。
文件结构中没有默认值,文件被看作是连续的字节串。
记录结构:对于文本文件,记录结构必须是所有FTP实现必须有的。
记录结构文件是由连续的记录构成的。
页结构:文件是非连续时使用页结构。
这种文件称为随机访问文件。
这些文件中有时会的和文件整体或部分相关的信息出现。
在FTP中,文件的一个部分称为页。
精品建立数据连接传送数据机制包括建立连接选择数据参数。
用户和服务器DTP有默认数据端口。
用户进程默认数据端口和控制连接端口相同。
服务器进程默认数据端口和控制连接端口相邻。
传输字节大小是8位字节。
此字节是实际传输字节,但不代表主机内的数据表示。
被动数据传输进程在数据端口接收数据,FTP请求命令决定数据传输的方向。
服务器在接收到请求以后,将初始化端口的数据连接。
当连接建立后,传输在DTP之间传送,服务器PI对用户PI返回应答。
FTP实现运行一个默认数据端口,用户PI才能改变默认端口。
通过PORT命令可能改变端口,用户可能希望数据在第三方主机上进行其它操作,用户PI需要在两个服务器PI上建立连接。
一个服务器被告知侦听另一服务器的请求。
用户PI通过PORT命令通知另一服务器的数据端口。
最后双方发送相应的传送命令。
通常,服务器负责支持数据连接,初始化并关闭它,除非用户DTP在传输模式下要求关闭连接。
服务器在下面情况下关闭数据连接:❑服务器结束发送数据,通过EOF要求中止传送;❑用户发送ABORT命令;❑用户改变端口;❑控制连接关闭;❑发生不可恢复错误。
数据连接管理默认数据连接端口:所有FTP必须支持默认数据连接,只有用户PI能够初始化非默认端口的使用。
感谢下载载C#网络应用案例导航138确定非默认数据端口:用户PI可以使用PORT命令指定非默认端口,它要求服务器方以PASV确定非默认数据端口。
连接是由双方地址确定的,因此改变一方地址就改变了连接。
数据连接的重用:在使用流式数据传输模型时,文件结束通过关闭连接指示。
如果要传送多个文件时就会出麻烦,解决的方法有两个,一个是确定非默认端口,另一个是使用另一种传输模式。
就传输模式而言,流传输模式是不安全的,因此无法确定连接是暂时还是永久关闭。
其它传输模式不通过关闭连接表示文件结构,它们可以通过FTP命令决定传送结构。
因此使用这些传输模式可以在保持连接的情况下传送多个文件。
传输模式有三种传输模式:一种将数据格式化并考虑重新开始过程;一种压缩数据;一种是不经过处理(少量处理)传送。
所有数据传输必须以一个EOF结束,它可以显式给出,也可以通过关闭连接隐式给出。
对于记录文件,所有EOR是显式的,包括最后一个记录。