Compare commits

..

15 Commits
1.7.3 ... 1.7.4

Author SHA1 Message Date
ChsBuffer
a853b9831f Bump version to 1.7.4 2021-02-13 14:42:41 +08:00
ChsBuffer
3d37b042f6 Feat: Check if the bin folder exists 2021-02-13 14:38:23 +08:00
ChsBuffer
1f9607ba1e Remove localization folders 2021-02-13 14:24:51 +08:00
ChsBuffer
8443772b75 Add RemoveNetchFirewallRules MenuItem 2021-02-13 14:13:49 +08:00
ChsBuffer
aaad1697b3 Replace NetFwTypeLib COMReference with WindowsFirewallHelper 2021-02-13 14:11:58 +08:00
ChsBuffer
35688003d5 Replace TaskScheduler COMReference with PackageReference 2021-02-13 13:20:11 +08:00
ChsBuffer
19afbf1993 Update stun.txt 2021-02-13 12:45:53 +08:00
ChsBuffer
3cd0b59bf6 Upgrade packages 2021-02-13 12:40:35 +08:00
ChsBuffer
b26aecf7e8 fix ICMPing async warning 2021-02-13 12:39:21 +08:00
ChsBuffer
18f71d3862 Update PostBuild.bat 2021-02-13 12:38:36 +08:00
ChsBuffer
0bd0d06867 Replace v2ray-core with Xray-core 2021-02-13 08:40:47 +08:00
ChsBuffer
96001500f0 Guard.InitInstance() to virtual method 2021-02-12 07:56:42 +08:00
ChsBuffer
11ab1b89af Refactor IServerController 2021-02-12 00:34:17 +08:00
AmazingDM
811e2828fb update submodule 2021-02-09 17:52:29 +08:00
AmazingDM
68a2e4b705 Update UpdateChecker.cs 2021-02-08 11:41:45 +08:00
33 changed files with 212 additions and 332 deletions

View File

@@ -14,12 +14,12 @@ namespace Netch.Controllers
{
public abstract class Guard
{
public abstract string Name { get; protected set; }
public virtual string Name { get; }
/// <summary>
/// 主程序名
/// </summary>
public abstract string MainFile { get; protected set; }
public virtual string MainFile { get; protected set; }
protected State State { get; set; } = State.Waiting;
@@ -83,7 +83,7 @@ namespace Netch.Controllers
/// 仅初始化 <see cref="Instance"/>,不设定事件处理方法
/// </summary>
/// <param name="argument"></param>
protected void InitInstance(string argument)
protected virtual void InitInstance(string argument)
{
Instance = new Process
{
@@ -103,7 +103,6 @@ namespace Netch.Controllers
};
}
/// <summary>
/// 默认行为启动主程序
/// </summary>

View File

@@ -10,6 +10,6 @@
/// <summary>
/// 停止
/// </summary>
public abstract void Stop();
public void Stop();
}
}

View File

