apache.commons.net v.2.2を使用して独自のFTPSクライアントを作成しており、apache.commons.net.ftp.FTPClientでlistNames()を使用しようとしていますが、apache.commons.net.ftpでタイムアウトになっています。 .FTPListParseEngine.java行152
String line = this.parser.readNextEntry(reader);
クライアントがTLSを使用して認証し、データを転送する前にCCCモードにドロップする必要があります。サーバーに接続して現在の作業ディレクトリを取得することはできますが、LIST/RETRコマンドがタイムアウトします。これは、現在の実装のログです。
FTPS: Connecting to: XXXXXXXXXXXXXXXXX.com
FTPS: REPLY: 220 UNAUTHORIZED ACCESS TO THIS SYSTEM IS STRICTLY PROHIBITED.
FTPS: COMMAND: AUTH TLS
FTPS: REPLY: 234 AUTH TLS-C/TLS OK.
FTPS: Switching to passive mode in the middle of a session
FTPS: Logging in with user: XXXXXXXXX
FTPS: COMMAND: USER XXXXXXXXXXXX
FTPS: REPLY: 331 Password required for XXXXXXXXXXX.
FTPS: COMMAND: PASS **********
FTPS: REPLY: 230 Connect:Enterprise UNIX login ok, access restrictions apply.
FTPS: COMMAND: PBSZ 0
FTPS: REPLY: 200 PBSZ 0 OK.
FTPS: COMMAND: PROT P
FTPS: REPLY: 200 PROT P OK, data channel will be secured.
FTPS: Dropping to CCC mode
FTPS: COMMAND: CCC
FTPS: REPLY: 200 CCC Context Enabled.
FTPS: Setting Transfer Type to Binary
FTPS: COMMAND: TYPE I
FTPS: REPLY: 200 Type set to I.
FTPS: COMMAND: SYST
FTPS: REPLY: 215 UNKNOWN Type: L8
ftpClient.getSystemType() UNKNOWN Type: L8
FTPS: COMMAND: PWD
FTPS: REPLY: 257 "/XXXXXXXXXXXXX" is current directory.
FTPS: COMMAND: PASV
FTPS: REPLY: 227 Entering Passive Mode (XXX,XXX,XXX,XXX,XXX,XXX)
FTPS: COMMAND: LIST
FTPS: REPLY: 150 Opening BINARY mode data connection for ...
FTPS: java.lang.RuntimeException: java.net.SocketTimeoutException: Read timed out
Wiresharkでは、他のクライアントがデータ接続を開いた直後にFTP-DATAパケットを送信することに気付きましたが、私たちの実装では、そのようなパケットを送信しません。これが問題の原因である可能性がありますが、修正方法がわかりません。