В iOS 17 и новее Network.framework может применять прокси SOCKSv5 через контекст приватности. Подключите этот контекст к параметрам перед созданием соединения:

import Network

@available(iOS 17.0, *)
func makeConnection() -> NWConnection {
    let parameters = NWParameters.tls
    let context = NWParameters.PrivacyContext(description: "Service route")
    let endpoint = NWEndpoint.hostPort(
        host: "proxy.example", port: 1080)
    context.proxyConfigurations = [
        ProxyConfiguration(socksv5Proxy: endpoint)
    ]
    parameters.setPrivacyContext(context)
    return NWConnection(
        host: "service.example", port: 443, using: parameters)
}

Функция возвращает незапущенное TLS-соединение. Установите обработку состояния приложения, запустите её в нужной очереди, затем обменивайтесь протоколом приложения по обычному пути отправки и получения.

proxy.example:1080 — это SOCKS-слушатель. Для разрешённых подключений к публичным службам список прокси SOCKS5 предоставляет кандидаты хоста и порта. service.example:443 остаётся пунктом назначения. Контекст приватности применяет свои конфигурации прокси к соединениям, связанным с этим контекстом; создание несвязанного соединения с другими параметрами не наследует эту настройку.

Это интерфейс соединений Network.framework. Переопределение прокси в URLSession или настройка хранилища данных WKWebView конфигурируют этих отдельных потребителей. Для WebSocket, построенного на NWConnection, приложение также должно предоставить соответствующие параметры протокола WebSocket.

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