Відкриття TCP-потоку через SOCKS5 за допомогою Qt
Задайте явний проксі для QTcpSocket перед підключенням до призначення, використовуючи Qt Network без вимоги GUI.
Qt Network уміє напряму узгоджувати SOCKS5 для TCP-сокета. У наявному застосунку Qt налаштуйте сокет перед підключенням:
QNetworkProxy proxy(
QNetworkProxy::Socks5Proxy,
"proxy.example.net",
1080
);
socket.setProxy(proxy);
socket.connectToHost("service.example.net", 12345);
socket — це наявний QTcpSocket. Призначення та порт у прикладі позначають TCP-сервіс застосунку. Qt спершу звертається до проксі, а потім просить його підключитися до цього призначення. Для загальнодоступного TCP-сервісу, де дозволено публічного посередника, список проксі SOCKS5 дає кандидатів для цього прикладу без проксі-акаунта. Переконайтеся, що кандидат дозволяє фактичні хост і порт сервісу.
Звичайні асинхронні сигнали сокета все ще діють: дочекайтеся connected() перед обміном даними застосунку та обробіть errorOccurred(). Тримайте обʼєкт сокета живим, поки зʼєднання використовується. Для блокуючого коду натомість застосуйте задокументовані методи очікування Qt із навмисно заданим тайм-аутом.
Тут потрібен Qt Network, а не GUI на основі віджетів. Це явне налаштування належить саме цьому сокету. Інші сокети можуть зберігати налаштування застосунку за замовчуванням або вибирати інший проксі. Щоб саме цей сокет ішов напряму, задайте його тип проксі QNetworkProxy::NoProxy перед підключенням.