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.
ftp交互和控制命令总结的更多相关文章
- FTP远程文件传输命令
使用ftp命令进行远程文件传输 ftp命令是标准的文件传输协议的用户接口.ftp是在TCP/IP网络上的计算机之间传输文件的简单有效的方法.它允许用户传输ASCII文件和二进制文件. 在ftp会话过程 ...
- CentOS FTP服务器权限控制
在默认配置下,本地用户登入FTP后可以使用cd命令切换到其他目录,这样会对系统带来安全隐患.可以通过以下三条配置文件来控制用户切换目录. chroot_list_enable=YES/NO(NO) 设 ...
- 使用expect实现自动交互,shell命令行自动输入,脚本自动化,变量引用,expect spawn执行带引号命令,expect 变量为空,不生效,不能匹配通配符*,函数,数组
背景 有需求,在允许命令或者脚本跳出交互行,需要进行内容输入,但需要人手动输入,不是很方便,此时可以通过expect来实现自动互动交互. expect是一个自动交互功能的工具,可以满足代替我们实际工作 ...
- 使用expect实现自动交互,shell命令行自动输入
背景 有需求,在允许命令或者脚本跳出交互行,需要进行内容输入,但需要人手动输入,不是很方便,此时可以通过expect来实现自动互动交互. expect是一个自动交互功能的工具,可以满足代替我们实际工作 ...
- Linux 视频设备驱动V4L2最常用的控制命令
http://blog.csdn.net/shaolyh/article/details/6583226 Linux 视频设备驱动V4L2最常用的控制命令使用说明(1.02) 命令 功能 VIDIOC ...
- oracle-SQL语言基础-事务控制命令命令
事务控制命令命令 COMMITROLLBACKSAVEPOINTSET TRANSACTION 当第一条可执行的SQL语句开始执行,数据库事务就开始.随着下面任一事件发生,数据库事务结束:执行COMM ...
- Linux 下 expect 脚本语言中交互处理常用命令
Linux 下 expect 脚本语言中交互处理常用命令 1. #!/usr/bin/expect 告诉操作系统脚本里的代码使用那一个 shell 来执行.这里的 expect 其实和 Linux 下 ...
- Sass控制命令及函数知识整理
2017-07-07 20:17:17 最底部附结构图(实在是结构图太长了没办法) 2017-06-22 09:11:43 一.Sass的控制命令 1.@if语句 @if 指令是一个 SassSc ...
- 使用python+Selenium对空调控制器进行循环发送控制命令
今天一同事说想对空调控制器进行循环发送命令操作.经过了对控制流程的梳理,发现每次选择内机后进入控制页面设定温度都是在26度,想了想,如果要进行循环就得将设定温度重置为17度,然后每循环一次温度增加1度 ...
随机推荐
- Spark-3-调优要点
1 内存调整要点 Memory Tuning,Java对象会占用原始数据2~5倍甚至更多的空间.最好的检测对象内存消耗的办法就是创建RDD,然后放到cache里面去,然后在UI上面看storage的变 ...
- PHP留言板制作(MySQL+PHP)
参考视频:https://www.bilibili.com/video/BV1Js411i74j?p=8 环境:phpstudy 2018 PHP 5.X PHPmyadmin ...
- MyBatis史上最全文章
老规矩,本篇文章 不做 MyBatis 的 编码讲解 ,只介绍 文章学习的一些优秀文章 重点在于不要循规蹈矩,教程 这样走,你不一定要按他这样走,按自己的方式来,学习效率会更高,网上的教程有很多,今天 ...
- http详解笔记
http详解笔记 http,(HyperText Transfer Protocol),超文本传输协议,亦成为超文本转移协议 通常使用的网络是在TCP/IP协议族的基础上运作的,HTTP属于它的一 ...
- 如何查看打印机的IP地址和MAC地址
1. 打开控制面板,选择设备和打印机: 2. 选中打印机,右键单机,选择打印机 "属性": 3. 选择web服务,可以直接查看打印机的IP地址或MAC地址,如下图所示: 4. ...
- JavaEE在职加薪课好客租房项目实战视频教程
JavaEE在职加薪课好客租房项目实战视频教程课程介绍: 本课程采用SOA架构思想进行设计,基于目前主流后端技术框架SpringBoot.SpringMVC.Mybaits.Dubbo等来 ...
- springBoot整合Sentinel实现降级限流熔断
由于hystrix的停止更新,以及阿里Sentinel在历年双十一的贡献.项目中使用了Sentinel,今天我们来讲讲Sentinel的入门教程,本文使用1.6.3版本进行讲解 本文通过Sentine ...
- 毕业三年,如何达到月薪30K?我想跟你聊聊!!
写在前面 很多读者私信问我,自己工作三多年了,随着工作年限的不断增长,感觉自己的技术水平与自己的工作年限严重不符.想跳槽出去换个新环境吧,又感觉自己的能力达不到心仪公司的标准,即使投了简历也没人来通知 ...
- 修改oracle监听占用8080端口号的问题
前期: 先确认Oracle已经安装并正常运行 输入lsnrctl start 启动 Oracle 输入lsnrctl status 查看Oracle运行状态 可以看到第二个PORT = 8081 是我 ...
- ES标签搜索并解决评分排序问题
一.概述 需求: 最近在做一个新闻项目,有这样一个需求,如下: 用户根据视频内容手动创建标签,标签个数不限 在视频详情页提供根据标签推荐视频功能,即按本视频的标签进行搜索,标签匹配多的排在前面,匹配少 ...