You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@mina.apache.org by "Abhishek Ganguly (JIRA)" <ji...@apache.org> on 2013/12/13 07:22:08 UTC

[jira] [Updated] (SSHD-269) Random Data corruption with Remote Port Forwarding

     [ https://issues.apache.org/jira/browse/SSHD-269?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Abhishek Ganguly updated SSHD-269:
----------------------------------

    Attachment: Module1.vb

This is a test code written in VB Dot Net. To execute it,

1. install dot net framework 4, visual studio 10 (Free Express edition will do)
2. create a Visual Basic Console Application
3. Overwrite the contents of Module1.vb with this file
4. RUN (F5)

You can tune the local and the remote ports. set it as per the SSH tunnel you have set up.



> Random Data corruption with Remote Port Forwarding
> --------------------------------------------------
>
>                 Key: SSHD-269
>                 URL: https://issues.apache.org/jira/browse/SSHD-269
>             Project: MINA SSHD
>          Issue Type: Bug
>    Affects Versions: 0.9.0
>         Environment: WIN7 + JDK7, Centos+OpenJDK7
>            Reporter: Abhishek Ganguly
>            Priority: Critical
>         Attachments: Module1.vb
>
>
> A TCP connection set up over Remote Port Forwarding feature randomly garbles the data. On further testing I found that the TCP stream from remote-to-local is unaffected whereas the local-to-remote is bad.
> To reproduce,
> 1. setup a basic sshd. listen on port 22. call the host 'remote'.
> 2. on 'local' machine set up putty (ssh client) as follows:
> 2.1 Host name: remote
> 2.2 Port: 22
> 2.3 Connection-SSH: Dont start a shell or command at all
> 2.4 Connection-SSH-tunnels:: source-port: remote-port, destination: localhost:localport
> 2.5 Connection type: Remote [Click ADD]
> 2.6 Open connection
> this makes a tunnel from remoteserver:remoteport to localhost:localport
> 3. set up a basic TCP server on localhost:localport
> 3.1 start serving predictable byte arrays. {0000111112222....}
> 4. set up a basic TCP client. connect to remoteHost:remotePort
> 4.1 the connection automatically gets forwarded to localhost:localport where my own TCP server is running. hence a TCP connection is setup over the tunnel.
> 5. start consuming the byte array from server.
> 5.1 match the incoming bytes to expected sequence.
> you will see that the sequence is oftentimes garbled.
> 6. let the client send a similar predictable byte stream to server.
> 6.1 from client take OutputStream from the socket and push a long but predictable byte array in it.
> 6.2 from server get InputStream out of socket and read the bytes
> you will see that irrespective of array length, all the bytes are safely delivered.



--
This message was sent by Atlassian JIRA
(v6.1.4#6159)