在一个网络工程师考试群中无意中看到的,好像有一道题叫什么ftp客户端可以使用哪个端口,有4个答案,20,21,80,4155,其中肯定是4155了,因为20、21都是ftp服务器使用的,80是web服务器使用的。再者从另一方面说,客户端使用的端口都是动态向系统申请的,一般都大于1024。后来记得我说了句主动连接时服务器使用的是20号端口与客户端建立连接,有人就开始反驳了说是不管主动还是被动端口服务器的数据连接端口都大于1024,很好笑。今天也就顺便总结一下吧,google了一下,发现网上各种解释都有,错误的也不乏少数。我就使用真实的连接过程响应数据跟大家分析一下吧:
 
被动(PASV)模式:
PASV(被动)方式的连接过程是:客户端向服务器的FTP端口(默认是21)发送连接请求,服务器接受连接,建立一条控制连接。当需要传送数据时,服务器在命令链路上用PASV命令告诉客户端:“我打开了XXXX端口,你过来连接我”。于是客户端向服务器的XXXX端口发送连接请求,建立一条数据链路来传送数据。
服务器控制端口(21),服务器端等待的数据传输端口(动态申请)
ftp服务器动态申请一个端口(一般大于1024)然后告诉客户端,我在这个端口上等待你的连接,客户端收到以后便向服务器的这个端口发起连接,数据连接建立以后,数据传输就可以开始了
端口计算方法:172,16,101,104,7,254,256*7+254=2046
 
一次完整的被动连接及数据传输过程:
状态: 正在连接 172.16.101.104:21...
状态: 连接建立,等待欢迎消息...
响应: 220 Serv-U FTP Server v6.4 for WinSock ready...
命令: USER test
响应: 331 User name okay, need password.
命令: PASS ****
响应: 230 User logged in, proceed.
状态: 已连接
状态: 读取目录列表...
命令: PWD
响应: 257 "/" is current directory.
状态: 列出目录成功
状态: 正在连接 172.16.101.104:21...
状态: 连接建立,等待欢迎消息...
响应: 220 Serv-U FTP Server v6.4 for WinSock ready...
命令: USER test
响应: 331 User name okay, need password.
命令: PASS ****
响应: 230 User logged in, proceed.
状态: 已连接
状态: 开始上传 E:\Downloads\liuzhigong\liuzhigong\404.htm
命令: CWD /
响应: 250 Directory changed to /
命令: TYPE A
响应: 200 Type set to A.
命令: PASV
响应: 227 Entering Passive Mode (172,16,101,104,8,86)
命令: STOR 404.htm
响应: 150 Opening ASCII mode data connection for 404.htm.
响应: 226 Transfer complete.
状态: 文件传输成功,传输了 2,052 字节 (用时1 秒)
状态: 读取目录列表...
命令: TYPE I
响应: 200 Type set to I.
命令: PASV
响应: 227 Entering Passive Mode (172,16,101,104,8,88)
命令: MLSD
响应: 150 Opening BINARY mode data connection for MLSD.
响应: 226 Transfer complete.
状态: 列出目录成功
 
 
主动(PORT)模式:
PORT(主动)方式的连接过程是:客户端向服务器的FTP端口(默认是21)发送连接请求,服务器接受连接,建立一条控制连接。当需要传送数据时,客户端在命令链路上用PORT命令告诉服务器:“我打开了XXXX端口,你过来连接我”。于是服务器从20端口向客户端的XXXX端口发送连接请求,建立一条数据链路来传送数据。
 
一次完整的主动连接及数据传输过程:
状态: 正在连接 172.16.101.104:21...
状态: 连接建立,等待欢迎消息...
响应: 220 Serv-U FTP Server v6.4 for WinSock ready...
命令: USER test
响应: 331 User name okay, need password.
命令: PASS ****
响应: 230 User logged in, proceed.
状态: 已连接
状态: 开始上传 E:\Downloads\liuzhigong\liuzhigong\404.htm
命令: CWD /
响应: 250 Directory changed to /
命令: TYPE A
响应: 200 Type set to A.
命令: PORT 172,16,101,104,8,76
响应: 200 PORT Command successful.
命令: STOR 404.htm
响应: 150 Opening ASCII mode data connection for 404.htm.
响应: 226 Transfer complete.
状态: 文件传输成功,传输了 2,052 字节 (用时1 秒)
状态: 读取目录列表...
命令: TYPE I
响应: 200 Type set to I.
命令: PORT 172,16,101,104,8,77
响应: 200 PORT Command successful.
命令: MLSD
响应: 150 Opening BINARY mode data connection for MLSD.
响应: 226 Transfer complete.
状态: 列出目录成功
 
端口的使用:任何一种模式中客户端均是动态申请一个端口来使用,服务器端控制连接端口(默认21)始终不变,当使用主动模式时,客户端申请一个端口告诉服务器,服务器则使用20号端口向客户端的这个端口主动建立一条数据连接;当使用被动模式时,服务器则动态申请一个端口告诉客户端以等待客户端的连接
 
网络上的误区:网络上有的文章中提到说是客户端向服务器发送一个pasv命令告诉服务器在那个端口上等待,实际上是错的。从上面的完整ftp连接流程中:
 
命令: PASV
响应: 227 Entering Passive Mode (172,16,101,104,8,88)
 
命令: PORT 172,16,101,104,8,77
响应: 200 PORT Command successful.
 
中可以看出,在被动连接中由客户端发送PASV命令,服务器动态申请一个端口告诉客户端,然后等待客户端的连接;在主动连接中,客户端动态申请一个端口告诉服务器,然后等待服务器的连接。
 
