【问题标题】:Socket timeout during listNames() in FTPS clientFTPS 客户端中 listNames() 期间的套接字超时
【发布时间】:2013-02-28 00:31:21
【问题描述】:

我们正在使用 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 数据包,但在我们的实现中我们不发送此类数据包。我们认为这可能是问题的原因,但我们不确定如何解决。

【问题讨论】:

    标签: java ftp ftp-client apache-commons-net ftps


    【解决方案1】:

    我会询问您实际运行的代码以了解更多详细信息。

    但是作为初步响应,由于我遇到了类似的问题,请检查 apache commons 是否真的以面向对象的方式构建请求,而是在您调用它时将每个命令发送到服务器(例如调用 ftpClient.enterLocalPassiveMode()将立即发送 PASV),因此可能会造成一些混乱。 在这方面,这种情况下更可能的错误是没有在正确的时间(连接后,登录前)进入被动模式。

    如果列表名称不起作用,则可能没有任何作用。

    【讨论】:

    • 事实证明 FTP 服务器没有遵循协议,因此 apache.commons 过早地终止了连接。你的回答实际上帮助了我,谢谢@fd8s0
    猜你喜欢
    • 2011-07-31
    • 2017-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多