利用fiddlercore,修改http/https请求与响应

  • 利用fiddlercore,修改http/https请求与响应已关闭评论
  • 72 次浏览
  • A+
所属分类:.NET技术
摘要

fiddler抓包工具,相信很多人都用过,很好用的一款抓包工具。 fiddlercore是官方提供给开发者调用的,用来处理所有的http/https请求,功能就如Fiddler一样强大,fiddlercore官方网站:https://www.telerik.com/fiddlercore

fiddler抓包工具,相信很多人都用过,很好用的一款抓包工具。

 fiddlercore是官方提供给开发者调用的,用来处理所有的http/https请求,功能就如Fiddler一样强大,fiddlercore官方网站:https://www.telerik.com/fiddlercore

下面我们利用fiddlercore来修改浏览器的响应数据。

自动设置https证书,所有请求都返回“二十有为”

using System; using System.Collections.Generic; using System.IO; using System.Reflection; using System.Threading; using Fiddler; using System.Net.Security; using System.Security.Cryptography.X509Certificates; using System.Text;  namespace Demo {     class Program     {         static Proxy oSecureEndpoint;         static string sSecureEndpointHostname = "localhost";         static int iSecureEndpointPort = 9876;          static void Main(string[] args)         {             Console.WriteLine("Starting ...");             Fiddler.CertMaker.createRootCert();             X509Certificate2 oRootCert = Fiddler.CertMaker.GetRootCertificate();             SetMachineTrust(oRootCert);             Fiddler.FiddlerApplication.oDefaultClientCertificate = oRootCert;             List<Fiddler.Session> oAllSessions = new List<Fiddler.Session>();              #region AttachEventListeners             Fiddler.FiddlerApplication.BeforeRequest += delegate(Fiddler.Session oS)             {                 oS.bBufferResponse = true;                 HTTPRequestHeaders rHeads = oS.oRequest.headers;                 //获取cookie                 string cookie = rHeads.AllValues("cookie");                 if ((oS.oRequest.pipeClient.LocalPort == iSecureEndpointPort) && (oS.hostname == sSecureEndpointHostname))                 {                     oS.utilCreateResponseAndBypassServer();                     oS.oResponse.headers.HTTPResponseStatus = "200 Ok";                     oS.oResponse["Content-Type"] = "text/html; charset=UTF-8";                     oS.oResponse["Cache-Control"] = "private, max-age=0";                     oS.utilSetResponseBody("<html><body>show!</body></html>");                 }             };              Fiddler.FiddlerApplication.BeforeResponse += new Fiddler.SessionStateHandler(FiddlerApplication_BeforeResponse);              Console.CancelKeyPress += new ConsoleCancelEventHandler(Console_CancelKeyPress);             #endregion AttachEventListeners              Fiddler.CONFIG.IgnoreServerCertErrors = true;             FiddlerApplication.Prefs.SetBoolPref("fiddler.network.streaming.abortifclientaborts", false);              FiddlerCoreStartupFlags oFCSF = FiddlerCoreStartupFlags.Default;             int iPort = 0;             Fiddler.FiddlerApplication.Startup(iPort, oFCSF);              oSecureEndpoint = FiddlerApplication.CreateProxyEndpoint(iSecureEndpointPort, true, sSecureEndpointHostname);             if (null != oSecureEndpoint)             {                 WriteCommandResponse("success!");             }              bool bDone = false;             do             {                 Console.WriteLine("nEnter h or q:");                 Console.Write(">");                 ConsoleKeyInfo cki = Console.ReadKey();                 Console.WriteLine();                 switch (cki.KeyChar)                 {                     case 'q':                     case 'Q':                         bDone = true;                         DoQuit();                         break;                 }             } while (!bDone);         }          static void FiddlerApplication_BeforeResponse(Fiddler.Session oSession)         {             if (oSession.isHTTPS)             {                 string hostname = oSession.hostname;                 int stateCode = oSession.oResponse.headers.HTTPResponseCode;                 string pathAndQuery = oSession.PathAndQuery;                 //获取服务器返回的html                 string body = oSession.GetResponseBodyAsString();                 //修改body                 body = "二十有为";                 oSession.utilDecodeResponse();                 oSession.utilSetResponseBody(body);             }             else             {                 string body = oSession.GetResponseBodyAsString();             }         }          private static bool SetMachineTrust(X509Certificate2 oRootCert)         {             try             {                 System.Security.Cryptography.X509Certificates.X509Store certStore = new System.Security.Cryptography.X509Certificates.X509Store(StoreName.Root, StoreLocation.LocalMachine);                 certStore.Open(OpenFlags.ReadWrite);                 try                 {                     certStore.Add(oRootCert);                 }                 finally                 {                     certStore.Close();                 }                 return true;             }             catch (Exception)             {                 return false;             }         }          static void Console_CancelKeyPress(object sender, ConsoleCancelEventArgs e)         {             DoQuit();         }          private static void WriteCommandResponse(string s)         {             ConsoleColor oldColor = Console.ForegroundColor;             Console.ForegroundColor = ConsoleColor.Green;             Console.WriteLine(s);             Console.ForegroundColor = oldColor;         }          private static void DoQuit()         {             WriteCommandResponse("Shutting down...");             if (null != oSecureEndpoint) oSecureEndpoint.Dispose();             Fiddler.FiddlerApplication.Shutdown();             Thread.Sleep(500);         }      } }

 

Demo下载地址:https://pan.baidu.com/s/1_s7ywb3O6zuMto5SDH4Jng

提取码:czun