SOCKS5 Proxy с использованием SSLSocket - PullRequest
4 голосов
/ 26 апреля 2011

У меня есть клиент-серверное приложение, которое удаленно подключается к серверу через SSLSocket Java.

Я пытаюсь реализовать дополнительный режим, который разрешает соединения через аутентифицированный прокси SOCKS v5.

Я пытался использовать соответствующее руководство , но в нем ничего не говорится о SSL.

Я попытался установить общесистемные свойства ("socksProxyHost" и "socksProxyPort"), но, похоже, ничего не происходит.

Мой следующий подход состоял в том, чтобы использовать фабричный метод в SSLSocketFactory:

            String proxyHost = Config.prefs.get("PROXY_NAME", "localhost");
            int proxyPort = Config.prefs.getInt("PROXY_PORT", 1080);
            InetSocketAddress proxyAddr = new InetSocketAddress(proxyHost, proxyPort);
            Socket underlying = new SSLSocket(new Proxy(Proxy.Type.SOCKS, proxyAddr));
            underlying.connect(new InetSocketAddress(getHost(), getPort()));
            socket = (SSLSocket) factory.createSocket(
                    underlying,
                    getHost(),
                    getPort(),
                    true);

Но проблема этого подхода заключается в том, что метод createSocket требует, чтобы базовый сокет уже был подключен, и мой сервер не будет принимать соединения без SSL.

Как лучше всего подключиться к моему удаленному серверу с помощью SOCKS? Кроме того, я почти не знаю, как ввести имя пользователя / пароль для аутентифицированных SOCKS в этой системе.

Спасибо!

1 Ответ

8 голосов
/ 21 сентября 2011
        String proxyHost = Config.prefs.get("PROXY_NAME", "localhost");
        int proxyPort = Config.prefs.getInt("PROXY_PORT", 1080);
        InetSocketAddress proxyAddr = new InetSocketAddress(proxyHost, proxyPort);
        Socket underlying = new Socket(new Proxy(Proxy.Type.SOCKS, proxyAddr));
        underlying.connect(new InetSocketAddress(getHost(), getPort()));
        socket = (SSLSocket) factory.createSocket(
                underlying,
                proxyHost,
                proxyPort,
                true);
...