用telnet执行FTP交互

本文介绍了如何使用telnet执行FTP交互,包括FTP的工作原理、两种数据连接模式、FTP交互过程,以及通过telnet建立控制连接和数据连接的步骤。通过实例展示了登录匿名FTP、执行命令、文件传输等操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

用telnet实现FTP交互

1.     FTP初认识

众所周知,由于对可靠数据传输服务的依赖,FTP同HTTP协议一样在运输层选择的都是TCP服务。但是又有一个最重要的区别:FTP使用的是两个并行的TCP连接,一个是用于在客户机和服务器之间传输控制信息的控制连接(TCP端口号是21),另一个是用于实际传输一个文件的数据连接。正是由于FTP的控制连接和数据连接是分离的,所以我们称FTP的控制信息是带外传送的。

数据连接有两种传输模式:

①主动(PORT)方式的连接过程是:客户机从一个非特权端口N(N>1024)与服务器在端口号21建立了控制连接后,然后客户端在命令链路上用PORT命令告诉服务器:“我打开了XXXX号端口,你快点过来连接我(づ ̄3 ̄)づ╭❤~”。于是服务器就通过20号端口与客户机的XXXX号端口建立一条数据链路。

②被动(PASV)方式的连接过程是:在建立了控制连接后,客户端向服务器的21号端口发出了PASV命令(被动连接请求),于是服务器就开启了xxxx号端口,告诉客户端:“我打开了xxxx号端口,快过来连我╭( ・ㅂ・)و ̑̑”。然后由客户端向服务器的xxxx号端口发送连接请求,然后建立一条数据链路。

2.     FTP交互过程

①当用户主机与远程主机开启一个FTP会话前,FTP的客户机(用户)首先在21号端口上发起一个用于控制的与服务器(远程主机)的TCP连接。

②FTP的客户机通过该控制连接发送用户的标识和口令,也可以发送改变远程目录等命令。

③当FTP的服务器端从该连接上收到一个文件传输的命令后(无论是到远程主机还是从远程主机到客户机),就发起一个到客户机的数据连接。FTP在该数据连接上准确地传送一个文件并关闭该连接,但此时控制链路还保持连接。如果在同一个会话期间,用户还需要传输另一个文件,FTP则打开另一个数据连接。

因而对FTP传输而言,控制连接贯穿了整个用户会话期间,但是针对会话中的每一次文件传输都需要建立一个新的数据连接(即数据连接是非持久性的)。


3.     实验准备

①FTP服务器实验准备:

在开始实验之前我们得先建立一个或者找一个FTP服务器,这里为了后续实验操作方便,我们自己建立一个FTP服务器。我们可以用Windows自带的IIS来建立(详情请参考http://jingyan.baidu.com/article/455a9950e1e2fba167277862.html)或者第三方软件(如Serv-U、FileZilla Server等),这里我用的FileZilla Server,在百度软件中心就有,注意是FileZilla Server,不是用于上传的客户端FileZilla。

我们现在本地E盘建一个文件夹“ftp”,然后在下面建一个文件夹“123”以及“test.txt”,里面放上你想写的内容,然后再文件夹“123”下面再建一个“test123.txt”。

安装时为了防止默认的原端口号被占用强烈建议将端口号改成38121,如下图:


安装完成后登录时也记得把对应的端口改成38121,如下图:

进入以后为了实验方便,点击菜单栏Edit->settings,根据下图提示修改连接时间、端口号范围以及动态IP设置。

然后设置匿名FTP与本地文件夹关联以及访问权限:

点击菜单栏第四个图标,然后在右边的Users下面ADD一个叫“anonymous”的用户。

然后点击左边Page里的Shared folders,在Directories下点ADD,选中之前创建的E盘的“ftp”文件夹,然后在中间的权限上全部打钩,如下图所示:

这样一个ftp服务器就算建立完成了,更多Filezilla Server详细设置请参考:http://ce.sysu.edu.cn/hope2008/Education/ShowArticle.asp?ArticleID=13136

好了,我们用文件资源管理器验证一下,在我的电脑地址栏输入:ftp://服务器IP,看到了之前创建的“ftp”文件夹。用浏览器、第三方软件、甚至是Windows自带的FTP客户端都可以访问服务器:

注意:在实验之前得先把服务器的防火墙关掉,当时年少无知的我以为只要允许FTP通过防火墙就行了:

结果一直连接不上服务器,后面几天一直调服务器权限、调服务器端口都不行(;´༎ຶД༎ຶ`),最终把Windows防火墙彻底关掉才终于连接上服务器。

②FTP客户机实验准备:

客户机得开启telnet客户端,详情请查看3月26日推送消息“利用Telnet执行HTTP交互”。

③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>>

系统登录的用户名

 

响应代码

解释说明

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

文件名不允许

 

4.     正式实验

现在我们用Telnet来实现ftp交互,自建的服务器的动态IP地址为172.16.3.123

①我们先打开一个DOS窗口,输入telnet 172.16.3.123 21,来和服务器建立控制连接。

②建立控制连接后,先用user、pass命令登陆匿名FTP,输入user anonymous回车pass(由于是匿名FTP,所以随便输入什么都可以登陆,一般是输入自己的邮箱以便服务器端管理员了解自己的身份)。

注意:当建立控制连接后,每敲一个字母就会通过控制连接直接传到服务器端,所以如果敲错了按退格键修改只是改变客户机上的显示,命令还是错误的。

③现在就可以尝试一些不需要传输文件的命令,比如SYST获取服务器系统、HELP来获取帮助、CWD <子文件夹名>、CDUP来改变路径,甚至可以用DELE删除了原先的test.txt文件。由于list命令需要传输服务器的文件/文件夹列表,所以和RETR、STOR等命令都不能用。

④由于使用动态IP,我们只能通过被动(PASV)方式建立与服务器的数据连接,输入pasv回车,此时服务器返回了服务器的IP和服务器开启的端口号,比如下图传回的服务器IP是172.16.3.123,端口号是19*256+138=5002(好吧,为啥这样算我也不知道╮(╯▽╰)╭)

⑤然后我们再打开一个DOS,输入telnet 172.16.3.123 5002,然后就会出现一个全黑的Telnet的框,你会发现不管你输入什么都还是一片黑,不要怕,这就说明我们成功开启了数据连接了。

⑥这个时候我们再输入list命令看看,刚刚打开的的数据连接框出现了我们的列表(之前用DELE命令把test.txt删掉了),然后立刻出现了“遗失对主机的连接”,这正是我们之前说的一个数据连接传输完一个文件后会立刻关闭。

⑦我们再回到控制连接框用CWD命令进入子文件夹“123”,然后重复④、⑤

⑧然后试用下RETR test23.txt,发现数据连接框就出现了我们原先存入“test123.txt”的内容。

⑨重复④、⑤,在控制连接框输入stor test456.txt,如果服务器上有这个文件则会覆盖原先的文件,如果没有则新建一个文件。然后在看不见的

数据连接框输入你想要存储的内容,输完后回到控制连接框输入ABOR,断开数据连接,则服务器会把数据连接框输入的内容保存到“test456.txt”并关闭数据连接。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值