From 2cd2e8894d633ec0d5431d4b68ef8d7d407f6820 Mon Sep 17 00:00:00 2001 From: 2dust <31833384+2dust@users.noreply.github.com> Date: Thu, 19 Dec 2024 11:40:16 +0800 Subject: [PATCH] Add system proxy exception function for macos --- .../Handler/SysProxy/ProxySettingOSX.cs | 16 +++++++++++++--- .../Handler/SysProxy/SysProxyHandler.cs | 2 +- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/v2rayN/ServiceLib/Handler/SysProxy/ProxySettingOSX.cs b/v2rayN/ServiceLib/Handler/SysProxy/ProxySettingOSX.cs index 6f19ffc8..9dbc0b85 100644 --- a/v2rayN/ServiceLib/Handler/SysProxy/ProxySettingOSX.cs +++ b/v2rayN/ServiceLib/Handler/SysProxy/ProxySettingOSX.cs @@ -16,9 +16,9 @@ /// private static readonly List LstTypes = ["setwebproxy", "setsecurewebproxy", "setsocksfirewallproxy"]; - public static async Task SetProxy(string host, int port) + public static async Task SetProxy(string host, int port, string exceptions) { - var lstCmd = GetSetCmds(host, port); + var lstCmd = GetSetCmds(host, port, exceptions); await ExecCmd(lstCmd); } @@ -42,7 +42,7 @@ } } - private static List GetSetCmds(string host, int port) + private static List GetSetCmds(string host, int port, string exceptions) { List lstCmd = []; foreach (var interf in LstInterface) @@ -55,6 +55,16 @@ Arguments = [$"-{type}", interf, host, (type.Contains("socks") ? (port - 1) : port).ToString()] }); } + if (exceptions.IsNotEmpty()) + { + List args = [$"-setproxybypassdomains", interf]; + args.AddRange(exceptions.Split(',')); + lstCmd.Add(new CmdItem() + { + Cmd = "networksetup", + Arguments = args + }); + } } return lstCmd; diff --git a/v2rayN/ServiceLib/Handler/SysProxy/SysProxyHandler.cs b/v2rayN/ServiceLib/Handler/SysProxy/SysProxyHandler.cs index 06b1b527..3275b6d0 100644 --- a/v2rayN/ServiceLib/Handler/SysProxy/SysProxyHandler.cs +++ b/v2rayN/ServiceLib/Handler/SysProxy/SysProxyHandler.cs @@ -32,7 +32,7 @@ break; case ESysProxyType.ForcedChange when Utils.IsOSX(): - await ProxySettingOSX.SetProxy(Global.Loopback, port); + await ProxySettingOSX.SetProxy(Global.Loopback, port, exceptions); break; case ESysProxyType.ForcedClear when Utils.IsWindows():