FTP主动模式(PORT)与被动模式(Passive)

Java使用FTPClient 上传文件、下载文件、删除文件 在连接ftp服务器时,刚开始密码弄错了,使用工具FlashFXP修改密码后就能连上, FileZilla连接时,报证书过期,选择信任该证书并继续登录,登录不上,修改密码后报同样的错误,后来在编辑中选择清除个人信息,全部选中(包括快速连接栏历史,重新连接信息,站点管理器条目和传输队列)后删除,重新添加新站点后可以连接。 import org.apache.commons.net.ftp.*; import org.slf4j.Logger; import org.slf4j.LoggerFactory. 阅读详情

原文:http://slacksite.com/other/ftp.html

 

CU链接:http://bbs.chinaunix.net/forum/viewtopic.php?t=574966

 

感谢CU网友pidan和missing-cn翻译,整理由wolfg完成。

主动FTP与被动FTP-权威解释



目录

  • 开场白
  • 基础
  • 主动FTP
  • 主动FTP的例子
  • 被动FTP
  • 被动FTP的例子
  • 总结
  • 参考资料
  • 附录 1: 配置常见FTP服务器

 

开场白



处理防火墙和其他网络连接问题时最常见的一个难题是主动FTP与被动FTP的区别以及如何完美地支持它们。幸运地是,本文能够帮助你清除在防火墙环境中如何支持FTP这个问题上的一些混乱。



本文也许不像题目声称的那样是一个权威解释,但我已经听到了很多好的反馈意见,也看到了本文在许多地方被引用,知道了很多人都认为它很有用。虽然我一直在
找寻改进的方法,但如果你发现某个地方讲的不够清楚,需要更多的解释,请告诉我!最近的修改是增加了主动FTP和被动FTP会话中命令的例子。这些会话的
例子应该对更好地理解问题有所帮助。例子中还提供了非常棒的图例来解释FTP会话过程的步骤。现在,正题开始了...



基础




FTP是仅基于TCP的服务,不支持UDP。 与众不同的是FTP使用2个端口,一个数据端口和一个命令端口(也可叫做控制端口)。通常来说这两个端口是21-命令端口和20-数据端口。但当我们发现根据(FTP工作)方式的不同数据端口并不总是20时,混乱产生了。



主动FTP




主动方式的FTP是这样的:客户端从一个任意的非特权端口N(N>1023)连接到FTP服务器的命令端口,也就是21端口。然后客户端开始监听端
口N+1,并发送FTP命令"port N+1"到FTP服务器。接着服务器会从它自己的数据端口(20)连接到客户端指定的数据端口(N+1)。



针对FTP服务器前面的防火墙来说,必须允许以下通讯才能支持主动方式FTP:

  • 任何端口到FTP服务器的21端口 (客户端初始化的连接 S<-C)
  • FTP服务器的21端口到大于1023的端口(服务器响应客户端的控制端口 S->C)
  • FTP服务器的20端口到大于1023的端口(服务器端初始化数据连接到客户端的数据端口 S->C)
  • 大于1023端口到FTP服务器的20端口(客户端发送ACK响应到服务器的数据端口 S<-C)


画出来的话,连接过程大概是下图的样子:





在第1步中,客户端的命令端口与FTP服务器的命令端口建立连接,并发送命令"PORT
1027"。然后在第2步中,FTP服务器给客户端的命令端口返回一个"ACK"。在第3步中,FTP服务器发起一个从它自己的数据端口(20)到客户端
先前指定的数据端口(1027)的连接,最后客户端在第4步中给服务器端返回一个"ACK"。



主动方式FTP的主要问题实际上在于客户端。FTP的客户端并没有实际建立一个到服务器数据端口的连接,它只是简单的告诉服务器自己监听的端口号,服务器
再回来连接客户端这个指定的端口。对于客户端的防火墙来说,这是从外部系统建立到内部客户端的连接,这是通常会被阻塞的。



