diff --git a/Netch/Controllers/IServerController.cs b/Netch/Controllers/IServerController.cs index 13989489..dba15b25 100644 --- a/Netch/Controllers/IServerController.cs +++ b/Netch/Controllers/IServerController.cs @@ -4,7 +4,7 @@ namespace Netch.Controllers { public interface IServerController : IController { - public int? Socks5LocalPort { get; set; } + public ushort? Socks5LocalPort { get; set; } public string LocalAddress { get; set; } @@ -19,7 +19,7 @@ namespace Netch.Controllers public static class ServerControllerExtension { - public static int Socks5LocalPort(this IServerController controller) + public static ushort Socks5LocalPort(this IServerController controller) { return controller.Socks5LocalPort ?? Global.Settings.Socks5LocalPort; } diff --git a/Netch/Controllers/MainController.cs b/Netch/Controllers/MainController.cs index 888cdfc4..d2e4537e 100644 --- a/Netch/Controllers/MainController.cs +++ b/Netch/Controllers/MainController.cs @@ -124,7 +124,7 @@ namespace Netch.Controllers private static async Task StartMode(Server server, Mode mode) { - var port = 0; + ushort port = 0; switch (mode.Type) { case 0: @@ -193,7 +193,7 @@ namespace Netch.Controllers /// 端口用途名称 /// /// - private static void PortCheckAndShowMessageBox(int port, string portName, PortType portType = PortType.Both) + private static void PortCheckAndShowMessageBox(ushort port, string portName, PortType portType = PortType.Both) { if (PortInUse(port, portType)) { diff --git a/Netch/Forms/MainForm.Status.cs b/Netch/Forms/MainForm.Status.cs index 8c121e08..28eeefb9 100644 --- a/Netch/Forms/MainForm.Status.cs +++ b/Netch/Forms/MainForm.Status.cs @@ -183,34 +183,55 @@ namespace Netch.Forms public static class StatusPortInfoText { - public static int Socks5Port = 0; - public static int HttpPort = 0; - public static bool ShareLan = false; + private static ushort? _socks5Port; + private static ushort? _httpPort; + private static bool? _shareLan; + + public static bool ShareLan + { + set => _shareLan = value; + } + + public static ushort HttpPort + { + set => _httpPort = value; + } + + public static ushort Socks5Port + { + set => _socks5Port = value; + } public static string Value { get { - if (Socks5Port == 0 && HttpPort == 0) + if (_socks5Port == null && _httpPort == null) return string.Empty; var text = new StringBuilder(); - if (ShareLan) + if (_shareLan == true) text.Append(i18N.Translate("Allow other Devices to connect") + " "); - if (Socks5Port != 0) - text.Append($"Socks5 {i18N.Translate("Local Port", ": ")}{Socks5Port}"); + if (_socks5Port != null) + text.Append($"Socks5 {i18N.Translate("Local Port", ": ")}{_socks5Port}"); - if (HttpPort != 0) + if (_httpPort != null) { - if (Socks5Port != 0) + if (_socks5Port != null) text.Append(" | "); - text.Append($"HTTP {i18N.Translate("Local Port", ": ")}{HttpPort}"); + text.Append($"HTTP {i18N.Translate("Local Port", ": ")}{_httpPort}"); } return $" ({text})"; } } + + public static void Reset() + { + _httpPort = _socks5Port = null; + _shareLan = null; + } } } } \ No newline at end of file diff --git a/Netch/Forms/SettingForm.cs b/Netch/Forms/SettingForm.cs index ddf50b8e..84cbe5bc 100644 --- a/Netch/Forms/SettingForm.cs +++ b/Netch/Forms/SettingForm.cs @@ -132,20 +132,17 @@ namespace Netch.Forms #region Port - int socks5LocalPort; - int httpLocalPort; - int redirectorTCPPort; + ushort socks5LocalPort; + ushort httpLocalPort; + ushort redirectorTCPPort; try { - socks5LocalPort = int.Parse(Socks5PortTextBox.Text); - httpLocalPort = int.Parse(HTTPPortTextBox.Text); - redirectorTCPPort = int.Parse(RedirectorTextBox.Text); + socks5LocalPort = ushort.Parse(Socks5PortTextBox.Text); + httpLocalPort = ushort.Parse(HTTPPortTextBox.Text); + redirectorTCPPort = ushort.Parse(RedirectorTextBox.Text); - static void CheckPort(string portName, int port, int originPort, PortType portType = PortType.Both) + static void CheckPort(string portName, ushort port, ushort originPort, PortType portType = PortType.Both) { - if (port <= 0 || port > 65536) - throw new FormatException(); - if (port == originPort) return; diff --git a/Netch/Models/Setting.cs b/Netch/Models/Setting.cs index c760e47c..60735ef3 100644 --- a/Netch/Models/Setting.cs +++ b/Netch/Models/Setting.cs @@ -116,22 +116,22 @@ namespace Netch.Models /// /// HTTP 本地端口 /// - public int HTTPLocalPort = 2802; + public ushort HTTPLocalPort = 2802; /// /// Socks5 本地端口 /// - public int Socks5LocalPort = 2801; + public ushort Socks5LocalPort = 2801; /// /// Redirector TCP 占用端口 /// - public int RedirectorTCPPort = 3901; + public ushort RedirectorTCPPort = 3901; /// /// UDP Socket 占用端口 /// - public int UDPSocketPort = 18291; + public ushort UDPSocketPort = 18291; /// /// HTTP 和 Socks5 本地代理地址 diff --git a/Netch/Servers/Shadowsocks/SSController.cs b/Netch/Servers/Shadowsocks/SSController.cs index 259bb44b..c9031f61 100644 --- a/Netch/Servers/Shadowsocks/SSController.cs +++ b/Netch/Servers/Shadowsocks/SSController.cs @@ -11,7 +11,7 @@ namespace Netch.Servers.Shadowsocks public override string Name { get; protected set; } = "Shadowsocks"; public override string MainFile { get; protected set; } = "Shadowsocks.exe"; - public int? Socks5LocalPort { get; set; } + public ushort? Socks5LocalPort { get; set; } public string LocalAddress { get; set; } private Mode _savedMode; diff --git a/Netch/Servers/ShadowsocksR/SSRController.cs b/Netch/Servers/ShadowsocksR/SSRController.cs index beb69437..47f2cf15 100644 --- a/Netch/Servers/ShadowsocksR/SSRController.cs +++ b/Netch/Servers/ShadowsocksR/SSRController.cs @@ -11,7 +11,7 @@ namespace Netch.Servers.ShadowsocksR public override string Name { get; protected set; } = "ShadowsocksR"; - public int? Socks5LocalPort { get; set; } + public ushort? Socks5LocalPort { get; set; } public string LocalAddress { get; set; } public bool Start(Server s, Mode mode) diff --git a/Netch/Servers/Socks5/S5Controller.cs b/Netch/Servers/Socks5/S5Controller.cs index 44ce714f..b4a67f82 100644 --- a/Netch/Servers/Socks5/S5Controller.cs +++ b/Netch/Servers/Socks5/S5Controller.cs @@ -33,7 +33,7 @@ namespace Netch.Servers.Socks5 StopInstance(); } - public int? Socks5LocalPort { get; set; } + public ushort? Socks5LocalPort { get; set; } public string LocalAddress { get; set; } } diff --git a/Netch/Servers/Trojan/TrojanController.cs b/Netch/Servers/Trojan/TrojanController.cs index da256960..2ea13c4c 100644 --- a/Netch/Servers/Trojan/TrojanController.cs +++ b/Netch/Servers/Trojan/TrojanController.cs @@ -18,7 +18,7 @@ namespace Netch.Servers.Trojan public override string MainFile { get; protected set; } = "Trojan.exe"; public override string Name { get; protected set; } = "Trojan"; - public int? Socks5LocalPort { get; set; } + public ushort? Socks5LocalPort { get; set; } public string LocalAddress { get; set; } diff --git a/Netch/Servers/VLESS/VLESSController.cs b/Netch/Servers/VLESS/VLESSController.cs index ad4cfdfc..49782e08 100644 --- a/Netch/Servers/VLESS/VLESSController.cs +++ b/Netch/Servers/VLESS/VLESSController.cs @@ -10,7 +10,7 @@ namespace Netch.Servers.VLESS public override string Name { get; protected set; } = "VLESS"; public override string MainFile { get; protected set; } = "v2ray.exe"; - public int? Socks5LocalPort { get; set; } + public ushort? Socks5LocalPort { get; set; } public string LocalAddress { get; set; } diff --git a/Netch/Servers/VMess/VMessController.cs b/Netch/Servers/VMess/VMessController.cs index 8eef3909..ba1773f9 100644 --- a/Netch/Servers/VMess/VMessController.cs +++ b/Netch/Servers/VMess/VMessController.cs @@ -15,7 +15,7 @@ namespace Netch.Servers.VMess public override string Name { get; protected set; } = "V2Ray"; public override string MainFile { get; protected set; } = "v2ray.exe"; - public int? Socks5LocalPort { get; set; } + public ushort? Socks5LocalPort { get; set; } public string LocalAddress { get; set; } diff --git a/Netch/Utils/PortHelper.cs b/Netch/Utils/PortHelper.cs index d718e856..f24c35c6 100644 --- a/Netch/Utils/PortHelper.cs +++ b/Netch/Utils/PortHelper.cs @@ -8,8 +8,8 @@ namespace Netch.Utils { public static class PortHelper { - private static readonly List TCPExcludedRanges = new List(); - private static readonly List UDPExcludedRanges = new List(); + private static readonly List TCPExcludedRanges = new List(); + private static readonly List UDPExcludedRanges = new List(); static PortHelper() { @@ -24,7 +24,7 @@ namespace Netch.Utils } } - private static void GetExcludedPortRange(PortType portType, ref List targetList) + private static void GetExcludedPortRange(PortType portType, ref List targetList) { var lines = new List(); var process = new Process @@ -63,9 +63,9 @@ namespace Netch.Utils var value = line.Trim().Split(' ').Where(s => s != string.Empty); - var port = 0; + ushort port = 0; var _ = (from s1 in value - where int.TryParse(s1, out port) + where ushort.TryParse(s1, out port) select port).ToArray(); targetList.Add(_); @@ -80,7 +80,7 @@ namespace Netch.Utils /// 端口类型 /// 是否是保留端口 /// - private static bool IsPortExcluded(int port, PortType type) + private static bool IsPortExcluded(ushort port, PortType type) { return type switch { @@ -97,7 +97,7 @@ namespace Netch.Utils /// 端口 /// 检查端口类型 /// 是否被占用 - public static bool PortInUse(int port, PortType type = PortType.Both) + public static bool PortInUse(ushort port, PortType type = PortType.Both) { var netInfo = IPGlobalProperties.GetIPGlobalProperties(); var isTcpUsed = type != PortType.UDP && @@ -111,11 +111,12 @@ namespace Netch.Utils return isPortExcluded && (isTcpUsed || isUdpUsed); } - public static int GetAvailablePort() + public static ushort GetAvailablePort() { - for (var i = 0; i < 55535; i++) + var random = new Random(); + for (ushort i = 0; i < 55535; i++) { - var p = new Random().Next(10000, 65535); + var p = (ushort) random.Next(10000, 65535); if (!PortInUse(p)) { return p; @@ -128,7 +129,7 @@ namespace Netch.Utils /// /// 记录Netch使用的端口 /// - public static readonly List UsingPorts = new List(); + public static readonly List UsingPorts = new List(); } ///