web-dev-qa-db-ja.com

プロキシを使用したWebSocketトラフィックの検査

私はCharlesProxyを使用して、Androidアプリからのトラフィックを検査しています。PCにインストールされているCharlesを介してすべてのトラフィックをプロキシするように電話を構成しています。

WebSocketトラフィックを除いて、これまでのところすべて(HTTP/HTTPSトラフィック)が機能しています。チャールズとフィドラーでは検査できませんでした。まず、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を試しましたが、CONNECT /アップグレード要求後もTLSトラフィックが継続しているのがわかりますが、パケットを理解できるものに再構築する方法と、TLS暗号化トラフィックを復号化する方法がわかりません。

7
blizz

誰かが興味を持っている場合に備えて、自分で答えを見つけました(ソースはblogs.telerik.comです)

WebSockets

FiddlerのHTML5WebSocketのサポートは増え続けています。 Fiddler拡張機能は、FiddlerApplication.OnWebSocketMessageイベントを処理することにより、WebSocketメッセージをキャプチャして操作できるようになりました。

フル機能のWebSocketUIの準備として、Fiddlerは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!");
}                            
*/
}
6
blizz