CustomRules

Embed Size (px)

Citation preview

  • 8/7/2019 CustomRules

    1/7

    import System;import System.Windows.Forms;import Fiddler;

    // GLOBALIZATION NOTE:// Be sure to save this file with UTF-8 Encoding if using any non-ASCII characters

    // in strings, etc.//// JScript Reference// http://www.fiddler2.com/redir/?id=msdnjsnet//// FiddlerScript Reference// http://www.fiddler2.com/redir/?id=fiddlerscriptcookbook//// FiddlerScript Editor:// http://www.fiddler2.com/redir/?id=fiddlerscripteditor

    class Handlers

    { // The following snippet demonstrates a custom-bound column for the websessions list.

    // See http://www.fiddler2.com/fiddler/help/configurecolumns.asp for more info

    //public static BindUIColumn("Method", 60)//function FillMethodColumn(oS: Session){// if ((oS.oRequest != null) && (oS.oRequest.headers != null))// return oS.oRequest.headers.HTTPMethod; else return String.Empty;//}

    public static RulesOption("Hide 304s")var m_Hide304s: boolean = false;

    // Cause Fiddler to override the Accept-Language header with one of thedefined values

    public static RulesOption("Request &Japanese Content")var m_Japanese: boolean = false;

    // Cause Fiddler to override the User-Agent header with one of the defined values

    RulesString("&User-Agents", true)RulesStringValue(0,"Netscape &3", "Mozilla/3.0 (Win95; I)")RulesStringValue(1,"WinMobile7", "Mozilla/4.0 (compatible; MSIE 7.0; Win

    dows Phone OS 7.0; Trident/3.1; IEMobile/7.0) Microsoft;FuturePhone")

    RulesStringValue(2,"&Safari5 (Win7)", "Mozilla/5.0 (Windows; U; WindowsNT 6.1; en-US) AppleWebKit/533.16 (KHTML, like Gecko) Version/5.0 Safari/533.16")

    RulesStringValue(3,"IPAD", "Mozilla/5.0 (iPad; U; CPU iPhone OS 3_2 likeMac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Version/4.0.4 Mobile/7B314 Safari/531.21.10")

    RulesStringValue(4,"IE &6 (XPSP2)", "Mozilla/4.0 (compatible; MSIE 6.0;Windows NT 5.1; SV1)")

    RulesStringValue(5,"IE &7 (Vista)", "Mozilla/4.0 (compatible; MSIE 7.0;Windows NT 6.0; SLCC1)")

    RulesStringValue(6,"IE 8 (Win2k3 x64)", "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.2; WOW64; Trident/4.0)")

    RulesStringValue(7,"IE &8 (Win7)", "Mozilla/4.0 (compatible; MSIE 8.0; W

    indows NT 6.1; Trident/4.0)")RulesStringValue(8,"IE 8 (IE7 CompatMode)", "Mozilla/4.0 (compatible; MS

    IE 7.0; Windows NT 5.1; Trident/4.0)")

  • 8/7/2019 CustomRules

    2/7

  • 8/7/2019 CustomRules

    3/7

    static function OnShutdown(){// MessageBox.Show("Fiddler has shutdown");

    }

    static function OnAttach(){// MessageBox.Show("Fiddler is now the system proxy");

    // System.Diagnostics.Process.Start("proxycfg.exe", "-u"); // Notify WinHTTP of proxy change

    }

    static function OnDetach(){// MessageBox.Show("Fiddler is no longer the system proxy");// System.Diagnostics.Process.Start("proxycfg.exe", "-u"); // Notify WinHTTP of proxy change

    }

    static function OnBeforeRequest(oSession: Session){

    // Sample Rule: Color ASPX requests in RED// if (oSession.uriContains(".aspx")) { oSession["ui-color"] = "red"; }

    // Sample Rule: Flag POSTs to fiddler2.com in italics// if (oSession.HostnameIs("www.fiddler2.com") && oSession.HTTPMethodIs("POST")) { oSession["ui-italic"] = "yup"; }

    // Sample Rule: Break requests for URLs containing "/sandbox/"// if (oSession.uriContains("/sandbox/")){// oSession.oFlags["x-breakrequest"] = "yup"; // Existence of the x-breakrequest flag creates a breakpoint; the "yup" value is unimportant.

    // }

    if ((null != gs_ReplaceToken) && (oSession.url.indexOf(gs_ReplaceToken)>-1)){ // Case sensitive

    oSession.url = oSession.url.Replace(gs_ReplaceToken, gs_ReplaceTokenWith);

    }if ((null != gs_OverridenHost) && (oSession.host.toLowerCase() =

    = gs_OverridenHost)){oSession["x-overridehost"] = gs_OverrideHostWith;

    }

    if ((null!=bpRequestURI) && oSession.uriContains(bpRequestURI)){oSession["x-breakrequest"]="uri";

    }

    if ((null!=bpMethod) && (oSession.HTTPMethodIs(bpMethod))){oSession["x-breakrequest"]="method";

    }

    if ((null!=uiBoldURI) && oSession.uriContains(uiBoldURI)){oSession["ui-bold"]="QuickExec";

    }

    if (m_SimulateModem){

    // Delay sends by 300ms per KB uploaded.oSession["request-trickle-delay"] = "300";// Delay receives by 150ms per KB downloaded.

  • 8/7/2019 CustomRules

    4/7

    oSession["response-trickle-delay"] = "150";}

    if (m_DisableCaching){oSession.oRequest.headers.Remove("If-None-Match");oSession.oRequest.headers.Remove("If-Modified-Since");oSession.oRequest["Pragma"] = "no-cache";

    }

    // User-Agent Overridesif (null != sUA){

    oSession.oRequest["User-Agent"] = sUA;}

    if (m_Japanese){oSession.oRequest["Accept-Language"] = "ja";

    }}

    //// If a given session has response streaming enabled, then the OnBeforeResponse function

    // is actually called AFTER the response was returned to the client.//// In contrast, this OnPeekAtResponseHeaders method is called before the

    response headers are// sent to the client (and before the body is read from the server). He

    nce this is an opportune time// to disable streaming (oSession.bBufferResponse = true) if there is so

    mething in the response headers// which suggests that tampering with the response body is necessary.//

    // Note: oSession.responseBodyBytes is not available within this function!

    //static function OnPeekAtResponseHeaders(oSession: Session) {

    //FiddlerApplication.Log.LogFormat("Session {0}: Response headerpeek shows status is {1}", oSession.id, oSession.responseCode);

    if (m_DisableCaching) {oSession.oResponse.headers.Remove("Expires");oSession.oResponse["Cache-Control"] = "no-cache";

    }}

    static function OnBeforeResponse(oSession: Session){

    if (m_ShowTimestamp){oSession["ui-customcolumn"] = DateTime.Now.ToString("H:m

    m:ss.ffff") + " " + oSession["ui-customcolumn"];}

    if (m_ShowTTLB){oSession["ui-customcolumn"] = oSession.oResponse.iTTLB +

    "ms " + oSession["ui-customcolumn"];}

    if (m_Hide304s && oSession.responseCode == 304){

    oSession["ui-hide"] = "true";}

  • 8/7/2019 CustomRules

    5/7

    if ((bpStatus>0) && (oSession.responseCode == bpStatus)){oSession["x-breakresponse"]="status";

    }

    if ((null!=bpResponseURI) && oSession.uriContains(bpResponseURI)){

    oSession["x-breakresponse"]="uri";

    }

    }static function Main(){

    var today: Date = new Date();FiddlerObject.StatusText = " CustomRules.js was loaded at: " + t

    oday;// Uncomment to add a "Server" column containing the response "S

    erver" header, if present// FiddlerObject.UI.lvSessions.AddBoundColumn("Server", 50, "@re

    sponse.server");}

    // These static variables are used for simple breakpointing & other QuickExec rules

    static var bpRequestURI:String = null;static var bpResponseURI:String = null;static var bpStatus:int = -1;static var bpMethod: String = null;static var uiBoldURI: String = null;static var gs_ReplaceToken: String = null;static var gs_ReplaceTokenWith: String = null;static var gs_OverridenHost: String = null;

    static var gs_OverrideHostWith: String = null;

    // The OnExecAction function is called by either the QuickExec box in the Fiddler window,

    // or by the ExecAction.exe command line utility.static function OnExecAction(sParams: String[]){FiddlerObject.StatusText = "ExecAction: " + sParams[0];

    var sAction = sParams[0].toLowerCase();switch (sAction){case "bold":

    if (sParams.Length

  • 8/7/2019 CustomRules

    6/7

    case "bpm":if (sParams.Length

  • 8/7/2019 CustomRules

    7/7

    FiddlerObject.UI.actDetachProxy();break;

    case "start":FiddlerObject.UI.actAttachProxy();break;

    case "cls":case "clear":

    FiddlerObject.UI.actRemoveAllSessions();break;

    case "g":case "go":

    FiddlerObject.UI.actResumeAllSessions();break;

    case "help":Utilities.LaunchHyperlink("http://www.fiddler2.com/redir/?id=qui

    ckexec");break;

    case "hide":FiddlerObject.UI.actMinimizeToTray();

    break;case "log":FiddlerApplication.Log.LogString((sParams.Length