Směrování WebSocketů URLSession přes SOCKS5 na iOS 17+
Nakonfigurujte URLSessionWebSocketTask přes SOCKSv5 proxy na úrovni relace na iOS 17 nebo novějším a oddělte směrování od dešifrování WSS.
Běžné požadavky HTTPS aplikace pro iOS se mohou objevit v ladicí proxy, zatímco její provoz WebSocket chybí. Nejprve určete transport WebSocket: URLSessionWebSocketTask může použít konfiguraci proxy na úrovni relace, zatímco knihovna, která otevírá vlastní sockety, potřebuje vlastní podporovanou integraci. Pro surové připojení Network.framework na iOS 17+ nakonfigurujte vlastní kontext proxy NWConnection.
Na iOS 17 nebo novějším vytvořte relaci s explicitní proxy 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)
}Nahraďte dokumentační adresu a port dostupným posluchačem SOCKS stávající ladicí proxy. Tento posluchač zapněte v aplikaci proxy. Jeho posluchač HTTP může být na jiném portu.
Vytvořte webSocketTask z vrácené relace. Úloha vytvořená přes jinou URLSession nedědí přepsání této relace. Prázdné pole proxyConfigurations používá systémové výchozí hodnoty; není to výslovná volba přímé trasy.
Dostupnost a čitelné zprávy jsou samostatné milníky
Fyzický telefon potřebuje adresu, která dosáhne na ladicí počítač. Na tomto telefonu 127.0.0.1 označuje samotný telefon. Zkontrolujte rozhraní posluchače a povolený přístup klientů proxy, když se připojení k němu nikdy nedostane.
Trasa SOCKS nese připojení. Čtení obsahu wss navíc vyžaduje nastavení inspekce TLS v ladicím nástroji a odpovídající důvěru v zařízení. Přišpendlení certifikátů nebo samostatná implementace TLS může této inspekci zabránit, i když provoz dosáhne posluchače.
Po navázání připojení hledejte výměnu WebSocket a zprávy. Vidět pouze jeden požadavek na dotazování z aplikace Socket.IO není důkazem, že její pozdější transport WebSocket použil stejnou trasu. Udržujte tuto výslovnou ladicí konfiguraci v zamýšleném vývojovém prostředí aplikace.