Проблема со списком файлов JAVA FTPSClient

Я использую библиотеку apache commons-net 3.6 для подключения к серверу FTPS. Сервер FTPS находится за сторонним NAT. и я не могу изменить какие-либо настройки на стороне сервера. Я могу войти на сервер, но не могу просматривать файлы. Я попробовал тот же код с некоторыми общедоступными серверами 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.

Может кто-нибудь помочь мне? Что не так с моим кодом?


person ali    schedule 20.04.2017    source источник
comment
Это может быть глупый ответ, но вы написали, что Filezilla может успешно подключаться и отображать файлы, чтобы вы могли видеть файлы, а не каталог, возможно, каталог является частным, но не файлы, поэтому попробуйте FTPFile[] files1 = ftps.listFiles() ;   -  person Liz Lamperouge    schedule 20.04.2017
comment
ЛизЛамперуж, я уже пробовала. та же ошибка   -  person ali    schedule 20.04.2017
comment
хорошо, вы уверены, что находитесь в правильном каталоге? попробуйте ftps.printWorkingDirectory(); ftps.changeWorkingDirectory(/directory);   -  person Liz Lamperouge    schedule 20.04.2017
comment
Да. Я уверен. Я пытался, но не работает   -  person ali    schedule 20.04.2017
comment
Очень странно, у меня точно такой же код, как у вас, но в другом порядке, но я не в этом проблема; Я также вижу, что использую apache commons-net 3.4 вместо 3,6. Попытайся   -  person Liz Lamperouge    schedule 20.04.2017
comment
Я могу легко подключаться к общедоступным серверам и просматривать файлы. Я думаю, что проблема с серверами, которые находятся за NAT   -  person ali    schedule 21.04.2017
comment
Любые другие предложения?   -  person ali    schedule 25.04.2017


Ответы (1)


Итак, мой вывод: проблема не связана с технологией NAT, apache-commons 3.6 не обрабатывает все параметры FTPS должным образом. Как я упоминал ранее, мы интегрировались со сторонней организацией и не имели возможности изменить настройки FTPS, по крайней мере, мы установили ftp-сервер filezilla и смогли воспроизвести ошибку. К счастью, я нашел решение по адресу http://eng.wealthfront.com/2016/06/10/connecting-to-an-ftps-server-with-ssl-session-reuse-in-java-7-и-8/ Люка Хансена. Большое спасибо ему

person ali    schedule 12.07.2017