mirror of
https://github.com/2dust/v2rayN.git
synced 2025-04-19 21:52:25 +00:00
When set the macOS system proxy, use shell scripts instead of command lines
This commit is contained in:
parent
5777a97119
commit
3edaac5739
3 changed files with 21 additions and 82 deletions
|
@ -38,6 +38,7 @@ namespace ServiceLib
|
||||||
public const string ClashTunYaml = NamespaceSample + "clash_tun_yaml";
|
public const string ClashTunYaml = NamespaceSample + "clash_tun_yaml";
|
||||||
public const string LinuxAutostartConfig = NamespaceSample + "linux_autostart_config";
|
public const string LinuxAutostartConfig = NamespaceSample + "linux_autostart_config";
|
||||||
public const string PacFileName = NamespaceSample + "pac";
|
public const string PacFileName = NamespaceSample + "pac";
|
||||||
|
public const string ProxySetOSXShellFileName = NamespaceSample + "proxy_set_osx_sh";
|
||||||
|
|
||||||
public const string DefaultSecurity = "auto";
|
public const string DefaultSecurity = "auto";
|
||||||
public const string DefaultNetwork = "tcp";
|
public const string DefaultNetwork = "tcp";
|
||||||
|
|
|
@ -1,101 +1,38 @@
|
||||||
namespace ServiceLib.Handler.SysProxy
|
namespace ServiceLib.Handler.SysProxy
|
||||||
{
|
{
|
||||||
public class ProxySettingOSX
|
public class ProxySettingOSX
|
||||||
{
|
{
|
||||||
/// <summary>
|
private static readonly string _proxySetFileName = $"{Global.ProxySetOSXShellFileName.Replace(Global.NamespaceSample, "")}.sh";
|
||||||
/// 应用接口类型
|
|
||||||
/// </summary>
|
|
||||||
private static readonly List<string> LstInterface = ["Ethernet", "Wi-Fi", "Thunderbolt Bridge", "USB 10/100/1000 LAN"];
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 代理类型,对应 http,https,socks
|
|
||||||
/// </summary>
|
|
||||||
private static readonly List<string> LstTypes = ["setwebproxy", "setsecurewebproxy", "setsocksfirewallproxy"];
|
|
||||||
|
|
||||||
public static async Task SetProxy(string host, int port, string exceptions)
|
public static async Task SetProxy(string host, int port, string exceptions)
|
||||||
{
|
{
|
||||||
var lstInterface = await GetListNetworkServices();
|
List<string> args = ["set", host, port.ToString()];
|
||||||
var lstCmd = GetSetCmds(lstInterface, host, port, exceptions);
|
if (exceptions.IsNotEmpty())
|
||||||
await ExecCmd(lstCmd);
|
{
|
||||||
|
args.AddRange(exceptions.Split(','));
|
||||||
|
}
|
||||||
|
|
||||||
|
await ExecCmd(args);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static async Task UnsetProxy()
|
public static async Task UnsetProxy()
|
||||||
{
|
{
|
||||||
var lstInterface = await GetListNetworkServices();
|
List<string> args = ["clear"];
|
||||||
var lstCmd = GetUnsetCmds(lstInterface);
|
await ExecCmd(args);
|
||||||
await ExecCmd(lstCmd);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static async Task ExecCmd(List<CmdItem> lstCmd)
|
private static async Task ExecCmd(List<string> args)
|
||||||
{
|
{
|
||||||
foreach (var cmd in lstCmd)
|
var fileName = Utils.GetBinConfigPath(_proxySetFileName);
|
||||||
|
if (!File.Exists(fileName))
|
||||||
{
|
{
|
||||||
if (cmd is null || cmd.Cmd.IsNullOrEmpty() || cmd.Arguments is null)
|
var contents = EmbedUtils.GetEmbedText(Global.ProxySetOSXShellFileName);
|
||||||
{
|
await File.AppendAllTextAsync(fileName, contents);
|
||||||
continue;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
await Task.Delay(10);
|
await Utils.SetLinuxChmod(fileName);
|
||||||
await Utils.GetCliWrapOutput(cmd.Cmd, cmd.Arguments);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private static List<CmdItem> GetSetCmds(List<string> lstInterface, string host, int port, string exceptions)
|
await Utils.GetCliWrapOutput(Global.LinuxBash, args);
|
||||||
{
|
|
||||||
List<CmdItem> lstCmd = [];
|
|
||||||
foreach (var interf in lstInterface)
|
|
||||||
{
|
|
||||||
foreach (var type in LstTypes)
|
|
||||||
{
|
|
||||||
lstCmd.Add(new CmdItem()
|
|
||||||
{
|
|
||||||
Cmd = "networksetup",
|
|
||||||
Arguments = [$"-{type}", interf, host, port.ToString()]
|
|
||||||
});
|
|
||||||
}
|
|
||||||
if (exceptions.IsNotEmpty())
|
|
||||||
{
|
|
||||||
List<string> args = [$"-setproxybypassdomains", interf];
|
|
||||||
args.AddRange(exceptions.Split(','));
|
|
||||||
lstCmd.Add(new CmdItem()
|
|
||||||
{
|
|
||||||
Cmd = "networksetup",
|
|
||||||
Arguments = args
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return lstCmd;
|
|
||||||
}
|
|
||||||
|
|
||||||
private static List<CmdItem> GetUnsetCmds(List<string> lstInterface)
|
|
||||||
{
|
|
||||||
List<CmdItem> lstCmd = [];
|
|
||||||
foreach (var interf in lstInterface)
|
|
||||||
{
|
|
||||||
foreach (var type in LstTypes)
|
|
||||||
{
|
|
||||||
lstCmd.Add(new CmdItem()
|
|
||||||
{
|
|
||||||
Cmd = "networksetup",
|
|
||||||
Arguments = [$"-{type}state", interf, "off"]
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return lstCmd;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static async Task<List<string>> GetListNetworkServices()
|
|
||||||
{
|
|
||||||
var services = await Utils.GetListNetworkServices();
|
|
||||||
if (services.IsNullOrEmpty())
|
|
||||||
{
|
|
||||||
return LstInterface;
|
|
||||||
}
|
|
||||||
|
|
||||||
var lst = services.Split(Environment.NewLine).Where(t => t.Length > 0 && t.Contains('*') == false);
|
|
||||||
return lst.ToList();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -29,6 +29,7 @@
|
||||||
<EmbeddedResource Include="Sample\dns_singbox_normal" />
|
<EmbeddedResource Include="Sample\dns_singbox_normal" />
|
||||||
<EmbeddedResource Include="Sample\dns_v2ray_normal" />
|
<EmbeddedResource Include="Sample\dns_v2ray_normal" />
|
||||||
<EmbeddedResource Include="Sample\pac" />
|
<EmbeddedResource Include="Sample\pac" />
|
||||||
|
<EmbeddedResource Include="Sample\proxy_set_osx_sh" />
|
||||||
<EmbeddedResource Include="Sample\SampleClientConfig" />
|
<EmbeddedResource Include="Sample\SampleClientConfig" />
|
||||||
<EmbeddedResource Include="Sample\SampleHttpRequest" />
|
<EmbeddedResource Include="Sample\SampleHttpRequest" />
|
||||||
<EmbeddedResource Include="Sample\SampleHttpResponse" />
|
<EmbeddedResource Include="Sample\SampleHttpResponse" />
|
||||||
|
|
Loading…
Reference in a new issue