diff --git a/src/linker.messenger.sforward/messenger/SForwardMessenger.cs b/src/linker.messenger.sforward/messenger/SForwardMessenger.cs index f9e15f3c..0c76806e 100644 --- a/src/linker.messenger.sforward/messenger/SForwardMessenger.cs +++ b/src/linker.messenger.sforward/messenger/SForwardMessenger.cs @@ -183,6 +183,7 @@ namespace linker.plugins.sforward.messenger else { sForwardServerCahing.TryRemove(sForwardAddInfo.Domain, connection.Id, out _); + proxy.StopHttp(sForwardAddInfo.Domain); result.Message = $"domain 【{sForwardAddInfo.Domain}】 remove success"; } diff --git a/src/linker.messenger.sforward/proxy/SForwardProxyTcp.cs b/src/linker.messenger.sforward/proxy/SForwardProxyTcp.cs index 356240e8..f0d4f52d 100644 --- a/src/linker.messenger.sforward/proxy/SForwardProxyTcp.cs +++ b/src/linker.messenger.sforward/proxy/SForwardProxyTcp.cs @@ -11,6 +11,7 @@ namespace linker.plugins.sforward.proxy { private ConcurrentDictionary tcpListens = new ConcurrentDictionary(); private ConcurrentDictionary> tcpConnections = new ConcurrentDictionary>(); + private ConcurrentDictionary httpConnections = new ConcurrentDictionary(); public Func> TunnelConnect { get; set; } = async (port, id) => { return await Task.FromResult(false).ConfigureAwait(false); }; public Func> WebConnect { get; set; } = async (host, port, id) => { return await Task.FromResult(false).ConfigureAwait(false); }; @@ -120,10 +121,11 @@ namespace linker.plugins.sforward.proxy return; } string key = token.ListenPort.ToString(); + //是web的,去获取host请求头,匹配不同的服务 if (token.IsWeb) { - + httpConnections.TryAdd(id, token); key = token.Host = GetHost(buffer1.AsMemory(0, length)); if (string.IsNullOrWhiteSpace(token.Host)) { @@ -179,7 +181,7 @@ namespace linker.plugins.sforward.proxy finally { tcpConnections.TryRemove(id, out _); - + httpConnections.TryRemove(id, out _); } } @@ -203,6 +205,18 @@ namespace linker.plugins.sforward.proxy CloseClientSocket(userToken); } } + public void StopHttp(string host) + { + foreach (var item in httpConnections.Where(c=>c.Value.Host == host).Select(c=>c.Key).ToList()) + { + if (httpConnections.TryRemove(item,out var token)) + { + CloseClientSocket(token); + } + } + } + + private readonly byte[] hostBytes = Encoding.UTF8.GetBytes("Host: "); private readonly byte[] wrapBytes = Encoding.UTF8.GetBytes("\r\n"); diff --git a/version.txt b/version.txt index 99001506..a372e344 100644 --- a/version.txt +++ b/version.txt @@ -1,5 +1,5 @@ v1.8.7 -2025-07-16 23:40:39 +2025-07-17 01:00:22 1. 一些累计更新 2. 暗色模式 3. 服务器穿透白名单、匿名连接