主动FTP的例子




下面是一个主动FTP会话的实际例子。当然服务器名、IP地址和用户名都做了改动。在这个例子中,FTP会话从
testbox1.slacksite.com
(192.168.150.80),一个运行标准的FTP命令行客户端的Linux工作站,发起到testbox2.slacksite.com
(192.168.150.90),一个运行ProFTPd
1.2.2RC2的Linux工作站。debugging(-d)选项用来在FTP客户端显示连接的详细过程。红色的文字是
debugging信息,显示的是发送到服务器的实际FTP命令和所产生的回应信息。服务器的输出信息用黑色字表示,用户的输入信息用粗体字表示。



仔细考虑这个对话过程我们会发现一些有趣的事情。我们可以看到当 PORT
命令被提交时,它指定了客户端(192.168.150.80)上的一个端口而不是服务器的。当我们用被动FTP时我们会看到相反的现象。我们再来关注
PORT命令的格式。就象你在下面的例子看到的一样,它是一个由六个被逗号隔开的数字组成的序列。前四个表示IP地址,后两个组成了用于数据连接的端口
号。用第五个数乘以256再加上第六个数就得到了实际的端口号。下面例子中端口号就是( (14*256) + 178) =
3762。我们可以用netstat来验证这个端口信息。



testbox1: {/home/p-t/slacker/public_html} % ftp -d testbox2

Connected to testbox2.slacksite.com.

220 testbox2.slacksite.com FTP server ready.

Name (testbox2:slacker): slacker

---> USER slacker


331 Password required for slacker.

Password: TmpPass

---> PASS XXXX


230 User slacker logged in.

---> SYST

215 UNIX Type: L8


Remote system type is UNIX.

Using binary mode to transfer files.

ftp> ls

ftp: setsockopt (ignored): Permission denied

---> PORT 192,168,150,80,14,178


200 PORT command successful.

---> LIST


150 Opening ASCII mode data connection for file list.

drwx------ 3 slacker
users 104 Jul 27 01:45
public_html

226 Transfer complete.

ftp> quit

---> QUIT


221 Goodbye.



被动FTP




为了解决服务器发起到客户的连接的问题,人们开发了一种不同的FTP连接方式。这就是所谓的被动方式,或者叫做PASV,当客户端通知服务器它处于被动模式时才启用。



在被动方式FTP中,命令连接和数据连接都由客户端,这样就可以解决从服务器到客户端的数据端口的入方向连接被防火墙过滤掉的问题。当开启一个
FTP连接时,客户端打开两个任意的非特权本地端口(N >
1023和N+1)。第一个端口连接服务器的21端口,但与主动方式的FTP不同,客户端不会提交PORT命令并允许服务器来回连它的数据端口,而是提交
PASV命令。这样做的结果是服务器会开启一个任意的非特权端口(P > 1023),并发送PORT
P命令给客户端。然后客户端发起从本地端口N+1到服务器的端口P的连接用来传送数据。



对于服务器端的防火墙来说,必须允许下面的通讯才能支持被动方式的FTP:

  • 从任何端口到服务器的21端口 (客户端初始化的连接 S<-C)
  • 服务器的21端口到任何大于1023的端口 (服务器响应到客户端的控制端口的连接 S->C)
  • 从任何端口到服务器的大于1023端口 (入;客户端初始化数据连接到服务器指定的任意端口 S<-C)
  • 服务器的大于1024端口到远程的大于1023的端口(出;服务器发送ACK响应和数据到客户端的数据端口 S->C)


画出来的话,被动方式的FTP连接过程大概是下图的样子:





在第1步中,客户端的命令端口与服务器的命令端口建立连接,并发送命令"PASV"。然后在第2步中,服务器返回命令"PORT
2024",告诉客户端(服务器)用哪个端口侦听数据连接。在第3步中,客户端初始化一个从自己的数据端口到服务器端指定的数据端口的数据连接。最后服务
器在第4 步中给客户端的数据端口返回一个"ACK"响应。



