From 299f35f03e9d48a7bbfbf10bbaa5959253af32d6 Mon Sep 17 00:00:00 2001 From: ProxySU Date: Wed, 27 May 2020 19:33:09 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E4=B8=89=E5=90=88=E4=B8=80?= =?UTF-8?q?=E4=BB=A3=E7=90=86=E5=85=B1=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ProxySU/MainWindow.xaml | 72 +- ProxySU/MainWindow.xaml.cs | 936 ++++++++++++++++++- ProxySU/Properties/AssemblyInfo.cs | 4 +- ProxySU/TrojanResultClientInfoWindow.xaml.cs | 2 +- ProxySU/bin/Beta/Beta.zip | Bin 485863 -> 489417 bytes TemplateConfg/3in1_config.caddyfile | 18 + 6 files changed, 1018 insertions(+), 14 deletions(-) create mode 100644 TemplateConfg/3in1_config.caddyfile diff --git a/ProxySU/MainWindow.xaml b/ProxySU/MainWindow.xaml index 037b9ae..92dffbf 100644 --- a/ProxySU/MainWindow.xaml +++ b/ProxySU/MainWindow.xaml @@ -205,6 +205,75 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -223,6 +292,7 @@ + 时间校对\"校对时间后再设置"); + currentStatus = "时间较对失败......"; + textBlockName.Dispatcher.BeginInvoke(updateAction, textBlockName, progressBar, currentStatus); + Thread.Sleep(1000); + return; + } + + currentStatus = "正在检测域名是否解析到当前VPS的IP上......"; + textBlockName.Dispatcher.BeginInvoke(updateAction, textBlockName, progressBar, currentStatus); + Thread.Sleep(1000); + + //在相应系统内安装curl(如果没有安装curl) + if (string.IsNullOrEmpty(client.RunCommand("command -v curl").Result) == true) + { + //为假则表示系统有相应的组件。 + if (getApt == false) + { + client.RunCommand("apt-get -qq update"); + client.RunCommand("apt-get -y -qq install curl"); + } + if (getYum == false) + { + client.RunCommand("yum -q makecache"); + client.RunCommand("yum -y -q install curl"); + } + if (getZypper == false) + { + client.RunCommand("zypper ref"); + client.RunCommand("zypper -y install curl"); + } + } + + string vpsIp3in1 = client.RunCommand("curl -4 ip.sb").Result.ToString(); + string testDomainCmd = "ping " + ReceiveConfigurationParameters[4] + " -c 1 | grep -oE -m1 \"([0-9]{1,3}\\.){3}[0-9]{1,3}\""; + string resulttestDomainCmd = client.RunCommand(testDomainCmd).Result.ToString(); + + if (String.Equals(vpsIp3in1, resulttestDomainCmd) == true) + { + currentStatus = "解析正确!"; + textBlockName.Dispatcher.BeginInvoke(updateAction, textBlockName, progressBar, currentStatus); + Thread.Sleep(1000); + } + else + { + currentStatus = "域名未能正确解析到当前VPS的IP上!安装失败!"; + textBlockName.Dispatcher.BeginInvoke(updateAction, textBlockName, progressBar, currentStatus); + Thread.Sleep(1000); + MessageBox.Show("域名未能正确解析到当前VPS的IP上,请检查!若解析设置正确,请等待生效后再重试安装。如果域名使用了CDN,请先关闭!"); + return; + } + + //检测是否安装lsof + if (string.IsNullOrEmpty(client.RunCommand("command -v lsof").Result) == true) + { + //为假则表示系统有相应的组件。 + if (getApt == false) + { + client.RunCommand("apt-get -qq update"); + client.RunCommand("apt-get -y -qq install lsof"); + } + if (getYum == false) + { + client.RunCommand("yum -q makecache"); + client.RunCommand("yum -y -q install lsof"); + } + if (getZypper == false) + { + client.RunCommand("zypper ref"); + client.RunCommand("zypper -y install lsof"); + } + } + currentStatus = "正在检测端口占用情况......"; + textBlockName.Dispatcher.BeginInvoke(updateAction, textBlockName, progressBar, currentStatus); + Thread.Sleep(1000); + + if (String.IsNullOrEmpty(client.RunCommand(@"lsof -n -P -i :80 | grep LISTEN").Result) == false || String.IsNullOrEmpty(client.RunCommand(@"lsof -n -P -i :443 | grep LISTEN").Result) == false) + { + //MessageBox.Show("80/443端口之一,或全部被占用,请先用系统工具中的“释放80/443端口”工具,释放出,再重新安装"); + MessageBoxResult dialogResult = MessageBox.Show("80/443端口之一,或全部被占用,将强制停止占用80/443端口的程序?", "Stop application", MessageBoxButton.YesNo); + if (dialogResult == MessageBoxResult.No) + { + currentStatus = "端口被占用,安装失败......"; + textBlockName.Dispatcher.BeginInvoke(updateAction, textBlockName, progressBar, currentStatus); + Thread.Sleep(1000); + return; + } + + currentStatus = "正在释放80/443端口......"; + textBlockName.Dispatcher.BeginInvoke(updateAction, textBlockName, progressBar, currentStatus); + Thread.Sleep(1000); + + string cmdTestPort = @"lsof -n -P -i :443 | grep LISTEN"; + string cmdResult = client.RunCommand(cmdTestPort).Result; + if (String.IsNullOrEmpty(cmdResult) == false) + { + string[] cmdResultArry443 = cmdResult.Split(' '); + client.RunCommand($"systemctl stop {cmdResultArry443[0]}"); + client.RunCommand($"systemctl disable {cmdResultArry443[0]}"); + client.RunCommand($"kill -9 {cmdResultArry443[3]}"); + } + + cmdTestPort = @"lsof -n -P -i :80 | grep LISTEN"; + cmdResult = client.RunCommand(cmdTestPort).Result; + if (String.IsNullOrEmpty(cmdResult) == false) + { + string[] cmdResultArry80 = cmdResult.Split(' '); + client.RunCommand($"systemctl stop {cmdResultArry80[0]}"); + client.RunCommand($"systemctl disable {cmdResultArry80[0]}"); + client.RunCommand($"kill -9 {cmdResultArry80[3]}"); + } + currentStatus = "80/443端口释放完毕!"; + textBlockName.Dispatcher.BeginInvoke(updateAction, textBlockName, progressBar, currentStatus); + Thread.Sleep(1000); + + } + + //打开防火墙端口 + + if (String.IsNullOrEmpty(client.RunCommand("command -v firewall-cmd").Result) == false) + { + client.RunCommand("firewall-cmd --zone=public --add-port=80/tcp --permanent"); + client.RunCommand("firewall-cmd --zone=public --add-port=443/tcp --permanent"); + client.RunCommand("firewall-cmd --reload"); + + } + if (String.IsNullOrEmpty(client.RunCommand("command -v ufw").Result) == false) + { + + client.RunCommand("ufw allow 80"); + client.RunCommand("ufw allow 443"); + client.RunCommand("ufw reset"); + } + + currentStatus = "符合安装要求,V2ray安装中......"; + textBlockName.Dispatcher.BeginInvoke(updateAction, textBlockName, progressBar, currentStatus); + Thread.Sleep(1000); + + //下载官方安装脚本安装V2ray + client.RunCommand("curl -o /tmp/go.sh https://install.direct/go.sh"); + client.RunCommand("bash /tmp/go.sh -f"); + string installResult = client.RunCommand("find / -name v2ray").Result.ToString(); + + if (!installResult.Contains("/usr/bin/v2ray")) + { + MessageBox.Show("安装V2ray失败(官方脚本go.sh运行出错!"); + client.Disconnect(); + currentStatus = "安装V2ray失败(官方脚本go.sh运行出错!"; + textBlockName.Dispatcher.BeginInvoke(updateAction, textBlockName, progressBar, currentStatus); + return; + } + client.RunCommand("mv /etc/v2ray/config.json /etc/v2ray/config.json.1"); + + //上传配置文件 + currentStatus = "V2ray程序安装完毕,配置文件上传中......"; + textBlockName.Dispatcher.BeginInvoke(updateAction, textBlockName, progressBar, currentStatus); + Thread.Sleep(1000); + + //生成服务端配置 + serverConfig = @"TemplateConfg\WebSocketTLSWeb_server_config.json"; + using (StreamReader reader = File.OpenText(serverConfig)) + { + JObject serverJson = (JObject)JToken.ReadFrom(new JsonTextReader(reader)); + //设置uuid + serverJson["inbounds"][0]["settings"]["clients"][0]["id"] = ReceiveConfigurationParameters[2]; + //设置路径 + serverJson["inbounds"][0]["streamSettings"]["wsSettings"]["path"] = ReceiveConfigurationParameters[3]; + + using (StreamWriter sw = new StreamWriter(@"config.json")) + { + sw.Write(serverJson.ToString()); + } + } + upLoadPath = "/etc/v2ray/config.json"; + UploadConfig(connectionInfo, @"config.json", upLoadPath); + File.Delete(@"config.json"); + + client.RunCommand("systemctl restart v2ray"); + currentStatus = "启动V2ray,OK!"; + textBlockName.Dispatcher.BeginInvoke(updateAction, textBlockName, progressBar, currentStatus); + Thread.Sleep(1000); + + //安装Trojan + currentStatus = "开始安装Trojan......"; + textBlockName.Dispatcher.BeginInvoke(updateAction, textBlockName, progressBar, currentStatus); + Thread.Sleep(1000); + + //下载官方安装脚本安装 + + client.RunCommand("curl -o /tmp/trojan-quickstart.sh https://raw.githubusercontent.com/trojan-gfw/trojan-quickstart/master/trojan-quickstart.sh"); + client.RunCommand("yes | bash /tmp/trojan-quickstart.sh"); + + installResult = client.RunCommand("find / -name trojan").Result.ToString(); + + if (!installResult.Contains("/usr/local/bin/trojan")) + { + MessageBox.Show("安装Trojan失败(官方脚本运行出错!"); + client.Disconnect(); + currentStatus = "安装Trojan失败(官方脚本运行出错!"; + textBlockName.Dispatcher.BeginInvoke(updateAction, textBlockName, progressBar, currentStatus); + return; + } + client.RunCommand("mv /usr/local/etc/trojan/config.json /usr/local/etc/trojan/config.json.1"); + + //上传配置文件 + currentStatus = "Trojan程序安装完毕,配置文件上传中......"; + textBlockName.Dispatcher.BeginInvoke(updateAction, textBlockName, progressBar, currentStatus); + Thread.Sleep(1000); + + //生成服务端配置 + serverConfig = @"TemplateConfg\trojan_server_config.json"; + using (StreamReader reader = File.OpenText(serverConfig)) + { + JObject serverJson = (JObject)JToken.ReadFrom(new JsonTextReader(reader)); + //设置密码 + serverJson["password"][0] = ReceiveConfigurationParameters[1]; + + using (StreamWriter sw = new StreamWriter(@"config.json")) + { + sw.Write(serverJson.ToString()); + } + } + upLoadPath = "/usr/local/etc/trojan/config.json"; + UploadConfig(connectionInfo, @"config.json", upLoadPath); + File.Delete(@"config.json"); + + + //安装NaiveProxy + currentStatus = "开始安装NaiveProxy......"; + textBlockName.Dispatcher.BeginInvoke(updateAction, textBlockName, progressBar, currentStatus); + Thread.Sleep(1000); + + //下载安装脚本安装 + + client.RunCommand("curl -o /tmp/naive-quickstart.sh https://raw.githubusercontent.com/proxysu/shellscript/master/naive-quickstart.sh"); + client.RunCommand("yes | bash /tmp/naive-quickstart.sh"); + + installResult = client.RunCommand("find / -name naive").Result.ToString(); + + if (!installResult.Contains("/usr/local/bin/naive")) + { + MessageBox.Show("安装NaiveProxy失败(脚本运行出错!"); + client.Disconnect(); + currentStatus = "安装NaiveProxy失败(脚本运行出错!"; + textBlockName.Dispatcher.BeginInvoke(updateAction, textBlockName, progressBar, currentStatus); + return; + } + + currentStatus = "NaiveProxy程序安装完毕......"; + textBlockName.Dispatcher.BeginInvoke(updateAction, textBlockName, progressBar, currentStatus); + Thread.Sleep(1000); + + client.RunCommand("systemctl restart naive"); + currentStatus = "启动Naive,OK!"; + textBlockName.Dispatcher.BeginInvoke(updateAction, textBlockName, progressBar, currentStatus); + Thread.Sleep(1000); + + + + + currentStatus = "正在安装acme.sh......"; + textBlockName.Dispatcher.BeginInvoke(updateAction, textBlockName, progressBar, currentStatus); + Thread.Sleep(1000); + + if (getApt == false) + { + //client.RunCommand("apt-get -qq update"); + client.RunCommand("apt-get -y -qq install socat"); + } + if (getYum == false) + { + //client.RunCommand("yum -q makecache"); + client.RunCommand("yum -y -q install socat"); + } + if (getZypper == false) + { + // client.RunCommand("zypper ref"); + client.RunCommand("zypper -y install socat"); + } + client.RunCommand("curl https://raw.githubusercontent.com/acmesh-official/acme.sh/master/acme.sh | INSTALLONLINE=1 sh"); + client.RunCommand("cd ~/.acme.sh/"); + client.RunCommand("alias acme.sh=~/.acme.sh/acme.sh"); + + currentStatus = "申请域名证书......"; + textBlockName.Dispatcher.BeginInvoke(updateAction, textBlockName, progressBar, currentStatus); + Thread.Sleep(1000); + + //client.RunCommand("mkdir -p /etc/v2ray/ssl"); + client.RunCommand($"/root/.acme.sh/acme.sh --issue --standalone -d {ReceiveConfigurationParameters[4]}"); + + currentStatus = "正在安装证书......"; + textBlockName.Dispatcher.BeginInvoke(updateAction, textBlockName, progressBar, currentStatus); + Thread.Sleep(1000); + client.RunCommand($"/root/.acme.sh/acme.sh --installcert -d {ReceiveConfigurationParameters[4]} --certpath /usr/local/etc/trojan/trojan_ssl.crt --keypath /usr/local/etc/trojan/trojan_ssl.key --capath /usr/local/etc/trojan/trojan_ssl.crt --reloadcmd \"systemctl restart trojan\""); + + currentStatus = "证书安装,OK!"; + textBlockName.Dispatcher.BeginInvoke(updateAction, textBlockName, progressBar, currentStatus); + Thread.Sleep(1000); + + client.RunCommand("systemctl restart trojan"); + + currentStatus = "Trojan重启加载证书,OK!"; + textBlockName.Dispatcher.BeginInvoke(updateAction, textBlockName, progressBar, currentStatus); + Thread.Sleep(1000); + + currentStatus = "正在安装Caddy......"; + textBlockName.Dispatcher.BeginInvoke(updateAction, textBlockName, progressBar, currentStatus); + Thread.Sleep(1000); + + client.RunCommand("curl https://getcaddy.com -o getcaddy"); + client.RunCommand("bash getcaddy personal http.forwardproxy,hook.service"); + client.RunCommand("mkdir -p /etc/caddy"); + client.RunCommand("mkdir -p /var/www"); + + + currentStatus = "上传Caddy配置文件......"; + textBlockName.Dispatcher.BeginInvoke(updateAction, textBlockName, progressBar, currentStatus); + Thread.Sleep(1000); + + serverConfig = @"TemplateConfg\3in1_config.caddyfile"; + + upLoadPath = "/etc/caddy/Caddyfile"; + UploadConfig(connectionInfo, serverConfig, upLoadPath); + + //设置邮箱 + string email = $"user@{ReceiveConfigurationParameters[4]}"; + //设置Path + string sshCmd; + sshCmd = $"sed -i 's/##path##/\\{ReceiveConfigurationParameters[3]}/' {upLoadPath}"; + client.RunCommand(sshCmd); + //设置域名 + sshCmd = $"sed -i 's/##domain##/{ReceiveConfigurationParameters[4]}:80/' {upLoadPath}"; + client.RunCommand(sshCmd); + sshCmd = $"sed -i 's/##basicauth##/basicauth {ReceiveConfigurationParameters[5]} {ReceiveConfigurationParameters[6]}/' {upLoadPath}"; + client.RunCommand(sshCmd); + //设置伪装网站 + + if (String.IsNullOrEmpty(ReceiveConfigurationParameters[7]) == false) + { + sshCmd = $"sed -i 's/##sites##/proxy \\/ {ReceiveConfigurationParameters[7]}/' {upLoadPath}"; + client.RunCommand(sshCmd); + } + Thread.Sleep(2000); + + //安装Caddy服务 + sshCmd = $"caddy -service install -agree -conf /etc/caddy/Caddyfile -email {email}"; + client.RunCommand(sshCmd); + + //启动Caddy服务 + client.RunCommand("caddy -service restart"); + currentStatus = "启动Caddy,OK!"; + textBlockName.Dispatcher.BeginInvoke(updateAction, textBlockName, progressBar, currentStatus); + Thread.Sleep(1000); + + currentStatus = "正在启用BBR......"; + textBlockName.Dispatcher.BeginInvoke(updateAction, textBlockName, progressBar, currentStatus); + Thread.Sleep(1000); + //测试BBR条件,若满足提示是否启用 + result = client.RunCommand("uname -r").Result; + //var result = client.RunCommand("cat /root/test.ver"); + linuxKernelVerStr = result.Split('-'); + + detectResult = DetectKernelVersionBBR(linuxKernelVerStr[0]); + string resultCmdTestBBR = client.RunCommand(@"sysctl net.ipv4.tcp_congestion_control | grep bbr").Result; + //如果内核满足大于等于4.9,且还未启用BBR,则启用BBR + if (detectResult == true && resultCmdTestBBR.Contains("bbr") == false) + { + client.RunCommand(@"bash - c 'echo ""net.core.default_qdisc = fq"" >> /etc/sysctl.conf'"); + client.RunCommand(@"bash - c 'echo ""net.ipv4.tcp_congestion_control = bbr"" >> /etc/sysctl.conf'"); + client.RunCommand(@"sysctl -p"); + } + resultCmdTestBBR = client.RunCommand(@"sysctl net.ipv4.tcp_congestion_control | grep bbr").Result; + if (resultCmdTestBBR.Contains("bbr") == true) + { + currentStatus = "启用BBR,OK!"; + textBlockName.Dispatcher.BeginInvoke(updateAction, textBlockName, progressBar, currentStatus); + Thread.Sleep(1000); + } + else + { + currentStatus = "启用BBR,未成功!"; + textBlockName.Dispatcher.BeginInvoke(updateAction, textBlockName, progressBar, currentStatus); + Thread.Sleep(1000); + } + //生成客户端配置 + currentStatus = "生成客户端配置......"; + textBlockName.Dispatcher.BeginInvoke(updateAction, textBlockName, progressBar, currentStatus); + Thread.Sleep(1000); + //创建3in1文件夹 + if (!Directory.Exists("3in1_config"))//如果不存在就创建file文件夹      + { + Directory.CreateDirectory("3in1_config");//创建该文件夹   + } + //生成v2ray官方客户端配置 + clientConfig = @"TemplateConfg\WebSocketTLSWeb_client_config.json"; + using (StreamReader reader = File.OpenText(clientConfig)) + { + JObject clientJson = (JObject)JToken.ReadFrom(new JsonTextReader(reader)); + + clientJson["outbounds"][0]["settings"]["vnext"][0]["address"] = ReceiveConfigurationParameters[4]; + clientJson["outbounds"][0]["settings"]["vnext"][0]["port"] = int.Parse("443"); + clientJson["outbounds"][0]["settings"]["vnext"][0]["users"][0]["id"] = ReceiveConfigurationParameters[2]; + + clientJson["outbounds"][0]["streamSettings"]["wsSettings"]["path"] = ReceiveConfigurationParameters[3]; + if (!Directory.Exists(@"3in1_config\v2ray_config"))//如果不存在就创建file文件夹      + { + Directory.CreateDirectory(@"3in1_config\v2ray_config");//创建该文件夹   + } + using (StreamWriter sw = new StreamWriter(@"3in1_config\v2ray_config\config.json")) + { + sw.Write(clientJson.ToString()); + } + } + //生成V2rayN的客户端 + string v2rayNjsonFile = @" +{ + ""v"": """", + ""ps"": """", + ""add"": """", + ""port"": """", + ""id"": """", + ""aid"": """", + ""net"": """", + ""type"": """", + ""host"": """", + ""path"": """", + ""tls"": """" +}"; + JObject v2rayNjsonObject = JObject.Parse(v2rayNjsonFile); + v2rayNjsonObject["v"] = "2"; + v2rayNjsonObject["add"] = ReceiveConfigurationParameters[4]; //设置域名 + v2rayNjsonObject["port"] = "443"; //设置端口 + v2rayNjsonObject["id"] = ReceiveConfigurationParameters[2]; //设置uuid + v2rayNjsonObject["aid"] = "16"; //设置额外ID + v2rayNjsonObject["net"] = "ws"; //设置传输模式 + v2rayNjsonObject["type"] = "none"; //设置伪装类型 + v2rayNjsonObject["path"] = ReceiveConfigurationParameters[3];//设置路径 + v2rayNjsonObject["host"] = "";//设置TLS的Host + v2rayNjsonObject["tls"] = "tls"; //设置是否启用TLS + v2rayNjsonObject["ps"] = v2rayNjsonObject["add"]; //设置备注 + + //如果已存在以前保存目录,则新建后缀数字依次增加 + string saveFileFolderFirst = v2rayNjsonObject["ps"].ToString(); + int num = 1; + string saveFileFolder = saveFileFolderFirst; + while (Directory.Exists(@"3in1_config\v2ray_config\" + saveFileFolder)) + { + saveFileFolder = saveFileFolderFirst + "_copy_" + num.ToString(); + num++; + } + Directory.CreateDirectory(@"3in1_config\v2ray_config\" + saveFileFolder);//创建该文件夹 + + + //生成url和二维码 + byte[] textBytes = Encoding.UTF8.GetBytes(v2rayNjsonObject.ToString()); + string vmessUrl = "vmess://" + Convert.ToBase64String(textBytes); + + using (StreamWriter sw = new StreamWriter($"3in1_config\\v2ray_config\\{saveFileFolder}\\url.txt")) + { + sw.WriteLine(vmessUrl); + + } + //生成二维码 + QRCodeGenerator qrGenerator = new QRCodeGenerator(); + QRCodeData qrCodeData = qrGenerator.CreateQrCode(vmessUrl, QRCodeGenerator.ECCLevel.Q); + QRCode qrCode = new QRCode(qrCodeData); + Bitmap qrCodeImage = qrCode.GetGraphic(20); + //IntPtr myImagePtr = qrCodeImage.GetHbitmap(); + //BitmapSource imgsource = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(myImagePtr, IntPtr.Zero, Int32Rect.Empty, BitmapSizeOptions.FromEmptyOptions()); + //ImageShareQRcode.Source = imgsource; + ////DeleteObject(myImagePtr); + qrCodeImage.Save($"3in1_config\\v2ray_config\\{saveFileFolder}\\QR.bmp"); + + //生成说明文件 + using (StreamWriter sw = new StreamWriter($"3in1_config\\v2ray_config\\{saveFileFolder}\\说明.txt")) + { + sw.WriteLine("config.json"); + sw.WriteLine("此文件为v2ray官方程序所使用的客户端配置文件,配置为全局模式,socks5地址:127.0.0.1:1080,http代理地址:127.0.0.1:1081"); + sw.WriteLine("v2ray官方网站:https://www.v2ray.com/"); + sw.WriteLine("v2ray官方程序下载地址:https://github.com/v2ray/v2ray-core/releases"); + sw.WriteLine("下载相应版本,Windows选择v2ray-windows-64.zip或者v2ray-windows-32.zip,解压后提取v2ctl.exe和v2ray.exe。与config.json放在同一目录,运行v2ray.exe即可。"); + sw.WriteLine("-----------------------------------------"); + sw.WriteLine("QR.bmp"); + sw.WriteLine("此文件为v2rayN、v2rayNG(Android)、Shadowrocket(ios)扫码导入节点"); + sw.WriteLine("v2rayN下载网址:https://github.com/2dust/v2rayN/releases"); + sw.WriteLine("v2rayNG(Android)下载网址:https://github.com/2dust/v2rayNG/releases"); + sw.WriteLine("v2rayNG(Android)在Google Play下载网址:https://play.google.com/store/apps/details?id=com.v2ray.ang"); + sw.WriteLine("Shadowrocket(ios)下载,需要使用国外区的AppleID。请自行谷歌方法。"); + + sw.WriteLine("-----------------------------------------"); + sw.WriteLine("url.txt"); + sw.WriteLine("此文件为v2rayN、v2rayNG(Android)、Shadowrocket(ios)复制粘贴导入节点的vmess网址"); + sw.WriteLine("-----------------------------------------\n"); + sw.WriteLine("服务器通用连接配置参数"); + sw.WriteLine($"地址(address):{ReceiveConfigurationParameters[4]}"); + sw.WriteLine($"端口(Port):443"); + sw.WriteLine($"用户ID(uuid):{ReceiveConfigurationParameters[2]}"); + sw.WriteLine($"额外ID:16"); + sw.WriteLine($"加密方式:auto"); + sw.WriteLine($"传输协议:ws"); + sw.WriteLine($"伪装类型:none"); + sw.WriteLine($"是否使用TLS:tls"); + sw.WriteLine($"host:"); + sw.WriteLine($"路径(Path):{ReceiveConfigurationParameters[3]}"); + sw.WriteLine($"QUIC密钥:"); + } + //移动V2ray官方配置config.json到与上述文件同一目录 + File.Move(@"3in1_config\v2ray_config\config.json", @"3in1_config\v2ray_config\" + saveFileFolder + @"\config.json"); + + //生成Trojan客户端文件 + clientConfig = @"TemplateConfg\trojan_client_config.json"; + if (!Directory.Exists(@"3in1_config\trojan_config"))//如果不存在就创建file文件夹      + { + Directory.CreateDirectory(@"3in1_config\trojan_config");//创建该文件夹   + } + using (StreamReader reader = File.OpenText(clientConfig)) + { + JObject clientJson = (JObject)JToken.ReadFrom(new JsonTextReader(reader)); + + clientJson["remote_addr"] = ReceiveConfigurationParameters[4]; + //clientJson["remote_port"] = int.Parse(ReceiveConfigurationParameters[1]); + clientJson["password"][0] = ReceiveConfigurationParameters[1]; + + using (StreamWriter sw = new StreamWriter(@"3in1_config\trojan_config\config.json")) + { + sw.Write(clientJson.ToString()); + } + } + //生成二维码和url + saveFileFolderFirst = ReceiveConfigurationParameters[4]; + num = 1; + saveFileFolder = saveFileFolderFirst; + while (Directory.Exists(@"3in1_config\trojan_config\" + saveFileFolder)) + { + saveFileFolder = saveFileFolderFirst + "_copy_" + num.ToString(); + num++; + } + Directory.CreateDirectory(@"3in1_config\trojan_config\" + saveFileFolder);//创建该文件夹 + + string trojanUrl = $"trojan://{ReceiveConfigurationParameters[1]}@{ReceiveConfigurationParameters[4]}:443#{ReceiveConfigurationParameters[4]}"; + using (StreamWriter sw = new StreamWriter($"3in1_config\\trojan_config\\{saveFileFolder}\\url.txt")) + { + sw.WriteLine(trojanUrl); + + } + //生成二维码 + QRCodeGenerator qrGeneratorTrojan = new QRCodeGenerator(); + QRCodeData qrCodeDataTrojan = qrGeneratorTrojan.CreateQrCode(trojanUrl, QRCodeGenerator.ECCLevel.Q); + QRCode qrCodeTrojan = new QRCode(qrCodeDataTrojan); + Bitmap qrCodeImageTrojan = qrCodeTrojan.GetGraphic(20); + qrCodeImageTrojan.Save($"3in1_config\\trojan_config\\{saveFileFolder}\\QR.bmp"); + + //生成说明文件 + using (StreamWriter sw = new StreamWriter($"3in1_config\\trojan_config\\{saveFileFolder}\\说明.txt")) + { + sw.WriteLine("config.json"); + sw.WriteLine("此文件为Trojan官方程序所使用的客户端配置文件,配置为全局模式,socks5地址:127.0.0.1:1080"); + sw.WriteLine("Trojan官方网站:https://trojan-gfw.github.io/trojan/"); + sw.WriteLine("Trojan官方程序下载地址:https://github.com/trojan-gfw/trojan/releases"); + sw.WriteLine("下载相应版本,Windows选择Trojan-x.xx-win.zip,解压后提取trojan.exe。与config.json放在同一目录,运行trojan.exe即可。"); + sw.WriteLine("-----------------------------------------\n"); + sw.WriteLine("QR.bmp"); + sw.WriteLine("此文件为Trojan-QT5 (windows)、igniter(Android)、Shadowrocket(ios)扫码导入节点"); + sw.WriteLine("Trojan-QT5 (windows)下载网址:https://github.com/TheWanderingCoel/Trojan-Qt5/releases"); + sw.WriteLine("igniter(Android)下载网址:https://github.com/trojan-gfw/igniter/releases"); + sw.WriteLine("Shadowrocket(ios)下载,需要使用国外区的AppleID。请自行谷歌方法。"); + + sw.WriteLine("-----------------------------------------\n"); + sw.WriteLine("url.txt"); + sw.WriteLine("此文件为Trojan-QT5 (windows)、igniter(Android)、Shadowrocket(ios)复制粘贴导入节点的网址"); + sw.WriteLine("-----------------------------------------\n"); + sw.WriteLine("服务器通用连接配置参数"); + sw.WriteLine($"地址(address):{ReceiveConfigurationParameters[4]}"); + sw.WriteLine($"端口(Port):443"); + sw.WriteLine($"密钥:{ReceiveConfigurationParameters[1]}"); + + } + //移动Trojan官方配置config.json到与上述文件同一目录 + File.Move(@"3in1_config\trojan_config\config.json", @"3in1_config\trojan_config\" + saveFileFolder + @"\config.json"); + + //生成NaiveProxy的客户端配置 + clientConfig = @"TemplateConfg\Naiveproxy_client_config.json"; + if (!Directory.Exists(@"3in1_config\naive_config"))//如果不存在就创建file文件夹      + { + Directory.CreateDirectory(@"3in1_config\naive_config");//创建该文件夹   + } + using (StreamReader reader = File.OpenText(clientConfig)) + { + JObject clientJson = (JObject)JToken.ReadFrom(new JsonTextReader(reader)); + + clientJson["proxy"] = $"https://{ReceiveConfigurationParameters[5]}:{ReceiveConfigurationParameters[6]}@{ReceiveConfigurationParameters[4]}"; + + using (StreamWriter sw = new StreamWriter(@"3in1_config\naive_config\config.json")) + { + sw.Write(clientJson.ToString()); + } + } + //生成用于NaiveGUI的url + saveFileFolderFirst = ReceiveConfigurationParameters[4]; + num = 1; + saveFileFolder = saveFileFolderFirst; + while (Directory.Exists(@"3in1_config\naive_config\" + saveFileFolder)) + { + saveFileFolder = saveFileFolderFirst + "_copy_" + num.ToString(); + num++; + } + Directory.CreateDirectory(@"3in1_config\naive_config\" + saveFileFolder);//创建该文件夹 + + string naiveUrl = $"https://{ReceiveConfigurationParameters[5]}:{ReceiveConfigurationParameters[6]}@{ReceiveConfigurationParameters[4]}:443/?name={ReceiveConfigurationParameters[4]}&padding=true"; + using (StreamWriter sw = new StreamWriter($"3in1_config\\naive_config\\{saveFileFolder}\\url.txt")) + { + sw.WriteLine(naiveUrl); + } + //生成说明文件 + using (StreamWriter sw = new StreamWriter($"3in1_config\\naive_config\\{saveFileFolder}\\说明.txt")) + { + sw.WriteLine("config.json"); + sw.WriteLine("此文件为NaiveProxy官方程序所使用的客户端配置文件,配置为全局模式,socks5地址:127.0.0.1:1080"); + sw.WriteLine("NaiveProxy官方网站:https://github.com/klzgrad/naiveproxy"); + sw.WriteLine("NaiveProxy官方程序下载地址:https://github.com/klzgrad/naiveproxy/releases"); + sw.WriteLine("下载相应版本,Windows选择naiveproxy-x.xx-win.zip,解压后提取naive.exe。与config.json放在同一目录,运行naive.exe即可。"); + sw.WriteLine("-----------------------------------------\n"); + //sw.WriteLine("其他平台的客户端,暂未发布"); + //sw.WriteLine("QR.bmp"); + //sw.WriteLine("此文件为Trojan-QT5 (windows)、igniter(Android)、Shadowrocket(ios)扫码导入节点"); + //sw.WriteLine("Trojan-QT5 (windows)下载网址:https://github.com/TheWanderingCoel/Trojan-Qt5/releases"); + //sw.WriteLine("igniter(Android)下载网址:https://github.com/trojan-gfw/igniter/releases"); + //sw.WriteLine("Shadowrocket(ios)下载,需要使用国外区的AppleID。请自行谷歌方法。"); + + //sw.WriteLine("-----------------------------------------\n"); + sw.WriteLine("url.txt"); + sw.WriteLine("此文件为NaiveGUI(windows)复制粘贴导入节点的网址"); + sw.WriteLine("NaiveGUI(windows)下载网址:https://github.com/ExcitedCodes/NaiveGUI/releases"); + + sw.WriteLine("-----------------------------------------\n"); + sw.WriteLine("服务器通用连接配置参数"); + sw.WriteLine($"地址(address):{ReceiveConfigurationParameters[4]}"); + sw.WriteLine($"用户名:{ReceiveConfigurationParameters[5]}"); + sw.WriteLine($"密钥:{ReceiveConfigurationParameters[6]}"); + } + //移动Naive官方配置config.json到与上述文件同一目录 + File.Move(@"3in1_config\naive_config\config.json", @"3in1_config\naive_config\" + saveFileFolder + @"\config.json"); + + client.Disconnect(); + + currentStatus = "安装成功"; + textBlockName.Dispatcher.BeginInvoke(updateAction, textBlockName, progressBar, currentStatus); + Thread.Sleep(1000); + + //显示服务端连接参数 + MessageBox.Show("安装成功,所有相关配置参数与二维码,url都已保存在相应目录下,点击“确定”后打开"); + string openFolderPath = @"3in1_config\"; + System.Diagnostics.Process.Start("explorer.exe", openFolderPath); + + return; + } + } + catch (Exception ex1)//例外处理 + #region 例外处理 + { + //MessageBox.Show(ex1.Message); + if (ex1.Message.Contains("连接尝试失败") == true) + { + MessageBox.Show($"{ex1.Message}\n请检查主机地址及端口是否正确,如果通过代理,请检查代理是否正常工作"); + } + + else if (ex1.Message.Contains("denied (password)") == true) + { + MessageBox.Show($"{ex1.Message}\n密码错误或用户名错误"); + } + else if (ex1.Message.Contains("Invalid private key file") == true) + { + MessageBox.Show($"{ex1.Message}\n所选密钥文件错误或者格式不对"); + } + else if (ex1.Message.Contains("denied (publickey)") == true) + { + MessageBox.Show($"{ex1.Message}\n使用密钥登录,密钥文件错误或用户名错误"); + } + else if (ex1.Message.Contains("目标计算机积极拒绝") == true) + { + MessageBox.Show($"{ex1.Message}\n主机地址错误,如果使用了代理,也可能是连接代理的端口错误"); + } + else + { + MessageBox.Show("发生错误"); + MessageBox.Show(ex1.Message); + } + currentStatus = "主机登录失败"; + textBlockName.Dispatcher.BeginInvoke(updateAction, textBlockName, progressBar, currentStatus); + + } + #endregion + + } + + //private void ButtonTestTrojanClientInfoWin_Click(object sender, RoutedEventArgs e) //{ // //TrojanResultClientInfoWindow resultClientInformation = new TrojanResultClientInfoWindow(); diff --git a/ProxySU/Properties/AssemblyInfo.cs b/ProxySU/Properties/AssemblyInfo.cs index 0c65214..8f5722d 100644 --- a/ProxySU/Properties/AssemblyInfo.cs +++ b/ProxySU/Properties/AssemblyInfo.cs @@ -51,5 +51,5 @@ using System.Windows; // 可以指定所有值,也可以使用以下所示的 "*" 预置版本号和修订号 // 方法是按如下所示使用“*”: : // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.5.4.0")] -[assembly: AssemblyFileVersion("1.5.4.0")] +[assembly: AssemblyVersion("1.6.0.0")] +[assembly: AssemblyFileVersion("1.6.0.0")] diff --git a/ProxySU/TrojanResultClientInfoWindow.xaml.cs b/ProxySU/TrojanResultClientInfoWindow.xaml.cs index 1e06a4d..52e318e 100644 --- a/ProxySU/TrojanResultClientInfoWindow.xaml.cs +++ b/ProxySU/TrojanResultClientInfoWindow.xaml.cs @@ -40,7 +40,7 @@ namespace ProxySU } - //生成v2rayN客户端导入文件 + //生成Trojan-QT5 (windows)、igniter(Android)、Shadowrocket(ios)客户端导入文件 private void GenerateV2rayShareQRcodeAndBase64Url() { diff --git a/ProxySU/bin/Beta/Beta.zip b/ProxySU/bin/Beta/Beta.zip index 3aaaebc8403d58207d6b0995b049cbe35d5856b2..b74508acf2fd36903e678b17491dd9f261d119d2 100644 GIT binary patch delta 43227 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Ĉ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 Yqoqbb2tFntJm8NOd>~cpLBYNM1J5W|O#lD@ diff --git a/TemplateConfg/3in1_config.caddyfile b/TemplateConfg/3in1_config.caddyfile new file mode 100644 index 0000000..9d8f8b8 --- /dev/null +++ b/TemplateConfg/3in1_config.caddyfile @@ -0,0 +1,18 @@ +##domain## { + log stdout + errors stderr + root /var/www + tls off + forwardproxy { + ##basicauth## + probe_resistance + hide_ip + hide_via + upstream http://127.0.0.1:8383 + } + ##sites## + proxy ##path## localhost:10000 { + websocket + header_upstream -Origin + } +} \ No newline at end of file