捷克200套UR51出货新版本FTP问题(FTP主动模式无法正常传输数据问题)
FTP alg功能
普通NAT实现了对UDP或TCP报文头中的的IP地址及端口转换功能,但对应用层数据载荷中的字段无能为力,在许多应用层协议中,比如多媒体协议(H.323、SIP等)、FTP、SQLNET等,TCP/UDP载荷中带有地址或者端口信息,这些内容不能被NAT进行有效的转换,就可能导致问题。而NAT ALG(Application Level Gateway,应用层网关)技术能对多通道协议进行应用层报文信息的解析和地址转换,将载荷中需要进行地址转换的IP地址和端口或者需特殊处理的字段进行相应的转换和处理,从而保证应用层通信的正确性。
FTP应用就由数据连接和控制连接共同完成,而且数据连接的建立动态地由控制连接中的载荷字段信息决定,这就需要ALG来完成载荷字段信息的转换,以保证后续数据连接的正确建立
FTP数据连接的协商分为两种模式,一种是主动模式,另一种是被动模式。
主动模式的特点是,在客户端和服务器端要进行文件传递时,首先是客户端使用一个报文告诉服务器端,它将用某个IP地址的某个端口作为数据连接(这个信息就是报文的载荷),也就是通常说的PORT命令。服务器端收到这个报文后,回应一个同意的ACK报文,然后服务器端会主动用自己的IP地址加上端口20来发送一个SYN报文到客户端通过PORT命令告诉它的那个IP地址和端口,和客户端建立起一个数据连接。
主动FTP:
命令连接:客户端 >1023端口 -> 服务器 21端口
数据连接:客户端 >1023端口 <- 服务器 20端口
被动模式的特点是,在客户端和服务器端要进行文件传递时,首先是服务器端通过一个报文告诉客户端,它将用那一个IP地址的那一个端口作为数据连接(该报文以命令字227开始),也就是PASV命令。客户端收到这个报文之后,回应一个同意的ACK报文。然后客户端会用自己的IP地址,然后任选一个能够使用的端口(注意:通常情况下都不是20)和服务器端告诉它的那个IP地址和端口相连接,建立数据连接。
被动FTP:
命令连接:客户端 >1023端口 -> 服务器 21端口
数据连接:客户端 >1023端口 -> 服务器 >1023端口
主动模式需要alg支持才能正常工作,被动模式不需要alg支持
一、测试环境:
我的电脑 WINSCP软件模拟FTP客户端 进行测试
路由器设备给终端提供网络接入,终端作为FTP客户与客户的FTP服务端连接(FTP需要禁用Passive模式,即使用主动模式进行上传文件)
FTP server is speedtest.tele2.net (90.130.70.73), login anonymous.FTP客户端使用WISCP模拟。


抓取lan口的包查看
1> active 模式:
1. 在active模式下,如下图抓的包中,在命令连接部分(ftp类型的包),client端使用的端口是 65181,这个端口是大于1024的任意端口,ftp server端用的端口是21
2.如下图,在active模式下,要传输数据时,ftp client告诉server数据传输联系端口 65182 (大于1024的任意端口),并进行listen,
正常的流程是server端用端口20主动和client端65182建立数据传输通道,并传输数据。这里是server知道 了client端的数据通道监听端口后,主动建立了数据传输通道,所以是主动模式。
然而这边的打印是传输通道建立失败
建立失败的可能原因一:响应发送的端口与原来请求的端口不一致,导致不能正常建立连接

后面继续抓网络出口包,否定上面的猜测,下面的65181可能是重新请求建立的连接 与上一个连接请求过程无关

【问题现象】捷克200套UR51出货新版本FTP问题lan下面电脑通过5X ,用ftp 客户端主动模式,访问失败
【产生原因】ftp主动模式下服务器收到了客户端内网发给服务端数据传输的端口,但是服务端从20端口发出去的数据是内网ip和当前的数据传输端口,数据只能到蜂窝进入不了内网是因为未添加 FTP ALG 当前数据只能到达蜂窝接口,不能被NAT进行有效的转换,从而连接建立失败
【解决方案】修改内核的默认值/proc/sys/net/netfilter/nf_conntrack_helper 默认值为1
【测试结果】winscp模拟客户端通过lan口下的设备上网上传ftp文件到服务端正常,抓包,数据传输端口和20端口正常交互且数据正常传输
建立失败的可能原因三:当前的ftp client比较强大,当主动模式不通时会自动切换成被动模式,所以加不加alg都能正常工作,用户感觉不出来, 主动模式连接后自动换成被动模式导致当前连接的端口出现变化 连接失败

标识1 :表示当前的主动模式告诉ftp服务器使用 65182 的端口来访问ftp client.
标识2: 表示主动模式请求失败,client 主动切换成了被动模式
标识3: 表示数据传输使用的是被动模式,端口与之前请求的端口已经不一致了
修改后可以正常访问23.40与上面的1.100都是表示为 FTP 客户端


