Залиште призначення Java SOCKS невирішеним
Уникайте локального DNS призначення під час створення з'єднання Java SOCKS, зберігаючи ім'я цільового хоста.
З'єднання 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 не повинна використовувати ім'я хоста проксі як ідентичність партнера.
Перевірте також код вищого рівня: бібліотека може виконати власний пошук перед викликом вашого конектора. Збереження імені хоста в цій адресі сокета не може скасувати пошук, виконаний в іншому місці застосунку.