zoukankan      html  css  js  c++  java
  • 关于ftp的主动模式(Active Mode)和被动模式(Passive Mode)

    首先FTP协议是建立在TCP协议基础上的,所以client与server的每次交互都要经过三次握手(「TCP Three-Way Handshake)

    通过两张图进行解释

    1、主动模式(也叫做PORT模式、standard模式,需要利用服务器的21端口进行资料传输)


    说明:client端利用>1024的任意端口发起于server的21端口建立连接,建立“命令联系通道”,如果要发生资料传输,通过21告知server数据联系通道端口(也是一个>1024的端口例如1333),并进行listen,server利用20端口向client的1333端口发起连接,并建立“资料联系通道”。

    “资料联系通道”是由server主动建立的(步骤6),所以叫做“祖东模式”。

    局限性:client端在防火墙或IP分享服务器后面是,其“命令联系通道”可以顺利建立,但“资料联系通道”无法顺利建立。

    2、被动模式


     说明:建立“命令联系通道”的方式和主动模式基本一样,也是连接server的21端口。但是如果需要传输资料,client会送出PASV指令,告诉server要利用被动模式建立“资料联系通道”,然后server会打开一个>1024端口,并开始listen,并把这个端口好通过“命令联系通道”告知client,client再打开一个>1024的端口,与server建立“资料连接通道”。

    “资料连接通道”是由server被动建立的,所以称作“被动模式”。

    3、VSFTP关于主动模式被动模式的配置

     pasv_enable=YES    //开启被动模式,默认是YES

     pasv_min_port=3000  

     pasv_max_port=4000 //设置建立“资料联系通道”的端口范围,指定是为了利于server端防火墙设置

     pasv_promiscuous=YES(默认是N,设置为Y时,将关闭PASV模式的安全检查,该检查确保数据连接和控制连接是来自同一个IP地址,小心打开此选项,此选项唯一合理的用法是存在于由安全隧道方案构成的组织中)

    4、FTP命令行连接设置主动和被动模式

    windows的ftp命令默认是使用的主动方式连接FTP serer。

    linux默认是PASV模式,并通过passive on  | off  来进行切换

    5、实际中遇到的一个问题

    关于pasv_promiscuous=YES。

    没有设置此项时客户端连接服务器正常,但是执行“list”等命令时报

    425 Security: Bad IP connecting

    说明“资料联系通道”建立时发现与“命令联系通道”的IP不同,倒是连接诶失败。

    14:15:27.563 [main] INFO  c.b.c.util.ftp.EventListenerImpl - 返回结果: 220 (vsFTPd 2.0.5)

    14:15:27.564 [main] INFO  c.b.c.util.ftp.EventListenerImpl - 发送命令: ---> USER ws

    14:15:27.566 [main] INFO  c.b.c.util.ftp.EventListenerImpl - 返回结果: 331 Please specify the password.

    14:15:27.566 [main] INFO  c.b.c.util.ftp.EventListenerImpl - 发送命令: ---> PASS ********

    14:15:27.570 [main] INFO  c.b.c.util.ftp.EventListenerImpl - 返回结果: 230 Login successful.

    14:15:27.570 [main] INFO  c.b.c.util.ftp.EventListenerImpl - 发送命令: ---> TYPE I

    14:15:27.571 [main] INFO  c.b.c.util.ftp.EventListenerImpl - 返回结果: 200 Switching to Binary mode.

    14:15:27.571 [main] INFO  c.b.c.util.ftp.EventListenerImpl - 发送命令: ---> TYPE I

    14:15:27.571 [main] INFO  c.b.c.util.ftp.EventListenerImpl - 返回结果: 200 Switching to Binary mode.

    14:15:27.578 [main] INFO  c.b.c.util.ftp.EventListenerImpl - 发送命令: ---> SYST

    14:15:27.578 [main] INFO  c.b.c.util.ftp.EventListenerImpl - 返回结果: 215 UNIX Type: L8

    14:15:27.583 [main] INFO  c.b.c.util.ftp.EventListenerImpl - 发送命令: ---> PWD

    14:15:27.583 [main] INFO  c.b.c.util.ftp.EventListenerImpl - 返回结果: 257 "/"

    14:15:27.583 [main] INFO  c.b.c.util.ftp.EventListenerImpl - 发送命令: ---> PASV

    14:15:27.584 [main] INFO  c.b.c.util.ftp.EventListenerImpl - 返回结果: 227 Entering Passive Mode (200,200,200,8,119,147)

    14:15:27.586 [main] INFO  c.b.c.util.ftp.EventListenerImpl - 发送命令: ---> LIST

    14:15:27.587 [main] INFO  c.b.c.util.ftp.EventListenerImpl - 返回结果: 425 Security: Bad IP connecting.

    参考资料:

    http://www.phys.nthu.edu.tw/~cc/QA/vsftpd.pdf

    http://vsftpd.beasts.org/vsftpd_conf.html

    出处:https://www.iteye.com/blog/liang29731611-1585135

    您的资助是我最大的动力!
    金额随意,欢迎来赏!
    款后有任何问题请给我留言。

    如果,您认为阅读这篇博客让您有些收获,不妨点击一下右下角的推荐按钮。
    如果,您希望更容易地发现我的新博客,不妨点击一下绿色通道的关注我。(●'◡'●)

    如果对你有所帮助,赞助一杯咖啡!打             付款后有任何问题请给我留言!!!

    因为,我的写作热情也离不开您的肯定与支持,感谢您的阅读,我是【Jack_孟】!

  • 相关阅读:
    Windows CE Notification API的使用方法
    探讨如何成为技术团队管理者
    Android应用---基于NDK的samples例程hello-jni学习NDK开发
    在eclipse中配置android ndk的自动编译环境builders
    用javah 导出类的头文件, 常见的错误及正确的使用方法
    Android下NDK开发环境搭建
    Android系统修改硬件设备访问权限
    Android调试工具之ADB
    关于前端小白的一点小建议
    Vue.js简单实践
  • 原文地址:https://www.cnblogs.com/mq0036/p/15700803.html
Copyright © 2011-2022 走看看