【Tips】HoloLensからのHTTP通信をキャプチャする

投稿者: | 2018-04-10

HoloLensアプリで外部のREST APIを叩くアプリ作ってるときデバッグやりづらくてつれーわー、ヘッダちゃんとついてるかの確認も大変だし、UnityWebRequestも痒い所に手が届かないしつれーわー、とか思っていませんか?

そんなときHTTP通信の中身を確認できたらいいですよね。WebなんかですとChromeのデベロッパーツールやエクステンションを使えば簡単に中身をみることができるのですが、HoloLensでも何か方法はないのでしょうか…。

あります!!!

ローカルプロキシと呼ばれるツールを使うことによって、HoloLensからのHTTP通信の中身をみることができます!

これによってどんなことができるかというと

  1. HTTP通信(リクエストとレスポンスの両方)をテキストとして可視化できる
  2. リクエストの中身を書き換えてサーバに送ることができる
  3. JSONデータもある程度ツリー構造で表示してくれる
  4. HTTPS通信も復号して中身を見たり書き換えたりできる

といったことができます。要は通信部分のデバッグが捗るようになります。

必要なものは以下の通りです。

  1. パソコン(WinでもMacでも可)
  2. HoloLens
  3. ローカルプロキシソフト

ローカルプロキシとは

ブラウザを使ってインターネット上のWebサイトを閲覧するとき、ブラウザとサーバ間でHTTP通信が行われます。このHTTP通信をブラウザの代わりに行うのがプロキシです。そしてローカルプロキシとは、そのプロキシをブラウザと同じ端末内で実行するソフトです。

ローカルプロキシにはHTTP通信の代理実行以外にも、通信内容を確認したり改変できるような機能が備わっています。

有名なソフトとしてはFiddlerBurpOWASP ZAPなどがあります。Webエンジニアやセキュリティエンジニアにとってはわりとお馴染みのツールです。

HoloLensからのHTTP通信をローカルプロキシでキャプチャする

今回は.NET Frameworkで動作するFiddlerを使って環境を作ってみたいと思います。構成図は以下の通りとなります。

Fiddlerの設定

公式サイトよりインストーラをDLしてインストールします。アプリケーションを起動したら適当にブラウジングして、閲覧したサイトへのHTTP通信がキャプチャできていることを確認してください。

続いてHoloLensからのHTTP通信もキャプチャできるように設定していきます。メニューのTools⇒Optionsから設定画面を開きConnectionタブを選択し「Allow remote computers to connect」にチェックを入れます。

これでローカル端末だけでなく外部端末のHTTP通信もプロキシできるようになります。まさにプロキシサーバです。なお、この設定を有効かするためにはFiddlerを再起動する必要がありますのでご注意ください。

続いてHTTPS通信をローカルプロキシにて復号できるようにしましょう。設定画面のHTTPSタブを選択し、「Decrypt HTTPS traffic」にチェックを入れます。

チェックを入れると、証明書をインストールするかどうかのダイアログがポップアップします。ローカルプロキシにて復号、そして再度暗号化してサーバに送信するために必要となるのでインストールしておきましょう。

以上で、必要最低限のFiddlerの設定は完了ですが、このままだと画像のリクエストやCONNECTのリクエストもキャプチャされてしまいかなり煩雑になってしまうので、重要度の低いHTTP通信は表示しないように設定します。

HoloLensの設定

HoloLensのプロキシ設定は、Settingsのネットワーク設定から行うことができます。Settings⇒Network & Internet⇒Proxyを選択します。

「Use a proxy server」をオンにします。Addressはローカルプロキシが動いている端末のIP、PortはローカルプロキシのListenポートを指定します。Listenポートは設定画面より確認することができます。

これでHoloLens側の設定も完了です。

キャプチャできることを確認する

HoloLensにてEdgeを立ち上げ、適当なサイトに接続して通信のキャプチャが出来ていることを確認しましょう。

もしキャプチャができていない場合は前節の設定をもう一度確認してください(特にFiddlerの再起動を忘れない)。設定に問題がないようでしたら、Fiddler画面下部にて「Capturing」「All Processes」と表示されていることを確認してください。

表示が異なる場合は、赤枠部分をクリックすると設定することができるので、設定値を変更してください。

なお、Unity製HoloLensアプリケーション側では特に対応は必要ありません。この状態でUnityWebRequestなどを使った通信をキャプチャすることができます。

おわりに

HTTPリクエストパラメータの書き換え等は、「Fiddler リクエスト 書き換え」で検索すると、たくさんHitしますのでそちらをご参照ください。

また、FiddlerはMac、Linux版もありますが、ベータ版です(結構前から…)。もし安定動作を望むならJVMで動くBurpがおススメです。

HTTP通信だけでなく、TCP/UDP通信を見たいという方はWireSharkを使ってみればなんとかなるような気がします。WireSharkはプロキシサーバでなくネットワークアダプタのスニファなので構成は変わってくると思いますが、Windowsのモバイルホットスポット機能とか使えばできるような気もします。