private static void StartHttpsServer(ServerConfig serverConfig) { try { foreach (var port in serverConfig.port_list) { var server = new HttpsServer(new ServerOption() { Ip = "Any", Port = port, ProtocolType = ProtocolType.Tcp, BackLog = 100, NoDelay = true, Security = serverConfig.is_ssl ? SslProtocols.Tls12 : SslProtocols.None, SslServerAuthenticationOptions = serverConfig.is_ssl ? new SslServerAuthenticationOptions { EnabledSslProtocols = SslProtocols.Tls12, ServerCertificate = new X509Certificate2(string.IsNullOrEmpty(serverConfig.certfile) ? GlobalConfig.CertFile : serverConfig.certfile, string.IsNullOrEmpty(serverConfig.certpwd) ? GlobalConfig.CertPassword : serverConfig.certpwd) } : null }) { NATServer = NATServer }; _ = server.StartAsync(); HttpsServerList.Add(server); } HandleLog.WriteLine($"{serverConfig.protocol}服务启动成功,监听端口:{serverConfig.port}"); } catch (Exception ex) { HandleLog.WriteLine($"{serverConfig.protocol}服务初始化失败,端口:{serverConfig.port},{ex}"); } }
private static void Received(NatSession session, NatRequestInfo requestInfo) { Task.Run(() => { try { //HandleLog.WriteLine($"NAT服务收到数据:{requestInfo.Raw.ToHexWithSpace()},正文内容: {requestInfo.Body.ToJson()}"); switch (requestInfo.Body.Type) { case (byte)JsonType.NAT: { NATServer.ProcessData(session, requestInfo); break; } case (byte)JsonType.HTTP: { var httpModel = requestInfo.Body.Data.FromJson <HttpModel>(); var server = HttpsServerList.Find(c => c.ServerId == httpModel.ServerId); server?.ProcessData(session, requestInfo, httpModel); break; } case (byte)JsonType.TCP: { var tcpModel = requestInfo.Body.Data.FromJson <TcpModel>(); var server = TcpServerList.Find(c => c.ServerId == tcpModel.ServerId); server?.ProcessData(session, requestInfo, tcpModel); break; } } } catch (Exception ex) { HandleLog.WriteLine($"穿透传输连接【{session.Remote},{session.Client?.name}】响应请求异常:{ex}"); } }); }