FiddlerScriptおよび.NET Fiddlerプラグインを使用したHTTPトラフィックの変更

Habréは、 FiddlerのようなHTTPトラフィックを監視するためのこのような強力で便利なツールについて繰り返し 語っきまし 。 ただし、利用可能なすべての記事では、プログラムの組み込み機能について説明していますが、拡張の可能性に焦点を当てることはありません。拡張機能は、組み込みのFiddlerScript言語の使用と.NETプラグインの作成です。 この記事では、どちらかを検討し、より興味深いものにするために、 前回の記事で書いた完全に実用的な問題を解決するために使用します(Habréの記事の写真への壊れたリンクを実際の問題に置き換えます)。



それでは、最後の記事がどのように終わったかを思い出すことから始めましょう。画像への壊れたリンクのリストと、それに対応するWebアーカイブ上の作業リンクを取得しました。 次に、ブラウザにそれらを提供する必要があります。そのために、Fiddler(FiddlerScriptに1つ、.NETに1つ)の拡張機能を作成します。 ソリューションの利便性に注意してください:はい、Fiddlerを実行する必要がありますが、破損したリンクは、記事のドメイン(Habr、Giktatymsまたはmegamind)に関係なく、使用するブラウザー(プロキシサポートがある場合のみ)およびモバイルデバイスに関係なく、動作中のリンクに置き換えられますインストールされたFiddlerをプロキシとして使用するように構成できます。



FiddlerScript



FiddlerScriptは、JScript.NETに基づいてFiddlerに組み込まれているプログラミング言語であり、着信および発信トラフィックを分析および変更し、Fiddler自体の機能を拡張し、そのインターフェイスを変更できます。

いくつかの関連リンク:





[ルール]-> [ルールのカスタマイズ]のメニューをクリックして開くファイルにコードを記述する必要があります。 突然ロックした場合-削除するだけで、Fiddlerはバックアップから再作成します。



FiddlerScriptを使用した、あるリンクから別のリンクへの最も単純な置換は、次のコードをOnBeforeRequestハンドラーに追加するように見えます。



static function OnBeforeRequest(oSession: Session) { ... if (oSession.url=="www.example.com/bad_url.jpg") { oSession.url = "www.example.com/good_url.jpg"; } }
      
      







13863リンクを置き換える必要があります。 「ifas」のそのような森を書くことは非生産的です。 FiddlerScriptはJScript.NETに基づいており、JScript.NETは.NETであり、.NETには一連の文字列を格納し、ハッシュテーブルに基づいてすばやく検索するための非常に生産的なデータ構造があります。 はい、はい、私はStringDictionaryについて話している。



初期データと、正規表現をサポートするテキストエディターでの簡単な自動置換操作をいくつか見てみましょう。フォームにそれを追加します。



 myDict.Add("img224.imageshack.us/img224/410/yandexmoney7mg.gif", "web.archive.org/web/20060723135036/http://img224.imageshack.us:80/img224/410/yandexmoney7mg.gif"); myDict.Add("blaugh.com/wp-content/themes/blaugh/images/cartoon-gd_01.gif", "web.archive.org/web/20070703010741/http://blaugh.com/wp-content/themes/blaugh/images/cartoon-gd_01.gif"); myDict.Add("blaugh.com/cartoons/060712_google_life.gif", "web.archive.org/web/20120112151300/http://blaugh.com/cartoons/060712_google_life.gif"); ...
      
      







