From 3f1b21c4e58d853421cd48b740b06c26d033d429 Mon Sep 17 00:00:00 2001 From: ChsBuffer <33744752+chsbuffer@users.noreply.github.com> Date: Mon, 12 Oct 2020 21:44:58 +0800 Subject: [PATCH] feat: VLESS support --- Netch/Servers/VLESS/VLESS.cs | 46 +++++++++++++++++++ Netch/Servers/VLESS/VLESSController.cs | 36 +++++++++++++++ Netch/Servers/VLESS/VLESSForm/VLESSForm.cs | 46 +++++++++++++++++++ Netch/Servers/VLESS/VLESSUtil.cs | 53 ++++++++++++++++++++++ 4 files changed, 181 insertions(+) create mode 100644 Netch/Servers/VLESS/VLESS.cs create mode 100644 Netch/Servers/VLESS/VLESSController.cs create mode 100644 Netch/Servers/VLESS/VLESSForm/VLESSForm.cs create mode 100644 Netch/Servers/VLESS/VLESSUtil.cs diff --git a/Netch/Servers/VLESS/VLESS.cs b/Netch/Servers/VLESS/VLESS.cs new file mode 100644 index 00000000..024a2bf0 --- /dev/null +++ b/Netch/Servers/VLESS/VLESS.cs @@ -0,0 +1,46 @@ +using System.Collections.Generic; +using Netch.Models; +using Netch.Servers.VMess; + +namespace Netch.Servers.VLESS +{ + public class VLESS : VMess.VMess + { + public VLESS() + { + Type = "VLESS"; + } + + /// + /// 加密方式 + /// + public new string EncryptMethod { get; set; } = "none"; + + /// + /// 传输协议 + /// + public new string TransferProtocol { get; set; } = VLESSGlobal.TransferProtocols[0]; + + /// + /// 伪装类型 + /// + public new string FakeType { get; set; } = VLESSGlobal.FakeTypes[0]; + + /// + /// + /// + public string Flow { get; set; } + } + + public class VLESSGlobal + { + + public static List TransferProtocols => VMessGlobal.TransferProtocols; + + public static readonly List FakeTypes = new List + { + "none", + "http" + }; + } +} \ No newline at end of file diff --git a/Netch/Servers/VLESS/VLESSController.cs b/Netch/Servers/VLESS/VLESSController.cs new file mode 100644 index 00000000..215b75a2 --- /dev/null +++ b/Netch/Servers/VLESS/VLESSController.cs @@ -0,0 +1,36 @@ +using System.IO; +using Netch.Controllers; +using Netch.Models; + +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 int? Socks5LocalPort { get; set; } + + public string LocalAddress { get; set; } + + public bool Start(Server s, Mode mode) + { + var server = (VLESS) s; + + File.WriteAllText("data\\last.json", VMess.Utils.V2rayConfigUtils.GenerateClientConfig(server, mode)); + + if (StartInstanceAuto("-config ..\\data\\last.json")) + { + if (File.Exists("data\\last.json")) File.Delete("data\\last.json"); + return true; + } + + return false; + } + + public override void Stop() + { + StopInstance(); + } + } +} \ No newline at end of file diff --git a/Netch/Servers/VLESS/VLESSForm/VLESSForm.cs b/Netch/Servers/VLESS/VLESSForm/VLESSForm.cs new file mode 100644 index 00000000..58c446f5 --- /dev/null +++ b/Netch/Servers/VLESS/VLESSForm/VLESSForm.cs @@ -0,0 +1,46 @@ +using Netch.Forms; + +namespace Netch.Servers.VLESS.VLESSForm +{ + class VLESSForm : ServerForm + { + protected override string TypeName { get; } = "VLESS"; + + public VLESSForm(VLESS server = default) + { + server ??= new VLESS(); + Server = server; + CreateTextBox("UUID", "UUID", + s => true, + s => server.UserID = s, + server.UserID); + CreateTextBox("EncryptMethod", "Encrypt Method", + s => true, + s => server.EncryptMethod = !string.IsNullOrWhiteSpace(s) ? s : "none", + server.EncryptMethod); + CreateTextBox("Flow", "Flow", + s => true, + s => server.Flow = s, + server.Flow); + CreateComboBox("TransferProtocol", "Transfer Protocol", + VLESSGlobal.TransferProtocols, + s => server.TransferProtocol = s, + server.TransferProtocol); + CreateComboBox("FakeType", "Fake Type", + VLESSGlobal.FakeTypes, + s => server.FakeType = s, + server.FakeType); + CreateTextBox("Host", "Host", + s => true, + s => server.Host = s, + server.Host); + CreateTextBox("Path", "Path", + s => true, + s => server.Path = s, + server.Path); + CreateCheckBox("TLSSecure", "TLS Secure", + b => server.TLSSecure = b, + server.TLSSecure); + } + } +} \ No newline at end of file diff --git a/Netch/Servers/VLESS/VLESSUtil.cs b/Netch/Servers/VLESS/VLESSUtil.cs new file mode 100644 index 00000000..a7050609 --- /dev/null +++ b/Netch/Servers/VLESS/VLESSUtil.cs @@ -0,0 +1,53 @@ +using System.Collections.Generic; +using Netch.Controllers; +using Netch.Models; +using Newtonsoft.Json.Linq; + +namespace Netch.Servers.VLESS +{ + public class VLESSUtil : IServerUtil + { + public ushort Priority { get; } = 2; + public string TypeName { get; } = "VLESS"; + public string FullName { get; } = "VLESS"; + public string ShortName { get; } = "VL"; + public string[] UriScheme { get; } = { }; + + public Server ParseJObject(JObject j) + { + return j.ToObject(); + } + + public void Edit(Server s) + { + new VLESSForm.VLESSForm((VLESS) s).ShowDialog(); + } + + public void Create() + { + new VLESSForm.VLESSForm().ShowDialog(); + } + + public string GetShareLink(Server server) + { + // TODO + return ""; + } + + public IServerController GetController() + { + return new VLESSController(); + } + + public IEnumerable ParseUri(string text) + { + throw new System.NotImplementedException(); + } + + public bool CheckServer(Server s) + { + // TODO + return true; + } + } +} \ No newline at end of file