ftp交互和控制命令总结

一、FTP管理:

基于tcp,首先有客户端相服务端的知名端口21发起tcp连接建立ftp控制连接,控制连接在整个会话期间都保持打开,只用来发送连接/传送请求。

这里分为两种模式:

主动模式(PORT)和被动模式(PASV),这两种模式是站在FTP服务器的“角度”来说的,如果设置为主动模式,则需要传输数据时,服务器主动连接客户端,那么客户端就需要有数据监听端口(从port h1,h2,h3,h4,p1,p2命令中获知);如果设置为被动模式,则需要服务器告诉客户端(通过对pasv命令响应告知))自己用于数据传输的监听端口,同时在该端口上监听被动的等待客户端来连接,被动方式通常用于客户端位于nat内网,服务器位于nat外网的场景中以避免被防火墙阻止数据连接的建立。

 

这里说一下注意点:port命令的参数h1,h2,h3,h4,p1,p2 前面4个h分别对应客户端ip地址的4个十进制数字,p1和p2分别表示端口的高8位和低8位,因次端口计算为p1*256+p2。

 

二、FTP数据传输:

在数据连接建立好后则开始传输数据,数据传输按方向分为上传下载:

下载时客户端命令行使用get或mget等命令(对应内部协议命令为RETR filename),向服务器请求下载filename,服务器打开该文件读出数据以某种传输方式向服务器传送数据,客户端收数据直到数据传输完。一旦数据传输完成则数据连接关闭。

上载文件时客户端命令行使用put或mput等命令(对应内部协议命令为STOR filename),向服务器请求上传filename,客户端打开文件读取数据发送给服务端,服务端创建文件并写入数据。完成后数据连接关闭。

  FTP协议规定了控制协议传送与存储的多种选择,在以下4个方面必须做出一个选择。

  • 文件类型:ASCII码文件(默认的)/ 图像文件类型(二进制的)/ 本地文件类型(用于在具有不同字节大小主机间传送二进制数据)
  • 格式控制:该选项针对ASCII类型文件适用,非打印(默认选择,文件中不包含垂直格式信息)/ 远程登录格式控制
  • 结构:文件结构(默认选择,文件被认为是一个连续的字节流,不存在内部的文件结构)/ 记录结构(用于文本文件)
  • 传输方式:流方式(模式选择,文件以字节流方式传输,对于文件结构,发方在文件尾提示关闭数据连接,对于记录结构,有专用的两字节序列码记录结束和文件结束)/ 块方式(文件以一系列块来传送,每块前面有一个或多个首部字节)/ 压缩方式

三、FTP用户命令

ftp客户端(命令行)用户命令:

1、客户端用户命令分为两类,一类是设置操作客户端自身的,如lcd、hash等,另一类是发送内部协议命令给服务器执行的,如get、put、passive等

2、命令数量因客户端差异而不同,如windows系统的ftp客户端就没有size等命令,而一些嵌入式设备只是实现了几个上传下载的简单命令。

下表是linux系统上ftp客户端具有的ftp命令:

 

 

客户端用户命令在执行后转换为内部协议命令给服务器执行,然后以应答码加消息的格式回应给客户端。

命令和应答在客户和服务器的控制连接上以 NVT ASCII码形式传送。这就要求在每行结尾都要返回C R、 L F对(也就是每个命令或每个应答)。这些命令都是3或4个字节的大写ASCII字符,其中一些带选项参数。从客户向服务器发送的FTP命令超过30种。下图是比较常用的几种命令:

  应答都是A S C I I码形式的3位数字,并跟有报文选项。其原因是软件系统需要根据数字代码来决定如何应答,而选项串是面向人工处理的。由于客户通常都要输出数字应答和报文串,一个可交互的用户可以通过阅读报文串(而不必记忆所有数字回答代码的含义)来确定应答的含义。

 

下面是控制通道交互示例:

黄色底纹为控制命令,这些内部命令在使用python的ftplib库编写脚本时,可以使用sendcmd函数直接发送给服务器。

220 (vsFTPd 3.0.2)
USER root
331 Please specify the password.
PASS test
230 Login successful.
SYST
215 UNIX Type: L8
PWD
257 "/mnt"
PORT 192,168,1,23,171,91
200 PORT command successful. Consider using PASV.
LIST
150 Here comes the directory listing.
226 Directory send OK.
PORT 192,168,1,23,142,173
200 PORT command successful. Consider using PASV.
LIST
150 Here comes the directory listing.
226 Directory send OK.
CDUP
250 Directory successfully changed.
PWD
257 "/"
CWD mnt
250 Directory successfully changed.
TYPE I
200 Switching to Binary mode.
TYPE A
200 Switching to ASCII mode.
PASV
227 Entering Passive Mode (192,168,1,1,155,71).
LIST
150 Here comes the directory listing.
226 Directory send OK.
PORT 192,168,1,23,133,62
200 PORT command successful. Consider using PASV.
LIST
150 Here comes the directory listing.
226 Directory send OK.

 

posted @ 2019-03-08 00:12  梦想与现实边缘  阅读(3128)  评论(0编辑  收藏  举报