diff --git a/ProxySU_Core/Models/AppSettings.cs b/ProxySU_Core/Models/AppSettings.cs new file mode 100644 index 0000000..0b42488 --- /dev/null +++ b/ProxySU_Core/Models/AppSettings.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ProxySU_Core.Models +{ + public class AppSettings + { + public string Language { get; set; } + } +} diff --git a/ProxySU_Core/Models/Developers/ConfigBuilder.cs b/ProxySU_Core/Models/Developers/ConfigBuilder.cs index fdd6425..66e5b6f 100644 --- a/ProxySU_Core/Models/Developers/ConfigBuilder.cs +++ b/ProxySU_Core/Models/Developers/ConfigBuilder.cs @@ -25,20 +25,20 @@ namespace ProxySU_Core.Models.Developers private const string ServerReverseDir = @"Templates\xray\server\09_reverse"; private const string CaddyFileDir = @"Templates\xray\caddy"; - public const int VLESS_TCP_Port = 1110; - public const int VLESS_WS_Port = 1111; - public const int VLESS_H2_Port = 1112; - public const int VLESS_mKCP_Port = 1113; + public static int VLESS_TCP_Port = 1110; + public static int VLESS_WS_Port = 1111; + public static int VLESS_H2_Port = 1112; + public static int VLESS_mKCP_Port = 1113; - public const int VMESS_TCP_Port = 2110; - public const int VMESS_WS_Port = 2111; - public const int VMESS_H2_Port = 2112; - public const int VMESS_mKCP_Port = 2113; + public static int VMESS_TCP_Port = 1210; + public static int VMESS_WS_Port = 1211; + public static int VMESS_H2_Port = 1212; - public const int Trojan_TCP_Port = 3110; - public const int Trojan_WS_Port = 3111; + public static int Trojan_TCP_Port = 1310; + public static int Trojan_WS_Port = 1311; + + public static int FullbackPort = 8080; - public const int ShadowSocksPort = 4110; public static dynamic LoadXrayConfig() @@ -73,6 +73,8 @@ namespace ProxySU_Core.Models.Developers { var caddyStr = File.ReadAllText(Path.Combine(CaddyFileDir, "base.caddyfile")); caddyStr = caddyStr.Replace("##domain##", parameters.Domain); + caddyStr = caddyStr.Replace("##port##", FullbackPort.ToString()); + if (!useCustomWeb && !string.IsNullOrEmpty(parameters.MaskDomain)) { var prefix = "http://"; @@ -101,7 +103,7 @@ namespace ProxySU_Core.Models.Developers baseBound.port = parameters.Port; baseBound.settings.fallbacks.Add(JToken.FromObject(new { - dest = 80 + dest = FullbackPort })); xrayConfig.inbounds.Add(baseBound); baseBound.settings.clients[0].id = parameters.UUID; @@ -121,6 +123,25 @@ namespace ProxySU_Core.Models.Developers xrayConfig.inbounds.Add(JToken.FromObject(wsInbound)); } + if (parameters.Types.Contains(XrayType.VLESS_gRPC)) + { + var gRPCInBound = GetBound("VLESS_gRPC.json"); + gRPCInBound.port = parameters.VLESS_gRPC_Port; + gRPCInBound.settings.clients[0].id = parameters.UUID; + gRPCInBound.streamSettings.grpcSettings.serviceName = parameters.VLESS_gRPC_ServiceName; + xrayConfig.inbounds.Add(JToken.FromObject(gRPCInBound)); + } + + if (parameters.Types.Contains(XrayType.VLESS_KCP)) + { + var kcpBound = GetBound("VLESS_KCP.json"); + kcpBound.port = parameters.VLESS_KCP_Port; + kcpBound.settings.clients[0].id = parameters.UUID; + kcpBound.streamSettings.kcpSettings.header.type = parameters.VLESS_KCP_Type; + kcpBound.streamSettings.kcpSettings.seed = parameters.VLESS_KCP_Seed; + xrayConfig.inbounds.Add(JToken.FromObject(kcpBound)); + } + if (parameters.Types.Contains(XrayType.VMESS_TCP)) { var mtcpBound = GetBound("VMESS_TCP.json"); @@ -151,11 +172,22 @@ namespace ProxySU_Core.Models.Developers xrayConfig.inbounds.Add(JToken.FromObject(mwsBound)); } + if (parameters.Types.Contains(XrayType.VMESS_KCP)) + { + var kcpBound = GetBound("VMESS_KCP.json"); + kcpBound.port = parameters.VMESS_KCP_Port; + kcpBound.settings.clients[0].id = parameters.UUID; + kcpBound.streamSettings.kcpSettings.header.type = parameters.VMESS_KCP_Type; + kcpBound.streamSettings.kcpSettings.seed = parameters.VMESS_KCP_Seed; + xrayConfig.inbounds.Add(JToken.FromObject(kcpBound)); + } + if (parameters.Types.Contains(XrayType.Trojan_TCP)) { var trojanTcpBound = GetBound("Trojan_TCP.json"); trojanTcpBound.port = Trojan_TCP_Port; trojanTcpBound.settings.clients[0].password = parameters.TrojanPassword; + trojanTcpBound.settings.fallbacks[0].dest = FullbackPort; baseBound.settings.fallbacks[0] = JToken.FromObject(new { dest = Trojan_TCP_Port, @@ -164,21 +196,11 @@ namespace ProxySU_Core.Models.Developers xrayConfig.inbounds.Add(JToken.FromObject(trojanTcpBound)); } - if (parameters.Types.Contains(XrayType.VMESS_KCP)) - { - var kcpBound = GetBound("VMESS_KCP.json"); - kcpBound.port = VMESS_mKCP_Port; - kcpBound.settings.clients[0].id = parameters.UUID; - kcpBound.streamSettings.kcpSettings.header.type = parameters.VMESS_KCP_Type; - kcpBound.streamSettings.kcpSettings.seed = parameters.VMESS_KCP_Seed; - xrayConfig.inbounds.Add(JToken.FromObject(kcpBound)); - } - if (parameters.Types.Contains(XrayType.ShadowsocksAEAD)) { var ssBound = GetBound("Shadowsocks-AEAD.json"); - ssBound.port = ShadowSocksPort; + ssBound.port = parameters.ShadowSocksPort; ssBound.settings.clients[0].password = parameters.ShadowsocksPassword; ssBound.settings.clients[0].method = parameters.ShadowsocksMethod; xrayConfig.inbounds.Add(JToken.FromObject(ssBound)); diff --git a/ProxySU_Core/Models/Developers/IParameters.cs b/ProxySU_Core/Models/Developers/IParameters.cs index e532214..194ef7d 100644 --- a/ProxySU_Core/Models/Developers/IParameters.cs +++ b/ProxySU_Core/Models/Developers/IParameters.cs @@ -8,6 +8,14 @@ namespace ProxySU_Core.Models.Developers { int Port { get; set; } + int VLESS_gRPC_Port { get; set; } + + int VLESS_KCP_Port { get; set; } + + int VMESS_KCP_Port { get; set; } + + int ShadowSocksPort { get; set; } + string Domain { get; set; } List Types { get; set; } diff --git a/ProxySU_Core/Models/Developers/Project.cs b/ProxySU_Core/Models/Developers/Project.cs index 7f23b83..3075ec8 100644 --- a/ProxySU_Core/Models/Developers/Project.cs +++ b/ProxySU_Core/Models/Developers/Project.cs @@ -308,12 +308,22 @@ namespace ProxySU_Core.Models.Developers if (Parameters.Types.Contains(XrayType.ShadowsocksAEAD)) { - portList.Add(ConfigBuilder.ShadowSocksPort); + portList.Add(Parameters.ShadowSocksPort); } if (Parameters.Types.Contains(XrayType.VMESS_KCP)) { - portList.Add(ConfigBuilder.VMESS_mKCP_Port); + portList.Add(Parameters.VMESS_KCP_Port); + } + + if (Parameters.Types.Contains(XrayType.VLESS_KCP)) + { + portList.Add(Parameters.VLESS_KCP_Port); + } + + if (Parameters.Types.Contains(XrayType.VLESS_gRPC)) + { + portList.Add(Parameters.VLESS_gRPC_Port); } OpenPort(portList.ToArray()); @@ -400,6 +410,7 @@ namespace ProxySU_Core.Models.Developers RunCmd("curl -o caddy_install.sh https://raw.githubusercontent.com/proxysu/shellscript/master/Caddy-Naive/caddy-naive-install.sh"); RunCmd("yes | bash caddy_install.sh"); RunCmd("rm -rf caddy_install.sh"); + RunCmd("systemctl enable caddy.service"); } protected void UninstallCaddy() @@ -468,7 +479,7 @@ namespace ProxySU_Core.Models.Developers return true; } - public void ConfigurePort(bool force = true) + public void ConfigurePort() { if (Parameters.Port == 80 || Parameters.Port == 443) { @@ -480,6 +491,9 @@ namespace ProxySU_Core.Models.Developers SetPortFree(80); SetPortFree(443); SetPortFree(Parameters.Port); + SetPortFree(Parameters.VLESS_gRPC_Port); + SetPortFree(Parameters.VLESS_KCP_Port); + SetPortFree(Parameters.ShadowSocksPort); } } diff --git a/ProxySU_Core/Models/Developers/XrayProject.cs b/ProxySU_Core/Models/Developers/XrayProject.cs index 98a550e..482ac4b 100644 --- a/ProxySU_Core/Models/Developers/XrayProject.cs +++ b/ProxySU_Core/Models/Developers/XrayProject.cs @@ -87,7 +87,6 @@ namespace ProxySU_Core.Models.Developers WriteOutput("启动BBR"); EnableBBR(); - WriteOutput("BBR启动成功"); UploadCaddyFile(); WriteOutput("************"); @@ -102,7 +101,7 @@ namespace ProxySU_Core.Models.Developers } } - public void Uninstall() + public void UninstallProxy() { EnsureRootAuth(); WriteOutput("卸载Caddy"); @@ -112,7 +111,7 @@ namespace ProxySU_Core.Models.Developers WriteOutput("卸载证书"); UninstallAcme(); WriteOutput("关闭端口"); - ClosePort(ConfigBuilder.ShadowSocksPort, ConfigBuilder.VLESS_mKCP_Port, ConfigBuilder.VMESS_mKCP_Port); + ClosePort(Parameters.ShadowSocksPort, Parameters.VMESS_KCP_Port); WriteOutput("************ 卸载完成 ************"); } @@ -141,6 +140,8 @@ namespace ProxySU_Core.Models.Developers var stream = new MemoryStream(Encoding.UTF8.GetBytes(configJson)); RunCmd("rm -rf /usr/local/etc/xray/config.json"); UploadFile(stream, "/usr/local/etc/xray/config.json"); + ConfigurePort(); + UploadCaddyFile(string.IsNullOrEmpty(Parameters.MaskDomain)); RunCmd("systemctl restart xray"); WriteOutput("************ 更新Xray配置成功,更新配置不包含域名,如果域名更换请重新安装。 ************"); } @@ -148,13 +149,11 @@ namespace ProxySU_Core.Models.Developers /// /// 重装Caddy /// - public void ReinstallCaddy() + public void DoUninstallCaddy() { EnsureRootAuth(); - EnsureSystemEnv(); - InstallCaddy(); - UploadCaddyFile(); - WriteOutput("************ 重装Caddy完成 ************"); + UninstallCaddy(); + WriteOutput("************ 卸载Caddy完成 ************"); } /// @@ -268,6 +267,7 @@ namespace ProxySU_Core.Models.Developers { RemoveNat64(); } + WriteOutput("BBR启动成功"); } if (!canInstallBBR) @@ -382,14 +382,14 @@ namespace ProxySU_Core.Models.Developers result = RunCmd(cmd); } - if (result.Contains("Cert success")) + if (result.Contains("success")) { WriteOutput("申请证书成功"); } else { - WriteOutput("申请证书失败,请联系开发者!"); - throw new Exception("申请证书失败,请联系开发者!"); + WriteOutput("申请证书失败,如果申请次数过多请更换二级域名,或联系开发者!"); + throw new Exception("申请证书失败,如果申请次数过多请更换二级域名,或联系开发者!"); } // 安装证书到xray diff --git a/ProxySU_Core/Models/ShareLink.cs b/ProxySU_Core/Models/ShareLink.cs index 13a33be..8c606a4 100644 --- a/ProxySU_Core/Models/ShareLink.cs +++ b/ProxySU_Core/Models/ShareLink.cs @@ -20,6 +20,8 @@ namespace ProxySU_Core.Models case XrayType.VLESS_TCP: case XrayType.VLESS_TCP_XTLS: case XrayType.VLESS_WS: + case XrayType.VLESS_KCP: + case XrayType.VLESS_gRPC: case XrayType.Trojan_TCP: return BuildVlessShareLink(xrayType, settings); case XrayType.VMESS_TCP: @@ -38,10 +40,10 @@ namespace ProxySU_Core.Models var _method = settings.ShadowsocksMethod; var _password = settings.ShadowsocksPassword; var _server = settings.Domain; - var _port = ConfigBuilder.ShadowSocksPort; + var _port = settings.ShadowSocksPort; var base64URL = Base64.Encode($"{_method}:{_password}@{_server}:{_port}"); - return "ss://" + base64URL; + return "ss://" + base64URL + "#ShadowSocks"; } private static string BuildVmessShareLink(XrayType xrayType, XraySettings settings) @@ -77,7 +79,7 @@ namespace ProxySU_Core.Models break; case XrayType.VMESS_KCP: vmess.ps = "vmess-mKCP"; - vmess.port = ConfigBuilder.VMESS_mKCP_Port.ToString(); + vmess.port = settings.VMESS_KCP_Port.ToString(); vmess.net = "kcp"; vmess.type = settings.VMESS_KCP_Type; vmess.path = settings.VMESS_KCP_Seed; @@ -98,47 +100,47 @@ namespace ProxySU_Core.Models var _domain = settings.Domain; var _port = settings.Port; var _type = string.Empty; - var _encryption = string.Empty; + var _encryption = "none"; var _security = "tls"; var _path = "/"; var _host = settings.Domain; var _descriptiveText = string.Empty; + var _headerType = "none"; + var _seed = string.Empty; switch (xrayType) { case XrayType.VLESS_TCP: _protocol = "vless"; _type = "tcp"; - _encryption = "none"; _descriptiveText = "vless-tcp-tls"; break; case XrayType.VLESS_TCP_XTLS: _protocol = "vless"; _type = "tcp"; _security = "xtls"; - _encryption = "none"; _descriptiveText = "vless-tcp-xtls"; break; case XrayType.VLESS_WS: _protocol = "vless"; _type = "ws"; _path = settings.VLESS_WS_Path; - _encryption = "none"; _descriptiveText = "vless-ws-tls"; break; - case XrayType.VMESS_TCP: - _protocol = "vmess"; - _type = "tcp"; - _path = settings.VMESS_TCP_Path; - _encryption = "auto"; - _descriptiveText = "vmess-tcp-tls"; + case XrayType.VLESS_KCP: + _protocol = "vless"; + _type = "kcp"; + _headerType = settings.VLESS_KCP_Type; + _seed = settings.VLESS_KCP_Seed; + _port = settings.VLESS_KCP_Port; + _security = "none"; + _descriptiveText = "vless-mKCP"; break; - case XrayType.VMESS_WS: - _protocol = "vmess"; - _type = "ws"; - _path = settings.VMESS_WS_Path; - _encryption = "auto"; - _descriptiveText = "vmess-ws-tls"; + case XrayType.VLESS_gRPC: + _protocol = "vless"; + _type = "grpc"; + _path = settings.VLESS_gRPC_ServiceName; + _descriptiveText = "vless-gRPC"; break; case XrayType.Trojan_TCP: _protocol = "trojan"; @@ -154,11 +156,13 @@ namespace ProxySU_Core.Models if (xrayType != XrayType.Trojan_TCP) { // 4.3 传输层相关段 - parametersURL = $"?type={_type}&encryption={_encryption}&security={_security}&host={_host}&path={HttpUtility.UrlEncode(_path)}"; + parametersURL = $"?type={_type}&encryption={_encryption}&security={_security}&path={HttpUtility.UrlEncode(_path)}&headerType={_headerType}"; - - // if mKCP - // if QUIC + // kcp + if (xrayType == XrayType.VLESS_KCP) + { + parametersURL += $"&seed={_seed}"; + } // 4.4 TLS 相关段 if (xrayType == XrayType.VLESS_TCP_XTLS) diff --git a/ProxySU_Core/Models/XraySettings.cs b/ProxySU_Core/Models/XraySettings.cs index fcea1fb..ed0efba 100644 --- a/ProxySU_Core/Models/XraySettings.cs +++ b/ProxySU_Core/Models/XraySettings.cs @@ -17,11 +17,19 @@ namespace ProxySU_Core.Models { var guid = Guid.NewGuid().ToString(); Port = 443; + VLESS_KCP_Port = 2001; + VLESS_gRPC_Port = 2002; + VMESS_KCP_Port = 3001; + ShadowSocksPort = 4001; + UUID = guid; Types = new List(); VLESS_WS_Path = "/vlessws"; VLESS_H2_Path = "/vlessh2"; + VLESS_KCP_Type = "none"; + VLESS_KCP_Seed = guid; + VLESS_gRPC_ServiceName = "xray_gRPC"; VMESS_WS_Path = "/vmessws"; VMESS_TCP_Path = "/vmesstcp"; @@ -41,12 +49,15 @@ namespace ProxySU_Core.Models /// public int Port { get; set; } + /// /// UUID /// public string UUID { get; set; } #region vless + + /// /// vless ws路径 /// @@ -56,6 +67,32 @@ namespace ProxySU_Core.Models /// vless http2 path /// public string VLESS_H2_Path { get; set; } + + /// + /// vless kcp seed + /// + public string VLESS_KCP_Seed { get; set; } + + /// + /// vless kcp type + /// + public string VLESS_KCP_Type { get; set; } + + /// + /// vless kcp端口 + /// + public int VLESS_KCP_Port { get; set; } + + /// + /// grpc service name + /// + public string VLESS_gRPC_ServiceName { get; set; } + + /// + /// grpc port + /// + public int VLESS_gRPC_Port { get; set; } + #endregion #region vmess @@ -83,6 +120,11 @@ namespace ProxySU_Core.Models /// vmess kcp type /// public string VMESS_KCP_Type { get; set; } + + /// + /// vmess kcp端口 + /// + public int VMESS_KCP_Port { get; set; } #endregion #region Trojan @@ -107,6 +149,11 @@ namespace ProxySU_Core.Models /// ss method /// public string ShadowsocksMethod { get; set; } + + /// + /// ss端口 + /// + public int ShadowSocksPort { get; set; } #endregion @@ -157,28 +204,4 @@ namespace ProxySU_Core.Models } - public enum XrayType - { - // 入口 - VLESS_TCP_XTLS = 100, - - // vless 101开头 - VLESS_TCP = 101, - VLESS_WS = 102, - VLESS_H2 = 103, - VLESS_KCP = 104, - - // vmess 201开头 - VMESS_TCP = 201, - VMESS_WS = 202, - VMESS_H2 = 203, - VMESS_KCP = 204, - - // trojan 301开头 - Trojan_TCP = 301, - Trojan_WS = 302, - - // ss - ShadowsocksAEAD = 401 - } } diff --git a/ProxySU_Core/Models/XrayType.cs b/ProxySU_Core/Models/XrayType.cs new file mode 100644 index 0000000..6611113 --- /dev/null +++ b/ProxySU_Core/Models/XrayType.cs @@ -0,0 +1,34 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ProxySU_Core.Models +{ + public enum XrayType + { + // 入口 + VLESS_TCP_XTLS = 100, + + // VLESS 101开头 + VLESS_TCP = 101, + VLESS_WS = 102, + VLESS_H2 = 103, + VLESS_KCP = 104, + VLESS_gRPC = 110, + + // VMESS 201开头 + VMESS_TCP = 201, + VMESS_WS = 202, + VMESS_H2 = 203, + VMESS_KCP = 204, + + // Trojan 301开头 + Trojan_TCP = 301, + Trojan_WS = 302, + + // SS + ShadowsocksAEAD = 401 + } +} diff --git a/ProxySU_Core/Properties/AssemblyInfo.cs b/ProxySU_Core/Properties/AssemblyInfo.cs index 52079d5..2107e9b 100644 --- a/ProxySU_Core/Properties/AssemblyInfo.cs +++ b/ProxySU_Core/Properties/AssemblyInfo.cs @@ -51,5 +51,5 @@ using System.Windows; //可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值 //通过使用 "*",如下所示: // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("3.1.0.0")] -[assembly: AssemblyFileVersion("3.1.0.0")] +[assembly: AssemblyVersion("3.1.3.0")] +[assembly: AssemblyFileVersion("3.1.3.0")] diff --git a/ProxySU_Core/ProxySU_Core.csproj b/ProxySU_Core/ProxySU_Core.csproj index b9a1d8e..15b6cf7 100644 --- a/ProxySU_Core/ProxySU_Core.csproj +++ b/ProxySU_Core/ProxySU_Core.csproj @@ -89,6 +89,9 @@ ..\packages\Newtonsoft.Json.12.0.3\lib\net45\Newtonsoft.Json.dll + + ..\packages\QRCoder.1.4.1\lib\net40\QRCoder.dll + ..\packages\SSH.NET.2020.0.1\lib\net40\Renci.SshNet.dll @@ -96,6 +99,7 @@ + @@ -123,12 +127,15 @@ + + + @@ -143,15 +150,51 @@ - + ClientInfoWindow.xaml + + ShadowSocksControl.xaml + + + Trojan_TCP_Control.xaml + + + VLESS_gRPC_Control.xaml + + + VLESS_KCP_Control.xaml + + + VLESS_TCP_TLS_Control.xaml + + + VLESS_WS_TLS_Control.xaml + + + VLESS_XTLS_Control.xaml + + + VMESS_KCP_Control.xaml + + + VMESS_TCP_TLS_Control.xaml + + + VMESS_WS_TLS_Control.xaml + MainWindow.xaml - + RecordEditorWindow.xaml + + ServerInfoControl.xaml + + + XrayEditorControl.xaml + TerminalWindow.xaml @@ -252,6 +295,9 @@ PreserveNewest + + PreserveNewest + PreserveNewest @@ -305,7 +351,47 @@ MSBuild:Compile Designer - + + Designer + MSBuild:Compile + + + Designer + MSBuild:Compile + + + Designer + MSBuild:Compile + + + Designer + MSBuild:Compile + + + Designer + MSBuild:Compile + + + Designer + MSBuild:Compile + + + Designer + MSBuild:Compile + + + Designer + MSBuild:Compile + + + Designer + MSBuild:Compile + + + Designer + MSBuild:Compile + + Designer MSBuild:Compile @@ -313,7 +399,15 @@ MSBuild:Compile Designer - + + Designer + MSBuild:Compile + + + Designer + MSBuild:Compile + + Designer MSBuild:Compile diff --git a/ProxySU_Core/Resources/Languages/en.xaml b/ProxySU_Core/Resources/Languages/en.xaml index 5058372..dc9d5ab 100644 --- a/ProxySU_Core/Resources/Languages/en.xaml +++ b/ProxySU_Core/Resources/Languages/en.xaml @@ -2,11 +2,31 @@ xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:sys="clr-namespace:System;assembly=mscorlib"> Deployment - Language + Readme + + Language(语言) Chinese English Hosts Add Host + Export Config + Export Sub + Random + + + + Selection + Remark + Host + Port + Proxy + Actions + Cnsole + Config + Edit + Delete + + Actions Connect Edit @@ -14,12 +34,14 @@ Delete Install Save + Save as Info Warning Error + - Server Manager + Server Editor Connection User Password @@ -44,6 +66,57 @@ Please enter port Please enter proxy host Please enter proxy port + + + VLESS over TCP With XTLS Preferred + VLESS over TCP with TLS XTLS is Preferred + VLESS over WS with TLS Support CDN + VLESS mKCP low delay + VMESS over WS with TLS Support CDN + VMESS mKCP low delay + ShadowSocks Support CDN + Trojan over TCP with TLS Trojan + + Address + GuiseHost + UUID + VLESS WS Path + VLESS KCP Seed + VLESS KCP Type + VLESS KCP Port + VMESS WS Path + VMESS KCP Seed + VMESS KCP Type + VMESS KCP Port + SS Pwd + SS Method + Trojan Pwd + xray Port + default port is 443 + Console + xray/settings + Install + UpdateSettings + UpdateXray + UninstallXray + + cert/web + UpdateCert + UploadSelfCert + UploadWebite + UninstallCaddy + + Install: Finally output "please enjoy" to indicate completion, go to [Configuration] or [Config] to view the node + Update Settings: After modifying the node configuration information, there is no need to reinstall, this function can update the configuration + Update Cert: The certificate is automatically updated by default, but it is not guaranteed to be updated successfully. If it fails, please use [Update Cert] to update manually + Upload website: Disguise the website, the correct static webpage must have an index.html file (please check), and then upload the website compressed package. + The following is a static web page connection provided by netizens, please check whether there is an index.html file by yourself + + + + + View Settings + \ No newline at end of file diff --git a/ProxySU_Core/Resources/Languages/zh_cn.xaml b/ProxySU_Core/Resources/Languages/zh_cn.xaml index 7031dfd..dc13120 100644 --- a/ProxySU_Core/Resources/Languages/zh_cn.xaml +++ b/ProxySU_Core/Resources/Languages/zh_cn.xaml @@ -2,18 +2,37 @@ xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:sys="clr-namespace:System;assembly=mscorlib"> 应用布署 - 语言 + 说明文档 + + 语言(Language) 中文 英文 主机列表 添加主机 - 操作 + 导出配置 + 导出订阅 + 随机 + + + 选择 + 别名 + 主机 + 端口 + 代理 + 操作 + 控制台 + 查看配置 + 编辑 + 删除 + + 连接 安装 编辑 编辑模板 删除 保存 + 另存为 消息 提示 错误 @@ -44,6 +63,58 @@ 请输入端口号 请输入代理地址 请输入代理端口号 + + VLESS Over TCP With XTLS 性能数倍,首选方式。 + VLESS over TCP with TLS 仍推荐XTLS。 + VLESS over WS with TLS 推荐,支持CDN。 + VLESS mKCP 游戏推荐,延迟低。 + VMESS over WS with TLS 推荐,支持CDN。 + VMESS mKCP 游戏推荐,延迟低。 + ShadowSocks SS,支持udp。 + Trojan over TCP with TLS Trojan。 + + + 域名 + 伪装域名 + UUID + VLESS WS路径 + VLESS KCP Seed + VLESS KCP伪装 + VLESS KCP端口 + VMESS WS路径 + VMESS KCP Seed + VMESS KCP伪装 + VMESS KCP端口 + SS密码 + SS加密方式 + Trojan密码 + xray端口 + 默认端口443,不建议修改 + + + + + 控制台 + 内核/配置 + 一键安装 + 更新配置 + 更新xray内核 + 卸载代理 + + 证书/网站 + 续签证书 + 上传自有证书 + 上传网站 + 卸载Caddy + + 一键安装: 最后输出 “请尽情享用” 表示完成,到[查看配置]或[导出配置]查看节点 + 更新配置: 修改节点配置信息后,不需要重新安装,这个功能就可以更新配置了 + 续签证书: 证书默认是自动续签,但不保证都能续签成功,如果失败请用[续签证书]手动续签 + 上传网站: 伪装网站,正确的静态网页要有index.html文件(请检查),然后将网站压缩包上传。 + 如下是网友提供的静态网页连接,请自行检查是否有index.html文件 + + + + 查看配置信息 - \ No newline at end of file diff --git a/ProxySU_Core/Templates/xray/caddy/base.caddyfile b/ProxySU_Core/Templates/xray/caddy/base.caddyfile index 537fbdc..7975d73 100644 --- a/ProxySU_Core/Templates/xray/caddy/base.caddyfile +++ b/ProxySU_Core/Templates/xray/caddy/base.caddyfile @@ -1,5 +1,9 @@ -##domain##:80 { +:##port## { root * /usr/share/caddy file_server ##reverse_proxy## +} + +##domain##:80 { + redir https://##domain##{uri} } \ No newline at end of file diff --git a/ProxySU_Core/Templates/xray/server/05_inbounds/Trojan_TCP.json b/ProxySU_Core/Templates/xray/server/05_inbounds/Trojan_TCP.json index 5f17571..8ea5ad9 100644 --- a/ProxySU_Core/Templates/xray/server/05_inbounds/Trojan_TCP.json +++ b/ProxySU_Core/Templates/xray/server/05_inbounds/Trojan_TCP.json @@ -10,7 +10,7 @@ ], "fallbacks": [ { - "dest": 80 + "dest": 8080 } ] }, diff --git a/ProxySU_Core/Templates/xray/server/05_inbounds/VLESS_KCP.json b/ProxySU_Core/Templates/xray/server/05_inbounds/VLESS_KCP.json index 8421a45..a619549 100644 --- a/ProxySU_Core/Templates/xray/server/05_inbounds/VLESS_KCP.json +++ b/ProxySU_Core/Templates/xray/server/05_inbounds/VLESS_KCP.json @@ -6,7 +6,8 @@ { "id": "" } - ] + ], + "decryption": "none" }, "streamSettings": { "network": "mkcp", diff --git a/ProxySU_Core/Templates/xray/server/05_inbounds/VLESS_gRPC.json b/ProxySU_Core/Templates/xray/server/05_inbounds/VLESS_gRPC.json new file mode 100644 index 0000000..319888d --- /dev/null +++ b/ProxySU_Core/Templates/xray/server/05_inbounds/VLESS_gRPC.json @@ -0,0 +1,25 @@ +{ + "port": 2002, + "listen": "127.0.0.1", + "protocol": "vless", + "settings": { + "clients": [ + { + "id": "" + } + ], + "decryption": "none" + }, + "streamSettings": { + "network": "grpc", + "grpcSettings": { + "serviceName": "", + "certificates": [ + { + "certificateFile": "/usr/local/etc/xray/ssl/xray_ssl.crt", + "keyFile": "/usr/local/etc/xray/ssl/xray_ssl.key" + } + ] + } + } +} diff --git a/ProxySU_Core/ViewModels/BaseModel.cs b/ProxySU_Core/ViewModels/BaseModel.cs new file mode 100644 index 0000000..5255ebb --- /dev/null +++ b/ProxySU_Core/ViewModels/BaseModel.cs @@ -0,0 +1,38 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ProxySU_Core.ViewModels +{ + public class BaseViewModel2 : INotifyPropertyChanged + { + + protected bool SetProperty(ref T backingStore, T value, + string propertyName = "", + Action onChanged = null) + { + if (EqualityComparer.Default.Equals(backingStore, value)) + return false; + + backingStore = value; + onChanged?.Invoke(); + OnPropertyChanged(propertyName); + return true; + } + + #region INotifyPropertyChanged + public event PropertyChangedEventHandler PropertyChanged; + protected void OnPropertyChanged(string propertyName = "") + { + var changed = PropertyChanged; + if (changed == null) + return; + + changed.Invoke(this, new PropertyChangedEventArgs(propertyName)); + } + #endregion + } +} diff --git a/ProxySU_Core/ViewModels/XraySettingsViewModel.cs b/ProxySU_Core/ViewModels/XraySettingsViewModel.cs index eacf8ec..78826a8 100644 --- a/ProxySU_Core/ViewModels/XraySettingsViewModel.cs +++ b/ProxySU_Core/ViewModels/XraySettingsViewModel.cs @@ -10,19 +10,72 @@ using System.Threading.Tasks; using System.Web; using System.Windows; using System.Windows.Controls; +using System.Windows.Input; namespace ProxySU_Core.ViewModels { public partial class XraySettingsViewModel : BaseViewModel { public XraySettings settings; + private readonly ICommand _randomUuid; public XraySettingsViewModel(XraySettings parameters) { + _randomUuid = new BaseCommand((obj) => GetUuid()); this.settings = parameters; Notify("VMESS_KCP_Type"); } + public ICommand RandomUuid + { + get + { + return _randomUuid; + } + } + + + public int Port + { + get => settings.Port; + set + { + settings.Port = value; + Notify("Port"); + } + } + + public int VLESS_KCP_Port + { + get => settings.VLESS_KCP_Port; + set + { + settings.VLESS_KCP_Port = value; + Notify("VLESS_KCP_Port"); + } + } + + public int VMESS_KCP_Port + { + get => settings.VMESS_KCP_Port; + set + { + settings.VMESS_KCP_Port = value; + Notify("VMESS_KCP_Port"); + } + } + + public int ShadowSocksPort + { + get => settings.ShadowSocksPort; + set + { + settings.VMESS_KCP_Port = value; + Notify("ShadowSocksPort"); + } + } + + public string UUID { get => settings.UUID; @@ -36,13 +89,21 @@ namespace ProxySU_Core.ViewModels public string Domain { get => settings.Domain; - set => settings.Domain = value; + set + { + settings.Domain = value; + Notify("Domain"); + } } public string MaskDomain { get => settings.MaskDomain; - set => settings.MaskDomain = value; + set + { + settings.MaskDomain = value; + Notify("MaskDomain"); + } } public string TrojanPassword @@ -125,8 +186,19 @@ namespace ProxySU_Core.ViewModels } } + + + private void GetUuid() + { + UUID = Guid.NewGuid().ToString(); + Notify("UUID"); + } + } + /// + /// VMESS + /// public partial class XraySettingsViewModel { // vmess tcp @@ -168,7 +240,7 @@ namespace ProxySU_Core.ViewModels { get => ShareLink.Build(XrayType.VMESS_WS, settings); } - + // vmess kcp public string VMESS_KCP_Seed { @@ -206,7 +278,9 @@ namespace ProxySU_Core.ViewModels public List KcpTypes => _kcpTypes; } - + /// + /// VLESS + /// public partial class XraySettingsViewModel { @@ -217,7 +291,7 @@ namespace ProxySU_Core.ViewModels set { CheckBoxChanged(value, XrayType.VLESS_TCP_XTLS); - Notify("Checked_VLESS_XTLS"); + Notify("Checked_VLESS_TCP_XTLS"); } } public string VLESS_TCP_XTLS_ShareLink @@ -225,7 +299,6 @@ namespace ProxySU_Core.ViewModels get => ShareLink.Build(XrayType.VLESS_TCP_XTLS, settings); } - // vless tcp public bool Checked_VLESS_TCP { @@ -265,6 +338,62 @@ namespace ProxySU_Core.ViewModels get => ShareLink.Build(XrayType.VLESS_WS, settings); } + // vless kcp + public string VLESS_KCP_Seed + { + get => settings.VLESS_KCP_Seed; + set => settings.VLESS_KCP_Seed = value; + } + public string VLESS_KCP_Type + { + get => settings.VLESS_KCP_Type; + set + { + var namespaceStr = typeof(ComboBoxItem).FullName + ":"; + var trimValue = value.Replace(namespaceStr, ""); + trimValue = trimValue.Trim(); + settings.VLESS_KCP_Type = trimValue; + Notify("VLESS_KCP_Type"); + } + } + public bool Checked_VLESS_KCP + { + get => settings.Types.Contains(XrayType.VLESS_KCP); + set + { + CheckBoxChanged(value, XrayType.VLESS_KCP); + Notify("Checked_VLESS_KCP"); + } + } + public string VLESS_KCP_ShareLink + { + get => ShareLink.Build(XrayType.VLESS_KCP, settings); + } + + // vless grpc + public string VLESS_gRPC_ServiceName + { + get => settings.VLESS_gRPC_ServiceName; + set => settings.VLESS_gRPC_ServiceName = value; + } + public int VLESS_gRPC_Port + { + get => settings.VLESS_gRPC_Port; + set => settings.VLESS_gRPC_Port = value; + } + public bool Checked_VLESS_gRPC + { + get => settings.Types.Contains(XrayType.VLESS_gRPC); + set + { + CheckBoxChanged(value, XrayType.VLESS_gRPC); + Notify("Checked_VLESS_gRPC"); + } + } + public string VLESS_gRPC_ShareLink + { + get => ShareLink.Build(XrayType.VLESS_gRPC, settings); + } } } diff --git a/ProxySU_Core/Views/ClientInfo/ClientInfoWindow.xaml b/ProxySU_Core/Views/ClientInfo/ClientInfoWindow.xaml new file mode 100644 index 0000000..d034a26 --- /dev/null +++ b/ProxySU_Core/Views/ClientInfo/ClientInfoWindow.xaml @@ -0,0 +1,114 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +