diff --git a/Netch/Controllers/HTTPController.cs b/Netch/Controllers/HTTPController.cs index cae0c573..0e070e4e 100644 --- a/Netch/Controllers/HTTPController.cs +++ b/Netch/Controllers/HTTPController.cs @@ -34,17 +34,7 @@ namespace Netch.Controllers try { - if (s.IsSocks5()) - { - var server = (Socks5) s; - if (!string.IsNullOrWhiteSpace(server.Username) && !string.IsNullOrWhiteSpace(server.Password)) return false; - - pPrivoxyController.Start(s, mode); - } - else - { - pPrivoxyController.Start(s, mode); - } + pPrivoxyController.Start(s, mode); if (mode.Type == 3) NativeMethods.SetGlobal($"127.0.0.1:{Global.Settings.HTTPLocalPort}", IEProxyExceptions); } diff --git a/Netch/Controllers/MainController.cs b/Netch/Controllers/MainController.cs index ff5e8762..393a6193 100644 --- a/Netch/Controllers/MainController.cs +++ b/Netch/Controllers/MainController.cs @@ -3,6 +3,7 @@ using System.IO; using System.Net; using System.Threading.Tasks; using Netch.Models; +using Netch.Servers.Socks5; using Netch.Utils; using static Netch.Forms.MainForm; using static Netch.Utils.PortHelper; @@ -28,7 +29,7 @@ namespace Netch.Controllers { Logging.Info($"启动主控制器: {server.Type} [{mode.Type}]{mode.Remark}"); - if (server.IsSocks5() && mode.Type == 4) + if (server is Socks5 && mode.Type == 4) { return false; } @@ -101,11 +102,6 @@ namespace Netch.Controllers private static async Task StartServer(Server server, Mode mode) { - if (server.IsSocks5()) - { - return true; - } - ServerController = ServerHelper.GetUtilByTypeName(server.Type).GetController(); if (ServerController is Guard instanceController) diff --git a/Netch/Controllers/NFController.cs b/Netch/Controllers/NFController.cs index 1490dce1..08f0617f 100644 --- a/Netch/Controllers/NFController.cs +++ b/Netch/Controllers/NFController.cs @@ -3,7 +3,9 @@ using System.IO; using System.Runtime.InteropServices; using System.ServiceProcess; using System.Threading.Tasks; +using Netch.Forms; using Netch.Models; +using Netch.Servers.Socks5; using Netch.Utils; using nfapinet; @@ -69,7 +71,7 @@ namespace Netch.Controllers aio_dial((int) NameList.TYPE_ADDNAME, "NTT.exe"); - if (s.IsSocks5()) + if (s is Socks5 socks5 && !socks5.Auth()) { var result = DNS.Lookup(s.Hostname); if (result == null) @@ -78,8 +80,8 @@ namespace Netch.Controllers return false; } - aio_dial((int) NameList.TYPE_TCPHOST, $"{result}:{s.Port}"); - aio_dial((int) NameList.TYPE_UDPHOST, $"{result}:{s.Port}"); + aio_dial((int) NameList.TYPE_TCPHOST, $"{socks5.AutoResolveHostname()}:{socks5.Port}"); + aio_dial((int) NameList.TYPE_UDPHOST, $"{socks5.AutoResolveHostname()}:{socks5.Port}"); } else { diff --git a/Netch/Controllers/PrivoxyController.cs b/Netch/Controllers/PrivoxyController.cs index ddc69c0f..4d71fafd 100644 --- a/Netch/Controllers/PrivoxyController.cs +++ b/Netch/Controllers/PrivoxyController.cs @@ -1,5 +1,7 @@ using System.IO; +using System.Text; using Netch.Models; +using Netch.Servers.Socks5; namespace Netch.Controllers { @@ -16,13 +18,21 @@ namespace Netch.Controllers public bool Start(Server server, Mode mode) { - var text = File.ReadAllText("bin\\default.conf") - .Replace("_BIND_PORT_", Global.Settings.HTTPLocalPort.ToString()) - .Replace("_DEST_PORT_", (server.IsSocks5() ? server.Port : Global.Settings.Socks5LocalPort).ToString()) - .Replace("0.0.0.0", Global.Settings.LocalAddress); - if (server.IsSocks5()) - text = text.Replace("/ 127.0.0.1", $"/ {server.Hostname}"); - File.WriteAllText("data\\privoxy.conf", text); + var text = new StringBuilder(File.ReadAllText("bin\\default.conf")); + + text.Replace("_BIND_PORT_", Global.Settings.LocalAddress); + text.Replace("0.0.0.0", Global.Settings.LocalAddress); /* BIND_HOST */ + + if (server is Socks5 socks5 && !socks5.Auth()) + { + text.Replace("/ 127.0.0.1", $"/ {server.AutoResolveHostname()}"); /* DEST_HOST */ + text.Replace("_DEST_PORT_", socks5.Port.ToString()); + } + + text.Replace("_DEST_PORT_", Global.Settings.Socks5LocalPort.ToString()); + + + File.WriteAllText("data\\privoxy.conf", text.ToString()); return StartInstanceAuto("..\\data\\privoxy.conf"); } diff --git a/Netch/Controllers/TUNTAPController.cs b/Netch/Controllers/TUNTAPController.cs index 4689f049..dab10d43 100644 --- a/Netch/Controllers/TUNTAPController.cs +++ b/Netch/Controllers/TUNTAPController.cs @@ -10,6 +10,7 @@ using System.Threading; using System.Threading.Tasks; using System.Windows.Forms; using Netch.Models; +using Netch.Servers.Socks5; using Netch.Utils; namespace Netch.Controllers @@ -87,7 +88,7 @@ namespace Netch.Controllers } var argument = new StringBuilder(); - if (s.IsSocks5()) + if (s is Socks5 socks5 && !socks5.Auth()) argument.Append($"-proxyServer {_serverAddresses}:{s.Port} "); else argument.Append($"-proxyServer 127.0.0.1:{Global.Settings.Socks5LocalPort} "); diff --git a/Netch/Models/Server.cs b/Netch/Models/Server.cs index e7e8f061..d299d9f2 100644 --- a/Netch/Models/Server.cs +++ b/Netch/Models/Server.cs @@ -41,8 +41,6 @@ namespace Netch.Models /// public int Delay = -1; - public bool IsSocks5() => Type == "Socks5"; - /// /// 获取备注 /// diff --git a/Netch/Servers/Socks5/S5Controller.cs b/Netch/Servers/Socks5/S5Controller.cs new file mode 100644 index 00000000..3b56b234 --- /dev/null +++ b/Netch/Servers/Socks5/S5Controller.cs @@ -0,0 +1,39 @@ +using System.IO; +using Netch.Controllers; +using Netch.Models; +using Netch.Servers.VMess.Utils; + +namespace Netch.Servers.Socks5 +{ + public class S5Controller : Guard, IServerController + { + public override string Name { get; protected set; } = "Socks5"; + public override string MainFile { get; protected set; } = "v2ray.exe"; + + public bool Start(Server s, Mode mode) + { + if (((Socks5) s).Auth()) + { + File.WriteAllText("data\\last.json", V2rayConfigUtils.GenerateClientConfig(s, mode)); + if (StartInstanceAuto("-config ..\\data\\last.json")) + { + return true; + } + + return false; + } + + return true; + } + + public override void Stop() + { + if (Instance != null) + StopInstance(); + } + + public int? Socks5LocalPort { get; set; } + + public string LocalAddress { get; set; } + } +} \ No newline at end of file diff --git a/Netch/Servers/Socks5/S5Util.cs b/Netch/Servers/Socks5/S5Util.cs index 1c0b33dd..655665e0 100644 --- a/Netch/Servers/Socks5/S5Util.cs +++ b/Netch/Servers/Socks5/S5Util.cs @@ -38,7 +38,7 @@ namespace Netch.Servers.Socks5 public IServerController GetController() { - return null; + return new S5Controller(); } public IEnumerable ParseUri(string text) diff --git a/Netch/Servers/VMess/Utils/V2rayConfigUtils.cs b/Netch/Servers/VMess/Utils/V2rayConfigUtils.cs index 29f5e0ae..f1ad875f 100644 --- a/Netch/Servers/VMess/Utils/V2rayConfigUtils.cs +++ b/Netch/Servers/VMess/Utils/V2rayConfigUtils.cs @@ -34,9 +34,9 @@ namespace Netch.Servers.VMess.Utils { var inbound = new Inbounds { - port = MainController.ServerController.Socks5LocalPort(), + port = Global.Settings.Socks5LocalPort, protocol = "socks", - listen = MainController.ServerController.LocalAddress(), + listen = Global.Settings.LocalAddress, settings = new Inboundsettings { udp = true