JAVA FTPSClient 文件列表问题
JAVA FTPSClient file listing issue
我正在使用 apache commons-net 3.6 库连接 FTPS 服务器。 FTPS服务器在第三方NAT之后。而且我无法更改服务器端的任何设置。
我可以登录服务器,但无法列出文件。我已经用一些 public FTP 和 FTPS 服务器尝试了相同的代码,结果是成功的。似乎他们不在 NAT 后面。但是 filezilla 可以成功连接并列出来自我有问题的服务器的文件。
有我的代码
ftps.connect(server, port);
System.out.println("Connected to " + server + ".");
reply = ftps.getReplyCode();
ftps.enterLocalPassiveMode();
if (!FTPReply.isPositiveCompletion(reply)) {
ftps.disconnect();
System.err.println("FTP server refused connection.");
System.exit(1);
}
if (!ftps.login(username, password)) {
ftps.logout();
}
// ftps.setEnabledSessionCreation(false);
ftps.feat();
ftps.execPBSZ(0);
ftps.execPROT("P");
ftps.setFileType(FTP.BINARY_FILE_TYPE);
FTPFile dirs[] = ftps.listDirectories();
还有我的 ftps 日志:
220 FTP Server ready.
AUTH TLS
234 AUTH TLS successful
Connected to x.x.x.x
USER *******
331 Password required for azercell
PASS *******
230 User myuser logged in
FEAT
211-Features:
MDTM
MFMT
LANG bg-BG;en-US;fr-FR;it-IT;ja-JP;ko-KR;ru-RU;zh-CN;zh-TW
TVFS
UTF8
AUTH TLS
MFF modify;UNIX.group;UNIX.mode;
MLST modify*;perm*;size*;type*;unique*;UNIX.group*;UNIX.mode*;UNIX.owner*;
PBSZ
PROT
REST STREAM
SIZE
211 End
PBSZ 0
200 PBSZ 0 successful
PROT P
200 Protection set to Private
TYPE I
200 Type set to I
SYST
215 UNIX Type: L8
PASV
227 Entering Passive Mode (192,168,2,50,192,12).
[Replacing PASV mode reply address 192.168.2.50 with x.x.x.x]
LIST
150 Opening BINARY mode data connection for file list
425 Unable to build data connection: Operation not permitted
我读过 3.6 版之前的 commons-net 库之前无法正确处理 NAT 连接。
谁能帮帮我?我的代码有什么问题?
所以我的结论是问题与 NAT 技术无关,apache-commons 3.6 没有正确处理所有 FTPS 选项。正如我之前提到的,我们正在与第 3 方集成并且没有更改 FTPS 设置的选项,至少我们安装了 filezilla ftp 服务器并且能够重现错误。幸运的是,我在 Luke Hansen 的 http://eng.wealthfront.com/2016/06/10/connecting-to-an-ftps-server-with-ssl-session-reuse-in-java-7-and-8/ 找到了解决方案。非常感谢他
我正在使用 apache commons-net 3.6 库连接 FTPS 服务器。 FTPS服务器在第三方NAT之后。而且我无法更改服务器端的任何设置。 我可以登录服务器,但无法列出文件。我已经用一些 public FTP 和 FTPS 服务器尝试了相同的代码,结果是成功的。似乎他们不在 NAT 后面。但是 filezilla 可以成功连接并列出来自我有问题的服务器的文件。 有我的代码
ftps.connect(server, port);
System.out.println("Connected to " + server + ".");
reply = ftps.getReplyCode();
ftps.enterLocalPassiveMode();
if (!FTPReply.isPositiveCompletion(reply)) {
ftps.disconnect();
System.err.println("FTP server refused connection.");
System.exit(1);
}
if (!ftps.login(username, password)) {
ftps.logout();
}
// ftps.setEnabledSessionCreation(false);
ftps.feat();
ftps.execPBSZ(0);
ftps.execPROT("P");
ftps.setFileType(FTP.BINARY_FILE_TYPE);
FTPFile dirs[] = ftps.listDirectories();
还有我的 ftps 日志:
220 FTP Server ready.
AUTH TLS
234 AUTH TLS successful
Connected to x.x.x.x
USER *******
331 Password required for azercell
PASS *******
230 User myuser logged in
FEAT
211-Features:
MDTM
MFMT
LANG bg-BG;en-US;fr-FR;it-IT;ja-JP;ko-KR;ru-RU;zh-CN;zh-TW
TVFS
UTF8
AUTH TLS
MFF modify;UNIX.group;UNIX.mode;
MLST modify*;perm*;size*;type*;unique*;UNIX.group*;UNIX.mode*;UNIX.owner*;
PBSZ
PROT
REST STREAM
SIZE
211 End
PBSZ 0
200 PBSZ 0 successful
PROT P
200 Protection set to Private
TYPE I
200 Type set to I
SYST
215 UNIX Type: L8
PASV
227 Entering Passive Mode (192,168,2,50,192,12).
[Replacing PASV mode reply address 192.168.2.50 with x.x.x.x]
LIST
150 Opening BINARY mode data connection for file list
425 Unable to build data connection: Operation not permitted
我读过 3.6 版之前的 commons-net 库之前无法正确处理 NAT 连接。
谁能帮帮我?我的代码有什么问题?
所以我的结论是问题与 NAT 技术无关,apache-commons 3.6 没有正确处理所有 FTPS 选项。正如我之前提到的,我们正在与第 3 方集成并且没有更改 FTPS 设置的选项,至少我们安装了 filezilla ftp 服务器并且能够重现错误。幸运的是,我在 Luke Hansen 的 http://eng.wealthfront.com/2016/06/10/connecting-to-an-ftps-server-with-ssl-session-reuse-in-java-7-and-8/ 找到了解决方案。非常感谢他