From 620ae43e998a4e52f62a1d1d0d9502f6dde73237 Mon Sep 17 00:00:00 2001 From: snltty Date: Wed, 11 Feb 2026 15:21:13 +0800 Subject: [PATCH] =?UTF-8?q?=E5=85=B3=E9=97=AD=E7=AB=AF=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- install-package/fpk/docker/cmd/main | 2 +- shells/version.txt | 2 +- src/linker.tunnel/transport/TransportMsQuic.cs | 4 ++-- src/linker.tunnel/transport/TransportTcpNutssb.cs | 11 ++++++----- src/linker.tunnel/transport/TransportUdpPortMap.cs | 1 + .../wanport/TunnelWanPortProtocolLinker.cs | 9 ++++----- 6 files changed, 15 insertions(+), 14 deletions(-) diff --git a/install-package/fpk/docker/cmd/main b/install-package/fpk/docker/cmd/main index dd4952cb..5b53e854 100644 --- a/install-package/fpk/docker/cmd/main +++ b/install-package/fpk/docker/cmd/main @@ -6,7 +6,7 @@ is_docker_running () { DOCKER_NAME="linker" if [ -f "$FILE_PATH" ]; then - DOCKER_NAME=$(cat $FILE_PATH | grep "linker" | awk -F ':' '{print $2}' | xargs) + DOCKER_NAME=$(cat $FILE_PATH | grep "container_name" | awk -F ':' '{print $2}' | xargs) echo "DOCKER_NAME is set to: $DOCKER_NAME" fi diff --git a/shells/version.txt b/shells/version.txt index 6eb29b93..04b4e234 100644 --- a/shells/version.txt +++ b/shells/version.txt @@ -1,5 +1,5 @@ v1.9.9 -2026-02-03 22:40:58 +2026-02-11 15:21:13 1. 一些累计更新,一些BUG修复 2. 国家级别的连接限制 3. 修复一些地方未能正确释放端口的问题 diff --git a/src/linker.tunnel/transport/TransportMsQuic.cs b/src/linker.tunnel/transport/TransportMsQuic.cs index 17d41f30..c564f43b 100644 --- a/src/linker.tunnel/transport/TransportMsQuic.cs +++ b/src/linker.tunnel/transport/TransportMsQuic.cs @@ -267,8 +267,8 @@ namespace linker.tunnel.transport } try { - remoteUdp?.Close(); - remoteUdp?.Close(); + remoteUdp?.SafeClose(); + remoteUdp?.SafeClose(); } catch (Exception) { diff --git a/src/linker.tunnel/transport/TransportTcpNutssb.cs b/src/linker.tunnel/transport/TransportTcpNutssb.cs index 17cffc7d..3120d697 100644 --- a/src/linker.tunnel/transport/TransportTcpNutssb.cs +++ b/src/linker.tunnel/transport/TransportTcpNutssb.cs @@ -166,13 +166,13 @@ namespace linker.tunnel.transport targetSocket.KeepAlive(); targetSocket.IPv6Only(ep.AddressFamily, false); - targetSocket.ReuseBind(new IPEndPoint(ep.AddressFamily == AddressFamily.InterNetwork ? IPAddress.Any : IPAddress.IPv6Any, tunnelTransportInfo.Local.Local.Port)); + targetSocket.ReuseBind(new IPEndPoint(ep.AddressFamily == AddressFamily.InterNetwork ? IPAddress.Any : IPAddress.IPv6Any, tunnelTransportInfo.Local.Local.Port)); if (LoggerHelper.Instance.LoggerLevel <= LoggerTypes.DEBUG) { LoggerHelper.Instance.Warning($"{Name} connect to {tunnelTransportInfo.Remote.MachineId}->{tunnelTransportInfo.Remote.MachineName} {ep}"); } - await targetSocket.ConnectAsync(ep,cts.Token).ConfigureAwait(false); + await targetSocket.ConnectAsync(ep, cts.Token).ConfigureAwait(false); //需要ssl SslStream sslStream = null; @@ -180,7 +180,8 @@ namespace linker.tunnel.transport { sslStream = new SslStream(new NetworkStream(targetSocket, false), false, ValidateServerCertificate, null); #pragma warning disable SYSLIB0039 // 类型或成员已过时 - await sslStream.AuthenticateAsClientAsync(new SslClientAuthenticationOptions { + await sslStream.AuthenticateAsClientAsync(new SslClientAuthenticationOptions + { EnabledSslProtocols = SslProtocols.Tls13 | SslProtocols.Tls12 | SslProtocols.Tls11 | SslProtocols.Tls, CertificateRevocationCheckMode = X509RevocationMode.NoCheck, ClientCertificates = new X509CertificateCollection { certificate } @@ -236,7 +237,7 @@ namespace linker.tunnel.transport } return null; }); - foreach (Socket item in sockets.Where(c => c != null && c.Connected == false)) + foreach (Socket item in sockets.Where(c => c != null)) { item.SafeClose(); } @@ -282,7 +283,7 @@ namespace linker.tunnel.transport return; } - sslStream = new SslStream(new NetworkStream(socket, false), false, ValidateServerCertificate,null); + sslStream = new SslStream(new NetworkStream(socket, false), false, ValidateServerCertificate, null); #pragma warning disable SYSLIB0039 // 类型或成员已过时 await sslStream.AuthenticateAsServerAsync(certificate, OperatingSystem.IsAndroid(), SslProtocols.Tls13 | SslProtocols.Tls12 | SslProtocols.Tls11 | SslProtocols.Tls, false).ConfigureAwait(false); #pragma warning restore SYSLIB0039 // 类型或成员已过时 diff --git a/src/linker.tunnel/transport/TransportUdpPortMap.cs b/src/linker.tunnel/transport/TransportUdpPortMap.cs index bc6057d0..4b891478 100644 --- a/src/linker.tunnel/transport/TransportUdpPortMap.cs +++ b/src/linker.tunnel/transport/TransportUdpPortMap.cs @@ -145,6 +145,7 @@ namespace linker.tunnel.transport } catch (Exception ex) { + socket.SafeClose(); if (LoggerHelper.Instance.LoggerLevel <= LoggerTypes.DEBUG) { LoggerHelper.Instance.Error(ex); diff --git a/src/linker.tunnel/wanport/TunnelWanPortProtocolLinker.cs b/src/linker.tunnel/wanport/TunnelWanPortProtocolLinker.cs index 08452bd0..35e21a11 100644 --- a/src/linker.tunnel/wanport/TunnelWanPortProtocolLinker.cs +++ b/src/linker.tunnel/wanport/TunnelWanPortProtocolLinker.cs @@ -113,18 +113,16 @@ namespace linker.tunnel.wanport { byte[] buffer = ArrayPool.Shared.Rent(1024); using CancellationTokenSource cts = new CancellationTokenSource(5000); + Socket socket = new Socket(server.AddressFamily, SocketType.Stream, System.Net.Sockets.ProtocolType.Tcp); + socket.ReuseBind(new IPEndPoint(IPAddress.Any, 0)); try { - Socket socket = new Socket(server.AddressFamily, SocketType.Stream, System.Net.Sockets.ProtocolType.Tcp); - socket.ReuseBind(new IPEndPoint(IPAddress.Any, 0)); await socket.ConnectAsync(server, cts.Token).ConfigureAwait(false); - await socket.SendAsync(BuildSendData(buffer, (byte)new Random().Next(0, 255))).ConfigureAwait(false); int length = await socket.ReceiveAsync(buffer.AsMemory(), SocketFlags.None, cts.Token).ConfigureAwait(false); IPEndPoint localEP = socket.LocalEndPoint as IPEndPoint; - socket.Close(); - + return new TunnelWanPortEndPoint { Local = localEP, Remote = UnpackRecvData(buffer, length) }; } catch (Exception ex) @@ -134,6 +132,7 @@ namespace linker.tunnel.wanport } finally { + socket.SafeClose(); ArrayPool.Shared.Return(buffer); }