強火で進め

このブログではプログラム関連の記事を中心に書いてます。

HTTPのパケットを確認したり、書き換える事が出来るWeb Debugging Proxy「Fiddler」の勉強会に行って来ました

Fiddler の勉強会に行って来ました。 Fiddler は HTTP の通信データを観たり、書き換えたりする事が出来るツールです。

書籍

実践 Fiddler

実践 Fiddler

講師の方がオススメ(現状この1冊しか無い)されてた Fiddler を作られた方が書かれた本。オライリー本。機能拡張の実装方法についてかなりのページ書かれてるとの事。

感想

  • 今のところ Windows 版しか無いのが残念( Mac/Linux も有るけど現在α版)。
  • レスポンスを返すまでの時間を遅らせる機能が便利そう。この機能を使えばサーバのレスポンスが遅い時のテストが出来る!!
  • 指定のURLへのアクセスが有った時に別のファイル(ローカルのファイル)を指定可能なのが便利そう。講師の方はこの機能を使うと JavaScript のライブラリのバージョンを上げる時に事前に本番環境で確認出来るという使い方を紹介されてました。確かにその使い方は便利そう。

講演内容のメモ

  • Fiddler はWebデバッキングプロキシ
  • %ProgramFiles(x86)%\Fiddler2 のフォルダを丸ごとコピーで使用可能。USBなどに保存しておいて使える。しかし、この方法ではブラウザにインストールされる拡張機能は使えない。
  • Fiddler は起動した瞬間に既にキャプチャを開始している。
  • 起動した画面の左下に「Capturing」の文字が表示されていたらキャプチャ中。そこをクリックするとキャプチャの停止も可能。 F12 で有効、無効を切り替える事も可能。
  • 最初に起動した時には Windowsシステムプロキシとして動作する。
  • 「Capturing」の文字の隣の「All Processess」の所をクリックするとキャプチャ対象の範囲を指定出来る。
  • 「Web Browsers」は有名なブラウザのみにフィルタリング。有名でない個人が制作したブラウザなどは対象外と成ることに注意。
  • ツールバーの「Any Process」を使うとキャプチャしたいウィンドウを指定してキャプチャ出来る。
  • 「Any Process」の表示に戻す時はアイコンの上で右クリック。
  • ログはリクエストとレスポンスのセットでの表示に成っている事に注意。
  • 赤文字はエラー
  • Log タブは Fiddler 自身の動作ログ
タブについて
  • Raw タブ:は生データ。Header、body の両方のデータを確認出来る。
  • Text タブ:は body 部のテキストのみ表示。テキストとして解釈するのでバイナリの時に選択するとデータ0が出た所で表示が中断される。
  • HexView タブ:16進ダンプで表示。
  • WebView タブ:ブラウザ(IE)で表示した時と同じ表示。 HTML ファイルを開いた時には画像や CSS ファイルは含まれない為、多くの場合には実際の表示と異なる事に注意。
  • Auth タブ:認証処理の確認。
  • Cacheing タブ:キャッシュに対するステート情報を表示。
  • Cookies タブ:クッキー情報。上のビューでサーバへ送る Cookie 、下がサーバから受け取った Cookie の情報。

表示されるデータの中の P3P Header にはペアレンタルコントロールなどの情報が含まれる。最近のブラウザではほとんど対応していない。年齢制限ツールなどでは利用されている。

  • Transformer タブ: GZIP 圧縮や Chunked Transfoer-Encoding 関連の設定を行える。
Option 画面

【 General タブ】

  • Automatically stream audio & videe:ストリーミングデータは完了フラグが来るまではクライアントアプリに渡されない。この機能からオーディオやビデオのストリーミングは貯めないでそのまま流す場合にはチェックを入れる。

HTTPS タブ】

  • Capture HTTP CONNECTs : ここにチェックした時にはコネクション時の処理のみ表示される。接続後には暗号化通信の為、通常はデータを見ることが出来ない。
  • Decypt HTTPS traffic:暗号化されたデータをデコードして表示。チェックを付けると自己証明書を使う様に変更される。

