Proxyman で WebSocket をキャプチャし、Protobuf をデコードする方法

Proxyman で WebSocket をキャプチャし、Protobuf をデコードする方法 のカバー画像

このチュートリアルで行うこと:

  • Proxyman macOS のダウンロードとセットアップ
  • Google Chrome や iOS アプリから WebSocket 通信をキャプチャ
  • ✅ Proxyman で WebSocket 通信の Protobuf メッセージをデコード

WebSocket は、クライアントとサーバー間でリアルタイムに通信するための人気のプロトコルです。多くのモダンなアプリは、パフォーマンスの向上とペイロードサイズの削減のために、Protobuf(Protocol Buffers)を使って WebSocket 上でデータをシリアライズしています。

このガイドでは、Proxyman macOS 6.5.0 以降を使って WebSocket 通信をキャプチャし、Protobuf メッセージをデコードする方法を紹介します。

1. Proxyman macOS のダウンロードとセットアップ

始める前に、Proxyman macOS をダウンロードしてセットアップしてください。

  1. Proxyman の Web サイト を開き、Proxyman macOS の最新版をダウンロードします
  • Proxyman macOS:macOS 12 以降に対応
  1. Proxyman macOS をインストールします
  2. Proxyman を開き、macOS に証明書をインストールします。手順は Proxyman > Certificate Menu -> Install for macOS -> Follow the instruction を参照してください
  3. Automatic タブで「Install & Trust」をクリックします
  4. Proxyman 証明書に緑のチェックマークが付いていることを確認します
Proxyman 証明書の緑のチェックマークを確認
Proxyman 証明書の緑のチェックマークを確認

2. WebSocket 通信をキャプチャする

2.1 Google Chrome から(追加設定なしで利用可能)

Proxyman は、追加の設定なしで Google Chrome からの WebSocket 通信をキャプチャできます。

  1. Proxyman が起動していることを確認します
  2. Google Chrome を開きます
  3. WebSocket のテスト用サイトを開きます。例:https://echo.websocket.org/.ws
  4. この時点で、Proxyman によって WebSocket 通信がキャプチャされていることが確認できます ✅
  5. SSL で暗号化された通信が表示される場合は、Response パネルで「Enable SSL Proxying」をクリックします
  6. ページを再読み込みするか、WebSocket に再接続すると、Proxyman が WebSocket 通信を復号できるようになります ✅
  7. 完了です。送受信された WebSocket メッセージをリアルタイムで確認できます。
Google Chrome から Proxyman でキャプチャされた WebSocket メッセージ
Google Chrome から Proxyman でキャプチャされた WebSocket メッセージ

WebSocket 通信は、Proxyman のフローリストに専用の WebSocket アイコン付きで表示されます。WebSocket タブで、送信と受信の両方のメッセージを確認できます。

2.2 iOS アプリから

iOS アプリが URLSessionWebSocketTask や iOS 向けの WebSocket ライブラリ(例:Starscream、SocketRocket)を使っている場合は、WebSocket 通信をキャプチャするために SOCKS Proxy を設定する必要があります。

これは、URLSessionWebSocketTask がデフォルトではシステムの HTTP プロキシを使用しないためです。

iOS アプリから WebSocket をキャプチャする詳しい手順は、専用のチュートリアルに従ってください:iOS シミュレータや実機から WebSocket をインターセプトしてデバッグする方法

以下は簡単な概要です:

  1. Proxyman で SOCKS Proxy を有効にします:Tools -> Proxy Settings -> SOCKS Proxy settings -> Enable
  2. ポート番号を控えておきます(デフォルトは 8889)
  3. iOS アプリが Proxyman の SOCKS Proxy サーバーを使うように設定します

3. Protobuf メッセージをデコードする

Proxyman macOS 6.5.0 以降が必要です。古いバージョンを使用している場合は、Proxyman をアップデートしてください。

WebSocket 通信をキャプチャしたら、Proxyman 上で直接 Protobuf メッセージをデコードできます。

3.1 Raw Mode でデコードする(手軽だが簡易的な方法)