被动方式的FTP解决了客户端的许多问题,但同时给服务器端带来了更多的问题。最大的问题是需要允许从任意远程终端到服务器高位端口的连接。幸运的是,许多FTP守护程序,包括流行的WU-FTPD允许管理员指定FTP服务器使用的端口范围。详细内容参看附录1。



第二个问题是客户端有的支持被动模式,有的不支持被动模式,必须考虑如何能支持这些客户端,以及为他们提供解决办法。例如,Solaris提供的FTP命令行工具就不支持被动模式,需要第三方的FTP客户端,比如ncftp。



随着WWW的广泛流行,许多人习惯用web浏览器作为FTP客户端。大多数浏览器只在访问ftp://这样的URL时才支持被动模式。这到底是好还是坏取决于服务器和防火墙的配置。



被动FTP的例子




下面是一个被动FTP会话的实际例子,只是服务器名、IP地址和用户名都做了改动。在这个例子中,FTP会话从
testbox1.slacksite.com
(192.168.150.80),一个运行标准的FTP命令行客户端的Linux工作站,发起到testbox2.slacksite.com
(192.168.150.90),一个运行ProFTPd
1.2.2RC2的Linux工作站。debugging(-d)选项用来在FTP客户端显示连接的详细过程。红色的文字是
debugging信息,显示的是发送到服务器的实际FTP命令和所产生的回应信息。服务器的输出信息用黑色字表示,用户的输入信息用粗体字表示。



注意此例中的PORT命令与主动FTP例子的不同。这里,我们看到是服务器(192.168.150.90)而不是客户端的一个端口被打开了。可以跟上面的主动FTP例子中的PORT命令格式对比一下。



testbox1: {/home/p-t/slacker/public_html} % ftp -d testbox2

Connected to testbox2.slacksite.com.

220 testbox2.slacksite.com FTP server ready.

Name (testbox2:slacker): slacker

---> USER slacker


331 Password required for slacker.

Password: TmpPass

---> PASS XXXX


230 User slacker logged in.

---> SYST

215 UNIX Type: L8


Remote system type is UNIX.

Using binary mode to transfer files.

ftp> passive

Passive mode on.

ftp> ls

ftp: setsockopt (ignored): Permission denied

---> PASV


227 Entering Passive Mode (192,168,150,90,195,149).

---> LIST


150 Opening ASCII mode data connection for file list

drwx------ 3 slacker
users 104 Jul 27 01:45
public_html

226 Transfer complete.

ftp> quit

---> QUIT


221 Goodbye.



总结




下面的图表会帮助管理员们记住每种FTP方式是怎样工作的:



主动FTP:

命令连接:客户端 >1023端口 -> 服务器 21端口
数据连接:客户端 >1023端口 <- 服务器 20端口


被动FTP:

命令连接:客户端 >1023端口 -> 服务器 21端口
数据连接:客户端 >1023端口 -> 服务器 >1023端口


下面是主动与被动FTP优缺点的简要总结:



主动FTP对FTP服务器的管理有利,但对客户端的管理不利。因为FTP服务器企图与客户端的高位随机端口建立连接,而这个端口很有可能被客户端的防火墙
阻塞掉。被动FTP对FTP客户端的管理有利,但对服务器端的管理不利。因为客户端要与服务器端建立两个连接,其中一个连到一个高位随机端口,而这个端口
很有可能被服务器端的防火墙阻塞掉。



幸运的是,有折衷的办法。既然FTP服务器的管理员需要他们的服务器有最多的客户连接,那么必须得支持被动FTP。我们可以通过为FTP服务器指定一个有
限的端口范围来减小服务器高位端口的暴露。这样,不在这个范围的任何端口会被服务器的防火墙阻塞。虽然这没有消除所有针对服务器的危险,但它大大减少了危
险。详细信息参看附录1。





