提问者:小点点

如何处理"主机尝试数据连接x. x.x.x与服务器y.y.y.y不同"错误与骆驼FTP?


我试图发送一个文件到第三方ftp服务器(由亚马逊托管它会出现)与骆驼FTP生产者,我有一个问题,我得到写入文件失败:文件操作失败…主机尝试数据连接x. x.x.x是不一样的服务器y.y.y.y这是我以前没有见过的。

生产者被配置为处于被动模式,根据TRACE级别的日志,这是启用的。(尽管错误消息听起来更像是与主动模式问题有关)

y. y.y.yIP地址是nslookup为目标域列出的地址之一,因此这一点是有意义的。然而,x.x.x.xIP与不同的亚马逊托管服务器相关,因此我假设已经执行了某种移交或负载平衡,FTP客户端不喜欢这样。

是否有某种方式配置骆驼FTP以允许此操作(我假设这是一个安全功能),或者被动模式是否应该允许此操作?

我对ftp服务器提供程序没有影响,所以不幸的是,除了我的客户端选项之外,我无法更改任何内容。

感谢寻找!


共1个答案

匿名用户

经过一番挖掘,并对Apache CommonsFTP的源代码进行了grep处理,所讨论的消息是由客户端中的验证引起的,该验证检查被动模式连接与初始服务器连接相同。

鉴于这似乎是一个负载平衡的系统,被动模式数据连接与目标IPIP不同,因此无法通过验证。

可以使用CamelFTP通过创建FTPClient的特定实例并设置删除验证关闭来修复它。

FTPClient ftp = new FTPClient();
ftp.setRemoteVerificationEnabled(false);
registry.put("FTPClient", ftp);

然后在URI中引用这个对象进行FTP

ftp://user@host:21/path?password=xxxx&passiveMode=true&tempPrefix=part.&ftpClient=#FTPClient

显然,通过禁用此远程验证测试,您会使自己更容易受到FTP数据被重定向或拦截以及您的数据被发送到您不打算的地方的影响,但我想如果您担心您不会使用仍然首先使用未加密的FTP。