Inspecionando o tráfego do websocket com o proxy

7

Estou usando o Charles Proxy para inspecionar o tráfego dos meus apps Android. Eu tenho o telefone configurado para proxy todo o tráfego através do Charles, que está instalado no meu PC.

Tudo funcionou até agora (tráfego HTTP / HTTPS), exceto para o tráfego do websocket. Não consegui inspecioná-lo em Charles e Fiddler. Primeiro, a solicitação CONNECT falha da seguinte maneira:

URL https://184.73.XX.XX/
Status  Failed
Failure Invalid first line in request
Response Code   -
Protocol    HTTP/1.0
Method  CONNECT
Content-Type    -
Client Address  /192.168.0.10
Remote Address  184.73.XX.XX/184.73.XX.XX

E, logo após essa solicitação, há uma solicitação adicional enviada para atualizar a conexão, que parece ter êxito, como visto na resposta:

HTTP/1.1 101 Switching Protocols
Server: nginx
Date: Sun, 16 Feb 2014 02:04:33 GMT
Connection: upgrade
Upgrade: websocket
Sec-WebSocket-Accept: CKm+rgmiltNrbQvwU2HzKHzr2eM=

Depois disso, o tráfego do aplicativo pára de aparecer, mesmo que a atividade continue. Então, o que há no tráfego de websocket que não é capturado pelo proxy? Além disso, como posso capturá-lo para ver o que está sendo enviado de um lado para o outro?

Eu tentei o Wireshark e vi o tráfego TLS continuar após a solicitação CONNECT / upgrade, mas não sei como reconstruir os pacotes em algo que eu possa entender e descriptografar o tráfego criptografado TLS.

    
por blizz 16.02.2014 / 03:22

1 resposta

5

Encontrei a resposta para mim caso alguém esteja interessado (fonte: blogs.telerik.com)

WebSockets

O suporte para WebSockets HTML5 do Fiddler continua crescendo; As extensões do Fiddler agora podem capturar e manipular mensagens do WebSocket manipulando o evento FiddlerApplication.OnWebSocketMessage.

Em preparação para uma interface WebSockets com todos os recursos, o Fiddler não mais envia mensagens do WebSocket para a guia Log. Se você quiser reativar esse comportamento até que a interface do usuário completa esteja disponível, use o FiddlerScript. Basta clicar em Regras > Personalize as regras e adicione a seguinte função dentro da classe Manipuladores.

static function OnWebSocketMessage(oMsg: WebSocketMessage) {

// Log Message to the LOG tab
FiddlerApplication.Log.LogString(oMsg.ToString());

/*
// Modify a message's content
var sPayload = oMsg.PayloadAsString();
if (sPayload.Contains("time")) {
    oMsg.SetPayload(sPayload + "... bazinga!");
}                            
*/
}
    
por 16.02.2014 / 07:36