如何用C#检测PC上Fiddler是否运行,避免应用请求被捕获
检测Fiddler运行状态及阻止其捕获请求的C#实现
一、检测Fiddler是否处于运行状态
Fiddler的主进程名为Fiddler.exe,可通过遍历系统进程判断:
using System.Diagnostics; public static bool IsFiddlerRunning() { Process[] fiddlerProcesses = Process.GetProcessesByName("Fiddler"); return fiddlerProcesses.Length > 0; }
调用该方法即可获取结果,需引用System.Diagnostics命名空间。
二、阻止Fiddler捕获应用请求
以下几种方式可以实现需求:
1. 禁用HttpClient的代理
如果应用使用HttpClient,可通过配置HttpClientHandler绕过代理:
var handler = new HttpClientHandler { UseProxy = false, Proxy = null }; var httpClient = new HttpClient(handler); // 此HttpClient发起的请求不会被Fiddler捕获
2. 添加请求头让Fiddler忽略
Fiddler支持识别特定请求头并跳过捕获,添加X-Fiddler-Ignore头即可:
var request = new HttpRequestMessage(HttpMethod.Get, "https://example.com"); request.Headers.Add("X-Fiddler-Ignore", "true"); var httpClient = new HttpClient(); var response = await httpClient.SendAsync(request);
3. 全局禁用HttpWebRequest的代理(适用于旧版请求方式)
如果应用使用HttpWebRequest,可通过ServicePointManager全局设置:
System.Net.ServicePointManager.Proxy = null;
4. 重置系统代理(谨慎使用)
若Fiddler通过系统代理捕获请求,可临时重置系统代理,但此操作会影响其他应用:
using Microsoft.Win32; using System.Runtime.InteropServices; public static void ResetSystemProxy() { using (var key = Registry.CurrentUser.OpenSubKey(@"Software\Microsoft\Windows\CurrentVersion\Internet Settings", true)) { key.SetValue("ProxyEnable", 0, RegistryValueKind.DWord); key.SetValue("ProxyServer", "", RegistryValueKind.String); } InternetSetOption(IntPtr.Zero, INTERNET_OPTION_SETTINGS_CHANGED, IntPtr.Zero, 0); InternetSetOption(IntPtr.Zero, INTERNET_OPTION_REFRESH, IntPtr.Zero, 0); } [DllImport("wininet.dll", SetLastError = true)] private static extern bool InternetSetOption(IntPtr hInternet, int dwOption, IntPtr lpBuffer, int dwBufferLength); private const int INTERNET_OPTION_SETTINGS_CHANGED = 39; private const int INTERNET_OPTION_REFRESH = 37;
内容的提问来源于stack exchange,提问作者Hasan
相关产品推荐
相关产品推荐

