昨天为了一个ftp问题折腾了一天。问题背景:原来有个接口涉及到上传文件,服务端更换了ftp服务器,我们这边需要刷新连接服务端的ip和端口配置,代码没动。联调环境和验收环境都测试通过,一到生产环境就歇菜了。我们手工连接ftp并上传文件正常,就是跑接口由程序上传不行。根据日志信息定位发现在登录ftp后程序做了两个事情,一个是把传输模式设置为二进制,一个是设置被动模式,用apache的Ftpclient实现:

ftpClient.enterLocalPassiveMode();

  从代码层面看不出问题,因为我们根本就没动,因此开始怀疑服务端配置问题,找他们确认后,他们的ftp服务器设置的就是被动模式。这里需要区别下主被动模式:主动模式下客户端通过命令端口(通常是21)连服务端后,服务端通过数据端口(通常是20)“主动”连接客户端;被动模式下客户端通过命令端口连接服务端后,服务端还是通过命令端口告诉客户端“我的XX数据端口可以连接,你过来吧”,于是客户端按该指定数据端口连接过去,服务端“被动”连接。命令端口就是传输ftp命令用的,数据端口就是上传下载文件用的。XX端口一般不固定且大于1024。既然服务端是被动模式,那么它会告知我们一个随机端口给我们去上传文件。服务端的命令端口是10000,开通了10001-10100作为数据端口。但现在不通,两边都说没问题,没办法,只能抓包:

220 "welcome to FOOBAR FTP service."

USER wlf

331 Please specify the password.

PASS 123

230 Login successful.

TYPE I

200 Switching to Binary mode.

PASV 

227 Entering Passive Mode (222,111,8,111,10,40)

500 OOPS: 

vsf_sysutil_recv_peek: no data

  让服务端改为主动模式重试,抓包结果一样。这说明只要我们程序里设置了客户端为被动模式,服务端无论初始设置是主动还是被动,都会按被动模式来进行,而问题很可能就出现在服务端再次发送过来的连接通道上,如果该通道对客户端不可达,那么必将导致客户端再次连接服务端上传文件失败。经确认,我们跟服务端之间是用内网连接的,登录时也是根据内网ip来的,从抓包看登录成功。而从报错的信息看,客户端设置了被动模式后服务端新建到客户端的连接使用的是经过NAT映射后的外网ip,就是上面那个222.111.8.111。客户端内网跟服务端外网网络是不通的,导致客户端到服务端新建的数据传输管道无法连通。

  综上所述,问题的解决方案有三个:要么服务端把外网ip改为内网ip,要么客户端使用主动模式上传文件,要么开通客户端内网到服务端外网的网络策略。第一个方案服务端不同意,理由是他们还有其他客户端,需要统一提供外网;第二个方案我不知道能否开通内网到内网映射的外网的网络策略,有待确认;所以最终只能我们改代码,客户端不再设置被动模式,把上面那一行设置被动模式的代码注释掉就可以了,默认就是按主动模式来的。

FTP上传失败报错227 Entering Passive Model (222,111,8,111,10,40)的更多相关文章

  1. Linux - xshell上传文件报错乱码

    xshell上传文件报错乱码,解决方法 rz -be 回车 下载sz  filename

  2. Azkban上传文件报错installation Failed.Error chunking

    azkaban 上传文件报错Caused by: java.sql.SQLException: The size of BLOB/TEXT data inserted in one transacti ...

  3. Tomcat上传文件报错:returned a response status of 403 Forbidden

    出现这样的错误是没有权限对服务器进行写操作.需要在这个项目所在的tomcat中配置可写操作即可: 在tomcat的web.xml添加下面代码: <init-param><param- ...

  4. rz上传文件报错:rpm Read Signature failed: sigh blob(1268): BAD, read returned 0

    上传文件报错: [root@www localdisk]# rpm -ivh cobbler* error: cobbler-2.8.4-4.el7.x86_64.rpm: rpm  Read  Si ...

  5. SecureCRT sftp上传文件报错:put: failed to upload xxx 拒绝访问

    1.问题 使用sftp上传文件时报错:put: failed to upload xxx 拒绝访问.类似下图所示: 2.原因 造成这个问题的原因可能有两个,一是要上到的那个目录剩余磁盘空间不足,二是打 ...

  6. IntelliJ cannot log in to GitHub上传github报错解决

    重装系统,新装的Intellij IDEA上新建的项目上传github失败,报错: invalid authentication token ... 此处多为本地git用户的用户名/邮箱,与之前设置的 ...

  7. hadoop上传文件报错

    19/06/06 16:09:26 INFO hdfs.DFSClient: Exception in createBlockOutputStream java.io.IOException: Bad ...

  8. 上传文件报错System.Net.ProtocolViolationException: 必须先将 ContentLength 字节写入请求流,然后再调用 [Begin]GetResponse。

    在上传文件的时候报错. 错误: System.Net.ProtocolViolationException: 必须先将 ContentLength 字节写入请求流,然后再调用 [Begin]GetRe ...

  9. 关于IE9中webdiriver使用autoit上传文件报错

    在ie9中, type="file"的元素是通过js打开的 webdirver结合autoit上传文件时,会报拒绝访问的错 sciTE编辑器中是这样写的: #include < ...

随机推荐

  1. JAVA基础补漏--多态

    Fu obj = new ZI(); 访问成员变量规则 编译看左,运行看左. obj.num; 1.直接通过对象名访问成员变量:看等号左右是谁,优先用谁,没有则往上找. obj.getnum(); 2 ...

  2. css常用知识点——思维导图

    如图 思维导图图片链接 http://www.edrawsoft.cn/viewer/public/s/21032425741486 有道云笔记图片链接 http://note.youdao.com/ ...

  3. c语言字符处理函数常见使用集合

    1.最近看一些开源项目代码时,总会看到 c 语言中一些  "str" 开头的处理字符串的用法,有的之前没用到过,特此记录,随时看到随时添加. 这里不提出源码,只是一些使用说明加例子 ...

  4. Hibernate -- 映射多对多双向关联关系

    1. 示例代码: Student.java package cn.itcast.many2many; import java.util.HashSet; import java.util.Set; @ ...

  5. Android ADT远程主机强迫关闭了一个现有的连接 Connection attempts: 1 解决方法

    adb有一个限制, 也可以说是bug.  当手机上同时运行的进程数大于64时, 就会引发adb奔溃. 更深层次的原因, 就是windows API的WaitForMultipleObjects所支持的 ...

  6. 扫描局域网中Gogs服务器(ruby)

    scanGogs.rb #!/usr/bin/env ruby require 'net/http' require 'thread' require 'english' # config CONFI ...

  7. Openstack Mitaka 负载均衡 LoadBalancerv2

    ​ 最近研究了一下Openstack负载均衡,yum源和源码级别的安装都尝试成功了.网上有很多文章都是LoadBalancerv1,这个已经被放弃了.所以写一下自己是如何使用LoadBalancerv ...

  8. (转)程序员应该知道的10个eclipse调试技巧

    调试不仅可以查找到应用程序缺陷所在,还可以解决缺陷.对于Java程序员来说,他们不仅要学会如何在Eclipse里面开发像样的程序,更需要学会如何调试程序.本文介绍了Java程序员必知的10个调试技巧, ...

  9. 四则运算生成与校检 Python实现

    GitHub地址 https://github.com/little-petrol/Arithmetic.git 合作者: 郭旭 和 卢明凯 设计实现过程 代码的组织主要分为两个部分: 算法与结构体的 ...

  10. New Concept English three (26)

    34w/m 54words No one can avoid being influenced by advertisements. Much as we may pride ourselves on ...