Ftp基础(二):被动模式与主动模式

  Ftp即文件传输协议,说白了就是处理文件操作的。可能你还听说过Ftps、SFtp,简单说一下他们的区别吧

    Ftps:可以理解为Ftp+Ssl,Ftp与Ftps的关系就类似Http和Https的关系
    SFtp:可以理解为Ftp+SSH

  总之,可以理解为Ftp就是明文传输,Ftps、SFtp采用了加密传输。

       好了,本文继续说说主动模式和被动模式,首先,我们先要知道Ftp的两个端口:  

    命令控制端口:用于发送FTP命令信息,默认是21
    数据传输端口:用于上传、下载文件数据,默认是20

  主动模式

    

    1、客户端首先打开随机端口A,连接到Ftp的命令控制端口(默认是21)
    2、客户端再次打开一个不同于A的随机端口B
    3、客户端使用PORT命令将打开的随机端口B发送给Ftp
    4、Ftp使用20端口连接到客户端打开的随机端口B
    5、Ftp和客户端使用20、B两个端口传输数据

  被动模式

  被动模式的数据发送流程大概是这个样子的

    

    1、客户端首先打开随机端口A,连接到Ftp的命令控制端口(默认是21)
    2、然后客户端发送PASV命令到Ftp服务端,然后Ftp将会打开一个随机端口B(端口号大于1023小于65535)
    3、Ftp将打开的随机端口B发送给客户端
    4、客户端再次打开一个不用于A的随机端口C,连接到Ftp打开的随机端口B
    5、Ftp和客户端使用B、C两个端口传输数据

  优缺点  

    主动模式:方便服务端管理,Ftp服务端只开启了一个20端口用来传输数据,但是不方便客户端的管理。
              因为数据传输连接由Ftp服务端发起,如果Ftp服务端开启了防火墙,只需要放行21端口,
              如果客户端开启了防火墙,需要放行一段端口,否则可能导致连接失败
              
    被动模式:方便客户端管理,因为数据传输连接由客户端发起,
              如果Ftp服务端开启了防火墙,那么需要在Ftp上放行一段接口,这个相对容易实现。
              客户端是否开启了防火墙,对被动模式没什么影响。

  现实中,我们一般是只有一个服务端多个客户端,而且往往客户端是个人电脑,那么多数时候是开启了防火墙的,隐藏往往被动模式更适合大多数人。

  验证

  最后再说一个问题,我们怎么验证一个Ftp服务端是支持主动模式还是被动模式?

  经过验证,如果不使用代码的情况下和安装第三方软件的情况下,一般有两个办法:

  1、使用资源管理器验证,但是这个情况下只能验证是否支持被动模式,如果资源管理器能打开,那么表示支持被动模式

  2、使用Telnet来验证,比如有个ftp地址:10.255.0.162,

  验证是否支持被动模式:     

    # 打开cmd,使用telnet连接到21端口
    telnet 10.255.0.162 21
    # 使用USER、PASS命令登录
    USER ftp_user
    PASS 123456
    # 发送PASV命令,告诉Ftp表示一个被动连接
    PASV

  如果最后的结果显示下面的结果,则表示支持被动模式,同时可以从下面的结果中看到,服务端开启了一个端口16523(64*256+139):

  

  否则表示不支持被动模式:

  

  验证是否支持主动模式

    # 打开cmd,使用telnet连接到21端口
    telnet 10.255.0.162 21
    # 使用USER、PASS命令登录
    USER ftp_user
    PASS 123456
    # 使用PORT命令随便发送一个端口,告诉Ftp表示一个主动连接
    PORT 58899

  如果显示的结果是类似下面的样子,说明支持主动模式。

  

  你可能会说,这不是报错了么,其实这个是因为我们发给Ftp服务端的端口未打开导致的,如果不支持主动模式的话,会返回550代码,而不是500代码:

  

  总结

  Ftp的主动模式和被动模式其实就是区分数据传输连接的发起方,如果是由Ftp服务端发起,那么就是主动模式,如果是由客户端发起,那么就是被动模式。

  如果你对主动模式和被动模式犹豫不决,那么可以优先选择被动模式,或者两个一起用。

 

posted @ 2023-09-30 16:51  没有星星的夏季  阅读(1908)  评论(0编辑  收藏  举报