参考资料




O'Reilly出版的《组建Internet防火墙》(第二版,Brent Chapman,Elizabeth Zwicky著)是一本很不错的参考资料。里面讲述了各种Internet协议如何工作,以及有关防火墙的例子。



最权威的FTP参考资料是RFC 959,它是FTP协议的官方规范。RFC的资料可以从许多网站上下载,例如:ftp://nic.merit.edu/documents/rfc/rfc0959.txt 。



Active FTP vs. Passive FTP, Appendix 1

 
配置FTP服务器——passive mode 配置FTP服务器的一个问题1. 环境服务器:debian6.0 vsftpd,客户端:Ubuntu10.04,系统自带的ftp客户端 2. 问题在客户端登录时,输入ls,提示“500 Illegal port command ftp: bind: Address already in use”报错3. 解决方法使用ftp的passive模式,ftp -p server_ip4. 原因分析a. ftp 阅读详情

相关推荐

STC15单片机实战项目软件开发第四讲 - 按键检测(状态机)

软件开发第四讲 - 按键检测(状态机) 一、工具链接 1、Keil c51 UV4 https://yunpan.360.cn/surl_yrIfYYmeRFk 2、STC-ISP下载软件 https://yunpan.360.cn/surl_yxH4CuUUvI3 二、学习板获取方式 方法1:自己设计PCB,自行打板焊接; 方法2:用群主设计的PCB,自行打板焊接; 方法3:向群主购买,淘宝链接...

硬件家园 3046

ftp-主动模式(PORT)和被动模式(PASV)

PORT主动模式: 客户端以随机非特权端口N,就是大于1024的端口,对server端21端口发起连接 客户端开始监听 N+1端口; 服务端会主动以20端口连接到客户端的N+1端口。 PASV被动模式: 客户端以随机非特权端口连接服务端的21端口 服务端开启一个非特权端口为被动端口,并返回给客户端 客户端以非特权端口+1的端口主动连接服务端的被动端口 可见PASV被动模式自动建立连接,容易受到攻击,所以安全性差。 ...

u014644574的博客 2072

【verilog语法详解:从入门到精通】

