C#でFiddlerCoreを使ってパケットキャプチャを行う。HTTPS対応版

C#でFiddlerCoreを使ってパケットキャプチャを行う。HTTPS対応版

Fiddler Core 公式サイトへ行き、PRICINGメニューから無料のFiddlereCoreをダウンロードします。

保存したZipファイルを解凍すると、FiddlerCoreAPIというフォルダが作成されます。この中にあるFiddlerCore45.dllを 、 VisualStudioの参照の追加から追加してください。

namespace等にusing Fiddler;を宣言し、実際のコードを書いていきます。

まずはMainに下記の内容を記述してください。
自己証明書を追加し、イベント発生時のデリゲートを作成し、ローカルプロキシサーバーを立ち上げます。

自己証明書を追加する

Fiddler.FiddlerApplication.oDefaultClientCertificate = X509Certificate.CreateFromCertFile(“【自己証明書のパス】\myCert.cer”);

証明書エラーを無視する

CONFIG.IgnoreServerCertErrors = true;

リクエスト・レスポンスの表示

Fiddler.FiddlerApplication.BeforeRequest += new Fiddler.SessionStateHandler(FiddlerApplication_BeforeRequest);

Fiddler.FiddlerApplication.BeforeResponse += new Fiddler.SessionStateHandler(FiddlerApplication_BeforeResponse);

Fiddler.FiddlerApplication.AfterSessionComplete += new Fiddler.SessionStateHandler(FiddlerApplication_AfterSessionComplete);

CONFIG.IgnoreServerCertErrors = true;

ローカルプロキシサーバーを立ち上げる

ProxyPortに0を渡すと空いているポートを自動で返す方法。

FiddlerApplication.Startup(0, FiddlerCoreStartupFlags.DecryptSSL | ~Fiddler.FiddlerCoreStartupFlags.ChainToUpstreamGateway);

自己証明書を追加をしないと、HTTPS通信をキャプチャすることができません。自己証明書の作成方法はこちらの記事で紹介しています。【自己証明書のパス】には、作成した自己証明書のフルパスを記述してください。

次に、イベント発生時のメソッドを記述します。Fiddler.Sessionのオブジェクト内に、リクエストやレスポンス等のデータが入っています。
static void FiddlerApplication_AfterSessionComplete(Fiddler.Session oSession)

{

var ResBodyString = oSession.GetResponseBodyAsString();

var ResBodyBytes = oSession.responseBodyBytes;

var ResHeaders = oSession.oResponse.headers.ToString();

int intAt = ResHeaders.IndexOf(“\r\n”);

ResBodyString = ResBodyString.Replace(“\n”, “\r\n”);

string strMessage = ResHeaders + “\r\n” + (!string.IsNullOrEmpty(ResBodyString) ? ResBodyString + “\r\n” : string.Empty);

Console.WriteLine(strMessage);

}

static void FiddlerApplication_BeforeRequest(Fiddler.Session oSession)

{

var ReqBodyString = oSession.GetRequestBodyAsString();

var ReqBodyBytes = oSession.requestBodyBytes;

var ReqHeaders = oSession.oRequest.headers.ToString();

int intAt = ReqHeaders.IndexOf(“\r\n”);

string strMessage = ReqHeaders + “\r\n” + (!string.IsNullOrEmpty(ReqBodyString) ? ReqBodyString + “\r\n” : string.Empty);

Console.WriteLine(strMessage);

}

static void FiddlerApplication_BeforeResponse(Fiddler.Session oSession)

{

}

WebBrowserコントロールの通信をFiddlerCoreでキャッチしたい場合

IE&WebBrowserコントロールにプロキシに設定する方法。

Fiddler.URLMonInterop.SetProxyInProcess(string.Format(“127.0.0.1:{0}”, Fiddler.FiddlerApplication.oProxy.ListenPort), “”);
WebBrowserコントロールのプロキシを指定するだけで通信内容を取得できます。

SeleniumWebDriverのChromeDriverの通信をFiddlerCoreでキャッチしたい場合

proxyオブジェクトを作成する方法。

var proxyPort = FiddlerApplication.oProxy.ListenPort;

var proxy = new OpenQA.Selenium.Proxy();

proxy.HttpProxy = string.Format(“127.0.0.1:{0}”, proxyPort);

proxy.SslProxy = string.Format(“127.0.0.1:{0}”, proxyPort);

proxy.SocksProxy = string.Format(“127.0.0.1:{0}”, proxyPort);

proxy.FtpProxy = string.Format(“127.0.0.1:{0}”, proxyPort);

webDriverにProxyを設定する

var _webDriverService = ChromeDriverService.CreateDefaultService();

var _webDriverOptions = new ChromeOptions();

_webDriverOptions.Proxy = proxy;

var _webDriver = new ChromeDriver(_webDriverService, _webDriverOptions);

Selenium WebDriverのProxyオブジェクトは、SslProxyを設定することで、Https通信をキャプチャすることできるようになります。

コメントを残す

メールアドレスが公開されることはありません。