From 7636b0ed2796a08b05a145a50b016031ec9da3c2 Mon Sep 17 00:00:00 2001 From: Shaojun Yang Date: Tue, 29 Jun 2021 17:57:35 +0800 Subject: [PATCH 1/2] Add gRPC support --- Netch/Resources/zh-CN | 2 ++ Netch/Servers/V2ray/Models/V2rayConfig.cs | 7 +++++++ Netch/Servers/V2ray/Utils/V2rayConfigUtils.cs | 8 ++++++++ Netch/Servers/VLESS/VLESS.cs | 2 ++ Netch/Servers/VLESS/VLESSForm/VLESSForm.cs | 2 ++ Netch/Servers/VMess/Form/VMessForm.cs | 2 ++ Netch/Servers/VMess/VMess.cs | 19 ++++++++++++++++++- 7 files changed, 41 insertions(+), 1 deletion(-) diff --git a/Netch/Resources/zh-CN b/Netch/Resources/zh-CN index 42b828fa..12a0eb6c 100644 --- a/Netch/Resources/zh-CN +++ b/Netch/Resources/zh-CN @@ -51,6 +51,8 @@ "Path": "路径", "QUIC Security": "QUIC 加密方式", "QUIC Secret": "QUIC 加密密钥", + "GRPC Mode": "QUIC 模式", + "GRPC ServiceName": "QUIC 服务名称", "TLS Secure": "TLS 底层传输安全", "Use Mux": "Mux 多路复用", "Encrypt Method": "加密方式", diff --git a/Netch/Servers/V2ray/Models/V2rayConfig.cs b/Netch/Servers/V2ray/Models/V2rayConfig.cs index 09659933..e0c813c5 100644 --- a/Netch/Servers/V2ray/Models/V2rayConfig.cs +++ b/Netch/Servers/V2ray/Models/V2rayConfig.cs @@ -183,6 +183,8 @@ namespace Netch.Servers.Models public QuicSettings quicSettings { get; set; } public TlsSettings xtlsSettings { get; set; } + + public GrpcSettings grpcSettings { get; set; } } public class TlsSettings @@ -278,4 +280,9 @@ namespace Netch.Servers.Models public Header header { get; set; } } + + public class GrpcSettings + { + public string serviceName { get; set; } + } } \ No newline at end of file diff --git a/Netch/Servers/V2ray/Utils/V2rayConfigUtils.cs b/Netch/Servers/V2ray/Utils/V2rayConfigUtils.cs index 5ec34dfc..790cda26 100644 --- a/Netch/Servers/V2ray/Utils/V2rayConfigUtils.cs +++ b/Netch/Servers/V2ray/Utils/V2rayConfigUtils.cs @@ -310,6 +310,14 @@ namespace Netch.Servers.Utils streamSettings.quicSettings = quicSettings; break; + case "grpc": + var grpcSettings = new GrpcSettings + { + serviceName = server.GRPCServiceName + }; + + streamSettings.grpcSettings = grpcSettings; + break; default: if (server.FakeType == "http") { diff --git a/Netch/Servers/VLESS/VLESS.cs b/Netch/Servers/VLESS/VLESS.cs index 5464e826..8cb4468d 100644 --- a/Netch/Servers/VLESS/VLESS.cs +++ b/Netch/Servers/VLESS/VLESS.cs @@ -41,5 +41,7 @@ namespace Netch.Servers public static List TransferProtocols => VMessGlobal.TransferProtocols; public static List QUIC => VMessGlobal.QUIC; + + public static List GRPCModes => VMessGlobal.GRPCModes; } } \ No newline at end of file diff --git a/Netch/Servers/VLESS/VLESSForm/VLESSForm.cs b/Netch/Servers/VLESS/VLESSForm/VLESSForm.cs index f2f05d38..e82c1cd8 100644 --- a/Netch/Servers/VLESS/VLESSForm/VLESSForm.cs +++ b/Netch/Servers/VLESS/VLESSForm/VLESSForm.cs @@ -28,6 +28,8 @@ namespace Netch.Servers.VLESSForm CreateTextBox("Path", "Path", s => true, s => server.Path = s, server.Path); CreateComboBox("QUICSecurity", "QUIC Security", VLESSGlobal.QUIC, s => server.QUICSecure = s, server.QUICSecure); CreateTextBox("QUICSecret", "QUIC Secret", s => true, s => server.QUICSecret = s, server.QUICSecret); + CreateComboBox("GRPCMode", "GRPC Mode", VLESSGlobal.GRPCModes, s => server.GRPCMode = s, server.GRPCMode); + CreateTextBox("GRPCServiceName", "GRPC ServiceName", s => true, s => server.GRPCServiceName = s, server.GRPCServiceName); CreateComboBox("UseMux", "Use Mux", new List { "", "true", "false" }, diff --git a/Netch/Servers/VMess/Form/VMessForm.cs b/Netch/Servers/VMess/Form/VMessForm.cs index 9e133d97..041a0b27 100644 --- a/Netch/Servers/VMess/Form/VMessForm.cs +++ b/Netch/Servers/VMess/Form/VMessForm.cs @@ -23,6 +23,8 @@ namespace Netch.Servers.VMess.Form CreateTextBox("Path", "Path", s => true, s => server.Path = s, server.Path); CreateComboBox("QUICSecurity", "QUIC Security", VMessGlobal.QUIC, s => server.QUICSecure = s, server.QUICSecure); CreateTextBox("QUICSecret", "QUIC Secret", s => true, s => server.QUICSecret = s, server.QUICSecret); + CreateComboBox("GRPCMode", "GRPC Mode", VMessGlobal.GRPCModes, s => server.GRPCMode = s, server.GRPCMode); + CreateTextBox("GRPCServiceName", "GRPC ServiceName", s => true, s => server.GRPCServiceName = s, server.GRPCServiceName); CreateComboBox("UseMux", "Use Mux", new List { "", "true", "false" }, diff --git a/Netch/Servers/VMess/VMess.cs b/Netch/Servers/VMess/VMess.cs index 9e9f2743..76e2cbce 100644 --- a/Netch/Servers/VMess/VMess.cs +++ b/Netch/Servers/VMess/VMess.cs @@ -54,6 +54,16 @@ namespace Netch.Servers.VMess /// public string? QUICSecret { get; set; } = string.Empty; + /// + /// GRPC 服务名称 + /// + public string? GRPCServiceName { get; set; } + + /// + /// GRPC 模式 + /// + public string? GRPCMode { get; set; } = VMessGlobal.GRPCModes[0]; + /// /// TLS 底层传输安全 /// @@ -92,6 +102,12 @@ namespace Netch.Servers.VMess "chacha20-poly1305" }; + public static readonly List GRPCModes = new List() + { + "gun", + "multi" + }; + /// /// V2Ray 传输协议 /// @@ -101,7 +117,8 @@ namespace Netch.Servers.VMess "kcp", "ws", "h2", - "quic" + "quic", + "grpc" }; /// From 5ed3f8e0733cf6dc850aa222b5638fd9394d431a Mon Sep 17 00:00:00 2001 From: Shaojun Yang Date: Wed, 30 Jun 2021 11:12:39 +0800 Subject: [PATCH 2/2] Fix review issue --- Netch/Resources/zh-CN | 2 +- Netch/Servers/V2ray/Models/V2rayConfig.cs | 2 ++ Netch/Servers/V2ray/Models/V2rayNSharing.cs | 2 +- Netch/Servers/V2ray/Utils/V2rayConfigUtils.cs | 8 +++++++- Netch/Servers/V2ray/V2rayUtils.cs | 12 +++++++++++ Netch/Servers/VLESS/VLESS.cs | 2 -- Netch/Servers/VLESS/VLESSForm/VLESSForm.cs | 2 -- Netch/Servers/VMess/Form/VMessForm.cs | 2 -- Netch/Servers/VMess/VMess.cs | 20 +++---------------- 9 files changed, 26 insertions(+), 26 deletions(-) diff --git a/Netch/Resources/zh-CN b/Netch/Resources/zh-CN index 12a0eb6c..7e97dce7 100644 --- a/Netch/Resources/zh-CN +++ b/Netch/Resources/zh-CN @@ -48,7 +48,7 @@ "Transfer Protocol": "传输协议", "Fake Type": "伪装类型", "Host": "主机", - "Path": "路径", + "Path": "路径/服务名称", "QUIC Security": "QUIC 加密方式", "QUIC Secret": "QUIC 加密密钥", "GRPC Mode": "QUIC 模式", diff --git a/Netch/Servers/V2ray/Models/V2rayConfig.cs b/Netch/Servers/V2ray/Models/V2rayConfig.cs index e0c813c5..dd7827cd 100644 --- a/Netch/Servers/V2ray/Models/V2rayConfig.cs +++ b/Netch/Servers/V2ray/Models/V2rayConfig.cs @@ -284,5 +284,7 @@ namespace Netch.Servers.Models public class GrpcSettings { public string serviceName { get; set; } + + public bool multiMode { get; set; } } } \ No newline at end of file diff --git a/Netch/Servers/V2ray/Models/V2rayNSharing.cs b/Netch/Servers/V2ray/Models/V2rayNSharing.cs index 8a162e4f..a5af695a 100644 --- a/Netch/Servers/V2ray/Models/V2rayNSharing.cs +++ b/Netch/Servers/V2ray/Models/V2rayNSharing.cs @@ -31,7 +31,7 @@ public string net { get; set; } = string.Empty; /// - /// 伪装路径 + /// 伪装路径/服务名称 /// public string? path { get; set; } = string.Empty; diff --git a/Netch/Servers/V2ray/Utils/V2rayConfigUtils.cs b/Netch/Servers/V2ray/Utils/V2rayConfigUtils.cs index 790cda26..c668a42c 100644 --- a/Netch/Servers/V2ray/Utils/V2rayConfigUtils.cs +++ b/Netch/Servers/V2ray/Utils/V2rayConfigUtils.cs @@ -313,9 +313,15 @@ namespace Netch.Servers.Utils case "grpc": var grpcSettings = new GrpcSettings { - serviceName = server.GRPCServiceName + serviceName = server.Path, + multiMode = false }; + if (server.FakeType == "multi") + { + grpcSettings.multiMode = true; + } + streamSettings.grpcSettings = grpcSettings; break; default: diff --git a/Netch/Servers/V2ray/V2rayUtils.cs b/Netch/Servers/V2ray/V2rayUtils.cs index 4f2962b6..4f8b6636 100644 --- a/Netch/Servers/V2ray/V2rayUtils.cs +++ b/Netch/Servers/V2ray/V2rayUtils.cs @@ -47,6 +47,10 @@ namespace Netch.Servers server.QUICSecret = parameter.Get("key") ?? ""; server.FakeType = parameter.Get("headerType") ?? "none"; break; + case "grpc": + server.FakeType = parameter.Get("mode") ?? "gun"; + server.Path = parameter.Get("serviceName") ?? ""; + break; } server.TLSSecureType = parameter.Get("security") ?? "none"; @@ -115,6 +119,14 @@ namespace Netch.Servers if (server.FakeType != "none") parameter.Add("headerType", server.FakeType); + break; + case "grpc": + if (!string.IsNullOrEmpty(server.Path)) + parameter.Add("serviceName", server.Path); + + if (server.FakeType == "gun" || server.FakeType == "multi") + parameter.Add("mode", server.FakeType); + break; } diff --git a/Netch/Servers/VLESS/VLESS.cs b/Netch/Servers/VLESS/VLESS.cs index 8cb4468d..5464e826 100644 --- a/Netch/Servers/VLESS/VLESS.cs +++ b/Netch/Servers/VLESS/VLESS.cs @@ -41,7 +41,5 @@ namespace Netch.Servers public static List TransferProtocols => VMessGlobal.TransferProtocols; public static List QUIC => VMessGlobal.QUIC; - - public static List GRPCModes => VMessGlobal.GRPCModes; } } \ No newline at end of file diff --git a/Netch/Servers/VLESS/VLESSForm/VLESSForm.cs b/Netch/Servers/VLESS/VLESSForm/VLESSForm.cs index e82c1cd8..f2f05d38 100644 --- a/Netch/Servers/VLESS/VLESSForm/VLESSForm.cs +++ b/Netch/Servers/VLESS/VLESSForm/VLESSForm.cs @@ -28,8 +28,6 @@ namespace Netch.Servers.VLESSForm CreateTextBox("Path", "Path", s => true, s => server.Path = s, server.Path); CreateComboBox("QUICSecurity", "QUIC Security", VLESSGlobal.QUIC, s => server.QUICSecure = s, server.QUICSecure); CreateTextBox("QUICSecret", "QUIC Secret", s => true, s => server.QUICSecret = s, server.QUICSecret); - CreateComboBox("GRPCMode", "GRPC Mode", VLESSGlobal.GRPCModes, s => server.GRPCMode = s, server.GRPCMode); - CreateTextBox("GRPCServiceName", "GRPC ServiceName", s => true, s => server.GRPCServiceName = s, server.GRPCServiceName); CreateComboBox("UseMux", "Use Mux", new List { "", "true", "false" }, diff --git a/Netch/Servers/VMess/Form/VMessForm.cs b/Netch/Servers/VMess/Form/VMessForm.cs index 041a0b27..9e133d97 100644 --- a/Netch/Servers/VMess/Form/VMessForm.cs +++ b/Netch/Servers/VMess/Form/VMessForm.cs @@ -23,8 +23,6 @@ namespace Netch.Servers.VMess.Form CreateTextBox("Path", "Path", s => true, s => server.Path = s, server.Path); CreateComboBox("QUICSecurity", "QUIC Security", VMessGlobal.QUIC, s => server.QUICSecure = s, server.QUICSecure); CreateTextBox("QUICSecret", "QUIC Secret", s => true, s => server.QUICSecret = s, server.QUICSecret); - CreateComboBox("GRPCMode", "GRPC Mode", VMessGlobal.GRPCModes, s => server.GRPCMode = s, server.GRPCMode); - CreateTextBox("GRPCServiceName", "GRPC ServiceName", s => true, s => server.GRPCServiceName = s, server.GRPCServiceName); CreateComboBox("UseMux", "Use Mux", new List { "", "true", "false" }, diff --git a/Netch/Servers/VMess/VMess.cs b/Netch/Servers/VMess/VMess.cs index 76e2cbce..1e88f53b 100644 --- a/Netch/Servers/VMess/VMess.cs +++ b/Netch/Servers/VMess/VMess.cs @@ -54,16 +54,6 @@ namespace Netch.Servers.VMess /// public string? QUICSecret { get; set; } = string.Empty; - /// - /// GRPC 服务名称 - /// - public string? GRPCServiceName { get; set; } - - /// - /// GRPC 模式 - /// - public string? GRPCMode { get; set; } = VMessGlobal.GRPCModes[0]; - /// /// TLS 底层传输安全 /// @@ -102,12 +92,6 @@ namespace Netch.Servers.VMess "chacha20-poly1305" }; - public static readonly List GRPCModes = new List() - { - "gun", - "multi" - }; - /// /// V2Ray 传输协议 /// @@ -132,7 +116,9 @@ namespace Netch.Servers.VMess "utp", "wechat-video", "dtls", - "wireguard" + "wireguard", + "gun", + "multi" }; ///