FTP模式简式:PORT/PASV/EPRT/EPSV
简介常见FTP有两种模式:PORT(主动模式)、PASV(被动模式)。 而EPRT/EPSV模式出现的原因是FTP仅仅提供了建立在IPv4上进行数据通信的能力,它基于网络地址是32位这一假设。但是,当IPv6出现以后,地址就比32位长许多了。原来对FTP进行的扩展在多协议环境中有时会失败。我们必须针对IPv6对FTP再次进行扩展。EPRT、EPSV是Extended Port/Pasv的简写。 详解PORT模式当FTP的Client以PORT模式连接FTP Server时,它动态的选择一个Port X(注意这个Port一定是1024以上的,因为1024以前的Port都已经预先被定义好,被一些典型的服务使用,当然有的还没使用,也是保留给以后会用到这些端口的资源服务)来连接FTP Server的21端口,当经过TCP的三次握手后,连接(控制信道)被建立。 现在用户要列出FTP Server上的目录结构(使用ls或dir命令),那么首先就要建立一个数据通道,因为只有数据通道才能传输目录和文件列表,此时用户会发出PORT指令告诉FTP Server连接自己的Port Y来建立一条数据通道(这个命令由控制信道发送给服务器)。当FTP Server接到这一指令时,FTP Server会使用20端口连接用户在PORT指令中指定的Port Y,用以发送目录的列表. 当完成这一操作时,FTP Client也许要下载一个文件,那么就会发出get命令,请注意,这时Client再次发送PORT指令,告诉服务器连接他的哪个“新”端口。(你可以先用netstat -na这个命令验证,上一次使用的Y已经处于TIME_WAIT状态。) 当这个新的数据传输通道建立后(在微软的系统中,客户端通常会使用连续的端口,也就是说这一次客户端会用Y+1这个端口),就开始了文件传输的工作。 PASV模式在初始化连接这个过程,即连接FTP Server这个过程和PORT模式是一样的。 然而,当FTP Client以PASV模式连接FTP Server,FTP Client发送ls、dir、get等这些要求数据返回的命令时,当情况就有些不同了。 FTP Client不向服务器发送PORT指令而是发送PASV指令,在这个指令中,Client告诉FTP Server自己要连接服务器的某一个端口:
为了验证这个过程我们不得不借助CUTEFTP Pro这个FTP客户端软件,因为微软自带的FTP命令客户端,不支持PASV模式。虽然你可以使用QUOTE PASV这个命令强制使用PASV模式,但是当你用ls命令列出服务器目录列表,你会发现它还是使用PORT方式来连接服务器的。 EPRT模式EPRT考虑到数据连接的扩展地址问题,扩展地址必须包括网络协议以及网络和传输地址。格式如下: EPRT<空格><d><网络协议><d><网络地址><d><TCP端口><d> EPRT后要跟空格,空格后面必须是分隔符<d>,分隔符必须在ASCII的33到126范围之内。推荐使用|,除非它已有它用。网络协议是一个数字,它指出使用的是什么协议。具体数据如下: =IPv4;=IPv6; 网络地址是在指定网络协议下的相应地址,在IPv4和IPv6下地址分别如下格式: IPv4=132.235.1.2;IPv6=::::200C:417A TCP端口指的是协议在哪一个TCP端口上侦听数据连接。下面是两个EPRT命令的例子: EPRT ||132.235.1.2|| 在接收到合法的EPRT命令后,服务器必须返回200(命令合法)。标准的错误代码500和501已经足够处理大部分错误了,但是还需要一个错误代码,代码522指定服务器不支持请求的网络协议,新错误代码的解释如下: 5yz 交换信息结束 响应的文本部分必须说明服务器运行的协议是什么,响应串的格式如下: <说明不支持的网络的字符串> /(协议1,协议2,...,协议n) 上述的数字代码和在括号内的协议信息由软件自动控制接收响应;而在数字代码和'('之间的内容供人类用户处理。其后的协议表中的协议应该以逗号分隔。下面是两个响应串的例子: Network protocol not supported, use () EPSV模式EPSV格式如下: EPSV<空格><网络协议> 如果请求的网络协议是服务器支持的,那就必须使用此协议;如果不支持,则返回522。最后,EPSV命令可以使用参数"ALL"通过网络地址翻译器,EPRT命令不再使用。下面是例子: EPSV<空格>ALL 接收到此命令后,服务器要拒绝除了EPSV以外所有建立连接的命令。 对于所有在两台相同机器间建立控制和数据连接的FTP传输来说,必须使用EPSV。使用它可以减少通过防火墙和网络地址翻译器(NAT)对效率的影响。有些文章推荐在防火墙后使用被动命令,因此防火墙通常不允许主动连接。在本文中定义的EPSV命令不需要NAT在传输时对网络地址进行改变。如果使用EPRT,NAT必须改变网络地址。如果客户发送了"EPSV ALL"命令,NAT能够将连接变为快速方式,只要再不使用EPRT,就不需要对数据段的数据部分进行改变。如果客户希望进行两路FTP传输,应该使用这条命令,如果后来客户需要建立三种FTP传输,必须新打开了个FTP会话。 EPSV请求服务器在一个数据端口上侦听等待连接,它可以带参数。对它的响应是TCP端口号。响应的格式与EPRT参数的很象。这对实现上有很大的方便。而且响应还留下了网络协议和/或网络地址的空位,可以供以后使用。使用扩展地址进行被动模式的响应码必须是229,对它的解释如下: 2yz 主动完成 响应的格式如下: <指示服务器已经进入初扩展的被动模式> /(<d><d><d><TCP端口><d>) 包括在括号内的字符串必须是EPRT打开数据连接的端口。具体如上所未,这里就不多说了。数据连接使用的协议必须和控制连接使用的协议和地址一致,下面是响应的一个例子: Entering Extended Passive Mode (||||) 标准错误代码500和501对EPSV已经足够了(不支持EPSV)。在EPSV命令没有使用参数时,服务器会基于控制连接所使用的协议选择数据连接使用的网络协议。但是在有代理的情况下,这种机制可能不合适。因此客户也需要能够要求一个指定协议。如果服务器返回说明它在指定端口不支持此协议,客户必须发送ABOR(放弃)命令使服务器关闭连接,然后客户再使用EPSV命令要求使用特定的网络协议. |
FTP模式简式:PORT/PASV/EPRT/EPSV的更多相关文章
- FTP Service mode : PORT & PASV
PORT Mode: 1. FTP client use TCP port 1026 for command to FTP server command port 212. FTP server us ...
- Ftp主动模式和被动模式以及java连接ftp模式设置
Ftp主动模式和被动模式以及java连接ftp模式设置 https://www.cnblogs.com/huhaoshida/p/5412615.html (1) PORT(主动模式) PORT中文称 ...
- 返回模式有流式(streaming)和整体(total) 热词词表解决方案
重要术语说明_语音识别(ASR)_智能语音交互-阿里云 https://help.aliyun.com/document_detail/72238.html 返回模式(response mode) ...
- .Net Core身份认证:IdentityServer4实现OAuth 2.0 客户端模式 - 简书
原文:.Net Core身份认证:IdentityServer4实现OAuth 2.0 客户端模式 - 简书 一.客户端模式介绍 客户端模式(Client Credentials Grant)是指客户 ...
- 2×c列联表|多组比例简式|卡方检验|χ2检验与连续型资料假设检验
第四章 χ2检验 χ2检验与连续型资料假设检验的区别? 卡方检验的假设检验是什么? 理论值等于实际值 何条件下卡方检验的需要矫正?如何矫正? 卡方检验的自由度如何计算? Df=k-1而不是n-1 卡方 ...
- ftp报错 200 port command successful. consider using pasv 425 failed to establish connection
最近在公司做的项目是需要在客户端录制视频,然后通过ftp传到服务器端.客户端是windows,服务器端linux.今天用新的电脑配置好项目之后,测试数据传输时出现了“200 port command ...
- linux下开启ftp的21号port
1.先执行vsftpd服务: #service vsftpd start 2.通过iptables开放21号port (1) 先查看iptables设置: #iptables -nL Chain IN ...
- lftp使用普通ftp模式登录
set ftp:use-feat no set ftp:passive-mode yes set ftp:ssl-protect-data no set ssl:verify-certificate ...
- 【读书笔记】读《JavaScript模式》 - 函数复用模式之类式继承模式
实现类式继承的目标是通过构造函数Child()获取来自于另外一个构造函数Parent()的属性,从而创建对象. 1.类式继承模式#1 —— 默认方式(原型指向父函数实例) function Paren ...
随机推荐
- 在Linux机器上安装MySQL
在Linux机器上安装MySQL,仔细认真些就没有问题. CentOS 7下MySQL 5.7安装.配置与应用_数据库技术_Linux公社-Linux系统门户网站 搞不定的话,直接删掉这个MySQL, ...
- centos 7.2 同步北京时间 ,多台机器同步时间
linux 系统没有北京时间,同步的是上海时间 linux 系统有两个时钟:一个是硬件时钟,即BIOS时间:另一个是系统时钟,是linux系统Kernel(内核)时间. 系统开启时,系统会读取硬件时间 ...
- Loadrunner回放https脚本时出现错误Error -27780 Connection reset by peer解决办法
录制好的https协议的web脚本,在脚本回放时会出现Error -27780: [GENERAL_MSG_CAT_SSL_ERROR]connect to host "......&quo ...
- Maven中聚合与集成的区别
如test-parent是一个聚合工程,打包方式为pom.xml test-a是test-parent的一个moudle模块,打包方式为jar,并且继承自test-parent: test-b是tes ...
- linux上部署jenkins步骤小记
一.部署jdk环境 1.下载jdk包,解压,放在选定的位置,我本次jdk包放置在“/usr/local/java/jdk” 目录下 2.配置环境变量 1)打开/etc/profile文件,在命令框中输 ...
- C语言顺序栈
10进制转任何进制 #include<stdio.h> #include<stdlib.h>#define maxSize 30typedef int DataType;typ ...
- 什么是云?Iaas,Paas和SaaS
周围的朋友听说我是做云相关的,总是爱问啥是云?别不是虚幻的概念吧.云计算当然不是虚幻的概念,“云”其实是互联网的一个隐喻,简单地说,云计算是通过Internet(“云”)交付计算服务——服务器.存储. ...
- jmiter性能测试
1. Jmeter简介Apache JMeter是一款纯java编写负载功能测试和性能测试开源工具软件.相比Loadrunner而言,JMeter小巧轻便且免费,逐渐成为了主流的性能测试工具,是每个测 ...
- layer is not defined
项目中使用layui中,引入新旧版本出现的一个问题. 使用console.log(layer) 打印出来的,显示使用的版本是1.8.0 但是页面中引入的layui有好几个.就是不使用最新的. /*这里 ...
- linux服务开机自动启动
zookeeper设置开机自动启动 第一种:直接修改/etc/rc.d/rc.local文件 在/etc/rc.d/rc.local文件中需要输入两行,其中export JAVA_HOME=/usr/ ...