Google ChromeでのWebSocketのデバッグ


213

WebSocketを通過する「トラフィック」を監視する方法または拡張機能はありますか?デバッグのために、クライアントとサーバーの要求/応答を確認します。

回答:


250

Chrome開発者ツールに、WebSocketフレームを一覧表示する機能と、フレームがバイナリでない場合はデータを検査する機能が追加されました。

処理する:

  1. Chromeデベロッパーツールを起動する
  2. ページを読み込み、WebSocket接続を開始します
  3. [ ネットワーク]タブをクリックします
  4. WebSocket接続を選択します左側のリストからをます(「101スイッチングプロトコル」のステータスになります)。
  5. メッセージ」サブタブをクリックします。バイナリフレームは、長さとタイムスタンプとともに表示され、それらがマスクされているかどうかを示します。テキストフレームには、ペイロードコンテンツも含まれます。

WebSocket接続がバイナリフレームを使用している場合でも、おそらくWiresharkを使用して接続をデバッグする必要があります。Wireshark 1.8.0は、WebSocketのディセクタとフィルタリングのサポートを追加しました。代替案は、この他の答えで見つけることができます


1
Wiresharkを使用してこれを行う方法を知っていますか?私は実際に使用したことがなく、すべてのネットワークトラフィックが表示され、未加工のパケットが表示されます。
mellowsoon

2
キャプチャフィルターを使用して、キャプチャを単一のポートに制限できます。または、キャプチャを取得した後、セッションの一部であるキャプチャされたフレームを右クリックして、そのセッションのみを表示するオプションを選択できるはずです。
カナカ

1
残念ながら、Windowsでlocalhostを使用してWireSharkを使用するには、機能させるためにフープをジャンプする必要があります。wiki.wireshark.org/CaptureSetup/Loopbackを
グレッグウッズ

2
最近、CodeProjectに関する記事を書きました。これは、Fiddlerを使用してWebSocketトラフィックをデバッグ/検査する方法を示しています。codeproject.com/Articles/718660/...
engineforce

1
@NiCkNewmanはい、これはペイロードのバイト長を示す7ビットのフィールドです。ただし、フィールドの値が126または127の場合、次の16ビットまたは64ビットはそれぞれ、ペイロードの長さ(バイト単位)です。仕様のlengthフィールドの説明を参照してください:tools.ietf.org/html/rfc6455#section-5.2(簡単に調べることができます)。少し奇妙ですが、短いメッセージを非常に効率的にします(ちょうど2バイトのヘッダー)。
カナカ2015年

72

Chrome CanaryとChromiumにWebSocketメッセージフレーム検査機能が追加されました。これをすばやくテストする手順は次のとおりです。

  1. websocket.orgサイトでホストされているWebSocket Echoデモに移動します。
  2. Chromeデベロッパーツールを有効にします。
  3. [ ネットワーク ]をクリックし、開発ツールで表示されるトラフィックをフィルタリングするには、[ WebSockets ]をクリックします。
  4. Echoデモで、[ 接続 ]をクリックします。Google Dev Toolの[Headers]タブで、WebSocketハンドシェイクを検査できます。
  5. Echoデモの[送信]ボタンをクリックします。
  6. この手順は重要です:ChromeデベロッパーツールでWebSocketフレームを表示するには、[名前/パス]で、WebSocket接続を表すecho.websocket.orgエントリをクリックします。これにより、右側のメインパネルが更新され、[WebSocketフレーム]タブに実際のWebSocketメッセージコンテンツが表示されます。

:新しいメッセージを送受信するたびに、左側のecho.websocket.orgエントリをクリックしてメインパネルを更新する必要があります。

スクリーンショットとビデオでステップを投稿しました

私が最近出版した本、The Definitive Guide to HTML5 WebSocketにも、Chrome Dev Tools、Chrome net-internals、Wire Sharkなどのさまざまな検査ツールをカバーする専用の付録があります。


3
複数の質問に対するボイラープレート/逐語的回答のコピーアンドペーストを投稿する場合は注意してください。これらの質問はコミュニティによって「スパム行為」としてフラグが付けられる傾向があります。これを行っている場合、それは通常、質問が重複していることを意味するため、代わりにそのようにフラグを立てます。
2012年

2
ステップ6をありがとう![ネットワーク]タブの[WebSockets]フィルターについては知っていましたが、最初のいくつかのメッセージしかキャッチできないように思われました。タブを開く前に開いていたWebSocket接続を認識する方法があるかどうかをご存知ですか?
ブライアンヘッド

ブライアン-今日はできるとは思わない。
Peter Moskovits 2013

@PeterMoskovits Chromeでバイナリフレームのコンテンツを検査する方法を知っていますか。現在は長さしかわかりません!
ハウィー2018