Remove Interception Certificates ボタンをクリックすると自己証明書を削除できる。

【 Connections タブ】

  • Allow remote computers to connect:別のコンピュータからのトラフィックをチェック。別のコンピュータで動いているアプリのデバックを行う。

Act as system proxy on startup:チェックしているとアプリ起動時にシステムプロキシとして起動する

  • Bypass Fiddler for URLs that start with: Fiddler での処理を行わいない(バイパスする) URL を指定

Gateway タブ】
元々プロキシが使われている環境で Fiddler を使う場合に使う。 Fiddler が使うプロキシの設定などを行う。

【 Extensions タブ】
拡張機能の管理。

【 Tool タブ】
Fiddler の中から呼び出されるアプリの設定を行う。

QuickExec

QuickExec 。入力欄にキーボードで入力したコマンド Fiddler を操作する。

  • about:config で設定の一覧が出る。
IE
  • メニューから「Tools > WinINET Option」:IEの設定画面を表示出来る。
  • Clear WinINET Cache/Clear WinINET CookieIE キャッシュやCookieを削除出来る。
Filters
  • Host がイントラネットだけ、インターネットだけにフィルタするなどのフィルタリングの設定を行う。
IEサンドボックス
  • Windows 8 で AppContainner と呼ばれるサンドボックスで動作している。 IE の拡張保護モードで動作した様な時にこの機能が有効になる。

このサンドボックスではローカルコンピュータで実行されているサーバへの接続が禁止されている。その為、 Fiddler が使えない。

  • この機能から Fiddler を除外する為にはレジストリの変更が必要。設定にはアプリのexe名では無く、表に出てない内部で使用している名前で指定する必要が有る。
  • アプリにツールバーに有る Win8 Config ボタンを押すとその辺りの設定が出来るツールが起動する。
  • このツールによる設定変更には管理者権限が必要。その為、 Fiddler を管理者権限で実行していない場合には設定変更時にエラーとなる。
  • Fiddler を管理者権限で実行すると解決するがアプリの再起動が面倒くさいので Fiddler のフォルダに有る、 EnableLoopback.exe を管理者権限で実行するのがオススメ
クライアント証明書が必要なサイトの場合
  • %USERPLOFILE%\Documents\Fiddler2 のフォルダに証明書ファイルを ClientCertificate.cer というファイル名で置いておく。
リクエストやレスポンスの内容を書き換える方法

以下のものが有る。

  • インスペクタで直接セッション内容を編集する
  • AutoResponder を利用する
  • FiddlerScript を利用する
リクエストのリルート
  • データ内容は変更せずに別のサーバへ送る。クライアントからは本番サーバへ繋いでいる様に思わせた状態でテストサーバへ接続する事が可能。アプリのデバック時などに便利。
リダイレクト
  • クライアントに 306 でリダイレクトを行わせる。
リクエストを書き換えた時の動作を確認
  • メニューから Edit > Unlock for Editing で内容を変更出来る様になる。

Unlock を解除した後にツールバーの Replay ボタンを押す事で書き換えた時の動作を確認出来る。

Automatic Breakpoint

メニューの「Rules > Automatic Breakpoints」。

AutoResponder タブ
  • Enable automatic responses: AutoResponder 有効、無効の切り替え。
  • Unmatched requests passthrough:条件にマッチしなかったものはそのまま通過させたい場合にチェック。

使用しているJSのライブラリのバージョンを上げた時の動作などを実際にJSのファイルを変更する事無くテストが出来る。

Composer タグ

リクエストを一から作る時に使用。

  • Fix Content Length header:コンテンツ長を自動的にヘッダに書き込んでくれる。
ブレークポイント時の動作

ブレーク時の Inspectors タブ。

  • Break on Response:レスポンスを受け取って再度ブレークする
  • フィルタ機能は画面にはデータが表示されないがデータの通信自体は行われている。テスト中に余計なサイトに接続しない様な制御の為にフィルタは使えない。