标识1 :表示当前的主动模式告诉服务器使用52049的端口来访问ftp client.
标识2: 表示主动模式请求成功。
标识3: 表示服务端成功使用端口52049来进行数据传输
参考文档:
https://blog.csdn.net/huyb100/article/details/82625749
https://www.cnblogs.com/lnlvinso/p/8947369.html
捷克200套UR51出货新版本FTP问题(FTP主动模式无法正常传输数据问题)的更多相关文章
- FTP服务器访问主动模式、被动模式
在公司里面,经常需要访问外网FTP取资料等情况.但是有时用windows界面访问经常遇到各种问题. 下面介绍两种客户端是如何访问ftp服务器. 首先我们需要说明:防火墙,是阻拦外界与内部的通讯的一道关 ...
- FTP协议的主动模式和被动模式的区别
最近准备做一个<FtpCopy系列教程>,主要讲解Ftp协议主动模式和被动模式的区别.以及FTP服务器的安装部署,然后通过几个常用实例演示,详细讲解如何使用FtpCopy进行数据自动备份. ...
- FTP的主动模式与被动模式
FTP服务器使用20和21两个网络端口与FTP客户端进行通信. FTP服务器的21端口用于传输FTP的控制命令,20端口用于传输文件数据. FTP主动模式: FTP客户端向服务器的FTP控制端口(默认 ...
- FTP 传输中的主动模式和被动模式
最近做一个项目用到FTP和其它系统进行文件传输,结果在FTP网络连接的问题上花了很多时间,由于太久没搞多FTP,忘记了FTP不单单开放21端口,客户端采用不同连接模式对网络有不同.在此重温一下FTP的 ...
- FTP之主动模式vs被动模式
背景说明 最近有个项目涉及到FTP的上传下载问题.在本地开发好的程序测试的时候能正常获取FTP内容,但一放到生产上却显示connection timeout,无法连接.经过一些研究,发现是防火墙造成的 ...
- FTP的主动模式和被动模式
摘自http://blog.csdn.net/love_gaohz/article/details/50723164 http://my.oschina.net/binny/blog/17469 FT ...
- ftp主动模式与被动模式交互过程分析
1.相关介绍 1.1主动模式和被动模式 主动模式:服务端通过指定的数据传输端口(默认20),主动连接客户端提交的端口,向客户端发送数据. 被动模式:服务端采用客户端建议使用被动模式,开启数据传输端口的 ...
- FTP 两种连接模式
简介 FTP协议要用到两个TCP连接, 一个是命令连接,用来在FTP客户端与服务器之间传递命令:另一个是数据连接,用来上传或下载数据.通常21端口是命令端口,20端口是数据端口.当混入主动/被动模式的 ...
- FTP的PORT(主动模式)和PASV(被动模式)
最近做一个项目用到FTP和其它系统进行文件传输,结果在FTP网络连接的问题上花了很多时间,由于太久没搞多FTP,忘记了FTP不单单开放21端口,客户端采用不同连接模式对网络有不同.在此重温一下FTP的 ...
随机推荐
- 第二十二章 集成验证码——《跟我学Shiro》
目录贴:跟我学Shiro目录贴 在做用户登录功能时,很多时候都需要验证码支持,验证码的目的是为了防止机器人模拟真实用户登录而恶意访问,如暴力破解用户密码/恶意评论等.目前也有一些验证码比较简单,通过一 ...
- Pychar调用远程编译器的环境配置
版本:2019最新专业版
- P1020 【导弹拦截】
题目连接嘤嘤嘤~~ 这个题目还是比较难的(至少对我来说是酱紫的嘤嘤嘤).. 第一问,看题解好像用的都是DP,但其实可以用二分,求最长不上升子序列,因为只要输出答案,不用输出方案,时间复杂度n leg( ...
- Spark学习笔记0——简单了解和技术架构
目录 Spark学习笔记0--简单了解和技术架构 什么是Spark 技术架构和软件栈 Spark Core Spark SQL Spark Streaming MLlib GraphX 集群管理器 受 ...
- VBA实现打开Excel文件读取内容拷贝Format且加超链接
'-------------------一覧取得----------------------------- Sub getRedmineGrid_Click() Dim wb As Workbook ...
- jqGrid取消所有选中
// 获取所有选中行id var jqGridRowid=$("#jqGrid").jqGrid("getGridParam","selarrrow& ...
- java读写cookie中文乱码解决方法
1.写入的时候: public boolean addCookie( HttpServletRequest req, HttpServletResponse resp){ //创建 Cookie co ...
- MySQL创建用户、为用户授权
一.创建用户 1.root用户(管理员)登录,进入mysql数据库 mysql> use mysql Database changed 2.创建用户 1.创建用户: # 指定ip:192.168 ...
- python学习-49 json模块
json模块 --------将任何类型都转换为json字符串 方法dumps import json dic={"name":"abc"} data = js ...
- python笔记006-文件操作
1文件操作... 1 1.1打开和关闭文件... 1 1.1.2 open函数... 1 1.2 文件 File对象的属性... 1 1.2.1 属性... 1 1.2.2 方法... 2 1.2.3 ...