mirror of
https://github.com/FastTunnel/FastTunnel.git
synced 2025-02-08 02:39:29 +08:00
对https支持 优化客户端离线的检查
This commit is contained in:
parent
86a0a990e8
commit
917a1ed96d
|
@ -1,6 +1,5 @@
|
|||
<Project>
|
||||
<PropertyGroup>
|
||||
<Version>2.0.1</Version>
|
||||
<Nullable>enable</Nullable>
|
||||
<TargetFramework>net5.0</TargetFramework>
|
||||
</PropertyGroup>
|
||||
|
|
|
@ -10,8 +10,10 @@
|
|||
"EnableFileLog": false,
|
||||
"ClientSettings": {
|
||||
"Server": {
|
||||
// 与服务端通讯协议
|
||||
"Protocol": "ws", // ws(http)或wss(https)
|
||||
// 服务端ip/域名
|
||||
"ServerAddr": "127.0.0.1",
|
||||
"ServerAddr": "test.cc",
|
||||
// 服务端监听的通信端口
|
||||
"ServerPort": 1270
|
||||
},
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<Version>2.0.1</Version>
|
||||
<PackageProjectUrl>https://github.com/SpringHgui/FastTunnel</PackageProjectUrl>
|
||||
<PackageLicenseExpression>MIT</PackageLicenseExpression>
|
||||
<Copyright>FastTunnel</Copyright>
|
||||
|
|
|
@ -9,9 +9,11 @@ using System.Collections.Generic;
|
|||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Net.Http;
|
||||
using System.Net.WebSockets;
|
||||
using System.Text;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using System.Xml.Linq;
|
||||
using Yarp.ReverseProxy.Forwarder;
|
||||
|
||||
namespace FastTunnel.Core.Forwarder
|
||||
|
@ -75,13 +77,10 @@ namespace FastTunnel.Core.Forwarder
|
|||
var res = await tcs.Task;
|
||||
return res;
|
||||
}
|
||||
catch (Exception ex)
|
||||
catch (WebSocketException)
|
||||
{
|
||||
_logger.LogError(ex, "proxyAsync Error");
|
||||
|
||||
// 移除
|
||||
_fastTunnelServer.WebList.TryRemove(host, out _);
|
||||
throw;
|
||||
// 通讯异常,返回客户端离线
|
||||
return await OfflinePage(host, context);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -59,5 +59,21 @@ namespace FastTunnel.Core.Forwarder
|
|||
Console.Write(Encoding.UTF8.GetString(buffer, offset, count));
|
||||
complete = true;
|
||||
}
|
||||
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if (!disposing)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
m_Stream.Dispose();
|
||||
}
|
||||
|
||||
public override ValueTask DisposeAsync()
|
||||
{
|
||||
Dispose(true);
|
||||
return ValueTask.CompletedTask;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -16,6 +16,8 @@ using FastTunnel.Core.Forwarder;
|
|||
using Microsoft;
|
||||
using Microsoft.AspNetCore.DataProtection;
|
||||
using System.Data.Common;
|
||||
using Microsoft.AspNetCore.Hosting.Server;
|
||||
using System.Net.Security;
|
||||
|
||||
namespace FastTunnel.Core.Handlers.Client
|
||||
{
|
||||
|
@ -62,13 +64,18 @@ namespace FastTunnel.Core.Handlers.Client
|
|||
{
|
||||
var connecter = new DnsSocket(cleint.Server.ServerAddr, cleint.Server.ServerPort);
|
||||
await connecter.ConnectAsync();
|
||||
Stream serverStream = new NetworkStream(connecter.Socket, true);
|
||||
if (cleint.Server.Protocol == "wss")
|
||||
{
|
||||
var sslStream = new SslStream(serverStream, false, delegate { return true; });
|
||||
await sslStream.AuthenticateAsClientAsync(cleint.Server.ServerAddr);
|
||||
serverStream = sslStream;
|
||||
}
|
||||
|
||||
Stream serverConn = new NetworkStream(connecter.Socket, true);
|
||||
var reverse = $"PROXY /{requestId} HTTP/1.1\r\nHost: {cleint.Server.ServerAddr}:{cleint.Server.ServerPort}\r\n\r\n";
|
||||
|
||||
var requestMsg = Encoding.ASCII.GetBytes(reverse);
|
||||
await serverConn.WriteAsync(requestMsg, cancellationToken);
|
||||
return serverConn;
|
||||
var requestMsg = Encoding.UTF8.GetBytes(reverse);
|
||||
await serverStream.WriteAsync(requestMsg, cancellationToken);
|
||||
return serverStream;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
}
|
||||
},
|
||||
"AllowedHosts": "*",
|
||||
"urls": "http://*:1270;", // Http&客户端通讯端口
|
||||
"urls": "http://*:1270;https://*:4443;", // Http&客户端通讯端口
|
||||
"EnableFileLog": false,
|
||||
"ServerSettings": {
|
||||
// 绑定的根域名
|
||||
|
|
Loading…
Reference in New Issue
Block a user