对https支持 优化客户端离线的检查

This commit is contained in:
SpringHgui 2021-08-25 00:04:58 +08:00
parent 86a0a990e8
commit 917a1ed96d
7 changed files with 38 additions and 14 deletions

View File

@ -1,6 +1,5 @@
<Project>
<PropertyGroup>
<Version>2.0.1</Version>
<Nullable>enable</Nullable>
<TargetFramework>net5.0</TargetFramework>
</PropertyGroup>

View File

@ -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
},

View File

@ -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>

View File

@ -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);
}
}

View File

@ -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;
}
}
}

View File

@ -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;
}
}
}

View File

@ -8,7 +8,7 @@
}
},
"AllowedHosts": "*",
"urls": "http://*:1270;", // Http&
"urls": "http://*:1270;https://*:4443;", // Http&
"EnableFileLog": false,
"ServerSettings": {
//