Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何处理;尝试数据连接的主机x.x.x.x与服务器y.y.y.y“不同”;骆驼FTP出错?_Java_Ftp_Apache Camel_Apache Commons Net - Fatal编程技术网

Java 如何处理;尝试数据连接的主机x.x.x.x与服务器y.y.y.y“不同”;骆驼FTP出错?

Java 如何处理;尝试数据连接的主机x.x.x.x与服务器y.y.y.y“不同”;骆驼FTP出错?,java,ftp,apache-camel,apache-commons-net,Java,Ftp,Apache Camel,Apache Commons Net,我正试图用Camel ftp生产者将文件发送到第三方ftp服务器(看起来是由Amazon托管的),我遇到了一个问题,即写入文件失败:文件操作失败。。。尝试数据连接x.x.x.x的主机与服务器y.y.y.y不一样,我以前从未见过这种情况 生产者配置为被动模式,根据跟踪级别的日志,这是启用的。(尽管错误消息听起来更像是与活动模式问题有关) y.y.y.yIP地址是nslookup为目标域列出的地址之一,因此该位是有意义的。但是,x.x.x.xIP与不同的Amazon主机服务器相关,因此我假设已经执行

我正试图用Camel ftp生产者将文件发送到第三方ftp服务器(看起来是由Amazon托管的),我遇到了一个问题,即写入文件失败:文件操作失败。。。尝试数据连接x.x.x.x的主机与服务器y.y.y.y不一样,我以前从未见过这种情况

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

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

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

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


谢谢你的关注

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

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

通过创建FTPClient的特定实例并将remove-verification设置为off,可以使用Camel-FTP修复此问题

FTPClient ftp = new FTPClient();
ftp.setRemoteVerificationEnabled(false);
registry.put("FTPClient", ftp);
然后在FTP的URI中引用此对象

ftp://user@主机:21/path?password=xxxx&passiveMode=true&tempPrefix=part&ftpClient=#ftpClient

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

检查代码,它实际上看起来像是一个意外的行为,甚至是一个bug。
setRemoteVerificationEnabled
更适合于主动模式(“此外,出于安全目的,对客户端的所有数据连接进行验证,以确保它们源自预期方(主机和端口)”,而实际上它甚至适用于被动连接。这可能是个错误。如果这是预期的行为,
FTPClient
将拒绝已发出的
PASV
命令响应,并且不会连接到其他IP地址,只会立即断开连接。@MartinPrikryl您确实说过这听起来像是活动模式问题。谢谢至少我现在有了一个解决办法。我真的想让你知道你在这个问题上的努力是多么值得赞赏。当你找到解决方案时,你本可以不回答这个问题,但你没有,这对我今天很有帮助。真诚地,谢谢你。谢谢你的回答。也可以在端点URI
上简单地将此选项引用到(“ftps://my.ftp.server/some_path?passiveMode=true&ftpClient.remoteVerificationEnabled=false“”