You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@mina.apache.org by "Emmanuel Lecharny (JIRA)" <ji...@apache.org> on 2010/11/29 14:36:00 UTC

[jira] Resolved: (DIRMINA-801) SOCKS4 proxy logic erroneously sends server hostname

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

Emmanuel Lecharny resolved DIRMINA-801.
---------------------------------------

    Resolution: Fixed

I applied the suggested patch in :

http://svn.apache.org/viewvc?rev=1040105&view=rev

It will be available in MINA 2.0.2

Thanks for the patch !

> SOCKS4 proxy logic erroneously sends server hostname
> ----------------------------------------------------
>
>                 Key: DIRMINA-801
>                 URL: https://issues.apache.org/jira/browse/DIRMINA-801
>             Project: MINA
>          Issue Type: Bug
>          Components: Core
>    Affects Versions: 2.0.0
>         Environment: Mac OS X, Java 1.6.0
>            Reporter: Donnie Pinkston
>
> When attempting a SOCKS4 connection through a proxy to an HTTP server, I found that the server was seeing a hostname as the first line of the HTTP request.  This obviously confused the server, which was expecting the "GET ... HTTP/1.x" line first.
> I was constructing my proxy-request with this code, since I had an InetSocketAddress object:
>             req = new SocksProxyRequest(
>                 SocksProxyConstants.SOCKS_VERSION_4,
>                 SocksProxyConstants.ESTABLISH_TCPIP_STREAM,
>                 serverAddr,    // An InetSocketAddress object including both hostname and IP address
>                 username);
> I think this is being caused in org.apache.mina.proxy.handlers.socks.Socks4LogicHandler, specifically the writeRequest() method.  This method assumes that a SOCKS4a connection-attempt is being made (as opposed to plain-vanilla SOCKS4) if the SocksProxyRequest.getHost() method doesn't return null, but this method will pull the hostname from the InetSocketAddress if it's available.  This causes a situation where the IP address in the SOCKS4 request is valid (i.e. not 0.0.0.x), but the hostname is still sent.  AFAIK, according to SOCKS4a, the hostname should only be sent when the IP-address is set to 0.0.0.x.
> I would propose replacing this line:
>             boolean isV4ARequest = request.getHost() != null;
> with something like this line:
>             boolean isV4ARequest = Arrays.equals(request.getIpAddress(),
>                 SocksProxyConstants.FAKE_IP);
> (or the more dangerous but much faster request.getIpAddress() == SocksProxyConstants.FAKE_IP)

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.