@@ -7,7 +7,7 @@ namespace Netch.Controllers
{
public class NTTController : Guard, IController
{
public override string Name { get; protected set; } = "NTT";
public override string Name { get; } = "NTT";
public override string MainFile { get; protected set; } = "NTT.exe";
/// <summary>
@@ -16,10 +16,10 @@ namespace Netch.Controllers
/// <returns></returns>
public (string, string, string) Start()
{
string localEnd=null;
string publicEnd=null;
string result =null;
string bindingTest=null;
string localEnd = null;
string publicEnd = null;
string result = null;
string bindingTest = null;
try
{

View File

@@ -12,7 +12,7 @@ namespace Netch.Controllers
RedirectStd = false;
}
public override string Name { get; protected set; } = "Privoxy";
public override string Name { get; } = "Privoxy";
public override string MainFile { get; protected set; } = "Privoxy.exe";

View File

@@ -35,7 +35,7 @@ namespace Netch.Controllers
}
public override string MainFile { get; protected set; } = "tun2socks.exe";
public override string Name { get; protected set; } = "tun2socks";
public override string Name { get; } = "tun2socks";
public bool Start(in Mode mode)
{
@@ -206,7 +206,6 @@ namespace Netch.Controllers
}
}
/// <summary>
/// 清除绕行规则
/// </summary>
@@ -219,7 +218,6 @@ namespace Netch.Controllers
return true;
}
public bool TestFakeDNS()
{
try
@@ -357,7 +355,6 @@ namespace Netch.Controllers
return result;
}
private enum RouteType
{
Outbound,

View File

@@ -17,9 +17,9 @@ namespace Netch.Controllers
public const string Repo = @"Netch";
public const string Name = @"Netch";
public const string Copyright = @"Copyright © 2019 - 2020";
public const string Copyright = @"Copyright © 2019 - 2021";
public const string AssemblyVersion = @"1.7.3";
public const string AssemblyVersion = @"1.7.4";
private const string Suffix = @"";
public static readonly string Version = $"{AssemblyVersion}{(string.IsNullOrEmpty(Suffix) ? "" : $"-{Suffix}")}";

View File

@@ -45,6 +45,7 @@
this.CleanDNSCacheToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.UpdateACLToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.updateACLWithProxyToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.updatePACToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.UninstallServiceToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.UninstallTapDriverToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.HelpToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
@@ -88,18 +89,18 @@
this.ProfileTable = new System.Windows.Forms.TableLayoutPanel();
this.flowLayoutPanel1 = new System.Windows.Forms.FlowLayoutPanel();
this.ButtomControlContainerControl = new System.Windows.Forms.ContainerControl();
this.updatePACToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.removeNetchFirewallRulesToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.MenuStrip.SuspendLayout();
this.ConfigurationGroupBox.SuspendLayout();
this.configLayoutPanel.SuspendLayout();
this.tableLayoutPanel2.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.EditServerPictureBox)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.CopyLinkPictureBox)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.DeleteServerPictureBox)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.SpeedPictureBox)).BeginInit();
((System.ComponentModel.ISupportInitialize) (this.EditServerPictureBox)).BeginInit();
((System.ComponentModel.ISupportInitialize) (this.CopyLinkPictureBox)).BeginInit();
((System.ComponentModel.ISupportInitialize) (this.DeleteServerPictureBox)).BeginInit();
((System.ComponentModel.ISupportInitialize) (this.SpeedPictureBox)).BeginInit();
this.tableLayoutPanel3.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.EditModePictureBox)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.DeleteModePictureBox)).BeginInit();
((System.ComponentModel.ISupportInitialize) (this.EditModePictureBox)).BeginInit();
((System.ComponentModel.ISupportInitialize) (this.DeleteModePictureBox)).BeginInit();
this.StatusStrip.SuspendLayout();
this.NotifyMenu.SuspendLayout();
this.ProfileGroupBox.SuspendLayout();
@@ -111,16 +112,10 @@
//
this.MenuStrip.BackColor = System.Drawing.SystemColors.Control;
this.MenuStrip.ImageScalingSize = new System.Drawing.Size(20, 20);
this.MenuStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.ServerToolStripMenuItem,
this.ModeToolStripMenuItem,
this.SubscribeToolStripMenuItem,
this.OptionsToolStripMenuItem,
this.HelpToolStripMenuItem,
this.exitToolStripMenuItem,
this.AboutToolStripButton,
this.NewVersionLabel,
this.VersionLabel});
this.MenuStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[]
{
this.ServerToolStripMenuItem, this.ModeToolStripMenuItem, this.SubscribeToolStripMenuItem, this.OptionsToolStripMenuItem, this.HelpToolStripMenuItem, this.exitToolStripMenuItem, this.AboutToolStripButton, this.NewVersionLabel, this.VersionLabel
});
this.MenuStrip.Location = new System.Drawing.Point(0, 0);
this.MenuStrip.Name = "MenuStrip";
this.MenuStrip.RenderMode = System.Windows.Forms.ToolStripRenderMode.Professional;
@@ -129,8 +124,10 @@
//
// ServerToolStripMenuItem
//
this.ServerToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.ImportServersFromClipboardToolStripMenuItem});
this.ServerToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[]
{
this.ImportServersFromClipboardToolStripMenuItem
});
this.ServerToolStripMenuItem.Margin = new System.Windows.Forms.Padding(3, 0, 0, 1);
this.ServerToolStripMenuItem.Name = "ServerToolStripMenuItem";
this.ServerToolStripMenuItem.Size = new System.Drawing.Size(57, 21);
@@ -145,9 +142,10 @@
//
// ModeToolStripMenuItem
//
this.ModeToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.CreateProcessModeToolStripMenuItem,
this.ReloadModesToolStripMenuItem});
this.ModeToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[]
{
this.CreateProcessModeToolStripMenuItem, this.ReloadModesToolStripMenuItem
});
this.ModeToolStripMenuItem.Margin = new System.Windows.Forms.Padding(0, 0, 0, 1);
this.ModeToolStripMenuItem.Name = "ModeToolStripMenuItem";
this.ModeToolStripMenuItem.Size = new System.Drawing.Size(55, 21);
@@ -169,10 +167,10 @@
//
// SubscribeToolStripMenuItem
//
this.SubscribeToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.ManageSubscribeLinksToolStripMenuItem,
this.UpdateServersFromSubscribeLinksToolStripMenuItem,
this.UpdateServersFromSubscribeLinksWithProxyToolStripMenuItem});
this.SubscribeToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[]
{
this.ManageSubscribeLinksToolStripMenuItem, this.UpdateServersFromSubscribeLinksToolStripMenuItem, this.UpdateServersFromSubscribeLinksWithProxyToolStripMenuItem
});
this.SubscribeToolStripMenuItem.Margin = new System.Windows.Forms.Padding(0, 0, 0, 1);
this.SubscribeToolStripMenuItem.Name = "SubscribeToolStripMenuItem";
this.SubscribeToolStripMenuItem.Size = new System.Drawing.Size(77, 21);
@@ -181,34 +179,30 @@
// ManageSubscribeLinksToolStripMenuItem
//
this.ManageSubscribeLinksToolStripMenuItem.Name = "ManageSubscribeLinksToolStripMenuItem";
this.ManageSubscribeLinksToolStripMenuItem.Size = new System.Drawing.Size(294, 22);
this.ManageSubscribeLinksToolStripMenuItem.Size = new System.Drawing.Size(360, 22);
this.ManageSubscribeLinksToolStripMenuItem.Text = "Manage Subscribe Links";
this.ManageSubscribeLinksToolStripMenuItem.Click += new System.EventHandler(this.ManageSubscribeLinksToolStripMenuItem_Click);
//
// UpdateServersFromSubscribeLinksToolStripMenuItem
//
this.UpdateServersFromSubscribeLinksToolStripMenuItem.Name = "UpdateServersFromSubscribeLinksToolStripMenuItem";
this.UpdateServersFromSubscribeLinksToolStripMenuItem.Size = new System.Drawing.Size(294, 22);
this.UpdateServersFromSubscribeLinksToolStripMenuItem.Size = new System.Drawing.Size(360, 22);
this.UpdateServersFromSubscribeLinksToolStripMenuItem.Text = "Update Servers From Subscribe Links";
this.UpdateServersFromSubscribeLinksToolStripMenuItem.Click += new System.EventHandler(this.UpdateServersFromSubscribeLinksToolStripMenuItem_Click);
//
// UpdateServersFromSubscribeLinksWithProxyToolStripMenuItem
//
this.UpdateServersFromSubscribeLinksWithProxyToolStripMenuItem.Name = "UpdateServersFromSubscribeLinksWithProxyToolStripMenuItem";
this.UpdateServersFromSubscribeLinksWithProxyToolStripMenuItem.Size = new System.Drawing.Size(294, 22);
this.UpdateServersFromSubscribeLinksWithProxyToolStripMenuItem.Size = new System.Drawing.Size(360, 22);
this.UpdateServersFromSubscribeLinksWithProxyToolStripMenuItem.Text = "Update Servers From Subscribe Links With Proxy";
this.UpdateServersFromSubscribeLinksWithProxyToolStripMenuItem.Click += new System.EventHandler(this.UpdateServersFromSubscribeLinksWithProxyToolStripMenuItem_Click);
//
// OptionsToolStripMenuItem
//
this.OptionsToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.OpenDirectoryToolStripMenuItem,
this.CleanDNSCacheToolStripMenuItem,
this.UpdateACLToolStripMenuItem,
this.updateACLWithProxyToolStripMenuItem,
this.updatePACToolStripMenuItem,
this.UninstallServiceToolStripMenuItem,
this.UninstallTapDriverToolStripMenuItem});
this.OptionsToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[]
{
this.OpenDirectoryToolStripMenuItem, this.CleanDNSCacheToolStripMenuItem, this.UpdateACLToolStripMenuItem, this.updateACLWithProxyToolStripMenuItem, this.updatePACToolStripMenuItem, this.UninstallServiceToolStripMenuItem, this.UninstallTapDriverToolStripMenuItem, this.removeNetchFirewallRulesToolStripMenuItem
});
this.OptionsToolStripMenuItem.Margin = new System.Windows.Forms.Padding(0, 0, 0, 1);
this.OptionsToolStripMenuItem.Name = "OptionsToolStripMenuItem";
this.OptionsToolStripMenuItem.Size = new System.Drawing.Size(66, 21);
@@ -217,50 +211,58 @@
// OpenDirectoryToolStripMenuItem
//
this.OpenDirectoryToolStripMenuItem.Name = "OpenDirectoryToolStripMenuItem";
this.OpenDirectoryToolStripMenuItem.Size = new System.Drawing.Size(220, 22);
this.OpenDirectoryToolStripMenuItem.Size = new System.Drawing.Size(243, 22);
this.OpenDirectoryToolStripMenuItem.Text = "Open Directory";
this.OpenDirectoryToolStripMenuItem.Click += new System.EventHandler(this.OpenDirectoryToolStripMenuItem_Click);
//
// CleanDNSCacheToolStripMenuItem
//
this.CleanDNSCacheToolStripMenuItem.Name = "CleanDNSCacheToolStripMenuItem";
this.CleanDNSCacheToolStripMenuItem.Size = new System.Drawing.Size(220, 22);
this.CleanDNSCacheToolStripMenuItem.Size = new System.Drawing.Size(243, 22);
this.CleanDNSCacheToolStripMenuItem.Text = "Clean DNS Cache";
this.CleanDNSCacheToolStripMenuItem.Click += new System.EventHandler(this.CleanDNSCacheToolStripMenuItem_Click);
//
// UpdateACLToolStripMenuItem
//
this.UpdateACLToolStripMenuItem.Name = "UpdateACLToolStripMenuItem";
this.UpdateACLToolStripMenuItem.Size = new System.Drawing.Size(220, 22);
this.UpdateACLToolStripMenuItem.Size = new System.Drawing.Size(243, 22);
this.UpdateACLToolStripMenuItem.Text = "Update ACL";
this.UpdateACLToolStripMenuItem.Click += new System.EventHandler(this.updateACLToolStripMenuItem_Click);
//
// updateACLWithProxyToolStripMenuItem
//
this.updateACLWithProxyToolStripMenuItem.Name = "updateACLWithProxyToolStripMenuItem";
this.updateACLWithProxyToolStripMenuItem.Size = new System.Drawing.Size(220, 22);
this.updateACLWithProxyToolStripMenuItem.Size = new System.Drawing.Size(243, 22);
this.updateACLWithProxyToolStripMenuItem.Text = "Update ACL with proxy";
this.updateACLWithProxyToolStripMenuItem.Click += new System.EventHandler(this.updateACLWithProxyToolStripMenuItem_Click);
//
// updatePACToolStripMenuItem
//
this.updatePACToolStripMenuItem.Name = "updatePACToolStripMenuItem";
this.updatePACToolStripMenuItem.Size = new System.Drawing.Size(243, 22);
this.updatePACToolStripMenuItem.Text = "Update PAC";
this.updatePACToolStripMenuItem.Click += new System.EventHandler(this.updatePACToolStripMenuItem_Click);
//
// UninstallServiceToolStripMenuItem
//
this.UninstallServiceToolStripMenuItem.Name = "UninstallServiceToolStripMenuItem";
this.UninstallServiceToolStripMenuItem.Size = new System.Drawing.Size(220, 22);
this.UninstallServiceToolStripMenuItem.Size = new System.Drawing.Size(243, 22);
this.UninstallServiceToolStripMenuItem.Text = "Uninstall NF Service";
this.UninstallServiceToolStripMenuItem.Click += new System.EventHandler(this.UninstallServiceToolStripMenuItem_Click);
//
// UninstallTapDriverToolStripMenuItem
//
this.UninstallTapDriverToolStripMenuItem.Name = "UninstallTapDriverToolStripMenuItem";
this.UninstallTapDriverToolStripMenuItem.Size = new System.Drawing.Size(220, 22);
this.UninstallTapDriverToolStripMenuItem.Size = new System.Drawing.Size(243, 22);
this.UninstallTapDriverToolStripMenuItem.Text = "Uninstall TUN/TAP driver";
this.UninstallTapDriverToolStripMenuItem.Click += new System.EventHandler(this.UninstallTapDriverToolStripMenuItem_Click);
//
// HelpToolStripMenuItem
//
this.HelpToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.CheckForUpdatesToolStripMenuItem,
this.fAQToolStripMenuItem});
this.HelpToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[]
{
this.CheckForUpdatesToolStripMenuItem, this.fAQToolStripMenuItem
});
this.HelpToolStripMenuItem.Margin = new System.Windows.Forms.Padding(0, 0, 0, 1);
this.HelpToolStripMenuItem.Name = "HelpToolStripMenuItem";
this.HelpToolStripMenuItem.Size = new System.Drawing.Size(47, 21);
@@ -536,14 +538,10 @@
// StatusStrip
//
this.StatusStrip.ImageScalingSize = new System.Drawing.Size(20, 20);
this.StatusStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.StatusLabel,
this.UsedBandwidthLabel,
this.DownloadSpeedLabel,
this.UploadSpeedLabel,
this.blankToolStripStatusLabel,
this.NatTypeStatusLabel,
this.NatTypeStatusLightLabel});
this.StatusStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[]
{
this.StatusLabel, this.UsedBandwidthLabel, this.DownloadSpeedLabel, this.UploadSpeedLabel, this.blankToolStripStatusLabel, this.NatTypeStatusLabel, this.NatTypeStatusLightLabel
});
this.StatusStrip.Location = new System.Drawing.Point(0, 272);
this.StatusStrip.Name = "StatusStrip";
this.StatusStrip.Size = new System.Drawing.Size(740, 22);
@@ -606,7 +604,7 @@
//
// ControlButton
//
this.ControlButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
this.ControlButton.Anchor = ((System.Windows.Forms.AnchorStyles) ((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
this.ControlButton.Location = new System.Drawing.Point(631, 3);
this.ControlButton.Name = "ControlButton";
this.ControlButton.Size = new System.Drawing.Size(75, 27);
@@ -618,7 +616,7 @@
// NotifyIcon
//
this.NotifyIcon.ContextMenuStrip = this.NotifyMenu;
this.NotifyIcon.Icon = ((System.Drawing.Icon)(resources.GetObject("NotifyIcon.Icon")));
this.NotifyIcon.Icon = ((System.Drawing.Icon) (resources.GetObject("NotifyIcon.Icon")));
this.NotifyIcon.Text = "Netch";
this.NotifyIcon.Visible = true;
this.NotifyIcon.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.NotifyIcon_MouseDoubleClick);
@@ -626,9 +624,10 @@
// NotifyMenu
//
this.NotifyMenu.ImageScalingSize = new System.Drawing.Size(20, 20);
this.NotifyMenu.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.ShowMainFormToolStripButton,
this.ExitToolStripButton});
this.NotifyMenu.Items.AddRange(new System.Windows.Forms.ToolStripItem[]
{
this.ShowMainFormToolStripButton, this.ExitToolStripButton
});
this.NotifyMenu.Name = "NotifyMenu";
this.NotifyMenu.ShowItemToolTips = false;
this.NotifyMenu.Size = new System.Drawing.Size(108, 48);
@@ -649,7 +648,7 @@
//
// SettingsButton
//
this.SettingsButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
this.SettingsButton.Anchor = ((System.Windows.Forms.AnchorStyles) ((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
this.SettingsButton.Location = new System.Drawing.Point(1, 3);
this.SettingsButton.Name = "SettingsButton";
this.SettingsButton.Size = new System.Drawing.Size(72, 27);
@@ -708,12 +707,12 @@
this.ButtomControlContainerControl.TabStop = false;
this.ButtomControlContainerControl.Text = "groupBox1";
//
// updatePACToolStripMenuItem
// removeNetchFirewallRulesToolStripMenuItem
//
this.updatePACToolStripMenuItem.Name = "updatePACToolStripMenuItem";
this.updatePACToolStripMenuItem.Size = new System.Drawing.Size(220, 22);
this.updatePACToolStripMenuItem.Text = "Update PAC";
this.updatePACToolStripMenuItem.Click += new System.EventHandler(this.updatePACToolStripMenuItem_Click);
this.removeNetchFirewallRulesToolStripMenuItem.Name = "removeNetchFirewallRulesToolStripMenuItem";
this.removeNetchFirewallRulesToolStripMenuItem.Size = new System.Drawing.Size(243, 22);
this.removeNetchFirewallRulesToolStripMenuItem.Text = "Remove Netch Firewall Rules";
this.removeNetchFirewallRulesToolStripMenuItem.Click += new System.EventHandler(this.RemoveNetchFirewallRulesToolStripMenuItem_Click);
//
// MainForm
//
@@ -725,9 +724,9 @@
this.Controls.Add(this.MenuStrip);
this.Controls.Add(this.StatusStrip);
this.Controls.Add(this.flowLayoutPanel1);
this.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte) (134)));
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
this.Icon = ((System.Drawing.Icon) (resources.GetObject("$this.Icon")));
this.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4);
this.MaximizeBox = false;
this.Name = "MainForm";
@@ -742,13 +741,13 @@
this.configLayoutPanel.ResumeLayout(false);
this.configLayoutPanel.PerformLayout();
this.tableLayoutPanel2.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.EditServerPictureBox)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.CopyLinkPictureBox)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.DeleteServerPictureBox)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.SpeedPictureBox)).EndInit();
((System.ComponentModel.ISupportInitialize) (this.EditServerPictureBox)).EndInit();
((System.ComponentModel.ISupportInitialize) (this.CopyLinkPictureBox)).EndInit();
((System.ComponentModel.ISupportInitialize) (this.DeleteServerPictureBox)).EndInit();
((System.ComponentModel.ISupportInitialize) (this.SpeedPictureBox)).EndInit();
this.tableLayoutPanel3.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.EditModePictureBox)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.DeleteModePictureBox)).EndInit();
((System.ComponentModel.ISupportInitialize) (this.EditModePictureBox)).EndInit();
((System.ComponentModel.ISupportInitialize) (this.DeleteModePictureBox)).EndInit();
this.StatusStrip.ResumeLayout(false);
this.StatusStrip.PerformLayout();
this.NotifyMenu.ResumeLayout(false);
@@ -758,8 +757,8 @@
this.ButtomControlContainerControl.ResumeLayout(false);
this.ResumeLayout(false);
this.PerformLayout();
}
private System.Windows.Forms.ToolStripMenuItem removeNetchFirewallRulesToolStripMenuItem;
private System.Windows.Forms.ToolStripButton AboutToolStripButton;
private System.Windows.Forms.ToolStripMenuItem CleanDNSCacheToolStripMenuItem;

