Маршрутизация WebSocket в URLSession через SOCKS5 на iOS 17+
Настройте URLSessionWebSocketTask через SOCKSv5-прокси на уровне сеанса на iOS 17 или новее и отделите маршрутизацию от расшифровки WSS.
Обычные HTTPS-запросы приложения iOS могут появляться в отладочном прокси, а его трафик WebSocket при этом отсутствует. Сначала определите транспорт WebSocket: URLSessionWebSocketTask может использовать конфигурацию прокси на уровне сеанса, а библиотеке, открывающей собственные сокеты, нужна собственная поддерживаемая интеграция. Для необработанного соединения Network.framework на iOS 17+ настройте собственный контекст прокси NWConnection.
На iOS 17 или новее создайте сеанс с явным прокси SOCKSv5:
import Foundation
import Network
@available(iOS 17.0, *)
func makeDebugSession() -> URLSession {
let configuration = URLSessionConfiguration.default
let endpoint = NWEndpoint.hostPort(
host: "192.0.2.10", port: 8889)
configuration.proxyConfigurations = [
ProxyConfiguration(socksv5Proxy: endpoint)
]
return URLSession(configuration: configuration)
}Замените адрес и порт из документации на доступный слушатель SOCKS существующего отладочного прокси. Включите этот слушатель в приложении прокси. Его HTTP-слушатель может быть на другом порту.
Создайте webSocketTask из возвращённого сеанса. Задача, созданная через другой URLSession, не наследует переопределение этого сеанса. Пустой массив proxyConfigurations использует системные значения по умолчанию; это не явный выбор прямого маршрута.
Доступность и читаемые сообщения — отдельные этапы
Физическому телефону нужен адрес, который достигает отладочного компьютера. На этом телефоне 127.0.0.1 обозначает сам телефон. Проверьте интерфейс слушателя и разрешённый доступ клиентов прокси, если соединение так и не достигает его.
Маршрут SOCKS переносит соединение. Чтение содержимого wss дополнительно требует настройки проверки TLS в отладочном инструменте и надлежащего доверия на устройстве. Закрепление сертификатов или отдельная реализация TLS могут воспрепятствовать этой проверке даже тогда, когда трафик достигает слушателя.
Ищите обмен WebSocket и сообщения после установления соединения. Видеть только один запрос опроса от приложения Socket.IO — не доказательство того, что его последующий транспорт WebSocket использовал тот же маршрут. Держите эту явную отладочную конфигурацию в пределах предполагаемой среды разработки приложения.