Verilog语法详解:从入门到精通 摘要:本文系统讲解Verilog硬件描述语言的核心语法与应用。Verilog作为数字电路设计标准,具有并行执行、硬件映射和层次化三大特点。文章从基础语法框架入手,详细介绍了模块定义、端口类型(input/output/inout)声明规范,以及线网型(wire)和寄存器型(reg)两种核心数据类型的区别与应用场景。重点讲解了组合逻辑(assign连续赋值)和时序逻辑(always块)的实现方式,包括阻塞赋值(=)与非阻塞赋值(<=)的关键差异。此外,还涵盖了参数(

m0_58476824的博客 4683

FTP的Port模式和passive模式详解

Port模式是client端打开一个端口连接ftp Server的20端口下面的东西详细讲解了FTP的port模式>>2.0当你对一个FTP问题进行排错时候,你首先要问的一个问题是使用的是port模式的还是passive模式。因为这两种行为迥异,所以这两种模式引起的问题也不同;在过去,客户端缺省为active(port)模式;近来,由于Port模式的安全问题,许多客户端的FTP应用缺省为Passi

Net 2933

Excel VBA+Adobe Acrobat Pro PDF发票识别全流程(附避坑指南)

本文详细介绍了如何利用Excel VBA与Adobe Acrobat Pro的API接口,构建一套企业级PDF发票智能识别与处理系统。内容涵盖从环境配置、核心文本提取原理、数据解析清洗到工程化脚本设计的全流程,并针对密码区干扰、不征税发票等常见问题提供避坑指南,旨在帮助财务人员和开发者实现高效、精准的财务数据处理自动化。

weixin_29207439的博客 348

欧姆龙PLC与fanuc发那科机器人进行Ethrenet ip通信测试

近期在做发那科FANUC的通讯,会吧CC-LINK、Profibus-DP、Profinet I/O、DeviceNet、EtherNet/IP这些常用通讯做成文档发上来,大家喜欢的话可以关注 注:做对应的通讯,在机器人控制柜都需要安装对应的板卡以及软件功能 截图中的程序设置和机器人EDS插件在下面链接 https://download.youkuaiyun.com/download/gojava/13770799 PLC为主站 机器人为从站 一、硬件部分 欧姆龙PLC ...

七兔自习室 1万+

FTP主动模式(Port)和被动模式(Passive)的区别

由于项目需求,需要接受一些数据,由于双方都是内网,对方提出建立一个ftp服务器,我去连接下载文件,然后在入库。 搭完ftp客户端之后一切正常,部署在内网服务器也一切正常,过了一段时间,由于内网服务器损坏,又重新申请了一个一模一样的服务器,ftp客户端部署完之后 ftp连接正常,但是不能下载文件。一开始以为是端口问题(某个端口忘记开了),但是换成已经开放的端口还是不行。突然想起ftp有主动模式和被...

f0rd_的博客 1758

jetson nano网络配置(有线、无线、USB)

注意:本节内容使用Jetson nano B01 版本或Jetson nano ALT 版本安装方式相同,在安装无线网卡等设备时,由于线材和设备比较脆弱,需要轻拿轻放,接口连接不上时,需要重新对准接口在进行连接,不要强行连接。Jetson nano 需要连接网络来进行更多的操作,本节就来讲解Jetson nano 的三种网络连接方法。有线:我们可以使用网线连接Jetson nano 的RJ45 接口,实现联网。

m0_73841621的博客 1万+

基于FtpClient(JDK1.7)实现Ftp连接

FTP 概述文件传输协议(FTP)作为网络共享文件的传输协议,在网络应用软件中具有广泛的应用。FTP的目标是提高文件的共享性和可靠高效地传送数据。在传输文件时,FTP 客户端程序先与服务器建立连接,然后向服务器发送命令。服务器收到命令后给予响应,并执行命令。FTP 协议与操作系统无关,任何操作系统上的程序只要符合 FTP 协议,就可以相互传输数据。FTP 协议相比其他协议,如 HTTP 协议,FT...

客人 2612

ICC2: place阶段的clock network delay

设置了set_clock_latency之后,即便没长tree,也会有反标值,显示为clock network delay(ideal)和设置的clock latency值,需要注意的是同时设置set_clock_latency和set_clock_latency -source,clock network delay(ideal)值是二者叠加的。我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧?

m0_61544122的博客 316

VT-Refine:基于仿真微调的视觉-触觉反馈双臂装配强化学习

本研究提出VT-Refine框架,通过融合真实世界示范、高保真触觉仿真与强化学习,解决高精度双臂装配任务。方法分为两阶段:首先利用少量人类示范数据预训练视觉-触觉扩散策略;随后在数字孪生仿真环境中进行强化学习微调。关键创新包括:开发GPU加速的触觉仿真模块精确模拟压阻式传感器;采用基于点云的多模态表征实现无缝的跨领域迁移。实验表明,该方法在五个双臂装配任务中显著提升性能,触觉反馈使成功率提高40%。研究首次实现仿真环境中的大规模双臂视觉-触觉强化学习及sim-to-real迁移,为接触密集型任务提供了新解决

2506_90492529的博客 1795

FTP Port主动模式 Passive被动模式区别-Filezilla Server设置Passive被动模式

1. FTP包含两种模式:Port主动模式、Passive被动模式。 FTP一般使用2个端口,一个是命令端口(默认为21),一个为数据端口(默认为20)。 主动模式:FTP客户端向FTP服务器端的命令端口请求,FTP客户端告知FTP服务器端自己的端口是多少,FTP服务器端的数据端口会连接FTP客户端的端口并进行数据传输。 被动模式:FTP客户端向FTP服务器端的命令端口请求,告知自己是被动模...

weixin_30325487的博客 1196

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

FTP的主动模式(PORT Mode)及被动模式(Passive Mode)

FTP的特殊性:    大多数的TCP服务是使用单个的连接,一般是客户向服务器的一个周知端口发起连接,然后使用这个连接进行通讯。但是,FTP协议却有所不同,它使用双向的多个连接,而且使用的端口很难预计。一般,FTP连接包括:   1) 一个控制连接(control connection)    这个连接用于传递客户端的命令和服务器端对命令的响应。它使用服务器的21端口,生存期是整个FTP