View File

@@ -528,6 +528,11 @@ namespace Netch.Forms
}
}
private void RemoveNetchFirewallRulesToolStripMenuItem_Click(object sender, EventArgs e)
{
Firewall.RemoveNetchFwRules();
}
#endregion
/// <summary>

View File

@@ -116,6 +116,7 @@ namespace Netch.Forms
this.OtherDNSTextBox = new System.Windows.Forms.TextBox();
this.ControlButton = new System.Windows.Forms.Button();
this.flowLayoutPanel1 = new System.Windows.Forms.FlowLayoutPanel();
this.XrayConeCheckBox = new System.Windows.Forms.CheckBox();
this.TabControl.SuspendLayout();
this.GeneralTabPage.SuspendLayout();
this.PortGroupBox.SuspendLayout();
@@ -641,6 +642,7 @@ namespace Netch.Forms
//
this.v2rayTabPage.BackColor = System.Drawing.SystemColors.ButtonFace;
this.v2rayTabPage.Controls.Add(this.TLSAllowInsecureCheckBox);
this.v2rayTabPage.Controls.Add(this.XrayConeCheckBox);
this.v2rayTabPage.Controls.Add(this.UseMuxCheckBox);
this.v2rayTabPage.Controls.Add(this.KCPGroupBox);
this.v2rayTabPage.Location = new System.Drawing.Point(4, 25);
@@ -653,7 +655,7 @@ namespace Netch.Forms
// TLSAllowInsecureCheckBox
//
this.TLSAllowInsecureCheckBox.AutoSize = true;
this.TLSAllowInsecureCheckBox.Location = new System.Drawing.Point(6, 15);
this.TLSAllowInsecureCheckBox.Location = new System.Drawing.Point(6, 42);
this.TLSAllowInsecureCheckBox.Name = "TLSAllowInsecureCheckBox";
this.TLSAllowInsecureCheckBox.Size = new System.Drawing.Size(126, 16);
this.TLSAllowInsecureCheckBox.TabIndex = 0;
@@ -663,7 +665,7 @@ namespace Netch.Forms
// UseMuxCheckBox
//
this.UseMuxCheckBox.AutoSize = true;
this.UseMuxCheckBox.Location = new System.Drawing.Point(148, 15);
this.UseMuxCheckBox.Location = new System.Drawing.Point(148, 42);
this.UseMuxCheckBox.Name = "UseMuxCheckBox";
this.UseMuxCheckBox.Size = new System.Drawing.Size(66, 16);
this.UseMuxCheckBox.TabIndex = 1;
@@ -685,7 +687,7 @@ namespace Netch.Forms
this.KCPGroupBox.Controls.Add(this.writeBufferSizeLabel);
this.KCPGroupBox.Controls.Add(this.writeBufferSizeTextBox);
this.KCPGroupBox.Controls.Add(this.congestionCheckBox);
this.KCPGroupBox.Location = new System.Drawing.Point(9, 48);
this.KCPGroupBox.Location = new System.Drawing.Point(9, 75);
this.KCPGroupBox.Name = "KCPGroupBox";
this.KCPGroupBox.Size = new System.Drawing.Size(427, 204);
this.KCPGroupBox.TabIndex = 2;
@@ -999,6 +1001,16 @@ namespace Netch.Forms
this.flowLayoutPanel1.Size = new System.Drawing.Size(480, 400);
this.flowLayoutPanel1.TabIndex = 0;
//
// XrayConeCheckBox
//
this.XrayConeCheckBox.AutoSize = true;
this.XrayConeCheckBox.Location = new System.Drawing.Point(6, 15);
this.XrayConeCheckBox.Name = "XrayConeCheckBox";
this.XrayConeCheckBox.Size = new System.Drawing.Size(78, 16);
this.XrayConeCheckBox.TabIndex = 1;
this.XrayConeCheckBox.Text = "FullCone Support (Required Server Xray-core v1.3.0+)";
this.XrayConeCheckBox.UseVisualStyleBackColor = true;
//
// SettingForm
//
this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F);
@@ -1036,6 +1048,7 @@ namespace Netch.Forms
this.ResumeLayout(false);
this.PerformLayout();
}
private System.Windows.Forms.CheckBox XrayConeCheckBox;
private System.Windows.Forms.TextBox StartedPingIntervalTextBox;
private System.Windows.Forms.CheckBox NoProxyForTcpCheckBox;

