From 6eee2c2342d6d626c6f4dd0053e888f4f240083e Mon Sep 17 00:00:00 2001 From: 2dust <31833384+2dust@users.noreply.github.com> Date: Thu, 29 Feb 2024 10:11:27 +0800 Subject: [PATCH] Add obfs=http support for sing-box ss --- v2rayN/v2rayN/Handler/CoreConfigSingbox.cs | 8 ++++++++ v2rayN/v2rayN/Handler/ShareHandler.cs | 6 +++--- v2rayN/v2rayN/Model/SingboxConfig.cs | 2 ++ 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/v2rayN/v2rayN/Handler/CoreConfigSingbox.cs b/v2rayN/v2rayN/Handler/CoreConfigSingbox.cs index 335582e8..c88d422e 100644 --- a/v2rayN/v2rayN/Handler/CoreConfigSingbox.cs +++ b/v2rayN/v2rayN/Handler/CoreConfigSingbox.cs @@ -238,6 +238,14 @@ namespace v2rayN.Handler outbound.method = LazyConfig.Instance.GetShadowsocksSecurities(node).Contains(node.security) ? node.security : Global.None; outbound.password = node.id; + if (node.network == Global.DefaultNetwork + && node.headerType == Global.TcpHeaderHttp + && node.requestHost.IsNullOrEmpty() == false) + { + outbound.plugin = "obfs-local"; + outbound.plugin_opts = $"obfs=http;obfs-host={node.requestHost};"; + } + GenOutboundMux(node, outbound); } else if (node.configType == EConfigType.Socks) diff --git a/v2rayN/v2rayN/Handler/ShareHandler.cs b/v2rayN/v2rayN/Handler/ShareHandler.cs index ba78a6c6..3704cce6 100644 --- a/v2rayN/v2rayN/Handler/ShareHandler.cs +++ b/v2rayN/v2rayN/Handler/ShareHandler.cs @@ -686,13 +686,13 @@ namespace v2rayN.Handler if (queryParameters["plugin"] != null) { //obfs-host exists - var obfsHost = queryParameters["plugin"].Split(';').FirstOrDefault(t => t.Contains("obfs-host")); + var obfsHost = queryParameters["plugin"]?.Split(';').FirstOrDefault(t => t.Contains("obfs-host")); if (queryParameters["plugin"].Contains("obfs=http") && !Utile.IsNullOrEmpty(obfsHost)) { - obfsHost = obfsHost.Replace("obfs-host=", ""); + obfsHost = obfsHost?.Replace("obfs-host=", ""); server.network = Global.DefaultNetwork; server.headerType = Global.TcpHeaderHttp; - server.requestHost = obfsHost; + server.requestHost = obfsHost ?? ""; } else { diff --git a/v2rayN/v2rayN/Model/SingboxConfig.cs b/v2rayN/v2rayN/Model/SingboxConfig.cs index 7f243e63..2e61918f 100644 --- a/v2rayN/v2rayN/Model/SingboxConfig.cs +++ b/v2rayN/v2rayN/Model/SingboxConfig.cs @@ -118,6 +118,8 @@ public string? peer_public_key { get; set; } public int[]? reserved { get; set; } public int? mtu { get; set; } + public string? plugin { get; set; } + public string? plugin_opts { get; set; } public Tls4Sbox tls { get; set; } public Multiplex4Sbox multiplex { get; set; } public Transport4Sbox transport { get; set; }