Dirijarea WebSocket-urilor URLSession prin SOCKS5 pe iOS 17+
Configurați URLSessionWebSocketTask printr-un proxy SOCKSv5 la nivel de sesiune pe iOS 17 sau mai nou și separați rutarea de decriptarea WSS.
Cererile HTTPS obișnuite ale unei aplicații iOS pot apărea într-un proxy de depanare în timp ce traficul său WebSocket lipsește. Identificați mai întâi transportul WebSocket: URLSessionWebSocketTask poate folosi o configurație de proxy la nivel de sesiune, în timp ce o bibliotecă ce deschide propriile socketuri are nevoie de propria integrare acceptată. Pentru o conexiune Network.framework brută pe iOS 17+, configurați contextul de proxy propriu al NWConnection.
Pe iOS 17 sau mai nou, creați sesiunea cu un proxy SOCKSv5 explicit:
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)
}Înlocuiți adresa și portul din documentație cu ascultătorul SOCKS accesibil al proxy-ului de depanare existent. Activați acel ascultător în aplicația proxy. Ascultătorul său HTTP poate fi pe alt port.
Creați webSocketTask din sesiunea returnată. O sarcină creată prin alt URLSession nu moștenește suprascrierea acestei sesiuni. Un tablou proxyConfigurations gol folosește valorile implicite ale sistemului; nu este o selecție explicită a rutei directe.
Accesibilitatea și mesajele lizibile sunt repere separate
Un telefon fizic are nevoie de o adresă care ajunge la computerul de depanare. Pe acel telefon, 127.0.0.1 desemnează telefonul însuși. Verificați interfața ascultătorului și accesul clienților permis al proxy-ului când conexiunea nu ajunge niciodată acolo.
O rută SOCKS transportă conexiunea. Citirea conținutului wss necesită în plus configurarea inspecției TLS a instrumentului de depanare și o încredere adecvată pe dispozitiv. Fixarea certificatelor sau o implementare TLS separată pot împiedica acea inspecție chiar și când traficul ajunge la ascultător.
Căutați schimbul WebSocket și mesajele după stabilirea conexiunii. A vedea doar o cerere de sondare de la o aplicație Socket.IO nu este dovada că transportul WebSocket ulterior a folosit aceeași rută. Păstrați această configurație explicită de depanare în mediul de dezvoltare prevăzut al aplicației.