移出Fiddler
This commit is contained in:
@@ -1,116 +0,0 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using System.Globalization;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Reflection;
|
||||
using System.Runtime.InteropServices;
|
||||
using System.Security.Cryptography.X509Certificates;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using ColorConsole;
|
||||
using Fiddler;
|
||||
using Microsoft.Win32;
|
||||
|
||||
namespace BarrageGrab.Proxy
|
||||
{
|
||||
/// <summary>
|
||||
/// FiddlerCore 代理程序
|
||||
/// </summary>
|
||||
[Obsolete("由于框架存在内存泄漏,已弃用,请使用TitaniumProxy)", false)]
|
||||
internal class FiddlerProxy : SystemProxy
|
||||
{
|
||||
bool disposed = false;
|
||||
ConsoleWriter console = new ConsoleWriter();
|
||||
|
||||
public FiddlerProxy()
|
||||
{
|
||||
InitFiddler();
|
||||
}
|
||||
|
||||
//初始化Fiddler
|
||||
private void InitFiddler()
|
||||
{
|
||||
//这个名字随便
|
||||
FiddlerApplication.SetAppDisplayName("FiddlerCore");
|
||||
FiddlerApplication.OnWebSocketMessage += FiddlerApplication_OnWebSocketMessage;
|
||||
//FiddlerApplication.OnReadResponseBuffer += OnReadResponseBuffer;
|
||||
//设置pac规则,匹配douyin且排除douyincdn的host走代理,其余的直连
|
||||
FiddlerApplication.Prefs.SetStringPref("fiddler.proxy.pacfile.text", $"if (/douyin(?!cdn)/.test(host)) {{return 'PROXY 127.0.0.1:{base.ProxyPort}' }} return 'DIRECT'");
|
||||
|
||||
|
||||
X509Certificate2 oRootCert;
|
||||
if (null == CertMaker.GetRootCertificate())
|
||||
{
|
||||
CertMaker.createRootCert();
|
||||
oRootCert = CertMaker.GetRootCertificate();
|
||||
X509Store certStore = new X509Store(StoreName.Root, StoreLocation.LocalMachine);
|
||||
certStore.Open(OpenFlags.ReadWrite);
|
||||
try
|
||||
{
|
||||
certStore.Add(oRootCert);
|
||||
}
|
||||
finally
|
||||
{
|
||||
certStore.Close();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
oRootCert = CertMaker.GetRootCertificate();
|
||||
}
|
||||
//信任证书
|
||||
CertMaker.trustRootCert();
|
||||
|
||||
FiddlerApplication.oDefaultClientCertificate = oRootCert;
|
||||
//忽略服务器证书错误
|
||||
CONFIG.IgnoreServerCertErrors = true;
|
||||
CONFIG.bEnableIPv6 = false;
|
||||
//CONFIG.bCaptureCONNECT = true;
|
||||
//CONFIG.bUseEventLogForExceptions = false;
|
||||
//CONFIG.bAutoProxyLogon = false;
|
||||
//CONFIG.bMITM_HTTPS = false;
|
||||
////CONFIG.SetNoDecryptList("*");
|
||||
}
|
||||
|
||||
|
||||
private void FiddlerApplication_OnWebSocketMessage(object sender, WebSocketMessageEventArgs e)
|
||||
{
|
||||
var msg = e.oWSM;
|
||||
|
||||
FieldInfo field = msg.GetType().GetField("_wsOwner", BindingFlags.NonPublic | BindingFlags.Instance);
|
||||
WebSocket obj = (WebSocket)field.GetValue(msg);
|
||||
field = obj.GetType().GetField("oCP", BindingFlags.NonPublic | BindingFlags.Instance);
|
||||
|
||||
var sessionField = obj.GetType().GetField("_mySession", BindingFlags.NonPublic | BindingFlags.Instance);
|
||||
|
||||
ClientPipe ocp = (ClientPipe)field.GetValue(obj);
|
||||
Session session = (Session)sessionField.GetValue(obj);
|
||||
|
||||
this.SendWebSocketData(new WsMessageEventArgs()
|
||||
{
|
||||
Payload = msg.PayloadData,
|
||||
ProcessID = ocp.LocalProcessID,
|
||||
ProcessName = ocp.LocalProcessName,
|
||||
HostName = session.hostname,
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
public override void Start()
|
||||
{
|
||||
FiddlerApplication.Startup(Appsetting.Instanse.ProxyPort, FiddlerCoreStartupFlags.Default);
|
||||
console.WriteLine("Fiddler代理已启动", ConsoleColor.Green);
|
||||
}
|
||||
|
||||
public override void Dispose()
|
||||
{
|
||||
if (disposed) return;
|
||||
FiddlerApplication.Shutdown();
|
||||
CloseSystemProxy();
|
||||
console.WriteLine("Fiddler代理已关闭");
|
||||
disposed = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user