View File

@@ -171,6 +171,10 @@ namespace Netch.Forms
#region V2Ray
BindCheckBox(XrayConeCheckBox,
b => Global.Settings.V2RayConfig.XrayCone = b,
Global.Settings.V2RayConfig.XrayCone);
BindCheckBox(TLSAllowInsecureCheckBox,
b => Global.Settings.V2RayConfig.AllowInsecure = b,
Global.Settings.V2RayConfig.AllowInsecure);

View File

@@ -79,7 +79,7 @@ namespace Netch.Models
{
try
{
return Global.Settings.ServerTCPing ? await Utils.Utils.TCPingAsync(destination, Port) : await Utils.Utils.ICMPing(destination, Port);
return Global.Settings.ServerTCPing ? await Utils.Utils.TCPingAsync(destination, Port) : Utils.Utils.ICMPing(destination, Port);
}
catch (Exception)
{

View File

@@ -61,6 +61,8 @@ namespace Netch.Models
public class V2rayConfig
{
public bool XrayCone = false;
public bool AllowInsecure = true;
public KcpConfig KcpConfig = new();

View File

@@ -13,18 +13,14 @@ namespace Netch
public static class Netch
{
/// <summary>
/// 应用程序的主入口点
/// 应用程序的主入口点
/// </summary>
[STAThread]
public static void Main(string[] args)
{
if (args.Contains("-console"))
{
if (!NativeMethods.AttachConsole(-1))
{
NativeMethods.AllocConsole();
}
}
// 创建互斥体防止多次运行
using (var mutex = new Mutex(false, "Global\\Netch"))
@@ -36,12 +32,8 @@ namespace Netch
// 预创建目录
var directories = new[] {"mode", "data", "i18n", "logging"};
foreach (var item in directories)
{
if (!Directory.Exists(item))
{
Directory.CreateDirectory(item);
}
}
// 加载配置
Configuration.Load();
@@ -49,6 +41,12 @@ namespace Netch
// 加载语言
i18N.Load(Global.Settings.Language);
if (!Directory.Exists("bin") || !Directory.EnumerateFileSystemEntries("bin").Any())
{
MessageBoxX.Show(i18N.Translate("Please extract all files then run the program!"));
Environment.Exit(2);
}
// 检查是否已经运行
if (!mutex.WaitOne(0, false))
{
@@ -65,21 +63,14 @@ namespace Netch
var directory = new DirectoryInfo("logging");
foreach (var file in directory.GetFiles())
{
file.Delete();
}
foreach (var dir in directory.GetDirectories())
{
dir.Delete(true);
}
}
Logging.Info($"版本: {UpdateChecker.Owner}/{UpdateChecker.Repo}@{UpdateChecker.Version}");
Task.Run(() =>
{
Logging.Info($"主程序 SHA256: {Utils.Utils.SHA256CheckSum(Application.ExecutablePath)}");
});
Task.Run(() => { Logging.Info($"主程序 SHA256: {Utils.Utils.SHA256CheckSum(Application.ExecutablePath)}"); });
Task.Run(() =>
{
Logging.Info("启动单实例");

View File

@@ -37,23 +37,6 @@
</ItemGroup>
<ItemGroup>
<COMReference Include="TaskScheduler.dll">
<Guid>e34cb9f1-c7f7-424c-be29-027dcc09363a</Guid>
<VersionMajor>1</VersionMajor>
<VersionMinor>0</VersionMinor>
<WrapperTool>tlbimp</WrapperTool>
<Lcid>0</Lcid>
<Isolated>false</Isolated>
<EmbedInteropTypes>false</EmbedInteropTypes>
</COMReference>
<COMReference Include="NetFwTypeLib.dll">
<Guid>58fbcf7c-e7a9-467c-80b3-fc65e8fcca08</Guid>
<VersionMajor>1</VersionMajor>
<VersionMinor>0</VersionMinor>
<Lcid>0</Lcid>
<WrapperTool>tlbimp</WrapperTool>
<Isolated>false</Isolated>
</COMReference>
<COMReference Include="NETCONLib.dll">
<Guid>{43E734CA-043D-4A70-9A2C-A8F254063D91}</Guid>
<VersionMajor>1</VersionMajor>
@@ -67,11 +50,14 @@
<ItemGroup>
<PackageReference Include="ILMerge" Version="3.0.41" />
<PackageReference Include="MaxMind.GeoIP2" Version="4.0.1" />
<PackageReference Include="Microsoft.Diagnostics.Tracing.TraceEvent" Version="2.0.62" />
<PackageReference Include="Microsoft.Diagnostics.Tracing.TraceEvent" Version="2.0.65" />
<PackageReference Include="Microsoft.Win32.Registry" Version="5.0.0"/>
<PackageReference Include="Newtonsoft.Json" Version="12.0.3" />
<PackageReference Include="System.Collections.Immutable" Version="5.0.0" />
<PackageReference Include="System.Reflection.Metadata" Version="5.0.0" />
<PackageReference Include="TaskScheduler" Version="2.9.1" />
<PackageReference Include="WindowsAPICodePack-Shell" Version="1.1.1" />
<PackageReference Include="WindowsFirewallHelper" Version="2.0.4.70-beta2" />
<PackageReference Include="WindowsJobAPI" Version="5.0.1" />
<PackageReference Include="WindowsProxy" Version="5.0.0" />
</ItemGroup>

View File

@@ -1,13 +1,15 @@
if %Configuration%==Release (
:: Merge dlls
%ILMergeConsolePath% /wildcards /out:%TargetDir%NetchMerged.exe ^
%ILMergeConsolePath% /wildcards /out:%TargetDir%Netch.exe ^
/lib:"C:\Windows\Microsoft.NET\Framework64\v4.0.30319" ^
/targetplatform:v4,"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.8" ^
%TargetDir%Netch.exe ^
%TargetDir%*.dll
DEL /f %TargetDir%*.dll >NUL 2>&1
MOVE /Y %TargetDir%NetchMerged.exe %TargetDir%Netch.exe >NUL
DEL /f %TargetDir%*.config >NUL 2>&1
DEL /f %TargetDir%*.pdb >NUL 2>&1
)
RD /S /Q %TargetDir%bin >NUL 2>&1
@@ -18,8 +20,7 @@ XCOPY /s /Y %SolutionDir%binaries %TargetDir%bin\ >NUL
XCOPY /s /Y %SolutionDir%translations\i18n %TargetDir%i18n\ >NUL
XCOPY /s /Y %SolutionDir%modes\mode %TargetDir%mode\ >NUL
DEL /f %TargetDir%*.config >NUL 2>&1
DEL /f %TargetDir%*.pdb >NUL 2>&1
RD /s /Q %TargetDir%x86 >NUL 2>&1
RD /s /Q %TargetDir%de %TargetDir%es %TargetDir%fr %TargetDir%it %TargetDir%pl %TargetDir%ru %TargetDir%zh-CN >NUL 2>&1
exit 0

View File

@@ -6,6 +6,7 @@
"If this is your first time using this software,\n please check https://netch.org to install supports first,\n or the program may report errors.": "如果你是第一次使用本软件,\n请务必前往 https://netch.org 安装程序所需依赖,\n否则程序将无法正常运行",
"Netch is already running": "Netch 已经在运行中",
"Missing File or runtime components": "缺少文件或运行库",
"Please extract all files then run the program!": "请先解压所有文件再执行程序!",
"Start": "启动",
"Stop": "停止",
@@ -89,6 +90,7 @@
"Modes have been reload": "模式已重载",
"Clean DNS Cache": "清理 DNS 缓存",
"DNS cache cleanup succeeded": "DNS 缓存清理成功",
"Remove Netch Firewall Rules": "移除 Netch 防火墙规则",
"Update PAC": "更新 PAC",
"PAC updated successfully": "PAC 更新成功",
@@ -188,6 +190,7 @@
"Language": "语言",
"Tap Network Sharing": "Tap 网络共享",
"Resolve Server Hostname": "解析服务器主机名",
"FullCone Support (Required Server Xray-core v1.3.0+)": "FullCone 支持(需服务端 Xray-core v1.3.0+",
"Profile": "配置名",
"Profiles": "配置",

View File

@@ -8,7 +8,7 @@ namespace Netch.Servers.Shadowsocks
{
public class SSController : Guard, IServerController
{
public override string Name { get; protected set; } = "Shadowsocks";
public override string Name { get; } = "Shadowsocks";
public override string MainFile { get; protected set; } = "Shadowsocks.exe";
public ushort? Socks5LocalPort { get; set; }

View File

@@ -8,7 +8,7 @@ namespace Netch.Servers.ShadowsocksR
{
public override string MainFile { get; protected set; } = "ShadowsocksR.exe";
public override string Name { get; protected set; } = "ShadowsocksR";
public override string Name { get; } = "ShadowsocksR";
public ushort? Socks5LocalPort { get; set; }
public string LocalAddress { get; set; }

View File

@@ -1,40 +1,21 @@
using System.IO;
using Netch.Controllers;
using Netch.Models;
using Netch.Servers.VMess.Utils;
using Netch.Servers.V2ray;
namespace Netch.Servers.Socks5
{
public class S5Controller : Guard, IServerController
public class S5Controller : V2RayController
{
public override string Name { get; protected set; } = "Socks5";
public override string MainFile { get; protected set; } = "v2ray.exe";
public override string Name { get; } = "Socks5";
public bool Start(in Server s, in Mode mode)
public override bool Start(in Server s, in Mode mode)
{
var server = (Socks5) s;
if (server.Auth())
{
File.WriteAllText("data\\last.json", V2rayConfigUtils.GenerateClientConfig(s, mode));
if (StartInstanceAuto("-config ..\\data\\last.json"))
{
return true;
}
return false;
return base.Start(s, mode);
}
return true;
}
public override void Stop()
{
if (Instance != null)
StopInstance();
}
public ushort? Socks5LocalPort { get; set; }
public string LocalAddress { get; set; }
}
}

View File

@@ -16,11 +16,10 @@ namespace Netch.Servers.Trojan
}
public override string MainFile { get; protected set; } = "Trojan.exe";
public override string Name { get; protected set; } = "Trojan";
public override string Name { get; } = "Trojan";
public ushort? Socks5LocalPort { get; set; }
public string LocalAddress { get; set; }
public bool Start(in Server s, in Mode mode)
{
var server = (Trojan) s;

View File

@@ -1,6 +1,6 @@
using System.Collections.Generic;
namespace Netch.Servers.VMess.Models
namespace Netch.Servers.V2ray.Models
{
public class V2rayConfig
{
@@ -40,7 +40,6 @@ namespace Netch.Servers.VMess.Models
public List<UsersItem> clients { get; set; }
public string decryption { get; set; }
}
@@ -125,7 +124,6 @@ namespace Netch.Servers.VMess.Models
public int level { get; set; }
}
public class Mux
{
public bool enabled { get; set; }
@@ -218,7 +216,6 @@ namespace Netch.Servers.VMess.Models
public TCPRequestHeaders headers;
}
public class TCPRequestHeaders
{
public string Host;

View File

@@ -1,4 +1,4 @@
namespace Netch.Servers.VMess.Models
namespace Netch.Servers.V2ray.Models
{
/// <summary>
/// 使用 v2rayN 定义的 VMess 链接格式

View File

@@ -1,11 +1,11 @@
using System.Collections.Generic;
using System.Linq;
using Netch.Models;
using Netch.Servers.VMess.Models;
using Netch.Servers.V2ray.Models;
using Newtonsoft.Json;
using V2rayConfig = Netch.Servers.VMess.Models.V2rayConfig;
using V2rayConfig = Netch.Servers.V2ray.Models.V2rayConfig;
namespace Netch.Servers.VMess.Utils
namespace Netch.Servers.V2ray.Utils
{
public static class V2rayConfigUtils
{
@@ -214,7 +214,7 @@ namespace Netch.Servers.VMess.Utils
outbound.settings.servers = null;
break;
}
case VMess vmess:
case VMess.VMess vmess:
{
var vnextItem = new VnextItem
{
@@ -261,7 +261,7 @@ namespace Netch.Servers.VMess.Utils
}
}
private static void boundStreamSettings(VMess server, ref StreamSettings streamSettings)
private static void boundStreamSettings(VMess.VMess server, ref StreamSettings streamSettings)
{
try
{

View File

@@ -1,25 +1,23 @@
using System.IO;
using System.IO;
using Netch.Controllers;
using Netch.Models;
using Netch.Servers.VMess.Utils;
using Netch.Servers.V2ray.Utils;
namespace Netch.Servers.VMess
namespace Netch.Servers.V2ray
{
public class VMessController : Guard, IServerController
public class V2RayController : Guard, IServerController
{
public VMessController()
public V2RayController()
{
StartedKeywords.Add("started");
StoppedKeywords.AddRange(new[] {"config file not readable", "failed to"});
}
public override string MainFile { get; protected set; } = "xray.exe";
public override string Name { get; protected set; } = "VMess";
public override string MainFile { get; protected set; } = "v2ray.exe";
public override string Name { get; } = "Xray";
public ushort? Socks5LocalPort { get; set; }
public string LocalAddress { get; set; }
public bool Start(in Server s,in Mode mode)
public virtual bool Start(in Server s, in Mode mode)
{
File.WriteAllText("data\\last.json", V2rayConfigUtils.GenerateClientConfig(s, mode));
return StartInstanceAuto("-config ..\\data\\last.json");
@@ -29,5 +27,12 @@ namespace Netch.Servers.VMess
{
StopInstance();
}
protected override void InitInstance(string argument)
{
base.InitInstance(argument);
if (!Global.Settings.V2RayConfig.XrayCone)
Instance.StartInfo.Environment["XRAY_CONE_DISABLED"] = "true";
}
}
}

View File

@@ -1,28 +0,0 @@
using System.IO;
using Netch.Controllers;
using Netch.Models;
using Netch.Servers.VMess.Utils;
namespace Netch.Servers.VLESS
{
public class VLESSController : Guard, IServerController
{
public override string Name { get; protected set; } = "VLESS";
public override string MainFile { get; protected set; } = "v2ray.exe";
public ushort? Socks5LocalPort { get; set; }
public string LocalAddress { get; set; }
public bool Start(in Server s,in Mode mode)
{
File.WriteAllText("data\\last.json", V2rayConfigUtils.GenerateClientConfig(s, mode));
return StartInstanceAuto("-config ..\\data\\last.json");
}
public override void Stop()
{
StopInstance();
}
}
}

View File

@@ -1,6 +1,7 @@
using System.Collections.Generic;
using Netch.Controllers;
using Netch.Models;
using Netch.Servers.V2ray;
using Newtonsoft.Json.Linq;
namespace Netch.Servers.VLESS
@@ -36,7 +37,7 @@ namespace Netch.Servers.VLESS
public IServerController GetController()
{
return new VLESSController();
return new V2RayController();
}
public IEnumerable<Server> ParseUri(string text)

View File

@@ -2,8 +2,9 @@ using System;
using System.Collections.Generic;
using Netch.Controllers;
using Netch.Models;
using Netch.Servers.V2ray;
using Netch.Servers.V2ray.Models;
using Netch.Servers.VMess.Form;
using Netch.Servers.VMess.Models;
using Netch.Utils;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
@@ -56,7 +57,7 @@ namespace Netch.Servers.VMess
public IServerController GetController()
{
return new VMessController();
return new V2RayController();
}
public IEnumerable<Server> ParseUri(string text)

View File

@@ -1,12 +1,13 @@
using System;
using System.IO;
using System.Linq;
using NetFwTypeLib;
using WindowsFirewallHelper;
namespace Netch.Utils
{
public static class Firewall
{
private const string Netch = "Netch";
private static readonly string[] ProgramPath =
{
"bin/NTT.exe",
@@ -15,53 +16,30 @@ namespace Netch.Utils
"bin/ShadowsocksR.exe",
"bin/Trojan.exe",
"bin/tun2socks.exe",
"bin/v2ray.exe",
"bin/xray.exe",
"Netch.exe"
};
private const string Netch = "Netch";
private const string NetchAutoRule = "NetchAutoRule";
/// <summary>
/// 添加防火墙规则 (非 Netch 自带程序)
/// </summary>
/// <param name="exeFullPath"></param>
public static void AddFwRule(string exeFullPath)
{
AddFwRule(NetchAutoRule, exeFullPath);
}
/// <summary>
/// 清除防火墙规则 (非 Netch 自带程序)
/// </summary>
public static void RemoveFwRules()
{
try
{
RemoveFwRules(NetchAutoRule);
}
catch (Exception e)
{
Logging.Warning("添加防火墙规则错误\n" + e);
}
}
/// <summary>
/// Netch 自带程序添加防火墙
/// Netch 自带程序添加防火墙
/// </summary>
public static void AddNetchFwRules()
{
try
{
if (GetFwRulePath(Netch).StartsWith(Global.NetchDir) && GetFwRulesNumber(Netch) >= ProgramPath.Length) return;
RemoveNetchFwRules();
var rule = FirewallManager.Instance.Rules.FirstOrDefault(r => r.Name == Netch);
if (rule != null)
{
if (rule.Name.StartsWith(Global.NetchDir))
return;
RemoveNetchFwRules();
}
foreach (var p in ProgramPath)
{
var path = Path.GetFullPath(p);
if (File.Exists(path))
{
AddFwRule("Netch", path);
}
AddFwRule(Netch, path);
}
}
catch (Exception e)
@@ -71,72 +49,29 @@ namespace Netch.Utils
}
/// <summary>
/// 清除防火墙规则 (Netch 自带程序)
/// 清除防火墙规则 (Netch 自带程序)
/// </summary>
private static void RemoveNetchFwRules()
public static void RemoveNetchFwRules()
{
try
{
RemoveFwRules(Netch);
foreach (var rule in FirewallManager.Instance.Rules.Where(r => r.Name == Netch))
FirewallManager.Instance.Rules.Remove(rule);
}
catch (Exception e)
{
Logging.Warning("清除防火墙规则错误\n" + e);
// ignored
}
}
#region
private static readonly INetFwPolicy2 FwPolicy = (INetFwPolicy2) Activator.CreateInstance(Type.GetTypeFromProgID("HNetCfg.FwPolicy2"));
private static void AddFwRule(string ruleName, string exeFullPath)
{
var rule = NewFwRule();
var rule = FirewallManager.Instance.CreateApplicationRule(ruleName, FirewallAction.Allow, exeFullPath);
rule.Direction = FirewallDirection.Inbound;
rule.Action = NET_FW_ACTION_.NET_FW_ACTION_ALLOW;
// ApplicationName 大小不敏感
rule.ApplicationName = exeFullPath;
// rule.Description = "";
rule.Direction = NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_IN;
rule.Enabled = true;
rule.InterfaceTypes = "All";
rule.Name = ruleName;
FwPolicy.Rules.Add(rule);
}
private static void RemoveFwRules(string ruleName)
{
var c = GetFwRulesNumber(ruleName);
foreach (var _ in new bool[c])
{
FwPolicy.Rules.Remove(ruleName);
}
}
private static INetFwRule NewFwRule()
{
return (INetFwRule) Activator.CreateInstance(Type.GetTypeFromProgID("HNetCfg.FWRule"));
}
private static string GetFwRulePath(string ruleName)
{
try
{
var rule = (INetFwRule2) FwPolicy.Rules.Item(ruleName);
return rule.ApplicationName;
}
catch (Exception)
{
return "";
}
}
private static int GetFwRulesNumber(string ruleName)
{
return FwPolicy.Rules.Cast<INetFwRule2>().Count(rule => rule.Name == ruleName);
FirewallManager.Instance.Rules.Add(rule);
}
#endregion

View File

@@ -12,7 +12,8 @@ using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
using MaxMind.GeoIP2;
using TaskScheduler;
using Microsoft.Win32.TaskScheduler;
using Task = System.Threading.Tasks.Task;
namespace Netch.Utils
{
@@ -56,7 +57,7 @@ namespace Netch.Utils
return timeout;
}
public static async Task<int> ICMPing(IPAddress ip, int timeout = 1000)
public static int ICMPing(IPAddress ip, int timeout = 1000)
{
var reply = new Ping().Send(ip, timeout);
@@ -240,47 +241,35 @@ namespace Netch.Utils
public static void RegisterNetchStartupItem()
{
var scheduler = new TaskSchedulerClass();
scheduler.Connect();
var folder = scheduler.GetFolder("\\");
var taskIsExists = false;
try
{
folder.GetTask("Netch Startup");
taskIsExists = true;
}
catch
{
// ignored
}
const string TaskName = "Netch Startup";
var folder = TaskService.Instance.GetFolder("\\");
var taskIsExists = folder.Tasks.Any(task => task.Name == TaskName);
if (Global.Settings.RunAtStartup)
{
if (taskIsExists)
folder.DeleteTask("Netch Startup", 0);
folder.DeleteTask(TaskName, false);
var task = scheduler.NewTask(0);
task.RegistrationInfo.Author = "Netch";
task.RegistrationInfo.Description = "Netch run at startup.";
task.Principal.RunLevel = _TASK_RUNLEVEL.TASK_RUNLEVEL_HIGHEST;
var td = TaskService.Instance.NewTask();
task.Triggers.Create(_TASK_TRIGGER_TYPE2.TASK_TRIGGER_LOGON);
var action = (IExecAction) task.Actions.Create(_TASK_ACTION_TYPE.TASK_ACTION_EXEC);
action.Path = Application.ExecutablePath;
td.RegistrationInfo.Author = "Netch";
td.RegistrationInfo.Description = "Netch run at startup.";
td.Principal.RunLevel = TaskRunLevel.Highest;
td.Triggers.Add(new LogonTrigger());
td.Actions.Add(new ExecAction(Application.ExecutablePath));
task.Settings.ExecutionTimeLimit = "PT0S";
task.Settings.DisallowStartIfOnBatteries = false;
task.Settings.RunOnlyIfIdle = false;
td.Settings.ExecutionTimeLimit = TimeSpan.Zero;
td.Settings.DisallowStartIfOnBatteries = false;
td.Settings.RunOnlyIfIdle = false;
td.Settings.Compatibility = TaskCompatibility.V2_1;
folder.RegisterTaskDefinition("Netch Startup", task, (int) _TASK_CREATION.TASK_CREATE, null, null,
_TASK_LOGON_TYPE.TASK_LOGON_INTERACTIVE_TOKEN, "");
TaskService.Instance.RootFolder.RegisterTaskDefinition("Netch Startup", td);
}
else
{
if (taskIsExists)
folder.DeleteTask("Netch Startup", 0);
folder.DeleteTask(TaskName, false);
}
}

View File

@@ -19,7 +19,7 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="NUnit" Version="3.12.0" />
<PackageReference Include="NUnit" Version="3.13.1" />
</ItemGroup>
</Project>

2
modes

Submodule modes updated: e3ae0d5406...25ec8156f9