Маршрутизиране на 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 транспорт е използвал същия маршрут. Дръжте тази явна конфигурация за отстраняване на грешки в рамките на предвидената среда за разработка на приложението.