diff --git a/Netch/Controllers/NFController.cs b/Netch/Controllers/NFController.cs index ead673e1..65733865 100644 --- a/Netch/Controllers/NFController.cs +++ b/Netch/Controllers/NFController.cs @@ -111,7 +111,13 @@ namespace Netch.Controllers } } - var processes = "NTT.exe,"; + var processes = ""; + + //开启进程白名单模式 + if (!Global.Settings.ProcessBypassMode) + { + processes += "NTT.exe,"; + } foreach (var proc in mode.Rule) { @@ -164,10 +170,24 @@ namespace Netch.Controllers } Instance.StartInfo.FileName = "bin\\Redirector.exe"; + //开启进程白名单模式 + if (Global.Settings.ProcessBypassMode) + { + processes += ",Shadowsocks.exe"; + processes += ",ShadowsocksR.exe"; + processes += ",Privoxy.exe"; + processes += ",simple-obfs.exe"; + processes += ",v2ray.exe,v2ctl.exe,v2ray-plugin.exe"; + fallback += " -bypass true "; + } + else + { + fallback += " -bypass false"; + } if (server.Type != "Socks5") { - fallback = $"-r 127.0.0.1:{Global.Settings.Socks5LocalPort} -p \"{processes}\""; + fallback += $"-r 127.0.0.1:{Global.Settings.Socks5LocalPort} -p \"{processes}\""; } else { @@ -178,7 +198,7 @@ namespace Netch.Controllers return false; } - fallback = $"-r {result}:{server.Port} -p \"{processes}\""; + fallback += $"-r {result}:{server.Port} -p \"{processes}\""; if (!string.IsNullOrWhiteSpace(server.Username) && !string.IsNullOrWhiteSpace(server.Password)) { @@ -187,6 +207,11 @@ namespace Netch.Controllers } } + Utils.Logging.Info($"{fallback}"); + + if (File.Exists("logging\\redirector.log")) + File.Delete("logging\\redirector.log"); + Instance.StartInfo.Arguments = fallback; Instance.OutputDataReceived += OnOutputDataReceived; Instance.ErrorDataReceived += OnOutputDataReceived; diff --git a/Netch/Forms/SettingForm.Designer.cs b/Netch/Forms/SettingForm.Designer.cs index 8339a931..4060d8d0 100644 --- a/Netch/Forms/SettingForm.Designer.cs +++ b/Netch/Forms/SettingForm.Designer.cs @@ -63,6 +63,7 @@ this.StartWhenOpenedCheckBox = new System.Windows.Forms.CheckBox(); this.StopWhenExitedCheckBox = new System.Windows.Forms.CheckBox(); this.ExitWhenClosedCheckBox = new System.Windows.Forms.CheckBox(); + this.BypassModeCheckBox = new System.Windows.Forms.CheckBox(); this.PortGroupBox.SuspendLayout(); this.TUNTAPGroupBox.SuspendLayout(); this.BehaviorGroupBox.SuspendLayout(); @@ -259,6 +260,7 @@ // // BehaviorGroupBox // + this.BehaviorGroupBox.Controls.Add(this.BypassModeCheckBox); this.BehaviorGroupBox.Controls.Add(this.Redirector2checkBox); this.BehaviorGroupBox.Controls.Add(this.label3); this.BehaviorGroupBox.Controls.Add(this.STUN_ServerPortTextBox); @@ -414,6 +416,17 @@ this.ExitWhenClosedCheckBox.TextAlign = System.Drawing.ContentAlignment.MiddleRight; this.ExitWhenClosedCheckBox.UseVisualStyleBackColor = true; // + // BypassModeCheckBox + // + this.BypassModeCheckBox.AutoSize = true; + this.BypassModeCheckBox.Location = new System.Drawing.Point(237, 266); + this.BypassModeCheckBox.Name = "BypassModeCheckBox"; + this.BypassModeCheckBox.Size = new System.Drawing.Size(135, 21); + this.BypassModeCheckBox.TabIndex = 14; + this.BypassModeCheckBox.Text = "进程代理白名单模式"; + this.BypassModeCheckBox.UseVisualStyleBackColor = true; + this.BypassModeCheckBox.CheckedChanged += new System.EventHandler(this.BypassModeCheckBox_CheckedChanged); + // // SettingForm // this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F); @@ -480,5 +493,6 @@ private System.Windows.Forms.CheckBox TUNTAPProxyDNSCheckBox; private System.Windows.Forms.CheckBox Redirector2checkBox; private System.Windows.Forms.Label label3; + private System.Windows.Forms.CheckBox BypassModeCheckBox; } } \ No newline at end of file diff --git a/Netch/Forms/SettingForm.cs b/Netch/Forms/SettingForm.cs index 1b1a975c..606d9eac 100644 --- a/Netch/Forms/SettingForm.cs +++ b/Netch/Forms/SettingForm.cs @@ -63,6 +63,7 @@ namespace Netch.Forms MinimizeWhenStartedCheckBox.Checked = Global.Settings.MinimizeWhenStarted; RunAtStartup.Checked = Global.Settings.RunAtStartup; Redirector2checkBox.Checked = Global.Settings.UseRedirector2; + BypassModeCheckBox.Checked = Global.Settings.ProcessBypassMode; Socks5PortTextBox.Text = Global.Settings.Socks5LocalPort.ToString(); HTTPPortTextBox.Text = Global.Settings.HTTPLocalPort.ToString(); @@ -146,6 +147,7 @@ namespace Netch.Forms Global.Settings.MinimizeWhenStarted = MinimizeWhenStartedCheckBox.Checked; Global.Settings.RunAtStartup = RunAtStartup.Checked; Global.Settings.UseRedirector2 = Redirector2checkBox.Checked; + Global.Settings.ProcessBypassMode = BypassModeCheckBox.Checked; // 开机自启判断 TaskSchedulerClass scheduler = new TaskSchedulerClass(); @@ -331,5 +333,18 @@ namespace Netch.Forms Close(); } + private void BypassModeCheckBox_CheckedChanged(object sender, EventArgs e) + { + if (BypassModeCheckBox.Checked) + { + Redirector2checkBox.Checked = false; + Redirector2checkBox.Enabled = false; + } + else + { + Redirector2checkBox.Enabled = true; + } + + } } } diff --git a/Netch/Models/Setting.cs b/Netch/Models/Setting.cs index bf26406e..1f1e5ff0 100644 --- a/Netch/Models/Setting.cs +++ b/Netch/Models/Setting.cs @@ -158,5 +158,9 @@ namespace Netch.Models /// 是否切换为2号核心 /// public bool UseRedirector2 = false; + /// + /// 是否启用进程代理白名单模式 + /// + public bool ProcessBypassMode = false; } } diff --git a/binaries b/binaries index a07de644..a26274a8 160000 --- a/binaries +++ b/binaries @@ -1 +1 @@ -Subproject commit a07de644a83359cefa46f9e39f1b2cf4d79fba73 +Subproject commit a26274a8347bf8a9f9344fd413cbb9fa14177eae