using System.Net.Security;
using ProcessProxifier.Models;
using ProcessProxifier.Utils;
namespace ProcessProxifier.Core
using System.Globalization;
public ServerInfo DefaultServerInfo { set; get; }
public int FiddlerPort { set; get; }
public AsyncObservableCollection<Process> ProcessesList { set; get; }
public AsyncObservableCollection<RoutedConnection> RoutedConnectionsList { set; get; }
FiddlerApplication.BeforeRequest -= beforeRequest;
FiddlerApplication.OnValidateServerCertificate -= onValidateServerCertificate;
if (FiddlerApplication.oProxy != null)
FiddlerApplication.oProxy.Detach();
FiddlerApplication.Shutdown();
FiddlerApplication.BeforeRequest += beforeRequest;
FiddlerApplication.OnValidateServerCertificate += onValidateServerCertificate;
FiddlerApplication.Startup(FiddlerPort,
FiddlerCoreStartupFlags.RegisterAsSystemProxy |
FiddlerCoreStartupFlags.MonitorAllConnections |
FiddlerCoreStartupFlags.CaptureFTP);
void beforeRequest(Session oSession)
var process = ProcessesList.FirstOrDefault(p => p.Pid == oSession.LocalProcessID && p.IsEnabled);
var useDefaultServerInfo = string.IsNullOrWhiteSpace(process.ServerInfo.ServerIP);
if (useDefaultServerInfo)
oSession["X-OverrideGateway"] = (DefaultServerInfo.ServerType == ServerType.Socks ? "socks=" : "") + DefaultServerInfo.ServerIP + ":" + DefaultServerInfo.ServerPort;
oSession["X-OverrideGateway"] = (process.ServerInfo.ServerType == ServerType.Socks ? "socks=" : "") + process.ServerInfo.ServerIP + ":" + process.ServerInfo.ServerPort;
RoutedConnectionsList.Add(new RoutedConnection
ProcessPid = oSession.LocalProcessID,
ProcessName = getProcessName(oSession),
ProcessPath = process.Path
private string getProcessName(Session oSession)
var process = ProcessesList.FirstOrDefault(x => x.Pid == oSession.LocalProcessID);
return process == null ? oSession.LocalProcessID.ToString(CultureInfo.InvariantCulture) : process.Name;
static void onValidateServerCertificate(object sender, ValidateServerCertificateEventArgs e)
if (SslPolicyErrors.None == e.CertificatePolicyErrors)
e.ValidityState = CertificateValidity.ForceValid;