常见问题1:为什么处于内网的FTP客户端要使用被动连接?
由以上可知,使用主动连接时,是服务器主动向客户端的端口发起连接,则当ftp服务器的连接目标IP实际是你的公网IP(因为私有IP是不允许路由到互联网上的),如果是通过NAT上网,则是NAT池中的IP,如果客户端中网络路由器没有和你的计算机做端口映射,则当数据到达路由器时,路由器会自动丢弃数据包,因为路由器不是你的ftp客户端,无法处理这个数据包。而使用被动连接由客户端主动发起连接,则将能顺利通过路由器,木马内网反弹连接也是这个原理,由内网中的机器主动向外网发起连接。

FTP主动连接、被动连接、连接端口的分配与使用、误区总结相关推荐

  1. ftp 主动或者被动ftp

    主动FTP模式与被动FTP模式 发表时间:2007-04-23内容来源:站长资讯收集整理作者:古树FTP是仅基于TCP的服务,不支持UDP. 与众不同的是FTP使用2个端口,一个数据端口和一个命令端口 ...

  2. FTP 主动、被动工作模式

    什么叫做PASV mode(被动模式传送)?他是如何工作的? FTP的连接一般是有两个连接的,一个是客户程和服务器传输命令的,另一个是数据传送的连接.FTP服务程序一般会支持两种不同的模式,一种是Po ...

  3. linux ftp主动和被动模式切换命令,Linux iptables配置FTP的主动和被动模式

    先理解主被动的联接方式: FTP协议有两种工作方式:PORT方式和PASV方式,中文意思为主动式和被动式. Port模式:ftp server:tcp 21 client:dynamic Pasv模式 ...

  4. FTP的控制连接和数据连接分别是做什么的?主动模式和被动模式有什么区别?

    你知道FTP的控制连接和数据连接分别是做什么的吗? 你知道FTP的主动模式和被动模式有什么区别吗? 你知道实际工作中,会使用主动FTP还是被动FTP吗?又是为什么呢? 一. FTP的两种连接 FTP( ...

  5. ftp 传输数据:命令链路连接方法是一样的,而数据链路的建立方法就完全不同...

    0.FTP协议有两种工作方式:PORT方式和PASV方式,中文意思为主动式和被动式. PORT(主动)连接过程是:客户端向服务器的FTP端口(默认是21)发送连接请 求,服务器接受连接,建立一条命令链 ...

  6. 【工具】FTP软件FileZilla下载和连接服务器

    作为一名偏后台程序测试的测试工程师,经常会接触运维相关工作,与服务器打交道. 一般公司会搭建内网环境和外网环境,项目开发.SIT测试主要是在内网环境做,然后等到UTA.预投产阶段在外网环境. 如果公司 ...

  7. iOS 逆向编程(九 - 1)通过 USB 连接登录 iPhone 以及端口映射

    一.简介 之前操作都是通过 客户端(MAC)与 服务端(iPhone) 处于同一个 Wifi 下通过 SSH 进行连接. 这种方式有个问题,就是网速不是很好的时候,输入一个命令会等一会才会显示,因为你 ...

  8. mac 远程ftp服务器文件共享,mac远程连接ftp服务器配置

    mac远程连接ftp服务器配置 内容精选 换一换 使用Mac版Microsoft Remote Desktop工具,远程连接Windows云服务器.由于Mac系统的特殊性,在使用Mac系统远程登录Wi ...

  9. 禁用任何未使用的端口com_分享连接思科路由器控制台端口的正确设置

    当控制台电缆从PC的COM串行端口连接到思科路由器时,超级终端上不会出现路由器提示.垃圾邮件字符出现在超级终端上,路由器不再接受击键.看起来路由器挂起并且没有响应.这种情况出现时应该如何正确配置路由器 ...

最新文章

  1. 取消大小周的第一个周末,我吃了顿烤串
  2. iphone怎么投屏到电脑_手机怎么投屏到电脑?这几步轻松学会
  3. Python 爬虫系列:糗事百科最热段子
  4. netfilter与iptables表规则建立
  5. 使用jsp和tld实现javaweb开发
  6. 2019年第十届蓝桥杯 - 省赛 - C/C++大学A组 - A. 平方和
  7. java类什么时候卸载_java – Android:什么时候类被系统卸载?
  8. 大型网站架构设计系列总结
  9. MySQL 批量插入数据,单次插入多少条数据效率最高
  10. 调查VMware View Composer失败代码(2085204)
  11. 读书笔记_中国期货市场量化交易(李尉)03
  12. 阶段3 2.Spring_10.Spring中事务控制_6 spring基于XML的声明式事务控制-配置步骤
  13. vnpy 查询持仓量_Vnpy 中增加TD指标计算及BOLL指标的运行情况
  14. python -- 计算 平方、乘方、平方根_Python中math模块进行数学运算的示例
  15. 云服务器装桌面后怎么连接,云桌面具体的安装步骤是怎样的
  16. kaggle之员工离职分析
  17. 在Scrum中添加目标与合弄制
  18. Python实现智能语音播报功能
  19. 个人博客后台管理系统
  20. python输入文字光标变成黑块_pycharm鼠标光标变成黑色方块

热门文章

  1. 动态规划—1.3 九宫格最短路径
  2. 【Gorho】springboot整合Shiro+jwt 前后端分离 超级详细的shiro+jwt鉴权过程
  3. 刘汝佳算法竞赛入门经典第三章习题
  4. 计算机专业产品开发译码,计算机专业前景可好
  5. AD16在走线至焊盘时不能自动定位到焊盘中心
  6. H264及H265 I帧解析 [转]
  7. 在Linux中利用backtrace信息解决程序崩溃问题
  8. Asp.net core MVC paypal支付、回调——app支付
  9. TensorFlow学习--函数逼近(RBF神经网络)
  10. java poi 实现生成ppt