Cómo interceptar y depurar WebSocket en iOS con Proxyman
Si tu app iOS usa URLSessionWebSocketTask o bibliotecas WebSocket para iOS, por ejemplo Starscream, SocketRocket, etc., es posible que Proxyman no pueda capturar el tráfico WS/WSS sin configuración adicional.
Causa
Es una decisión deliberada de Apple. URLSessionWebSocketTask no respeta el proxy HTTP del sistema. Todo el tráfico WS/WSS va directamente a Internet. Por eso, ni Proxyman ni Charles Proxy pueden capturarlo.
En este blog
- Usaremos Proxyman para capturar los mensajes WebSocket de un dispositivo iOS (iOS 18 o posterior) durante la fase de desarrollo.
Solución
En este tutorial te mostramos cómo interceptar y depurar los mensajes WebSocket de un dispositivo iOS durante la fase de desarrollo con Proxyman, una potente herramienta para depurar HTTP/HTTPS y WebSocket.
Estos son los pasos que vamos a seguir:
- Prepara Proxyman
- Configura Proxyman en mis dispositivos iOS (iPhone / iPad) o en el simulador de iOS
- Inicia el servidor proxy SOCKS de Proxyman
- Configura la app para usar el servidor proxy SOCKS de Proxyman
- ¡Listo! Proxyman capturará los mensajes WebSocket de tu app. Funciona con URLSessionWebSocketTask.
Si quieres leer el código, visita GitHub.
1. Prepara Proxyman
Lo primero, la forma más sencilla de obtener Proxyman es descargarlo desde la página principal de Proxyman o desde Terminal.
$ brew cask install proxyman
2. Configura tus simuladores o dispositivos iOS con Proxyman
2.1 Simulador de iOS
- Simplemente ve a
Certificate Menu→Install for iOS→iOS Simulators - Sigue todos los pasos para instalar el certificado en tu simulador de iOS. (Asegúrate de tener al menos un simulador de iOS)
- Listo.

2.2 Dispositivos iOS
Certificate Menu→Install for iOS→iOS Devices- Sigue todos los pasos para instalar el certificado en tu dispositivo iOS.
- Asegúrate de completar el último paso, que consiste en confiar en el certificado de Proxyman en tus dispositivos iOS.
- Listo.

3. Inicia el servidor proxy SOCKS de Proxyman
- Abre la app de Proxyman →
Tools→Proxy Settings→SOCKS Proxy settings→Enable - Anota el número de puerto. En este momento, el puerto predeterminado es
8889. - Listo.

4. Configura la app para usar el servidor proxy SOCKS de Proxyman
Según la biblioteca WebSocket que uses, sigue las instrucciones de abajo:
4.1 Para NWConnection
let parameters = webSocketURL.scheme == "wss" ? NWParameters.tls : NWParameters.tcp
let options = NWProtocolWebSocket.Options()
options.autoReplyPing = true
parameters.defaultProtocolStack.applicationProtocols.insert(options, at: 0)
if #available(iOS 17.0, *) {
let socksv5Proxy = NWEndpoint.hostPort(host: "x.x.x.x", port: 8889) // Replace with your Proxyman SOCKS Proxy Server IP address
let config = ProxyConfiguration.init(socksv5Proxy: socksv5Proxy)
let context = NWParameters.PrivacyContext(description: "my socksv5Proxy")
context.proxyConfigurations = [config]
parameters.setPrivacyContext(context)
}
let connection = NWConnection(to: .url(webSocketURL), using: parameters)
connection.start(queue: .main)
4.2 Para URLSession y URLSessionWebSocketTask
private lazy var urlSession: URLSession = {
let config = URLSessionConfiguration.default
if #available(iOS 17.0, *) {
let socksv5Proxy = NWEndpoint.hostPort(host: "x.x.x.x", port: 8889) // Replace with your Proxyman SOCKS Proxy Server IP address
let proxyConfig = ProxyConfiguration.init(socksv5Proxy: socksv5Proxy)
config.proxyConfigurations = [proxyConfig]
}
return URLSession(configuration: config, delegate: nil, delegateQueue: nil)
}()
5. Listo
¡Listo! Proxyman capturará los mensajes WebSocket de tu app 🎉

6. Solución alternativa
Si prefieres no modificar el código de la app, puedes usar el framework Atlantis para capturar el mensaje WebSocket.
¿Qué sigue?
Puedes leer más sobre WebSocket en la documentación oficial de Proxyman.
Mantén la configuración SOCKS solo en una compilación de depuración; una compilación de release no debería depender del proxy de desarrollo. Los navegadores web y los servidores iniciados desde una sesión de Automatic Setup de Proxyman a menudo pueden capturarse sin añadir este código de iOS. Proxyman también puede decodificar los payloads de WebSocket en Protobuf si le proporcionas la información del mensaje, lo que resulta más fácil que leer a mano el frame binario.
Proxyman es una app de macOS de alto rendimiento que permite a los desarrolladores capturar e inspeccionar solicitudes HTTP/HTTPS de apps y dominios en dispositivos iOS, el simulador de iOS y dispositivos Android.
Descárgala en https://proxyman.com
