From 47e98dc359c7ebce1eedf77f79770155bd223989 Mon Sep 17 00:00:00 2001 From: Hellojack <106379370+H1JK@users.noreply.github.com> Date: Tue, 7 Jun 2022 08:12:52 +0800 Subject: [PATCH] FIx Trojan --- Netch/Servers/Trojan/TrojanForm.cs | 1 + Netch/Servers/Trojan/TrojanServer.cs | 15 +++++++++++++++ Netch/Servers/Trojan/TrojanUtil.cs | 9 +++++++-- Netch/Servers/V2ray/V2rayConfigUtils.cs | 24 ++++++++++++++++++++++++ 4 files changed, 47 insertions(+), 2 deletions(-) diff --git a/Netch/Servers/Trojan/TrojanForm.cs b/Netch/Servers/Trojan/TrojanForm.cs index 210a3c06..7fcf436c 100644 --- a/Netch/Servers/Trojan/TrojanForm.cs +++ b/Netch/Servers/Trojan/TrojanForm.cs @@ -11,6 +11,7 @@ public class TrojanForm : ServerForm Server = server; CreateTextBox("Password", "Password", s => true, s => server.Password = s, server.Password); CreateTextBox("Host", "Host", s => true, s => server.Host = s, server.Host); + CreateComboBox("TLSSecure", "TLS Secure", VLESSGlobal.TLSSecure, s => server.TLSSecureType = s, server.TLSSecureType); } protected override string TypeName { get; } = "Trojan"; diff --git a/Netch/Servers/Trojan/TrojanServer.cs b/Netch/Servers/Trojan/TrojanServer.cs index 2a2bc32f..fdba8e1c 100644 --- a/Netch/Servers/Trojan/TrojanServer.cs +++ b/Netch/Servers/Trojan/TrojanServer.cs @@ -20,4 +20,19 @@ public class TrojanServer : Server /// 伪装域名 /// public string? Host { get; set; } + + /// + /// TLS 底层传输安全 + /// + public string TLSSecureType + { + get => _tlsSecureType; + set + { + if (value == "") + value = "none"; + + _tlsSecureType = value; + } + } } \ No newline at end of file diff --git a/Netch/Servers/Trojan/TrojanUtil.cs b/Netch/Servers/Trojan/TrojanUtil.cs index 09e1f666..4ec4a58c 100644 --- a/Netch/Servers/Trojan/TrojanUtil.cs +++ b/Netch/Servers/Trojan/TrojanUtil.cs @@ -32,7 +32,7 @@ public class TrojanUtil : IServerUtil public string GetShareLink(Server s) { var server = (TrojanServer)s; - return $"trojan://{HttpUtility.UrlEncode(server.Password)}@{server.Hostname}:{server.Port}#{server.Remark}"; + return $"trojan://{HttpUtility.UrlEncode(server.Password)}@{server.Hostname}:{server.Port}?sni={server.Host}#{server.Remark}"; } public IServerController GetController() @@ -61,8 +61,13 @@ public class TrojanUtil : IServerUtil var peer = HttpUtility.UrlDecode(HttpUtility.ParseQueryString(new Uri(text).Query).Get("peer")); - if (peer != null) + if (peer != null) { data.Host = peer; + } else { + peer = HttpUtility.UrlDecode(HttpUtility.ParseQueryString(new Uri(text).Query).Get("sni")); + if (peer != null) + data.Host = peer; + } text = regmatch.Groups["data"].Value; } diff --git a/Netch/Servers/V2ray/V2rayConfigUtils.cs b/Netch/Servers/V2ray/V2rayConfigUtils.cs index 20fd1772..9a7a6523 100644 --- a/Netch/Servers/V2ray/V2rayConfigUtils.cs +++ b/Netch/Servers/V2ray/V2rayConfigUtils.cs @@ -192,6 +192,30 @@ public static class V2rayConfigUtils password = trojan.Password } }; + + var streamSettings = new StreamSettings + { + network = "tcp", + security = server.TLSSecureType + }; + if (server.TLSSecureType != "none") + { + var tlsSettings = new TlsSettings + { + allowInsecure = Global.Settings.V2RayConfig.AllowInsecure, + serverName = server.Host ?? "" + }; + + switch (server.TLSSecureType) + { + case "tls": + outbound.streamSettings.tlsSettings = tlsSettings; + break; + case "xtls": + outbound.streamSettings.xtlsSettings = tlsSettings; + break; + } + } break; }