http://www.sufeinet.com/plugin.php?id=keke_group

苏飞论坛

 找回密码
 马上注册

QQ登录

只需一步,快速开始

分布式系统框架(V2.0) 轻松承载百亿数据,千万流量!讨论专区 - 源码下载 - 官方教程

HttpHelper爬虫框架(V2.7-含.netcore) HttpHelper官方出品,爬虫框架讨论区 - 源码下载 - 在线测试和代码生成

HttpHelper爬虫类(V2.0) 开源的爬虫类,支持多种模式和属性 源码 - 代码生成器 - 讨论区 - 教程- 例子

查看: 5686|回复: 1

[例子源码] fiddlercore抓包,修改https请求响应

[复制链接]
发表于 2023-2-6 12:50:59 | 显示全部楼层 |阅读模式
[C#] 纯文本查看 复制代码
引用BCMakeCert.dll、CertMaker.dll、FiddlerCore.dll



自动设置证书文件,所有请求都返回:“二十有为”,
可拦截浏览器发出的http/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");
                string ua = rHeads.AllValues("user-agent");
 
                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);

            #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();
            } 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;
            }
        }

    }
}




123.png


1. 开通SVIP会员,免费下载本站所有源码,不限次数据,不限时间
2. 加官方QQ群,加官方微信群获取更多资源和帮助
3. 找站长苏飞做网站、商城、CRM、小程序、App、爬虫相关、项目外包等点这里
发表于 2023-2-6 14:19:09 | 显示全部楼层
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 马上注册

本版积分规则

QQ|手机版|小黑屋|手机版|联系我们|关于我们|广告合作|苏飞论坛 ( 豫ICP备18043678号-2)

GMT+8, 2024-4-23 21:10

© 2014-2021

快速回复 返回顶部 返回列表