• FTP协议报文详解及FTP穿越NAT


    目录

     

    1、拓扑图

    2、FTP协议简介

    3、FTP工作原理

    3.1、主动连接(PORT)

    3.2、被动连接(PASV)

    3.3、FTP主动模式穿越SNAT原理

    3.4、FTP被动模式穿越DNAT原理

    4、问题思考

    4.1、主动模式和被动模式是谁决定的

    4.2、主动模式和被动模式是怎么协商出端口

    4.3、设想中间防火墙怎么识别子连接并给子连接放行

    4.4、思考NAT设备如何给子连接做地址转换

    4.5、下载两个文件,会每个文件开一个数据连接么

    4.6、列出目录,服务器发送目录列表,会使用数据连接传输么

    5、FTPipv4和ipv6的区别


    1、拓扑图

     

    2、FTP协议简介

    FTP 英文全称:File Transfer Protocol,中文全称:文件传输协议

    提供交互式的访问,对传输文件的格式和类型有分类,允许文件具有存取权限。适合异构网络任意计算机的传送。

    3、FTP工作原理

    FTP采用C/S架构,使用TCP可靠的传输服务。一个FTP服务器进程可同时为多个客户进程提供服务,FTP服务器检查有两大部分组成:一个主进程,负责接收新的请求,另外有若干的从属进程,负责处理单个请求,工作步骤如下:

    1. 建立TCP连接
    2. 打开熟知端口21(控制端口),使客户进程能够连接上
    3. 等待客户进程发链接请求。
    4. 启动从属进程来处理客户进程发来的请求。主进程与从进程并发执行,从属进程对客户进程的请求处理完毕后即终止。
    5. 回到等待状态,继续接收其他客户进程的请求。

    3.1、主动连接(PORT)

    1、主动连接介绍

    服务端通过制定端口号(20)主动与客户端建立数据连接,并向客户端发送数据。

    以下报文是SNAT转换后的报文,源IP(10.10.10.2)转换成出接口IP地址(192.168.10.114)

    2、报文拆分解释

    2.1、报文1-3:TCP建立三次握手,建立连接

     

    2.2、报文4:服务端(21端口)向客户端(49203端口)发送request报文。code字段表示新用户服务就绪,arg字段为服务器名称和服务器版本号

     

    2.3、报文5:客户端(49203端口)向服务端(21端口)发送request报文。command字段表示该报文里包含的是用户名,arg字段为用户名内容。

     

    2.4、报文6:服务端(21端口)回复response报文,code值为331,表示用户名可以,需要密码

    2.5、报文7:客户端(49203端口)向服务端(21端口)发送request报文,command字段表示该报文里包含的是密码,arg字段为密码内容。

     

    2.6、报文8:服务端(21端口)回复response报文,code值为230,表示用户已登录,请继续操作

    2.7、报文9:客户端(49203端口)向服务端(21端口)发送SYST报文,表示返回服务器使用的操作系统。

    2.8、报文10:服务端(21端口)回应系统类型,code字段为215,表示返回的是系统类型。arg字段为UNIX,表示系统类型是UNIX系统

    2.9、包11:客户端(49203端口)请求系统状态

    包12:服务端(21端口)回应系统状态,code字段为211,arg字段为特征列表

    2.10、包15:客户端(49203端口)PWD获取当前路径

    包16:服务端(21端口)返回当前路径

    包17:客户端(49203端口)CWD更改目录

    包18:服务端(21端口)返回修改后的目录

    包19:客户端(49203端口)PWD获取当前路径

    包20:服务端(21端口)返回当前路径

    2.11、包21:客户端(49203端口)请求使用ascii传输

    包22:服务端(21端口)响应,同意使用ascii传输

     

    2.12、包23:客户端(49203端口)发起主动连接,向服务端发送建立子连接的IP和端口

    包24:服务端(21端口)响应,同意使用客户端发送的IP端口建立子连接

    2.13、包26-28:FTP子连接三次握手建立TCP连接。

    2.14、包:30-32:服务端(20端口)向客户端(49204端口)发送数据。

    2.15、包33-37:数据传输完成,TCP断开连接

    2.16、包60-63:控制连接已断开,TCP四次挥手断开TCP连接

    3.2、被动连接(PASV)

    1、被动连接介绍

    服务端采用客户端建议使用被动模式,开启数据传输端口的监听,被动等待客户端的连接然后向客户端发送数据。

    以下报文是SNAT转换后的报文,源IP(10.10.10.2)转换成出接口IP地址(192.168.10.114)

    2、报文拆分解释

    2.1、TCP三次握手建立TCP连接

    2.2、报文4:服务端(21端口)向客户端(49206端口)。code字段表示新用户服务就绪,arg字段为服务器名称和服务器版本号

    2.3、报文5:客户端(49206端口)向服务端(21端口)发送request报文。command字段表示该报文里包含的是用户名,arg字段为用户名内容。

    2.4、报文6:服务端(21端口)回复response报文,code值为331,表示用户名可以,需要密码

    2.5、报文7:客户端(49206端口)向服务端(21端口)发送request报文,command字段表示该报文里包含的是密码,arg字段为密码内容。

    2.6、报文8:服务端(21端口)回复response报文,code值为230,表示用户已登录,请继续操作

    2.7、报文9:客户端(49206端口)向服务端(21端口)发送SYST报文,表示返回服务器使用的操作系统。

    2.8、报文10:服务端(21端口)回应系统类型,code字段为215,表示返回的是系统类型。arg字段为UNIX,表示系统类型是UNIX系统

    2.9、包11:客户端(49206端口)请求系统状态

    包12:服务端(21端口)回应系统状态,code字段为211,arg字段为特征列表

    2.10、包15:客户端(49206端口)PWD获取当前路径

    包16:服务端(21端口)返回当前路径

    包17:客户端(49206端口)CWD更改目录

    包18:服务端(21端口)返回修改后的目录

    包19:客户端(49206端口)PWD获取当前路径

    包20:服务端(21端口)返回当前路径

    2.12、包23:客户端(49206端口)向服务端请求建立被动连接

    包24:服务端(21端口)响应,同意建立被动连接,并且向客户端发送服务端的IP和监听端口

    2.13、包26-28:FTP子连接三次握手建立TCP连接。

    2.14、包:32-33:服务端(20端口)向客户端(49207端口)发送数据。

    2.15、包34-36:数据传输完成,TCP断开连接

    2.16、包59-62:控制连接已断开,TCP四次挥手断开TCP连接

    3.3、FTP主动模式穿越SNAT原理

    主动模式穿越SNAT主要用于FTP服务端在公网,客户端需要通过SNAT转换访问服务端。

    1、FTP客户端通过防火墙的SNAT访问FTP服务端时使用主动模式。

    2、当客户端发送PORT报文到服务端时,报文内的active ip address字段为10.10.10.2,active port字段为49217

    3、当穿越SNAT的时候,SNAT会把active ip address字段和active port字段改为转换后的IP和端口

    4、服务端收到经过SNAT后的PORT报文后,会给192.168.10.114发送响应报文。

    5、响应报文经过链接跟踪表,转发给客户端。

    3.4、FTP被动模式穿越DNAT原理

    被动模式穿越DNAT主要用于FTP服务端在私网,客户端需要通过DNAT转换后访问服务端。

    1、FTP客户端访问防火墙的10.10.10.1,进行DNAT转换,转换目的IP为192.168.10.114

    2、当客户端发送PASV报文到服务端后,服务端返回自己的监听IP和端口,passive ip address字段是192.168.10.115,passive port字段是62443

    3、当穿越DNAT的时候,DNAT会把passive ip address字段和passive port字段改为转换后的IP和端口

    4、客户端收到转换后的响应报文后,和转换后的响应报文进行建立数据连接

     

    4、问题思考

    4.1、主动模式和被动模式是谁决定的

    主动模式和被动模式是由客户端决定的,客户端请求建立数据连接时,发送PVSA报文,服务端就会建立被动连接;当客户端发送PORT报文时,服务端就会建立主动连接。

    4.2、主动模式和被动模式是怎么协商出端口

    主动模式协商端口

    1、客户端使用任意一个的非熟知权端口N(N>1024)与服务端建立FTP控制连接,然后客户端开始监听N+1端口。客户端向服务端21端口发送PORT报文,PORT报文里包含客户端监听的IP和N+1端口。

    2、服务端收到客户端的PORT报文后,使用客户端发送的IP和N+1端口与客户端建立数据连接。

    被动模式协商端口

    1. 客户端开启FTP连接时,会打开两个任意的非熟知端口(N > 1024和N+1)。N端口连接服务器的21端口。
    2. 客户端发送PVSA报文给服务端
    3. 服务器会开启一个任意的非熟知端口(P > 1024),并发送响应报文给客户端响应报文包含服务端IP和端口号P。
    4. 客户端发起从本地端口N+1到服务器的端口P建立数据连接。

    4.3、设想中间防火墙怎么识别子连接并给子连接放行

    被动模式:

    1. 客户端开启FTP连接时,会打开两个任意的非熟知端口(N > 1024和N+1)。N端口连接服务器的21端口。
    2. 客户端发送PVSA报文给服务端。
    3. 服务器会开启一个任意的非熟知端口(P > 1024),并发送响应报文给客户端,响应报文包含服务端子连接IP和端口P。
    4. 防火墙收到服务端的响应后,获取响应报文中子连接的IP和端口P。
    5. 客户端发起从本地端口N+1到服务器的子连接IP、端口P建立数据连接。
    6. 防火墙收到客户端发送的报文目的IP是子连接IP后,允许转发,并转发给服务器。

    4.4、思考NAT设备如何给子连接做地址转换

    主动模式:

    1. 客户端使用任意一个的非熟知端口N(N>1024)与服务端建立FTP控制连接
    2. 客户端监听N+1端口。
    3. 客户端向服务端21端口发送PORT报文建立子连接,PORT报文里包含客户端监听的IP和N+1端口。
    4. NAT设备获取PORT报文内的客户端IP和N+1端口
    5. NAT设备修改PORT报文内的客户端IP和N+1端口为自己的IP和端口,生成动态NAT
    6. 服务端收到客户端的PORT报文后,使用NAT转换后的IP和端口与客户端建立数据连接。
    7. NAT设备收到后,访问转换后的IP和端口,根据动态NAT转换为客户端子连接的IP和N+1端口,发送给客户端。

    4.5、下载两个文件,会每个文件开一个数据连接么

    FTP同时下载两个文件,FTP会为每个文件打开一个数据连接。


    1、下载文件test.txt,开启一条数据连接

    2、下载文件test1.txt,开启另一条数据连接

    4.6、列出目录,服务器发送目录列表,会使用数据连接传输么

    会使用数据连接发送目录列表,当数据连接建立完成后,服务器会向客户端发送当前路径和目录列表内容。

    5、FTPipv4和ipv6的区别

    控制连接请求(被动模式)

    IPv4使用PASV建立控制连接。PASV报文response报文的code字段为227(进入被动模式),arg字段为监听IP和端口。

    IPv6使用EPSV建立控制连接。EPSV报文response报文的code字段为229(进入被动模式),arg字段为监听端口

    控制连接请求(主动模式)

    IPv4使用PORT建立控制连接。请求时携带监听的IPv4地址和端口。PART报文response报文返回200

    IPv6使用EPRT建立控制连接。请求时携带监听的IPv6地址和端口。EPRT报文response报文返回200

     

  • 相关阅读:
    10个值得我们关注的python博客
    Python获取并修改hosts
    详解python2 和 python3的区别
    Python监控网站运行状况
    用Flask实现视频数据流传输
    Python框架 Flask 项目实战教程
    使用Flask设计带认证token的RESTful API接口[翻译]
    使用python的Flask实现一个RESTful API服务器端[翻译]
    使用单用户模式破解Linux密码
    Linux软件的安装与卸载
  • 原文地址:https://www.cnblogs.com/APeng2019/p/10719287.html
Copyright © 2020-2023  润新知