changzhi的专栏 7413

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

passive模式 tcp_FTP的主动模式(PORT Mode)及被动模式(Passive Mode)

FTP的特殊性:大多数的TCP服务是使用单个的连接,一般是客户向服务器的一个周知端口发起连接,然后使用这个连接进行通讯。但是,FTP协议却有所不同,它使用双向的多个连接,而且使用的端口很难预计。一般,FTP连接包括:1)一个控制连接(control connection)这个连接用于传递客户端的命令和服务器端对命令的响应。它使用服务器的21端口,生存期是整个FTP会话时间。2)几个数据连接(d...

weixin_39526185的博客 323

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

FTP的主动模式(Port mode)与被动模式(Passive mode)区别

一、FTP服务器的主动工作模式 主动模式简单原理:(1)客户端从一个任意的非特权端口N(N>1024)连接到FTP服务器的命令端口,也就是21端口。然后客户端开始监听端口N+1,并发送FTP命令“port N+到FTP服务器(2)接着服务器会从它自己的数据端口(20)连接到客户端指定...

chuxuanjian4955的博客 773

mysql主动被动模式_FTP Port主动模式 Passive被动模式区别-Filezilla Server设置Passive被动模式...

1. FTP包含两种模式:Port主动模式、Passive被动模式。FTP一般使用2个端口,一个是命令端口(默认为21),一个为数据端口(默认为20)。主动模式:FTP客户端向FTP服务器端的命令端口请求,FTP客户端告知FTP服务器端自己的端口是多少,FTP服务器端的数据端口会连接FTP客户端的端口并进行数据传输。被动模式:FTP客户端向FTP服务器端的命令端口请求,告知自己是被动模式,FTP服...

weixin_42632434的博客 485

FTP主动模式(passive)和被动模式(port)的区别

FTP协议会在客户端和服务端创建两个连接,一个用于命令传输,一个用于数据传输。 主动模式和被动模式是面向服务端和数据传输来讲的。对于命令传输,都是客户端主动连接服务端。 主动模式:客户端创建一个listen端口,服务端主动连接,建立数据传输通道 被动模式:服务创建一个listen端口,客户端主动链接,建立数据传输通道。 站在服务端的角度: 主动:客户端你来建立端口,我来链接。 被动:我建立好端口了,你来连接我。 ...

simpleGq的专栏 3999

FTP的主动传输模式(PORT Mode 主动模式)及被动传输模式(Passive Mode 被动模式)(PASV)(FTP通信原理、ftp端口)主动模式是从服务器端向客户端发起数据连接★★★★★

ftp> ? passive passive enter passive transfer mode 文章目录FTP的特殊性 FTP的特殊性 大多数的TCP服务是使用单个的连接,一般是客户向服务器的一个周知端口发起连接,然后使用这个连接进行通讯。但是,FTP协议却有所不同,它使用双向的多个连接,而且使用的端口很难预计。一般,FTP连接包括: 一个控制连接(control connection)   这个连接用于传递客户端的命令和服务器端对命令的响应。它使用服务器的21端口,生存期是整个FT

Dontla的博客 1万+
上一篇: 通过网页链接打开应用程序客户端的两种实现方式
下一篇: server-u的详细设置
InsideKernel
博客等级 码龄19年 5粉丝 15原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值