@sednka

Почему Java не хочет работать с Socks 4 proxy?

Приветствую!

Собственно сразу к делу. В ходе работы над тестовой программой возникла такая проблема: Java не хочет работать с Socks 4 прокси, вообще ни в какую. Объясняю ситуацию:

Есть код вида

con = (HttpURLConnection) obj.openConnection(new Proxy(Proxy.Type.SOCKS, new InetSocketAddress("host", *port*));


        con.setConnectTimeout(Config.CONNECT_TIMEOUT);
        con.setReadTimeout(Config.READ_TIMEOUT);


        con.setRequestProperty("User-Agent", Config.USER_AGENT);

        con.setDoOutput(false);
        con.setDoInput(true);

        con.setRequestMethod("GET");


        con.connect();


Который, если сюда подставить socks 4 прокси, выдает:
java.net.SocketException: Malformed reply from SOCKS server


С socks 5 прокси все "ок".

Где-то за часа 2 активного поиска была найдена подобная тема:
bugs.java.com/view_bug.do?bug_id=6964547

И совет тут один: выставить socksProxyVersion, что я и делаю вот так:
System.setProperty("socksProxyVersion", "4");

Это не помогает. Более того! Начинается какая-то жуткая наркомания:

При первом запуске с установленным socksProxyVersion, т.е. я добавил в начало программы такой код:
System.setProperty("socksProxyVersion", "4");

он принял socks 4 прокси и заработал с ним. НО! При этом дальше вдруг отказался. Мистика заключается в том что если поменять код на:
System.setProperty("socksProxyVersion", "5");
а потом снова на
System.setProperty("socksProxyVersion", "4");
есть вероятность что это заработает. Но опять же, при последних тестах не получилось!

НО!
Вот такая связка:
System.setProperty("socksProxyVersion", "4");
        System.setProperty("socksProxyHost", "хост");
        System.setProperty("socksProxyPort", "порт");


Работает с сокс 4/5 прокси, но мне надо для каждого потока разные прокси, соответственно данный вариант не подходит.

Не могли бы вы разъяснить ситуацию ? На одном из форумов посоветовали искать другие реализации, но пока не нашел.

Java:
java version "1.7.0_51"
Java(TM) SE Runtime Environment (build 1.7.0_51-b13)
Java HotSpot(TM) 64-Bit Server VM (build 24.51-b03, mixed mode)

Прокси:
Около 20 Socks 4 (все выдали Malformed), столько же Socks 5 (они Malformed не выдавали вообще).

Заранее спасибо за помощь..
  • Вопрос задан
  • 5203 просмотра
Пригласить эксперта
Ответы на вопрос 3
Losted
@Losted
Software Architect
Попробуйте инициализировать Proxy как
sun.net.SocksProxy.create(new InetSocketAddress("host", *port*),  4)
Ответ написан
@sednka Автор вопроса
Увы, но он private SocksProxy(java.net.SocketAddress arg0, int arg1);
Ответ написан
Комментировать
@MisterParser
В JDK11 такой проблемы нет, работает с SOCKS4, но нужно установить системное свойство.
Так же можно создать SocksProxy, метод стал открытым:
public static SocksProxy create(SocketAddress addr, int version)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы