Cómo interceptar y depurar WebSocket en iOS con Proxyman

Imagen de portada de 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:

  1. Prepara Proxyman
  2. Configura Proxyman en mis dispositivos iOS (iPhone / iPad) o en el simulador de iOS
  3. Inicia el servidor proxy SOCKS de Proxyman
  4. Configura la app para usar el servidor proxy SOCKS de Proxyman
  5. ¡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

  1. Simplemente ve a Certificate Menu → Install for iOS → iOS Simulators
  2. Sigue todos los pasos para instalar el certificado en tu simulador de iOS. (Asegúrate de tener al menos un simulador de iOS)
  3. Listo.
Instalar el certificado de Proxyman para el simulador de iOS
Instalar el certificado de Proxyman para el simulador de iOS

2.2 Dispositivos iOS

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

3. Inicia el servidor proxy SOCKS de Proxyman

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

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 🎉

Proxyman captura el mensaje WebSocket
Proxyman captura el mensaje WebSocket

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

Noah Tran
Noah Tran

Revisado el 18 de julio de 2026. Se añadieron medidas de seguridad para compilaciones de depuración, la configuración del navegador y la decodificación de mensajes Protobuf.

Inspecciona los mensajes WebSocket en Proxyman

Captura los frames enviados y recibidos, filtra la conversación y previsualiza datos de texto, JSON, binarios o Protobuf.

Descargar Proxyman