使用代理检查 websocket 流量

使用代理检查 websocket 流量

我正在使用 Charles Proxy 检查来自 Android 应用的流量。我已将手机配置为通过安装在我电脑上的 Charles 代理所有流量。

到目前为止,除了 websocket 流量外,所有功能均正常(HTTP/HTTPS 流量)。我无法在 Charles 和 Fiddler 中检查它。首先,CONNECT 请求失败,如下所示:

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

在该请求之后,立即发送了一个额外的请求来升级连接,从响应中可以看出该请求似乎成功了:

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=

此后,即使活动继续,应用程序的流量也会停止出现。那么,为什么代理无法捕获 websocket 流量呢?此外,我如何捕获它以查看来回发送的内容?

我尝试过 Wireshark,看到 TLS 流量在 CONNECT/升级请求后继续,但我不知道如何将数据包重建为可以理解的内容,以及如何解密 TLS 加密流量。

答案1

如果有人感兴趣的话,我自己找到了答案(来源是 blogs.telerik.com)

WebSockets

Fiddler 对 HTML5 WebSockets 的支持不断增强;Fiddler 扩展现在可以通过处理 FiddlerApplication.OnWebSocketMessage 事件来捕获和操作 WebSocket 消息。

为了准备功能齐全的 WebSockets UI,Fiddler 不再向 Log 选项卡发送 WebSocket 消息。如果您想在完整 UI 可用之前重新启用该行为,可以使用 FiddlerScript 来实现。只需单击规则 > 自定义规则,然后在 Handlers 类中添加以下函数即可。

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!");
}                            
*/
}

相关内容