@Howie Chromeではできません。WireSharkを使用できます。新しい本「HTML5 WebSocketの決定的なガイド」では、WireSharkについても簡単に紹介しています。amazon.com/Definitive-Guide-HTML5-WebSocket-Apress/dp/...
ピーターMoskovits

52

彼らはChromeで継続的に何かを変えているようですが、これが現在機能しているものです:-)

  • まず、赤いレコードボタンをクリックする必要があります。そうしないと何も表示されません。

  • WS以前は気づかなかったが、Webソケット接続がフィルターで除外される。

  • それを選択すると、エラーメッセージなどを表示するフレームが表示されます。

ここに画像の説明を入力してください


JSONがどのように醜くフォーマットされているのが好きではありません。基本的にフォーマットはありません。
2017

1
@sesそれはsignalRプロトコルです。Microsoft withで取り上げてください
Simon_Weaver

1
少なくともこの答えが4年経ってもまだ良いことを見てうれしい:p
Stu Thompson

1
@StuThompsonはい-私の賛成票は増え続けます:-)
Simon_Weaver

41

WebSocketにアクセスしているページがない場合は、Chromeコンソールを開いてJavaScriptを次のように入力できます。

var webSocket = new WebSocket('ws://address:port');
webSocket.onmessage = function(data) { console.log(data); }

これによりWebソケットが開き、ネットワークタブとコンソールに表示されます。


ありがとう!また、開くページは、WebSocketと同じオリジンにある必要があります。別のオリジン(または新しいタブページ)でChrome開発ツールを開こうとすると、WebSocketに接続して認証エラーが発生します。
Dan Esparza

これを修正する方法はありますか?
not2qubit

37

他の答えは最も一般的なシナリオをカバーしています:フレームのコンテンツを見てください(開発ツール->ネットワークタブ-> WebSocket接続を右クリック->フレーム)。

どのソケットが現在開いているかアイドル状態にあるか、またはそれらを閉じることができるかなど、さらに多くの情報を知りたい場合は、このURLが便利です。

chrome://net-internals/#sockets

10

3つのオプションがあります:Chrome([開発者ツール]-> [ネットワーク]タブ)、Wireshark、およびFiddler([ログ]タブ)ですが、すべて非常に基本的です。トラフィック量が非常に多い場合、または各フレームが非常に大きい場合、それらをデバッグに使用することは非常に困難になります。

ただし、FiddlerとFiddlerScriptを使用して、HTTPトラフィックを予測するのと同じ方法でWebSocketトラフィックを検査できます。このソリューションのいくつかの利点は、複数のインスペクター(HexView、JSON、SyntaxView)など、Fiddlerの他の多くの機能を活用し、パケットを比較し、パケットを見つけることができることです。WebSocketトラフィックを検査する

Fiddlerで(FiddlerScriptを使用して)WebSocketトラフィックをデバッグ/検査する方法を示した、CodeProjectについて最近書いた記事を参照してください。http://www.codeproject.com/Articles/718660/Debug-Inspect-WebSocket-traffic-with-Fiddler


5

Chromeが大幅に変更されたため、私はこれを投稿しているだけで、回答はまったく最新のものではありませんでした。

  1. オープン開発ツール
  2. ページを更新します(WS接続がネットワークタブによってキャプチャされるようにするため)
  3. リクエストをクリック
  4. 「フレーム」サブタブをクリックします
  5. 次のようなものが表示されます。

ここに画像の説明を入力してください


4

Chromeバージョン29以降の簡単な回答:

  1. デバッガーを開き、「ネットワーク」タブに移動します
  2. WebSocketでページを読み込む
  3. サーバーからのアップグレード応答を含むwebsocket要求をクリックします
  4. [フレーム]タブを選択して、WebSocketフレームを表示します
  5. フレームを更新するには、もう一度websocketリクエストをクリックしてください

1
これは機能しているようですが、websocketのURL(例:websocket.org/echo.html)を切断して再接続すると動作が停止するので、ページを更新する必要があります。:(
matanster 2015年

3

Chromeデベロッパーツールでは、開かれた接続中に保留中のハンドシェイクリクエストを確認できますが、私の知る限りトラフィックを確認できません。ただし、たとえばそれ嗅ぐことができます。


2

私はユーザーhakoberaによって公開されているSimple WebSocket Client v0.1.3と呼ばれるChrome拡張機能を使用しました。使い方は非常に簡単で、特定のURLでWebソケットを開いたり、メッセージを送信したり、ソケット接続を閉じることができます。それは非常にミニマルです。


2

私が使い始めたツールについては、Firemanp ItがPostmanのようですが、websocketsとsocket.ioもサポートしています。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.