Соединение SOCKS может завершиться неудачей локально ещё до того, как прокси получит возможность разрешить назначение. Проверьте, не разрешил ли ваш код цель при построении адреса сокета.

Для сокета Java SOCKS сохраняйте имя целевого хоста с неразрешённым адресом назначения:

Proxy proxy = new Proxy(Proxy.Type.SOCKS,
    new InetSocketAddress("203.0.113.10", 1080));
Socket socket = new Socket(proxy);
socket.connect(InetSocketAddress.createUnresolved(
    "destination.example", 443), 5000);

Конечная точка и имя хоста — это заполнители; используйте свой сервис SOCKS5 или кандидата из списка прокси SOCKS5 для разрешённых тестов с публичным назначением. Важное различие — между разрешением прокси, чтобы до него добраться, и сохранением имени назначения для обмена SOCKS.

После подключения HTTPS-клиенту всё ещё нужен сеанс TLS для имени хоста назначения. Обёртка TLS не должна использовать имя хоста прокси как идентичность партнёра.

Проверьте и код более высокого уровня: библиотека может выполнить собственный поиск до вызова вашего коннектора. Сохранение имени хоста в этом адресе сокета не может отменить поиск, выполненный в другом месте приложения.

Похожие статьи