You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@commons.apache.org by "Jefferson Madalena (JIRA)" <ji...@apache.org> on 2015/08/01 23:29:04 UTC

[jira] [Comment Edited] (NET-578) FTPS client through http proxy

    [ https://issues.apache.org/jira/browse/NET-578?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14650539#comment-14650539 ] 

Jefferson Madalena edited comment on NET-578 at 8/1/15 9:28 PM:
----------------------------------------------------------------

I downloaded the source code of commons-net 3.3 and implemented my own FTPS client through HTTP Proxy.
It has a problem when calling the method keepAlive, is giving the exception "java.net.SocketTimeoutException: Read timed out". I don't know what is causing this error. For my implementation is ok, because I'm not using this feature.

Follow implemented customizations:
In FTPClient.java I created the method:
protected int getDataTimeout()
    {
        return __dataTimeout;
    }

In FTPSClient.java I created the method:
protected SSLContext getContext() {
        return context;
    }

Created the class FTPSHTTPClient.java (is attached).
Created the class FTPSHTTPClientTest.java for tests  (is attached).


was (Author: jeffemada):
I downloaded the source code of commons-net 3.3 and implemented my own FTPS through HTTP Proxy client.
It has a problem when calling the method keepAlive, is giving the exception "java.net.SocketTimeoutException: Read timed out". I don't know what is causing this error. For my implementation is ok, because I'm not using this feature.

Follow implemented customizations:
In FTPClient.java I created the method:
protected int getDataTimeout()
    {
        return __dataTimeout;
    }

In FTPSClient.java I created the method:
protected SSLContext getContext() {
        return context;
    }

Created the class FTPSHTTPClient.java (is attached).
Created the class FTPSHTTPClientTest.java for tests  (is attached).

> FTPS client through http proxy
> ------------------------------
>
>                 Key: NET-578
>                 URL: https://issues.apache.org/jira/browse/NET-578
>             Project: Commons Net
>          Issue Type: Bug
>          Components: FTP
>    Affects Versions: 3.3
>         Environment: Linux 3.0.101-0.21-default x86_64
> Java 1.8 update 45 64-bit
>            Reporter: Jefferson Madalena
>         Attachments: FTPSHTTPClient_source_code.zip
>
>
> I'm trying to develop a Java FTPS client using Apache Commons Net library. To run de code I'm using Java 8, update 45.
> The exception occurs when I'm invoking the method "retrieveFile". I'm not sure, but I belive the connection used to tranfer the file is not using the HTTP proxy specified in code.
> With FileZilla client I can tranfer files using the same configurations.
> How can I fix this problem?
> {code:title=My code|borderStyle=solid}
> // client with explicit security
> FTPSClient ftps = new FTPSClient(false);
> // HTTP proxy configuration
> Proxy proxy = new Proxy(Type.HTTP, new InetSocketAddress("<REMOVED_FOR_SERCURITY>", <REMOVED_FOR_SERCURITY>));
> ftps.setProxy(proxy);
> // to show FTP commands in prompt
> ftps.addProtocolCommandListener(new PrintCommandListener(new PrintWriter(System.out), true));
> // disable remote host verification
> ftps.setRemoteVerificationEnabled(false);
> // trust in ALL
> ftps.setTrustManager(TrustManagerUtils.getAcceptAllTrustManager());
> // send keepAlive every 30 seconds
> ftps.setControlKeepAliveTimeout(10l);
> // data transfer timeout
> ftps.setDataTimeout(30000);
> // connect
> ftps.connect("<REMOVED_FOR_SERCURITY>", <REMOVED_FOR_SERCURITY>);
> ftps.login("<REMOVED_FOR_SERCURITY>", "<REMOVED_FOR_SERCURITY>");
> // config
> ftps.setCharset(Charset.forName("UTF-8"));
> ftps.setBufferSize(0);
> ftps.setFileType(FTP.BINARY_FILE_TYPE);
> ftps.enterLocalPassiveMode();
> ftps.execPROT("P");
> // ... do some operations
> ftps.retrieveFile("/dir1/dir2/fileX.zip", new ByteArrayOutputStream());
> // close
> ftps.logout();
> ftps.disconnect();
> {code}
> The output:
> {noformat}
> 220 (vsFTPd 2.2.2)
> AUTH TLS
> 234 Proceed with negotiation.
> USER *******
> 331 Please specify the password.
> PASS *******
> 230 Login successful.
> TYPE I
> 200 Switching to Binary mode.
> PROT P
> 200 PROT now Private.
> PASV
> 227 Entering Passive Mode (<REMOVED_FOR_SERCURITY>).
> Exception in thread "main" java.net.ConnectException: Connection timed out: connect
>     at java.net.DualStackPlainSocketImpl.connect0(Native Method)
>     at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:79)
>     at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:345)
>     at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
>     at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
>     at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
>     at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
>     at java.net.Socket.connect(Socket.java:589)
>     at sun.security.ssl.SSLSocketImpl.connect(SSLSocketImpl.java:656)
>     at org.apache.commons.net.ftp.FTPClient._openDataConnection_(FTPClient.java:894)
>     at org.apache.commons.net.ftp.FTPSClient._openDataConnection_(FTPSClient.java:600)
>     at org.apache.commons.net.ftp.FTPClient._retrieveFile(FTPClient.java:1854)
>     at org.apache.commons.net.ftp.FTPClient.retrieveFile(FTPClient.java:1845)
>     at br.com.bat.crm.test.util.FTPSClientTest.main(FTPSClientTest.java:57)
> {noformat}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)