gRPC アプリケーションのデバッグを目的とし、Wireshark で通信をキャプチャしてみます。
環境
OS : Windows10
gRPC : 1.16.0 (C#)
準備
Npcap のインストール
Windows 版の Wireshark 単体では、localhost の通信をキャプチャすることができません。ここでは NpCap を利用します。
- Downloading and Installing Npcap の項からインストーラーをダウンロードします。2018/11/09 時点の最新版は 0.99-r7 です。
- インストーラーを実行します。Instration options ページの
Install Npcap in WinPcap API-compatible Mode
にチェックをつけます。
Wireshark のインストール
- インストーラーをダウンロードします。2018/11/07 時点の最新版は 2.6.4 です。
- インストーラーを実行します。Install WinpCap? ページでは Npcap がインストール済であることが表示され、WinPcap のインストールが選択不可になっているはずです。
- Wireshark を起動すると、ネットワークアダプタの一覧にイーサーネットやローカルエリア接続に並んで
Npcap Loopback Adapter
が表示されており、それを選択すると 127.0.0.1 に流れるパケットが表示されます。
gRPC のキャプチャ
下の画像は localhost で通信を行う gRPC アプリケーションを実行したときの結果です。
フィルタする
アプリケーションが使用しているポートのみを表示するようにフィルタ(背景色が緑のバーの部分)を設定しています。
tcp.dstport == 50051 or tcp.srcport == 50051
HTTP2として表示する
上の画像では Protocol 列には TCP と表示されています。既定の動作では、gRPC アプリケーションの通信は HTTP2 ではなく TCP と判定されてしまうようです。次の方法で HTTP2 であることを設定します。
- リスト上で右クリックメニューを表示し、
Decode As…
を選択します。 - 表示されたダイアログで Current 列をクリックし、
(none)
をHTTP2
に変更します。
すると protocol 列の表示が HTTP2 に変わります。
SSLを有効にしてみる
下の画像は Grpc.Core.SslServerCredentials を使用して SSL を有効にしたときの結果です。protocol 列には TLSv1.2 と表示され、アプリケーションデータが暗号化されていることが分かります。