如何使用 Camel FTP 处理 "Host attempting data connection x.x.x.x is not the same as server y.y.y.y" 错误?

How to handle "Host attempting data connection x.x.x.x is not the same as server y.y.y.y" error with Camel FTP?

我正在尝试使用 Camel FTP Producer 将文件发送到第三方 ftp 服务器(由 Amazon 托管),我遇到了一个问题Writing File failed with: File operation failed... Host attempting data connection x.x.x.x is not the same as server y.y.y.y 我以前没见过。

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

y.y.y.y IP 地址是 nslookup 为目标域列出的 IP 地址之一,因此该位有意义。但是,x.x.x.x IP 与不同的 Amazon 托管服务器相关,因此我假设已经执行了某种切换或负载平衡,而 FTP 客户端不喜欢这样。

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

我对 ftp 服务器提供商没有影响,所以很遗憾,除了我的客户端选项,我不能改变任何东西。

感谢观看!

在对 Apache Commons 的源代码进行一些挖掘和 grep 之后 FTP,有问题的消息是由客户端中的验证引起的,该验证检查被动模式连接是否与初始服务器连接相同.

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

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

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

然后在 FTP

的 URI 中引用此对象
ftp://user@host:21/path?password=xxxx&passiveMode=true&tempPrefix=part.&ftpClient=#FTPClient

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