Raw Mode は、Protobuf の定義ファイル(.proto)がない場合に便利です。Proxyman はバイナリデータのデコードを試み、フィールドを表示します。

  1. Proxyman で WebSocket のフローを選択します
  2. Protobuf データを含む WebSocket メッセージを探します
  3. Protobuf メッセージを右クリックし、Protobuf -> Decode を選択します
  4. Raw Mode を選択します
  5. 完了です。Proxyman が Protobuf のフィールドをデコードして表示します ✅
Protobuf メッセージを右クリックしてデコード
Protobuf メッセージを右クリックしてデコード
Raw Mode でデコードされた Protobuf
Raw Mode でデコードされた Protobuf

Raw Mode では、フィールド番号と推定された型が表示されます。.proto ファイルがないとフィールド名は表示されませんが、データの構造は確認できます。

3.2 Message Type でデコードする(推奨)

Protobuf のディスクリプタファイル(.desc)がある場合は、フィールド名と型を正しく表示してメッセージをデコードできます。

  1. Proxyman で WebSocket のフローを選択します
  2. Protobuf データを含む WebSocket メッセージを探します
  3. Protobuf メッセージを右クリックし、Protobuf -> Decode を選択します
  4. Message Type を選択します
  5. Protobuf ディスクリプタファイルから、メッセージタイプを選択します
Protobuf のデコード用に Message Type を選択
Protobuf のデコード用に Message Type を選択

メッセージタイプが見つからない場合は、「Import Schema」ボタンをクリックして、.desc ファイルを Proxyman にインポートしてください。

.proto ファイルから .desc ファイルを生成する方法は、こちらのドキュメントを参照してください:.proto ファイルから .desc ファイルを生成する方法

  1. 完了です。Proxyman が、正しいフィールド名でメッセージをデコードします ✅
Message Type でデコードされた Protobuf
Message Type でデコードされた Protobuf

.proto ファイルから .desc ファイルを生成するには、protoc コンパイラを使用します: protoc --descriptor_set_out=message.desc --include_imports your_message.proto

--include_imports オプションは、インポートされた .proto ファイルで使われているメッセージタイプも追加します。このオプションがないと、メインのスキーマに存在するはずのタイプを Proxyman が見つけられない場合があります。スキーマがない場合でも Raw Mode は役立ちますが、フィールドの型は推測です。フィールド名や型を正確に知りたい場合は、ディスクリプタを使用してください。

4. 問題と解決策

4.1 iOS アプリの WebSocket 通信が見えない

解決策:iOS の WebSocket ライブラリは HTTP プロキシを使用しません。Proxyman で SOCKS Proxy を有効にし、アプリがそれを使うように設定する必要があります。詳しい手順は、WebSocket デバッグのチュートリアル を確認してください。

4.2 Protobuf のデコードオプションが表示されない

解決策:Proxyman macOS 6.5.0 以降を使用していることを確認してください。バージョンは Proxyman -> About Proxyman で確認でき、proxyman.com から更新できます。

4.3 Raw Mode でフィールドの型が正しく表示されない

解決策:Raw Mode は、ヒューリスティックによってフィールドの型を推定します。正確にデコードするには、Protobuf のディスクリプタファイルを使った Message Type モードを使用してください。

4.4 WebSocket 通信は見えるが、メッセージが暗号化されている

解決策:そのドメインで SSL Proxying が有効になっていることを確認してください。フローを右クリックして Enable SSL Proxying を選択し、WebSocket に再接続してください。

5. まとめ

このチュートリアルでは、次の方法を学びました:

  • Proxyman を使って、Google Chrome と iOS アプリから WebSocket 通信をキャプチャする
  • Raw Mode(.proto ファイルなし)または Message Type モード(.proto ファイルあり)で Protobuf メッセージをデコードする

参考になる関連チュートリアル:


Proxyman は、開発者が Web ブラウザ、iOS デバイス、iOS Simulator、Android デバイスから HTTP/HTTPS と WebSocket 通信をキャプチャできる、高性能な macOS/Windows/Linux アプリです。

入手はこちら:https://proxyman.com

Noah Tran
Noah Tran

2026年7月18日 に改訂。 ディスクリプタのインポート手順と、Raw Mode の推測結果に関する注意を追加しました。

バイナリの WebSocket メッセージを読みやすく

WebSocket をキャプチャし、Protobuf スキーマをインポートして、送受信されたメッセージを Proxyman で確認しましょう。

Proxyman for macOS をダウンロード