Upload
faiz-fahmi
View
225
Download
0
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