辞書を初期化する必要があるのは1回だけです(たとえば、 OnBootハンドラーで、 検索時にすべてのOnBeforeRequest呼び出しで使用できます)。



 static var myDict: StringDictionary = null; static function OnBoot() { myDict = new StringDictionary(); myDict.Add("img224.imageshack.us/img224/410/yandexmoney7mg.gif", "web.archive.org/web/20060723135036/http://img224.imageshack.us:80/img224/410/yandexmoney7mg.gif"); myDict.Add("blaugh.com/wp-content/themes/blaugh/images/cartoon-gd_01.gif", "http://web.archive.org/web/20070703010741/http://blaugh.com/wp-content/themes/blaugh/images/cartoon-gd_01.gif"); myDict.Add("blaugh.com/cartoons/060712_google_life.gif", "http://web.archive.org/web/20120112151300/http://blaugh.com/cartoons/060712_google_life.gif"); .... } ... static function OnBeforeRequest(oSession: Session) { ... if (null != myDict && myDict.ContainsKey(oSession.url)) { oSession.url = myDict[oSession.url]; } }
      
      







画像へのリンクが切れている記事を開いて保存し、確認してください。この置換なしでは利用できなかった画像が表示されます。



完全なコード



Fiddler用の.NETプラグインの作成



奇妙なエディターで奇妙なJScript.NET言語でコードを記述し、奇妙な方法で起動するのが本当に好きではない場合は、構成ファイルにコピーして貼り付け、30秒待って、作成したスクリプトを解析およびコンパイルします-C#のすべての力があなたのサービスにありますNET、Visual Studio、その他の人生の楽しみ!



プロジェクトの作成について簡単に説明します。

1. Visual Studioを起動し、「クラスライブラリ」タイプの新しい.NETプロジェクトを作成します。

2. Fiddler 4で作成する場合は、プロジェクトプロパティで.NETバージョン4を選択し、Fiddler 2で作成する場合は.NETバージョン3.5を選択します

3.必要に応じて、Fiddler自体(Fiddler.exe実行可能ファイル、Program Files内のフォルダーにあります)を追加します。

4.コードでは、サポートするFiddlerの最小バージョンを示す必要があります。

 using Fiddler; // Extension requires Fiddler 2.2.8.6+ because it uses types introduced in v2.2.8... [assembly: Fiddler.RequiredVersion("2.2.8.6")]
      
      





5. IAutoTamperインターフェイスを実装するクラスを作成する必要があります。 彼のイベントは基本的にFiddlerScriptコードのイベントと同じであるため、ここでは概略的に示します。

 using System; using Fiddler; using System.Collections.Specialized; [assembly: Fiddler.RequiredVersion("2.3.5.0")] public class HabraFixer : IAutoTamper // Ensure class is public, or Fiddler won't see it! { public HabraFixer() { } public void OnLoad() { myDict = new StringDictionary(); myDict.Add("img224.imageshack.us/img224/410/yandexmoney7mg.gif", "web.archive.org/web/20060723135036/http://img224.imageshack.us:80/img224/410/yandexmoney7mg.gif"); myDict.Add("blaugh.com/wp-content/themes/blaugh/images/cartoon-gd_01.gif", "web.archive.org/web/20070703010741/http://blaugh.com/wp-content/themes/blaugh/images/cartoon-gd_01.gif"); myDict.Add("blaugh.com/cartoons/060712_google_life.gif", "web.archive.org/web/20120112151300/http://blaugh.com/cartoons/060712_google_life.gif"); ... } public void OnBeforeUnload() { } public void AutoTamperRequestBefore(Session oSession) { if (null != myDict && myDict.ContainsKey(oSession.url)) { oSession.url = myDict[oSession.url]; } } public void AutoTamperRequestAfter(Session oSession) { } public void AutoTamperResponseBefore(Session oSession) { } public void AutoTamperResponseAfter(Session oSession) { } public void OnBeforeReturningError(Session oSession) { } private StringDictionary myDict; }
      
      







完全なコード



ビルドし、%Program Files%\ Fiddler2 \ Scripts(すべてのユーザー用)または%USERPROFILE%\ My Documents \ Fiddler2 \ Scripts(現在のもののみ)にアセンブリを配置し、Fiddlerを実行して、すべてが動作することを確認します!



これが、Fiddlerの拡張機能の作成方法を学習した方法です。



All Articles