From 6aadbf65d2b003075e1d16ccbeda399ed4e335af Mon Sep 17 00:00:00 2001 From: ProxySU Date: Sun, 25 Oct 2020 20:22:28 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B0=83=E6=95=B4NaiveProxy=E6=9C=8D=E5=8A=A1?= =?UTF-8?q?=E7=AB=AF=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ProxySU/MainWindow.xaml | 2 +- ProxySU/MainWindow.xaml.cs | 2405 ++++++-------------- ProxySU/Properties/AssemblyInfo.cs | 4 +- ProxySU/ResultClientInformation.xaml.cs | 289 ++- ProxySU/Translations/ProxySU.en-US.xaml | 24 +- ProxySU/Translations/ProxySU.zh-CN.xaml | 24 +- ProxySU/Translations/ProxySU.zh-TW.xaml | 24 +- ProxySU/bin/Beta/Beta.zip | Bin 745150 -> 745091 bytes TemplateConfg/naive/naive_server.caddyfile | 11 + 9 files changed, 931 insertions(+), 1852 deletions(-) create mode 100644 TemplateConfg/naive/naive_server.caddyfile diff --git a/ProxySU/MainWindow.xaml b/ProxySU/MainWindow.xaml index f1e2a15..7729f54 100644 --- a/ProxySU/MainWindow.xaml +++ b/ProxySU/MainWindow.xaml @@ -5,7 +5,7 @@ xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local="clr-namespace:ProxySU" mc:Ignorable="d" - Title="ProxySU - v2.4.11" Height="675" Width="650"> + Title="ProxySU - v2.4.12" Height="675" Width="650"> diff --git a/ProxySU/MainWindow.xaml.cs b/ProxySU/MainWindow.xaml.cs index 60653f1..bfce48e 100644 --- a/ProxySU/MainWindow.xaml.cs +++ b/ProxySU/MainWindow.xaml.cs @@ -42,6 +42,7 @@ namespace ProxySU public string Value { get; set; } } public static string[] ReceiveConfigurationParameters { get; set; } + //ReceiveConfigurationParameters[0]----模板类型 //ReceiveConfigurationParameters[1]----服务端口 //ReceiveConfigurationParameters[2]----V2Ray uuid/(naive/Trojan-go/Trojan/SSR/SS)' Password @@ -53,6 +54,7 @@ namespace ProxySU //ReceiveConfigurationParameters[8]----方案名称 //ReceiveConfigurationParameters[9]----插件参数选项/VMESS tcp Path/MTProto Parameters //public static ConnectionInfo ConnectionInfo; + public static string proxyType = "V2Ray"; //代理类型标识: V2Ray\TrojanGo\Trojan\NaiveProxy public static readonly string pwdir = AppDomain.CurrentDomain.BaseDirectory; //执行文件所在目录 static bool testDomain = false; //设置标识--域名是否需要检测解析,初始化为不需要 @@ -3467,6 +3469,7 @@ namespace ProxySU //传递参数 ReceiveConfigurationParameters[4] = TextBoxNaiveHostDomain.Text;//传递域名 + ReceiveConfigurationParameters[1] = "443";//传递端口 ReceiveConfigurationParameters[3] = TextBoxNaiveUser.Text;//传递用户名 ReceiveConfigurationParameters[2] = TextBoxNaivePassword.Text;//传递密码 ReceiveConfigurationParameters[7] = TextBoxNaiveSites.Text;//传递伪装网站 @@ -3581,7 +3584,7 @@ namespace ProxySU currentStatus = Application.Current.FindResource("DisplayInstallInfo_UpgradeNaiveProxy").ToString(); MainWindowsShowInfo(currentStatus); - sshShellCommand = $"curl -o /tmp/caddy.zip https://raw.githubusercontent.com/proxysu/Resources/master/Caddy2/caddy20200816.zip"; + sshShellCommand = $"curl -o /tmp/caddy.zip https://raw.githubusercontent.com/proxysu/Resources/master/Caddy2/caddy2.zip"; currentShellCommandResult = MainWindowsShowCmd(client, sshShellCommand); sshShellCommand = @"yes | unzip -o /tmp/caddy.zip"; @@ -3610,40 +3613,51 @@ namespace ProxySU MainWindowsShowInfo(currentStatus); //生成服务端配置 - string caddyConfig = $"{pwdir}" + @"TemplateConfg\naive\naive_server_config.json"; - using (StreamReader reader = File.OpenText(caddyConfig)) - { - JObject serverJson = (JObject)JToken.ReadFrom(new JsonTextReader(reader)); - serverJson["apps"]["http"]["servers"]["srv0"]["routes"][0]["handle"][0]["auth_user"] = ReceiveConfigurationParameters[3];//----用户名 - serverJson["apps"]["http"]["servers"]["srv0"]["routes"][0]["handle"][0]["auth_pass"] = ReceiveConfigurationParameters[2]; //----密码 + string caddyConfig = $"{pwdir}" + @"TemplateConfg\naive\naive_server.caddyfile"; + string upLoadPath = @"/etc/caddy/Caddyfile"; + UploadConfig(connectionInfo, caddyConfig, upLoadPath); + //$"sed -i 's/##domain##/{ReceiveConfigurationParameters[4]}/' {upLoadPath}" + //$"sed -i 's/##basicauth##/basicauth {ReceiveConfigurationParameters[3]} {ReceiveConfigurationParameters[2]}/' {upLoadPath}" + sshShellCommand = $"sed -i 's/##domain##/{ReceiveConfigurationParameters[4]}/' {upLoadPath}"; + currentShellCommandResult = MainWindowsShowCmd(client, sshShellCommand); - serverJson["apps"]["http"]["servers"]["srv0"]["routes"][1]["match"][0]["host"][0] = ReceiveConfigurationParameters[4]; //----域名 + sshShellCommand = $"sed -i 's/##basicauth##/basic_auth {ReceiveConfigurationParameters[3]} {ReceiveConfigurationParameters[2]}/' {upLoadPath}"; + currentShellCommandResult = MainWindowsShowCmd(client, sshShellCommand); - serverJson["apps"]["http"]["servers"]["srv0"]["tls_connection_policies"][0]["match"]["sni"][0] = ReceiveConfigurationParameters[4]; //----域名 + //string caddyConfig = $"{pwdir}" + @"TemplateConfg\naive\naive_server_config.json"; + //using (StreamReader reader = File.OpenText(caddyConfig)) + //{ + // JObject serverJson = (JObject)JToken.ReadFrom(new JsonTextReader(reader)); + // serverJson["apps"]["http"]["servers"]["srv0"]["routes"][0]["handle"][0]["auth_user"] = ReceiveConfigurationParameters[3];//----用户名 + // serverJson["apps"]["http"]["servers"]["srv0"]["routes"][0]["handle"][0]["auth_pass"] = ReceiveConfigurationParameters[2]; //----密码 - serverJson["apps"]["tls"]["automation"]["policies"][0]["subjects"][0] = ReceiveConfigurationParameters[4]; //-----域名 - serverJson["apps"]["tls"]["automation"]["policies"][0]["issuer"]["email"] = $"user@{ReceiveConfigurationParameters[4]}"; //-----邮箱 - //保存配置文件 - using (StreamWriter sw = new StreamWriter(@"config.json")) - { - sw.Write(serverJson.ToString()); - } - } - string upLoadPath = @"/etc/caddy/config.json"; - UploadConfig(connectionInfo, @"config.json", upLoadPath); + // serverJson["apps"]["http"]["servers"]["srv0"]["routes"][1]["match"][0]["host"][0] = ReceiveConfigurationParameters[4]; //----域名 - File.Delete(@"config.json"); + // serverJson["apps"]["http"]["servers"]["srv0"]["tls_connection_policies"][0]["match"]["sni"][0] = ReceiveConfigurationParameters[4]; //----域名 + + // serverJson["apps"]["tls"]["automation"]["policies"][0]["subjects"][0] = ReceiveConfigurationParameters[4]; //-----域名 + // serverJson["apps"]["tls"]["automation"]["policies"][0]["issuer"]["email"] = $"user@{ReceiveConfigurationParameters[4]}"; //-----邮箱 + // //保存配置文件 + // using (StreamWriter sw = new StreamWriter(@"config.json")) + // { + // sw.Write(serverJson.ToString()); + // } + //} + //string upLoadPath = @"/etc/caddy/config.json"; + //UploadConfig(connectionInfo, @"config.json", upLoadPath); + + //File.Delete(@"config.json"); //****** Caddy配置文件上传成功,OK! ****** SetUpProgressBarProcessing(70); currentStatus = Application.Current.FindResource("DisplayInstallInfo_UploadCaddyConfigOK").ToString(); MainWindowsShowInfo(currentStatus); - sshShellCommand = @"sed -i 's/Caddyfile/config.json/' /lib/systemd/system/caddy.service"; - currentShellCommandResult = MainWindowsShowCmd(client, sshShellCommand); + //sshShellCommand = @"sed -i 's/Caddyfile/config.json/' /lib/systemd/system/caddy.service"; + //currentShellCommandResult = MainWindowsShowCmd(client, sshShellCommand); - sshShellCommand = @"systemctl daemon-reload"; - currentShellCommandResult = MainWindowsShowCmd(client, sshShellCommand); + //sshShellCommand = @"systemctl daemon-reload"; + //currentShellCommandResult = MainWindowsShowCmd(client, sshShellCommand); //程序启动检测Caddy functionResult = SoftStartDetect(client, "caddy", @"/usr/bin/caddy"); @@ -6075,6 +6089,678 @@ namespace ProxySU } + #region 启用Root密码登录 + private void ButtonEnableRootPassWord_Click(object sender, RoutedEventArgs e) + { + //******"本功能需要当前登录的账户具有sudo权限,是否为远程主机启用root账户并设置密码?"****** + string messageShow = Application.Current.FindResource("MessageBoxShow_EnableRootPassword").ToString(); + MessageBoxResult messageBoxResult = MessageBox.Show(messageShow, "", MessageBoxButton.YesNo, MessageBoxImage.Question); + if (messageBoxResult == MessageBoxResult.Yes) + { + ConnectionInfo connectionInfo = GenerateConnectionInfo(); + if (connectionInfo == null) + { + //****** "远程主机连接信息有误,请检查!" ****** + MessageBox.Show(Application.Current.FindResource("MessageBoxShow_ErrorHostConnection").ToString()); + return; + } + + ReceiveConfigurationParameters[4] = TextBoxHost.Text;//传递主机地址 + ReceiveConfigurationParameters[2] = PasswordBoxHostPassword.Password;//传递当前账户密码 + + installationDegree = 0; + TextBoxMonitorCommandResults.Text = ""; + Thread thread = new Thread(() => EnableRootPassWord(connectionInfo)); + thread.SetApartmentState(ApartmentState.STA); + thread.Start(); + } + } + //启用Root密码登录进程 + private void EnableRootPassWord(ConnectionInfo connectionInfo) + { + functionResult = true; + getApt = false; + getDnf = false; + getYum = false; + onlyIpv6 = false; + + //******"正在登录远程主机......"****** + SetUpProgressBarProcessing(1); + string currentStatus = Application.Current.FindResource("DisplayInstallInfo_Login").ToString(); + MainWindowsShowInfo(currentStatus); + + try + { + #region 主机指纹,暂未启用 + //byte[] expectedFingerPrint = new byte[] { + // 0x66, 0x31, 0xaf, 0x00, 0x54, 0xb9, 0x87, 0x31, + // 0xff, 0x58, 0x1c, 0x31, 0xb1, 0xa2, 0x4c, 0x6b + // }; + #endregion + using (var client = new SshClient(connectionInfo)) + + { + #region ssh登录验证主机指纹代码块,暂未启用 + // client.HostKeyReceived += (sender, e) => + // { + // if (expectedFingerPrint.Length == e.FingerPrint.Length) + // { + // for (var i = 0; i < expectedFingerPrint.Length; i++) + // { + // if (expectedFingerPrint[i] != e.FingerPrint[i]) + // { + // e.CanTrust = false; + // break; + // } + // } + // } + // else + // { + // e.CanTrust = false; + // } + // }; + #endregion + + client.Connect(); + if (client.IsConnected == true) + { + //******"主机登录成功"****** + SetUpProgressBarProcessing(5); + currentStatus = Application.Current.FindResource("DisplayInstallInfo_LoginSuccessful").ToString(); + MainWindowsShowInfo(currentStatus); + } + + //检测root权限 5--7 + //******"检测是否运行在root权限下..."******01 + SetUpProgressBarProcessing(5); + currentStatus = Application.Current.FindResource("DisplayInstallInfo_DetectionRootPermission").ToString(); + MainWindowsShowInfo(currentStatus); + + sshShellCommand = @"id -u"; + currentShellCommandResult = MainWindowsShowCmd(client, sshShellCommand); + if (currentShellCommandResult.TrimEnd('\r', '\n').Equals("0") == true) + { + //******"当前账户已经具有root权限,无需再设置!"****** + currentStatus = Application.Current.FindResource("MessageBoxShow_AlreadyRoot").ToString(); + MainWindowsShowInfo(currentStatus); + MessageBox.Show(currentStatus); + client.Disconnect(); + return; + } + + SetUpProgressBarProcessing(10); + string hostPassword = "'" + ReceiveConfigurationParameters[2] + "'"; + //MessageBox.Show(hostPassword); + sshShellCommand = $"echo {hostPassword} | sudo -S id -u"; + //MessageBox.Show(sshShellCommand); + currentShellCommandResult = MainWindowsShowCmd(client, sshShellCommand); + if (currentShellCommandResult.TrimEnd('\r', '\n').Equals("0") == false) + { + //******"当前账户无法获取sudo权限,设置失败!"****** + currentStatus = Application.Current.FindResource("MessageBoxShow_NoSudoToAccount").ToString(); + MainWindowsShowInfo(currentStatus); + MessageBox.Show(currentStatus); + client.Disconnect(); + return; + } + + SetUpProgressBarProcessing(20); + string cmdPre = $"echo {hostPassword} | sudo -S id -u" + ';'; + sshShellCommand = cmdPre + @"sudo sed -i 's/PermitRootLogin /#PermitRootLogin /g' /etc/ssh/sshd_config"; + currentShellCommandResult = MainWindowsShowCmd(client, sshShellCommand); + + sshShellCommand = cmdPre + @"sudo sed -i 's/PasswordAuthentication /#PasswordAuthentication /g' /etc/ssh/sshd_config"; + currentShellCommandResult = MainWindowsShowCmd(client, sshShellCommand); + + SetUpProgressBarProcessing(30); + sshShellCommand = cmdPre + @"sudo sed -i 's/PermitEmptyPasswords /#PermitEmptyPasswords /g' /etc/ssh/sshd_config"; + currentShellCommandResult = MainWindowsShowCmd(client, sshShellCommand); + + sshShellCommand = cmdPre + @"echo 'PermitRootLogin yes' | sudo tee -a /etc/ssh/sshd_config"; + currentShellCommandResult = MainWindowsShowCmd(client, sshShellCommand); + + SetUpProgressBarProcessing(40); + sshShellCommand = cmdPre + @"echo 'PasswordAuthentication yes' | sudo tee -a /etc/ssh/sshd_config"; + currentShellCommandResult = MainWindowsShowCmd(client, sshShellCommand); + + sshShellCommand = cmdPre + @"echo 'PermitEmptyPasswords no' | sudo tee -a /etc/ssh/sshd_config"; + currentShellCommandResult = MainWindowsShowCmd(client, sshShellCommand); + + SetUpProgressBarProcessing(60); + sshShellCommand = cmdPre + @"sudo systemctl restart sshd"; + currentShellCommandResult = MainWindowsShowCmd(client, sshShellCommand); + + //******"生成20位随机密码!"****** + currentStatus = Application.Current.FindResource("DisplayInstallInfo_GenerateRandomPassword").ToString(); + MainWindowsShowInfo(currentStatus); + + sshShellCommand = @"cat /dev/urandom | tr -dc '_A-Z#\-+=a-z(0-9%^>)]{<|' | head -c 20 ; echo ''"; + currentShellCommandResult = MainWindowsShowCmd(client, sshShellCommand); + + SetUpProgressBarProcessing(80); + string setPassword = currentShellCommandResult.TrimEnd('\r', '\n') + '\n'; + + sshShellCommand = cmdPre + $"echo -e \"{setPassword}{setPassword}\" | sudo passwd root"; + currentShellCommandResult = MainWindowsShowCmd(client, sshShellCommand); + + client.Disconnect(); + + //***保存密码信息*** + currentStatus = Application.Current.FindResource("DisplayInstallInfo_EnableRootPasswordSavePasswordInfo").ToString(); + MainWindowsShowInfo(currentStatus); + + string filePath = ReceiveConfigurationParameters[4].Replace(':', '_'); + CheckDir(filePath); + using (StreamWriter sw = new StreamWriter($"{filePath}\\host_password_info.txt")) + { + sw.WriteLine(ReceiveConfigurationParameters[4]); + sw.WriteLine("root"); + sw.WriteLine(setPassword); + } + + SetUpProgressBarProcessing(100); + //***远程主机Root账户密码登录已启用,密码保存在随后打开的文件夹中!*** + currentStatus = Application.Current.FindResource("DisplayInstallInfo_EnableRootPasswordSuccess").ToString(); + MainWindowsShowInfo(currentStatus); + MessageBox.Show(currentStatus); + System.Diagnostics.Process.Start("explorer.exe", filePath); + return; + } + } + catch (Exception ex1)//例外处理 + #region 例外处理 + { + ProcessException(ex1.Message); + + //****** "主机登录失败!" ****** + currentStatus = Application.Current.FindResource("DisplayInstallInfo_LoginFailed").ToString(); + MainWindowsShowInfo(currentStatus); + } + #endregion + + } + + #endregion + + #region 启用Root证书密钥登录 + private void ButtonEnableRootCert_Click(object sender, RoutedEventArgs e) + { + //******"本功能需要当前登录的账户具有root或者sudo权限,是否为远程主机启用root证书密钥登录?"****** + string messageShow = Application.Current.FindResource("MessageBoxShow_ButtonEnableRootCert").ToString(); + MessageBoxResult messageBoxResult = MessageBox.Show(messageShow, "", MessageBoxButton.YesNo, MessageBoxImage.Question); + if (messageBoxResult == MessageBoxResult.Yes) + { + ConnectionInfo connectionInfo = GenerateConnectionInfo(); + if (connectionInfo == null) + { + //****** "远程主机连接信息有误,请检查!" ****** + MessageBox.Show(Application.Current.FindResource("MessageBoxShow_ErrorHostConnection").ToString()); + return; + } + + ReceiveConfigurationParameters[4] = TextBoxHost.Text;//传递主机地址 + ReceiveConfigurationParameters[2] = PasswordBoxHostPassword.Password; + + installationDegree = 0; + TextBoxMonitorCommandResults.Text = ""; + Thread thread = new Thread(() => EnableRootCert(connectionInfo)); + thread.SetApartmentState(ApartmentState.STA); + thread.Start(); + } + } + + //启用Root证书密钥登录进程 + private void EnableRootCert(ConnectionInfo connectionInfo) + { + functionResult = true; + getApt = false; + getDnf = false; + getYum = false; + onlyIpv6 = false; + + string filePath = String.Empty; + + //******"正在登录远程主机......"****** + SetUpProgressBarProcessing(1); + string currentStatus = Application.Current.FindResource("DisplayInstallInfo_Login").ToString(); + MainWindowsShowInfo(currentStatus); + + try + { + #region 主机指纹,暂未启用 + //byte[] expectedFingerPrint = new byte[] { + // 0x66, 0x31, 0xaf, 0x00, 0x54, 0xb9, 0x87, 0x31, + // 0xff, 0x58, 0x1c, 0x31, 0xb1, 0xa2, 0x4c, 0x6b + // }; + #endregion + using (var client = new SshClient(connectionInfo)) + + { + #region ssh登录验证主机指纹代码块,暂未启用 + // client.HostKeyReceived += (sender, e) => + // { + // if (expectedFingerPrint.Length == e.FingerPrint.Length) + // { + // for (var i = 0; i < expectedFingerPrint.Length; i++) + // { + // if (expectedFingerPrint[i] != e.FingerPrint[i]) + // { + // e.CanTrust = false; + // break; + // } + // } + // } + // else + // { + // e.CanTrust = false; + // } + // }; + #endregion + + client.Connect(); + if (client.IsConnected == true) + { + //******"主机登录成功"****** + SetUpProgressBarProcessing(5); + currentStatus = Application.Current.FindResource("DisplayInstallInfo_LoginSuccessful").ToString(); + MainWindowsShowInfo(currentStatus); + } + + //检测root权限 5--7 + //******"检测是否运行在root权限下..."******01 + SetUpProgressBarProcessing(5); + currentStatus = Application.Current.FindResource("DisplayInstallInfo_DetectionRootPermission").ToString(); + MainWindowsShowInfo(currentStatus); + + sshShellCommand = @"id -u"; + currentShellCommandResult = MainWindowsShowCmd(client, sshShellCommand); + if (currentShellCommandResult.TrimEnd('\r', '\n').Equals("0") == true) + { + SetUpProgressBarProcessing(20); + + //***正在生成密钥......*** + currentStatus = Application.Current.FindResource("DisplayInstallInfo_EnableRootCertGenerateCert").ToString(); + MainWindowsShowInfo(currentStatus); + + sshShellCommand = @"rm -rf /tmp/rootuser.key /tmp/rootuser.key.pub"; + currentShellCommandResult = MainWindowsShowCmd(client, sshShellCommand); + + sshShellCommand = @"yes | ssh-keygen -b 2048 -t rsa -f /tmp/rootuser.key -q -N ''"; + currentShellCommandResult = MainWindowsShowCmd(client, sshShellCommand); + + sshShellCommand = @"yes | ssh-keygen -p -P '' -N '' -m PEM -f /tmp/rootuser.key"; + currentShellCommandResult = MainWindowsShowCmd(client, sshShellCommand); + + sshShellCommand = @"mkdir -p /root/.ssh"; + currentShellCommandResult = MainWindowsShowCmd(client, sshShellCommand); + + sshShellCommand = @"cat /tmp/rootuser.key.pub | tee -a /root/.ssh/authorized_keys"; + currentShellCommandResult = MainWindowsShowCmd(client, sshShellCommand); + + sshShellCommand = @"chmod 777 /tmp/rootuser.key"; + currentShellCommandResult = MainWindowsShowCmd(client, sshShellCommand); + + SetUpProgressBarProcessing(30); + //***正在下载密钥......*** + currentStatus = Application.Current.FindResource("DisplayInstallInfo_EnableRootCertDownloadCert").ToString(); + MainWindowsShowInfo(currentStatus); + + filePath = CreateConfigSaveDir(@"root_cert", ReceiveConfigurationParameters[4].Replace(':', '_')); + string localConfigSavePathAndFileName = $"{filePath}\\rootuser.key"; + string remoteConfigPathAndFileName = @"/tmp/rootuser.key"; + DownloadConfig(connectionInfo, localConfigSavePathAndFileName, remoteConfigPathAndFileName); + + localConfigSavePathAndFileName = $"{filePath}\\rootuser.key.pub"; + remoteConfigPathAndFileName = @"/tmp/rootuser.key.pub"; + DownloadConfig(connectionInfo, localConfigSavePathAndFileName, remoteConfigPathAndFileName); + + sshShellCommand = @"rm -rf /tmp/rootuser.key /tmp/rootuser.key.pub"; + currentShellCommandResult = MainWindowsShowCmd(client, sshShellCommand); + + SetUpProgressBarProcessing(50); + //***远程主机启用密钥登录......*** + currentStatus = Application.Current.FindResource("DisplayInstallInfo_EnableRootCertSetCertEnable").ToString(); + MainWindowsShowInfo(currentStatus); + + sshShellCommand = @"sed -i 's/PermitRootLogin /#PermitRootLogin /g' /etc/ssh/sshd_config"; + currentShellCommandResult = MainWindowsShowCmd(client, sshShellCommand); + + sshShellCommand = @"sed -i 's/StrictModes /#StrictModes /g' /etc/ssh/sshd_config"; + currentShellCommandResult = MainWindowsShowCmd(client, sshShellCommand); + + SetUpProgressBarProcessing(70); + sshShellCommand = @"sed -i 's/PubkeyAuthentication /#PubkeyAuthentication /g' /etc/ssh/sshd_config"; + currentShellCommandResult = MainWindowsShowCmd(client, sshShellCommand); + + sshShellCommand = @"sed -i 's/#AuthorizedKeysFile /AuthorizedKeysFile /g' /etc/ssh/sshd_config"; + currentShellCommandResult = MainWindowsShowCmd(client, sshShellCommand); + + SetUpProgressBarProcessing(80); + sshShellCommand = @"sed -i 's/#RSAAuthentication /RSAAuthentication /g' /etc/ssh/sshd_config"; + currentShellCommandResult = MainWindowsShowCmd(client, sshShellCommand); + + sshShellCommand = @"echo 'PermitRootLogin yes' | tee -a /etc/ssh/sshd_config"; + currentShellCommandResult = MainWindowsShowCmd(client, sshShellCommand); + + SetUpProgressBarProcessing(90); + sshShellCommand = @"echo 'StrictModes no' | tee -a /etc/ssh/sshd_config"; + currentShellCommandResult = MainWindowsShowCmd(client, sshShellCommand); + + sshShellCommand = @"echo 'PubkeyAuthentication yes' | tee -a /etc/ssh/sshd_config"; + currentShellCommandResult = MainWindowsShowCmd(client, sshShellCommand); + + sshShellCommand = @"systemctl restart sshd"; + currentShellCommandResult = MainWindowsShowCmd(client, sshShellCommand); + + } + else + { + SetUpProgressBarProcessing(10); + string hostPassword = "'" + ReceiveConfigurationParameters[2] + "'"; + //MessageBox.Show(hostPassword); + sshShellCommand = $"echo {hostPassword} | sudo -S id -u"; + //MessageBox.Show(sshShellCommand); + currentShellCommandResult = MainWindowsShowCmd(client, sshShellCommand); + //MessageBox.Show(currentShellCommandResult); + if (currentShellCommandResult.TrimEnd('\r', '\n').Equals("0") == false) + { + //******"当前账户无法获取sudo权限,设置失败!"****** + currentStatus = Application.Current.FindResource("MessageBoxShow_NoSudoToAccount").ToString(); + MainWindowsShowInfo(currentStatus); + MessageBox.Show(currentStatus); + client.Disconnect(); + return; + } + + SetUpProgressBarProcessing(20); + string cmdPre = $"echo {hostPassword} | sudo -S id -u" + ';'; + //***正在生成密钥......*** + currentStatus = Application.Current.FindResource("DisplayInstallInfo_EnableRootCertGenerateCert").ToString(); + MainWindowsShowInfo(currentStatus); + + sshShellCommand = cmdPre + @"sudo rm -rf /tmp/rootuser.key /tmp/rootuser.key.pub"; + currentShellCommandResult = MainWindowsShowCmd(client, sshShellCommand); + + sshShellCommand = cmdPre + @"yes | sudo ssh-keygen -b 2048 -t rsa -f /tmp/rootuser.key -q -N ''"; + currentShellCommandResult = MainWindowsShowCmd(client, sshShellCommand); + + sshShellCommand = cmdPre + @"yes | sudo ssh-keygen -p -P '' -N '' -m PEM -f /tmp/rootuser.key"; + currentShellCommandResult = MainWindowsShowCmd(client, sshShellCommand); + + sshShellCommand = cmdPre + @"sudo mkdir -p /root/.ssh"; + currentShellCommandResult = MainWindowsShowCmd(client, sshShellCommand); + + sshShellCommand = cmdPre + @"cat /tmp/rootuser.key.pub | sudo tee -a /root/.ssh/authorized_keys"; + currentShellCommandResult = MainWindowsShowCmd(client, sshShellCommand); + + sshShellCommand = cmdPre + @"sudo chmod 777 /tmp/rootuser.key"; + currentShellCommandResult = MainWindowsShowCmd(client, sshShellCommand); + + SetUpProgressBarProcessing(30); + //***正在下载密钥......*** + currentStatus = Application.Current.FindResource("DisplayInstallInfo_EnableRootCertDownloadCert").ToString(); + MainWindowsShowInfo(currentStatus); + + filePath = CreateConfigSaveDir(@"root_cert", ReceiveConfigurationParameters[4].Replace(':', '_')); + string localConfigSavePathAndFileName = $"{filePath}\\rootuser.key"; + string remoteConfigPathAndFileName = @"/tmp/rootuser.key"; + DownloadConfig(connectionInfo, localConfigSavePathAndFileName, remoteConfigPathAndFileName); + + localConfigSavePathAndFileName = $"{filePath}\\rootuser.key.pub"; + remoteConfigPathAndFileName = @"/tmp/rootuser.key.pub"; + DownloadConfig(connectionInfo, localConfigSavePathAndFileName, remoteConfigPathAndFileName); + + sshShellCommand = cmdPre + @"sudo rm -rf /tmp/rootuser.key /tmp/rootuser.key.pub"; + currentShellCommandResult = MainWindowsShowCmd(client, sshShellCommand); + + SetUpProgressBarProcessing(50); + //***远程主机启用密钥登录......*** + currentStatus = Application.Current.FindResource("DisplayInstallInfo_EnableRootCertSetCertEnable").ToString(); + MainWindowsShowInfo(currentStatus); + + //string cmdPre = $"echo {hostPassword} | sudo -S id -u" + ';'; + sshShellCommand = cmdPre + @"sudo sed -i 's/PermitRootLogin /#PermitRootLogin /g' /etc/ssh/sshd_config"; + currentShellCommandResult = MainWindowsShowCmd(client, sshShellCommand); + + sshShellCommand = cmdPre + @"sudo sed -i 's/StrictModes /#StrictModes /g' /etc/ssh/sshd_config"; + currentShellCommandResult = MainWindowsShowCmd(client, sshShellCommand); + + SetUpProgressBarProcessing(70); + sshShellCommand = cmdPre + @"sudo sed -i 's/PubkeyAuthentication /#PubkeyAuthentication /g' /etc/ssh/sshd_config"; + currentShellCommandResult = MainWindowsShowCmd(client, sshShellCommand); + + sshShellCommand = cmdPre + @"sudo sed -i 's/#AuthorizedKeysFile /AuthorizedKeysFile /g' /etc/ssh/sshd_config"; + currentShellCommandResult = MainWindowsShowCmd(client, sshShellCommand); + + SetUpProgressBarProcessing(80); + sshShellCommand = cmdPre + @"sudo sed -i 's/#RSAAuthentication /RSAAuthentication /g' /etc/ssh/sshd_config"; + currentShellCommandResult = MainWindowsShowCmd(client, sshShellCommand); + + sshShellCommand = cmdPre + @"echo 'PermitRootLogin yes' | sudo tee -a /etc/ssh/sshd_config"; + currentShellCommandResult = MainWindowsShowCmd(client, sshShellCommand); + + SetUpProgressBarProcessing(90); + sshShellCommand = cmdPre + @"echo 'StrictModes no' | sudo tee -a /etc/ssh/sshd_config"; + currentShellCommandResult = MainWindowsShowCmd(client, sshShellCommand); + + sshShellCommand = cmdPre + @"echo 'PubkeyAuthentication yes' | sudo tee -a /etc/ssh/sshd_config"; + currentShellCommandResult = MainWindowsShowCmd(client, sshShellCommand); + + sshShellCommand = cmdPre + @"sudo systemctl restart sshd"; + currentShellCommandResult = MainWindowsShowCmd(client, sshShellCommand); + + } + client.Disconnect(); + + SetUpProgressBarProcessing(100); + //******"远程主机root账户证书密钥登录已启用,密钥文件rootuser.key保存在随后打开的文件夹中!"****** + currentStatus = Application.Current.FindResource("MessageBoxShow_ButtonEnableRootCertSuccess").ToString(); + MainWindowsShowInfo(currentStatus); + MessageBox.Show(currentStatus); + System.Diagnostics.Process.Start("explorer.exe", filePath); + + return; + } + } + catch (Exception ex1)//例外处理 + #region 例外处理 + { + ProcessException(ex1.Message); + + //****** "主机登录失败!" ****** + currentStatus = Application.Current.FindResource("DisplayInstallInfo_LoginFailed").ToString(); + MainWindowsShowInfo(currentStatus); + } + #endregion + + } + + + #endregion + + #region 禁止root账户密码登录 + //root禁止密码登录 + private void ButtonRootProhibitsPasswordLogin_Click(object sender, RoutedEventArgs e) + { + //******"本功能需要远程主机已经开启了其他登录方式,如密钥方式等,否则将可能造成远程主机无法连接,是否禁止远程主机的root账户密码登录方式?"****** + string messageShow = Application.Current.FindResource("MessageBoxShow_ButtonRootProhibitsPasswordLogin").ToString(); + MessageBoxResult messageBoxResult = MessageBox.Show(messageShow, "", MessageBoxButton.YesNo, MessageBoxImage.Question); + if (messageBoxResult == MessageBoxResult.Yes) + { + ConnectionInfo connectionInfo = GenerateConnectionInfo(); + if (connectionInfo == null) + { + //****** "远程主机连接信息有误,请检查!" ****** + MessageBox.Show(Application.Current.FindResource("MessageBoxShow_ErrorHostConnection").ToString()); + return; + } + + ReceiveConfigurationParameters[4] = TextBoxHost.Text;//传递主机地址 + ReceiveConfigurationParameters[2] = PasswordBoxHostPassword.Password;//传递主机密码 + + installationDegree = 0; + TextBoxMonitorCommandResults.Text = ""; + Thread thread = new Thread(() => RootProhibitsPasswordLogin(connectionInfo)); + thread.SetApartmentState(ApartmentState.STA); + thread.Start(); + } + } + + //禁止root密码登录进程 + private void RootProhibitsPasswordLogin(ConnectionInfo connectionInfo) + { + functionResult = true; + getApt = false; + getDnf = false; + getYum = false; + onlyIpv6 = false; + + string filePath = String.Empty; + + //******"正在登录远程主机......"****** + SetUpProgressBarProcessing(1); + string currentStatus = Application.Current.FindResource("DisplayInstallInfo_Login").ToString(); + MainWindowsShowInfo(currentStatus); + + try + { + #region 主机指纹,暂未启用 + //byte[] expectedFingerPrint = new byte[] { + // 0x66, 0x31, 0xaf, 0x00, 0x54, 0xb9, 0x87, 0x31, + // 0xff, 0x58, 0x1c, 0x31, 0xb1, 0xa2, 0x4c, 0x6b + // }; + #endregion + using (var client = new SshClient(connectionInfo)) + + { + #region ssh登录验证主机指纹代码块,暂未启用 + // client.HostKeyReceived += (sender, e) => + // { + // if (expectedFingerPrint.Length == e.FingerPrint.Length) + // { + // for (var i = 0; i < expectedFingerPrint.Length; i++) + // { + // if (expectedFingerPrint[i] != e.FingerPrint[i]) + // { + // e.CanTrust = false; + // break; + // } + // } + // } + // else + // { + // e.CanTrust = false; + // } + // }; + #endregion + + client.Connect(); + if (client.IsConnected == true) + { + //******"主机登录成功"****** + SetUpProgressBarProcessing(5); + currentStatus = Application.Current.FindResource("DisplayInstallInfo_LoginSuccessful").ToString(); + MainWindowsShowInfo(currentStatus); + } + + //检测root权限 5--7 + //******"检测是否运行在root权限下..."******01 + SetUpProgressBarProcessing(5); + currentStatus = Application.Current.FindResource("DisplayInstallInfo_DetectionRootPermission").ToString(); + MainWindowsShowInfo(currentStatus); + + sshShellCommand = @"id -u"; + currentShellCommandResult = MainWindowsShowCmd(client, sshShellCommand); + if (currentShellCommandResult.TrimEnd('\r', '\n').Equals("0") == true) + { + SetUpProgressBarProcessing(20); + + //***正在关闭root账户密码登录方式......*** + currentStatus = Application.Current.FindResource("DisplayInstallInfo_SetRootProhibitsPasswordLogin").ToString(); + MainWindowsShowInfo(currentStatus); + + sshShellCommand = @"sed -i 's/PasswordAuthentication /#PasswordAuthentication /g' /etc/ssh/sshd_config"; + currentShellCommandResult = MainWindowsShowCmd(client, sshShellCommand); + + sshShellCommand = @"sed -i 's/PermitEmptyPasswords /#PermitEmptyPasswords /g' /etc/ssh/sshd_config"; + currentShellCommandResult = MainWindowsShowCmd(client, sshShellCommand); + + sshShellCommand = @"echo 'PasswordAuthentication no' | tee -a /etc/ssh/sshd_config"; + currentShellCommandResult = MainWindowsShowCmd(client, sshShellCommand); + + sshShellCommand = @"echo 'PermitEmptyPasswords no' | tee -a /etc/ssh/sshd_config"; + currentShellCommandResult = MainWindowsShowCmd(client, sshShellCommand); + + sshShellCommand = @"systemctl restart sshd"; + currentShellCommandResult = MainWindowsShowCmd(client, sshShellCommand); + } + else + { + SetUpProgressBarProcessing(10); + string hostPassword = "'" + ReceiveConfigurationParameters[2] + "'"; + //MessageBox.Show(hostPassword); + sshShellCommand = $"echo {hostPassword} | sudo -S id -u"; + //MessageBox.Show(sshShellCommand); + currentShellCommandResult = MainWindowsShowCmd(client, sshShellCommand); + //MessageBox.Show(currentShellCommandResult); + if (currentShellCommandResult.TrimEnd('\r', '\n').Equals("0") == false) + { + //******"当前账户无法获取sudo权限,设置失败!"****** + currentStatus = Application.Current.FindResource("MessageBoxShow_NoSudoToAccount").ToString(); + MainWindowsShowInfo(currentStatus); + MessageBox.Show(currentStatus); + client.Disconnect(); + return; + } + + SetUpProgressBarProcessing(20); + string cmdPre = $"echo {hostPassword} | sudo -S id -u" + ';'; + + //***正在关闭root账户密码登录方式......*** + currentStatus = Application.Current.FindResource("DisplayInstallInfo_SetRootProhibitsPasswordLogin").ToString(); + MainWindowsShowInfo(currentStatus); + + sshShellCommand = cmdPre + @"sudo sed -i 's/PasswordAuthentication /#PasswordAuthentication /g' /etc/ssh/sshd_config"; + currentShellCommandResult = MainWindowsShowCmd(client, sshShellCommand); + + sshShellCommand = cmdPre + @"sudo sed -i 's/PermitEmptyPasswords /#PermitEmptyPasswords /g' /etc/ssh/sshd_config"; + currentShellCommandResult = MainWindowsShowCmd(client, sshShellCommand); + + sshShellCommand = cmdPre + @"echo 'PasswordAuthentication no' | sudo tee -a /etc/ssh/sshd_config"; + currentShellCommandResult = MainWindowsShowCmd(client, sshShellCommand); + + sshShellCommand = cmdPre + @"echo 'PermitEmptyPasswords no' | sudo tee -a /etc/ssh/sshd_config"; + currentShellCommandResult = MainWindowsShowCmd(client, sshShellCommand); + + sshShellCommand = cmdPre + @"sudo systemctl restart sshd"; + currentShellCommandResult = MainWindowsShowCmd(client, sshShellCommand); + + } + client.Disconnect(); + + SetUpProgressBarProcessing(100); + //******"远程主机root账户密码登录方式已关闭!"****** + currentStatus = Application.Current.FindResource("MessageBoxShow_RootProhibitsPasswordLoginOK").ToString(); + MainWindowsShowInfo(currentStatus); + MessageBox.Show(currentStatus); + + return; + } + } + catch (Exception ex1)//例外处理 + #region 例外处理 + { + ProcessException(ex1.Message); + + //****** "主机登录失败!" ****** + currentStatus = Application.Current.FindResource("DisplayInstallInfo_LoginFailed").ToString(); + MainWindowsShowInfo(currentStatus); + } + #endregion + } + #endregion + + #endregion #region 资源工具标签页控制 @@ -6153,991 +6839,6 @@ namespace ProxySU } } - #endregion - - #region 三合一安装过程 - - // //生成三合一的v2ray路径 - // private void ButtonV2rayPath3in1_Click(object sender, RoutedEventArgs e) - // { - // string path = RandomUserName(); - // TextBoxV2rayPath3in1.Text = $"/{path}"; - // } - - // //生成三合一Trojan密码 - // private void ButtonTrojanPassword3in1_Click(object sender, RoutedEventArgs e) - // { - // TextBoxTrojanPassword3in1.Text = RandomUUID(); - // } - - // //生成三合一V2ray的UUID - // private void ButtonV2rayUUID3in1_Click(object sender, RoutedEventArgs e) - // { - // TextBoxV2rayUUID3in1.Text = RandomUUID(); - // } - - // //生成三合一中Naive的用户名 - // private void ButtonNaiveUser3in1_Click(object sender, RoutedEventArgs e) - // { - // TextBoxNaiveUser3in1.Text = RandomUserName(); - // } - - // //生成三合一中Naive的密码 - // private void ButtonNaivePassword3in1_Click(object sender, RoutedEventArgs e) - // { - // TextBoxNaivePassword3in1.Text = RandomUUID(); - // } - - // //启用三合一安装运行 - // private void Button_Login3in1_Click(object sender, RoutedEventArgs e) - // { - // if (string.IsNullOrEmpty(TextBoxDomain3in1.Text) == true) - // { - // MessageBox.Show("域名不能为空!"); - // return; - // } - // //ReceiveConfigurationParameters[0]----模板类型 - // //ReceiveConfigurationParameters[1]----Trojan的密码 - // //ReceiveConfigurationParameters[2]----v2ray的uuid - // //ReceiveConfigurationParameters[3]----v2ray的path - // //ReceiveConfigurationParameters[4]----domain - // //ReceiveConfigurationParameters[5]----Naive的用户名 - // //ReceiveConfigurationParameters[6]----Naive的密码 - // //ReceiveConfigurationParameters[7]----伪装网站 - // ConnectionInfo connectionInfo = GenerateConnectionInfo(); - // if (connectionInfo == null) - // { - // MessageBox.Show("远程主机连接信息有误,请检查"); - // return; - // } - // string serverConfig = ""; //服务端配置文件 - // string clientConfig = ""; //生成的客户端配置文件 - // string upLoadPath = ""; //服务端文件位置 - // //传递参数 - // ReceiveConfigurationParameters[4] = TextBoxDomain3in1.Text;//传递域名 - // ReceiveConfigurationParameters[7] = TextBoxSites3in1.Text;//传递伪装网站 - // ReceiveConfigurationParameters[2] = TextBoxV2rayUUID3in1.Text;//v2ray的uuid - // ReceiveConfigurationParameters[3] = TextBoxV2rayPath3in1.Text;//v2ray的path - // ReceiveConfigurationParameters[1] = TextBoxTrojanPassword3in1.Text;//Trojan的密码 - // ReceiveConfigurationParameters[5] = TextBoxNaiveUser3in1.Text;//Naive的用户名 - // ReceiveConfigurationParameters[6] = TextBoxNaivePassword3in1.Text;//Naive的密码 - // if (TextBoxSites3in1.Text.ToString().Length >= 7) - // { - // string testDomain = TextBoxSites3in1.Text.Substring(0, 7); - // if (String.Equals(testDomain, "https:/") || String.Equals(testDomain, "http://")) - // { - // //MessageBox.Show(testDomain); - // ReceiveConfigurationParameters[7] = TextBoxSites3in1.Text.Replace("/", "\\/"); - // } - // else - // { - // ReceiveConfigurationParameters[7] = "http:\\/\\/" + TextBoxSites3in1.Text; - // } - // } - - // //Thread thread - // Thread thread = new Thread(() => StartSetUp3in1(connectionInfo, TextBlockSetUpProcessing, ProgressBarSetUpProcessing, serverConfig, clientConfig, upLoadPath)); - // thread.SetApartmentState(ApartmentState.STA); - // thread.Start(); - // } - - // //登录远程主机布署三合一程序 - // private void StartSetUp3in1(ConnectionInfo connectionInfo, TextBlock textBlockName, ProgressBar progressBar, string serverConfig, string clientConfig, string upLoadPath) - // { - // string currentStatus = "正在登录远程主机......"; - - // textBlockName.Dispatcher.BeginInvoke(updateAction, textBlockName, progressBar, currentStatus); - - // try - // { - // #region 主机指纹,暂未启用 - // //byte[] expectedFingerPrint = new byte[] { - // // 0x66, 0x31, 0xaf, 0x00, 0x54, 0xb9, 0x87, 0x31, - // // 0xff, 0x58, 0x1c, 0x31, 0xb1, 0xa2, 0x4c, 0x6b - // // }; - // #endregion - // using (var client = new SshClient(connectionInfo)) - - // { - // #region ssh登录验证主机指纹代码块,暂未启用 - // // client.HostKeyReceived += (sender, e) => - // // { - // // if (expectedFingerPrint.Length == e.FingerPrint.Length) - // // { - // // for (var i = 0; i < expectedFingerPrint.Length; i++) - // // { - // // if (expectedFingerPrint[i] != e.FingerPrint[i]) - // // { - // // e.CanTrust = false; - // // break; - // // } - // // } - // // } - // // else - // // { - // // e.CanTrust = false; - // // } - // // }; - // #endregion - - // client.Connect(); - // if (client.IsConnected == true) - // { - // currentStatus = "主机登录成功"; - // textBlockName.Dispatcher.BeginInvoke(updateAction, textBlockName, progressBar, currentStatus); - // Thread.Sleep(1000); - // } - // //检测是否运行在root权限下 - // string testRootAuthority = client.RunCommand(@"id -u").Result; - // if (testRootAuthority.Equals("0\n") == false) - // { - // MessageBox.Show("请使用具有root权限的账户登录主机!!"); - // client.Disconnect(); - // return; - // } - // //检测是否安装有V2ray - // currentStatus = "检测系统是否已经安装 V2ray or Trojan or NaiveProxy......"; - // textBlockName.Dispatcher.BeginInvoke(updateAction, textBlockName, progressBar, currentStatus); - // Thread.Sleep(1000); - - // string cmdTestV2rayInstalled = @"find / -name v2ray"; - // string resultCmdTestV2rayInstalled = client.RunCommand(cmdTestV2rayInstalled).Result; - // string cmdTestTrojanInstalled = @"find / -name trojan"; - // string resultCmdTestTrojanInstall = client.RunCommand(cmdTestTrojanInstalled).Result; - // string cmdTestNaiveInstalled = @"find / -name naive"; - // string resultcmdTestNaiveInstalled = client.RunCommand(cmdTestNaiveInstalled).Result; - // if (resultCmdTestV2rayInstalled.Contains("/usr/bin/v2ray") == true || resultCmdTestTrojanInstall.Contains("/usr/local/bin/trojan") == true || resultcmdTestNaiveInstalled.Contains("/usr/local/bin/naive") == true) - // { - // MessageBoxResult messageBoxResult = MessageBox.Show("远程主机已安装V2ray or Trojan or NaiveProxy,是否强制重新安装?", "", MessageBoxButton.YesNo, MessageBoxImage.Question); - // if (messageBoxResult == MessageBoxResult.No) - // { - // currentStatus = "安装取消,退出"; - // textBlockName.Dispatcher.BeginInvoke(updateAction, textBlockName, progressBar, currentStatus); - // Thread.Sleep(1000); - // client.Disconnect(); - // return; - // } - // } - - // //检测远程主机系统环境是否符合要求 - // currentStatus = "检测系统是否符合安装要求......"; - // textBlockName.Dispatcher.BeginInvoke(updateAction, textBlockName, progressBar, currentStatus); - // Thread.Sleep(1000); - - // string result = client.RunCommand("uname -r").Result; - - // string[] linuxKernelVerStr = result.Split('-'); - - // bool detectResult = DetectKernelVersion(linuxKernelVerStr[0]); - // if (detectResult == false) - // { - // MessageBox.Show($"当前系统内核版本为{linuxKernelVerStr[0]},V2ray要求内核为2.6.23及以上。请升级内核再安装!"); - // currentStatus = "系统内核版本不符合要求,安装失败!!"; - // textBlockName.Dispatcher.BeginInvoke(updateAction, textBlockName, progressBar, currentStatus); - // Thread.Sleep(1000); - // } - // result = client.RunCommand("uname -m").Result; - - // if (result.Contains("x86_64") == false) - // { - // MessageBox.Show($"请在x86_64系统中安装Trojan/NaivProxy"); - // currentStatus = "系统不符合要求,安装失败!!"; - // textBlockName.Dispatcher.BeginInvoke(updateAction, textBlockName, progressBar, currentStatus); - // Thread.Sleep(1000); - // } - // //检测系统是否支持yum 或 apt-get或zypper,且支持Systemd - // //如果不存在组件,则命令结果为空,string.IsNullOrEmpty值为真, - // bool getApt = String.IsNullOrEmpty(client.RunCommand("command -v apt-get").Result); - // bool getYum = String.IsNullOrEmpty(client.RunCommand("command -v yum").Result); - // bool getZypper = String.IsNullOrEmpty(client.RunCommand("command -v zypper").Result); - // bool getSystemd = String.IsNullOrEmpty(client.RunCommand("command -v systemctl").Result); - // bool getGetenforce = String.IsNullOrEmpty(client.RunCommand("command -v getenforce").Result); - - // //没有安装apt-get,也没有安装yum,也没有安装zypper,或者没有安装systemd的,不满足安装条件 - // //也就是apt-get ,yum, zypper必须安装其中之一,且必须安装Systemd的系统才能安装。 - // if ((getApt && getYum && getZypper) || getSystemd) - // { - // MessageBox.Show($"系统缺乏必要的安装组件如:apt-get||yum||zypper||Syetemd,主机系统推荐使用:CentOS 7/8,Debian 8/9/10,Ubuntu 16.04及以上版本"); - // currentStatus = "系统环境不满足要求,安装失败!!"; - // textBlockName.Dispatcher.BeginInvoke(updateAction, textBlockName, progressBar, currentStatus); - // Thread.Sleep(1000); - // client.Disconnect(); - // return; - // } - // //判断是否启用了SELinux,如果启用了,并且工作在Enforcing模式下,则改为Permissive模式 - // if (getGetenforce == false) - // { - // string testSELinux = client.RunCommand("getenforce").Result; - // if (testSELinux.Contains("Enforcing") == true) - // { - // client.RunCommand("setenforce 0");//不重启改为Permissive模式 - // client.RunCommand("sed -i 's/SELINUX=enforcing/SELINUX=permissive/' /etc/selinux/config");//重启也工作在Permissive模式下 - // } - - // } - - // //校对时间 - // currentStatus = "校对时间......"; - // textBlockName.Dispatcher.BeginInvoke(updateAction, textBlockName, progressBar, currentStatus); - // Thread.Sleep(1000); - // //获取远程主机的时间戳 - // long timeStampVPS = Convert.ToInt64(client.RunCommand("date +%s").Result.ToString()); - - // //获取本地时间戳 - // TimeSpan ts = DateTime.Now.ToUniversalTime() - new DateTime(1970, 1, 1, 0, 0, 0, 0); - // long timeStampLocal = Convert.ToInt64(ts.TotalSeconds); - // if (Math.Abs(timeStampLocal - timeStampVPS) >= 90) - // { - - // MessageBox.Show("本地时间与远程主机时间相差超过限制(90秒),请先用\"系统工具-->时间校对\"校对时间后再设置"); - // currentStatus = "时间较对失败......"; - // textBlockName.Dispatcher.BeginInvoke(updateAction, textBlockName, progressBar, currentStatus); - // Thread.Sleep(1000); - // client.Disconnect(); - // 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,请先关闭!"); - // client.Disconnect(); - // 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); - // client.Disconnect(); - // 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("yes | ufw reload"); - // } - - // currentStatus = "符合安装要求,V2ray安装中......"; - // textBlockName.Dispatcher.BeginInvoke(updateAction, textBlockName, progressBar, currentStatus); - // Thread.Sleep(1000); - - // //下载官方安装脚本安装V2ray - // client.RunCommand($"curl -o /tmp/go.sh https://raw.githubusercontent.com/v2fly/fhs-install-v2ray/master/install-release.sh"); - // client.RunCommand("yes | bash /tmp/go.sh -f"); - // string installResult = client.RunCommand("find / -name v2ray").Result.ToString(); - - // if (!installResult.Contains("/usr/local/bin/v2ray")) - // { - // MessageBox.Show("安装V2ray失败(官方脚本运行出错!"); - - // currentStatus = "安装V2ray失败(官方脚本运行出错!"; - // textBlockName.Dispatcher.BeginInvoke(updateAction, textBlockName, progressBar, currentStatus); - // client.Disconnect(); - // 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 = $"{pwdir}" + @"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 = "usr/local/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失败(官方脚本运行出错!"); - - // currentStatus = "安装Trojan失败(官方脚本运行出错!"; - // textBlockName.Dispatcher.BeginInvoke(updateAction, textBlockName, progressBar, currentStatus); - // client.Disconnect(); - // 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 = $"{pwdir}" + @"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); - // client.Disconnect(); - // 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 = $"{pwdir}" + @"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); - // //优化网络参数 - // sshCmd = @"bash -c 'echo ""fs.file-max = 51200"" >> /etc/sysctl.conf'"; - // client.RunCommand(sshCmd); - // sshCmd = @"bash -c 'echo ""net.core.rmem_max = 67108864"" >> /etc/sysctl.conf'"; - // client.RunCommand(sshCmd); - // sshCmd = @"bash -c 'echo ""net.core.wmem_max = 67108864"" >> /etc/sysctl.conf'"; - // client.RunCommand(sshCmd); - // sshCmd = @"bash -c 'echo ""net.core.rmem_default = 65536"" >> /etc/sysctl.conf'"; - // client.RunCommand(sshCmd); - // sshCmd = @"bash -c 'echo ""net.core.wmem_default = 65536"" >> /etc/sysctl.conf'"; - // client.RunCommand(sshCmd); - // sshCmd = @"bash -c 'echo ""net.core.netdev_max_backlog = 4096"" >> /etc/sysctl.conf'"; - // client.RunCommand(sshCmd); - // sshCmd = @"bash -c 'echo ""net.core.somaxconn = 4096"" >> /etc/sysctl.conf'"; - // client.RunCommand(sshCmd); - // sshCmd = @"bash -c 'echo ""net.ipv4.tcp_syncookies = 1"" >> /etc/sysctl.conf'"; - // client.RunCommand(sshCmd); - // sshCmd = @"bash -c 'echo ""net.ipv4.tcp_tw_reuse = 1"" >> /etc/sysctl.conf'"; - // client.RunCommand(sshCmd); - // sshCmd = @"bash -c 'echo ""net.ipv4.tcp_tw_recycle = 0"" >> /etc/sysctl.conf'"; - // client.RunCommand(sshCmd); - // sshCmd = @"bash -c 'echo ""net.ipv4.tcp_fin_timeout = 30"" >> /etc/sysctl.conf'"; - // client.RunCommand(sshCmd); - // sshCmd = @"bash -c 'echo ""net.ipv4.tcp_keepalive_time = 1200"" >> /etc/sysctl.conf'"; - // client.RunCommand(sshCmd); - // sshCmd = @"bash -c 'echo ""net.ipv4.ip_local_port_range = 10000 65000"" >> /etc/sysctl.conf'"; - // client.RunCommand(sshCmd); - // sshCmd = @"bash -c 'echo ""net.ipv4.tcp_max_syn_backlog = 4096"" >> /etc/sysctl.conf'"; - // client.RunCommand(sshCmd); - // sshCmd = @"bash -c 'echo ""net.ipv4.tcp_max_tw_buckets = 5000"" >> /etc/sysctl.conf'"; - // client.RunCommand(sshCmd); - // sshCmd = @"bash -c 'echo ""net.ipv4.tcp_rmem = 4096 87380 67108864"" >> /etc/sysctl.conf'"; - // client.RunCommand(sshCmd); - // sshCmd = @"bash -c 'echo ""net.ipv4.tcp_wmem = 4096 65536 67108864"" >> /etc/sysctl.conf'"; - // client.RunCommand(sshCmd); - // sshCmd = @"bash -c 'echo ""net.ipv4.tcp_mtu_probing = 1"" >> /etc/sysctl.conf'"; - // client.RunCommand(sshCmd); - // sshCmd = @"sysctl -p"; - // client.RunCommand(sshCmd); - - // currentStatus = "优化网络参数,OK!"; - // 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 = $"{pwdir}" + @"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 = $"{pwdir}" + @"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 = $"{pwdir}" + @"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 = "生成客户端配置,OK! 安装成功!"; - // 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 - - // } - - #endregion #region 测试用代码 @@ -7556,13 +7257,12 @@ namespace ProxySU } - + sshShellCommand = $"{sshCmdUpdate}"; + currentShellCommandResult = MainWindowsShowCmd(client, sshShellCommand); + //在相应系统内安装curl(如果没有安装curl)--此为依赖软件 if (string.IsNullOrEmpty(client.RunCommand("command -v curl").Result) == true) { - sshShellCommand = $"{sshCmdUpdate}"; - currentShellCommandResult = MainWindowsShowCmd(client, sshShellCommand); - sshShellCommand = $"{sshCmdInstall}curl"; currentShellCommandResult = MainWindowsShowCmd(client, sshShellCommand); @@ -7570,9 +7270,6 @@ namespace ProxySU // 在相应系统内安装wget(如果没有安装wget)--此为依赖软件 if (string.IsNullOrEmpty(client.RunCommand("command -v wget").Result) == true) { - sshShellCommand = $"{sshCmdUpdate}"; - currentShellCommandResult = MainWindowsShowCmd(client, sshShellCommand); - sshShellCommand = $"{sshCmdInstall}wget"; currentShellCommandResult = MainWindowsShowCmd(client, sshShellCommand); @@ -7580,9 +7277,6 @@ namespace ProxySU // 在相应系统内安装unzip(如果没有安装unzip)--此为依赖软件 if (string.IsNullOrEmpty(client.RunCommand("command -v unzip").Result) == true) { - sshShellCommand = $"{sshCmdUpdate}"; - currentShellCommandResult = MainWindowsShowCmd(client, sshShellCommand); - sshShellCommand = $"{sshCmdInstall}unzip"; currentShellCommandResult = MainWindowsShowCmd(client, sshShellCommand); @@ -7590,9 +7284,6 @@ namespace ProxySU //处理极其少见的xz-utils未安装的情况 if (string.IsNullOrEmpty(client.RunCommand("command -v xz-utils").Result) == true) { - sshShellCommand = $"{sshCmdUpdate}"; - currentShellCommandResult = MainWindowsShowCmd(client, sshShellCommand); - sshShellCommand = $"{sshCmdInstall}xz-utils"; currentShellCommandResult = MainWindowsShowCmd(client, sshShellCommand); @@ -7600,9 +7291,6 @@ namespace ProxySU //检测是否安装lsof if (string.IsNullOrEmpty(client.RunCommand("command -v lsof").Result) == true) { - sshShellCommand = $"{sshCmdUpdate}"; - currentShellCommandResult = MainWindowsShowCmd(client, sshShellCommand); - sshShellCommand = $"{sshCmdInstall}lsof"; currentShellCommandResult = MainWindowsShowCmd(client, sshShellCommand); @@ -8374,674 +8062,7 @@ namespace ProxySU #endregion - #region 启用Root密码登录 - private void ButtonEnableRootPassWord_Click(object sender, RoutedEventArgs e) - { - //******"本功能需要当前登录的账户具有sudo权限,是否为远程主机启用root账户并设置密码?"****** - string messageShow = Application.Current.FindResource("MessageBoxShow_EnableRootPassword").ToString(); - MessageBoxResult messageBoxResult = MessageBox.Show(messageShow, "", MessageBoxButton.YesNo, MessageBoxImage.Question); - if (messageBoxResult == MessageBoxResult.Yes) - { - ConnectionInfo connectionInfo = GenerateConnectionInfo(); - if (connectionInfo == null) - { - //****** "远程主机连接信息有误,请检查!" ****** - MessageBox.Show(Application.Current.FindResource("MessageBoxShow_ErrorHostConnection").ToString()); - return; - } - ReceiveConfigurationParameters[4] = TextBoxHost.Text;//传递主机地址 - ReceiveConfigurationParameters[2] = PasswordBoxHostPassword.Password;//传递当前账户密码 - - installationDegree = 0; - TextBoxMonitorCommandResults.Text = ""; - Thread thread = new Thread(() => EnableRootPassWord(connectionInfo)); - thread.SetApartmentState(ApartmentState.STA); - thread.Start(); - } - } - //启用Root密码登录进程 - private void EnableRootPassWord(ConnectionInfo connectionInfo) - { - functionResult = true; - getApt = false; - getDnf = false; - getYum = false; - onlyIpv6 = false; - - //******"正在登录远程主机......"****** - SetUpProgressBarProcessing(1); - string currentStatus = Application.Current.FindResource("DisplayInstallInfo_Login").ToString(); - MainWindowsShowInfo(currentStatus); - - try - { - #region 主机指纹,暂未启用 - //byte[] expectedFingerPrint = new byte[] { - // 0x66, 0x31, 0xaf, 0x00, 0x54, 0xb9, 0x87, 0x31, - // 0xff, 0x58, 0x1c, 0x31, 0xb1, 0xa2, 0x4c, 0x6b - // }; - #endregion - using (var client = new SshClient(connectionInfo)) - - { - #region ssh登录验证主机指纹代码块,暂未启用 - // client.HostKeyReceived += (sender, e) => - // { - // if (expectedFingerPrint.Length == e.FingerPrint.Length) - // { - // for (var i = 0; i < expectedFingerPrint.Length; i++) - // { - // if (expectedFingerPrint[i] != e.FingerPrint[i]) - // { - // e.CanTrust = false; - // break; - // } - // } - // } - // else - // { - // e.CanTrust = false; - // } - // }; - #endregion - - client.Connect(); - if (client.IsConnected == true) - { - //******"主机登录成功"****** - SetUpProgressBarProcessing(5); - currentStatus = Application.Current.FindResource("DisplayInstallInfo_LoginSuccessful").ToString(); - MainWindowsShowInfo(currentStatus); - } - - //检测root权限 5--7 - //******"检测是否运行在root权限下..."******01 - SetUpProgressBarProcessing(5); - currentStatus = Application.Current.FindResource("DisplayInstallInfo_DetectionRootPermission").ToString(); - MainWindowsShowInfo(currentStatus); - - sshShellCommand = @"id -u"; - currentShellCommandResult = MainWindowsShowCmd(client, sshShellCommand); - if (currentShellCommandResult.TrimEnd('\r','\n').Equals("0") == true) - { - //******"当前账户已经具有root权限,无需再设置!"****** - currentStatus = Application.Current.FindResource("MessageBoxShow_AlreadyRoot").ToString(); - MainWindowsShowInfo(currentStatus); - MessageBox.Show(currentStatus); - client.Disconnect(); - return; - } - - SetUpProgressBarProcessing(10); - string hostPassword = "'" + ReceiveConfigurationParameters[2] + "'"; - //MessageBox.Show(hostPassword); - sshShellCommand = $"echo {hostPassword} | sudo -S id -u"; - //MessageBox.Show(sshShellCommand); - currentShellCommandResult = MainWindowsShowCmd(client, sshShellCommand); - if (currentShellCommandResult.TrimEnd('\r', '\n').Equals("0") == false) - { - //******"当前账户无法获取sudo权限,设置失败!"****** - currentStatus = Application.Current.FindResource("MessageBoxShow_NoSudoToAccount").ToString(); - MainWindowsShowInfo(currentStatus); - MessageBox.Show(currentStatus); - client.Disconnect(); - return; - } - - SetUpProgressBarProcessing(20); - string cmdPre = $"echo {hostPassword} | sudo -S id -u" + ';'; - sshShellCommand = cmdPre + @"sudo sed -i 's/PermitRootLogin /#PermitRootLogin /g' /etc/ssh/sshd_config"; - currentShellCommandResult = MainWindowsShowCmd(client, sshShellCommand); - - sshShellCommand = cmdPre + @"sudo sed -i 's/PasswordAuthentication /#PasswordAuthentication /g' /etc/ssh/sshd_config"; - currentShellCommandResult = MainWindowsShowCmd(client, sshShellCommand); - - SetUpProgressBarProcessing(30); - sshShellCommand = cmdPre + @"sudo sed -i 's/PermitEmptyPasswords /#PermitEmptyPasswords /g' /etc/ssh/sshd_config"; - currentShellCommandResult = MainWindowsShowCmd(client, sshShellCommand); - - sshShellCommand = cmdPre + @"echo 'PermitRootLogin yes' | sudo tee -a /etc/ssh/sshd_config"; - currentShellCommandResult = MainWindowsShowCmd(client, sshShellCommand); - - SetUpProgressBarProcessing(40); - sshShellCommand = cmdPre + @"echo 'PasswordAuthentication yes' | sudo tee -a /etc/ssh/sshd_config"; - currentShellCommandResult = MainWindowsShowCmd(client, sshShellCommand); - - sshShellCommand = cmdPre + @"echo 'PermitEmptyPasswords no' | sudo tee -a /etc/ssh/sshd_config"; - currentShellCommandResult = MainWindowsShowCmd(client, sshShellCommand); - - SetUpProgressBarProcessing(60); - sshShellCommand = cmdPre + @"sudo systemctl restart sshd"; - currentShellCommandResult = MainWindowsShowCmd(client, sshShellCommand); - - //******"生成20位随机密码!"****** - currentStatus = Application.Current.FindResource("DisplayInstallInfo_GenerateRandomPassword").ToString(); - MainWindowsShowInfo(currentStatus); - - sshShellCommand = @"cat /dev/urandom | tr -dc '_A-Z#\-+=a-z(0-9%^>)]{<|' | head -c 20 ; echo ''"; - currentShellCommandResult = MainWindowsShowCmd(client, sshShellCommand); - - SetUpProgressBarProcessing(80); - string setPassword = currentShellCommandResult.TrimEnd('\r', '\n') + '\n'; - - sshShellCommand = cmdPre + $"echo -e \"{setPassword}{setPassword}\" | sudo passwd root"; - currentShellCommandResult = MainWindowsShowCmd(client, sshShellCommand); - - client.Disconnect(); - - //***保存密码信息*** - currentStatus = Application.Current.FindResource("DisplayInstallInfo_EnableRootPasswordSavePasswordInfo").ToString(); - MainWindowsShowInfo(currentStatus); - - string filePath = ReceiveConfigurationParameters[4].Replace(':', '_'); - CheckDir(filePath); - using (StreamWriter sw = new StreamWriter($"{filePath}\\host_password_info.txt")) - { - sw.WriteLine(ReceiveConfigurationParameters[4]); - sw.WriteLine("root"); - sw.WriteLine(setPassword); - } - - SetUpProgressBarProcessing(100); - //***远程主机Root账户密码登录已启用,密码保存在随后打开的文件夹中!*** - currentStatus = Application.Current.FindResource("DisplayInstallInfo_EnableRootPasswordSuccess").ToString(); - MainWindowsShowInfo(currentStatus); - MessageBox.Show(currentStatus); - System.Diagnostics.Process.Start("explorer.exe", filePath); - return; - } - } - catch (Exception ex1)//例外处理 - #region 例外处理 - { - ProcessException(ex1.Message); - - //****** "主机登录失败!" ****** - currentStatus = Application.Current.FindResource("DisplayInstallInfo_LoginFailed").ToString(); - MainWindowsShowInfo(currentStatus); - } - #endregion - - } - - #endregion - - #region 启用Root证书密钥登录 - private void ButtonEnableRootCert_Click(object sender, RoutedEventArgs e) - { - //******"本功能需要当前登录的账户具有root或者sudo权限,是否为远程主机启用root证书密钥登录?"****** - string messageShow = Application.Current.FindResource("MessageBoxShow_ButtonEnableRootCert").ToString(); - MessageBoxResult messageBoxResult = MessageBox.Show(messageShow, "", MessageBoxButton.YesNo, MessageBoxImage.Question); - if (messageBoxResult == MessageBoxResult.Yes) - { - ConnectionInfo connectionInfo = GenerateConnectionInfo(); - if (connectionInfo == null) - { - //****** "远程主机连接信息有误,请检查!" ****** - MessageBox.Show(Application.Current.FindResource("MessageBoxShow_ErrorHostConnection").ToString()); - return; - } - - ReceiveConfigurationParameters[4] = TextBoxHost.Text;//传递主机地址 - ReceiveConfigurationParameters[2] = PasswordBoxHostPassword.Password; - - installationDegree = 0; - TextBoxMonitorCommandResults.Text = ""; - Thread thread = new Thread(() => EnableRootCert(connectionInfo)); - thread.SetApartmentState(ApartmentState.STA); - thread.Start(); - } - } - - //启用Root证书密钥登录进程 - private void EnableRootCert(ConnectionInfo connectionInfo) - { - functionResult = true; - getApt = false; - getDnf = false; - getYum = false; - onlyIpv6 = false; - - string filePath = String.Empty; - - //******"正在登录远程主机......"****** - SetUpProgressBarProcessing(1); - string currentStatus = Application.Current.FindResource("DisplayInstallInfo_Login").ToString(); - MainWindowsShowInfo(currentStatus); - - try - { - #region 主机指纹,暂未启用 - //byte[] expectedFingerPrint = new byte[] { - // 0x66, 0x31, 0xaf, 0x00, 0x54, 0xb9, 0x87, 0x31, - // 0xff, 0x58, 0x1c, 0x31, 0xb1, 0xa2, 0x4c, 0x6b - // }; - #endregion - using (var client = new SshClient(connectionInfo)) - - { - #region ssh登录验证主机指纹代码块,暂未启用 - // client.HostKeyReceived += (sender, e) => - // { - // if (expectedFingerPrint.Length == e.FingerPrint.Length) - // { - // for (var i = 0; i < expectedFingerPrint.Length; i++) - // { - // if (expectedFingerPrint[i] != e.FingerPrint[i]) - // { - // e.CanTrust = false; - // break; - // } - // } - // } - // else - // { - // e.CanTrust = false; - // } - // }; - #endregion - - client.Connect(); - if (client.IsConnected == true) - { - //******"主机登录成功"****** - SetUpProgressBarProcessing(5); - currentStatus = Application.Current.FindResource("DisplayInstallInfo_LoginSuccessful").ToString(); - MainWindowsShowInfo(currentStatus); - } - - //检测root权限 5--7 - //******"检测是否运行在root权限下..."******01 - SetUpProgressBarProcessing(5); - currentStatus = Application.Current.FindResource("DisplayInstallInfo_DetectionRootPermission").ToString(); - MainWindowsShowInfo(currentStatus); - - sshShellCommand = @"id -u"; - currentShellCommandResult = MainWindowsShowCmd(client, sshShellCommand); - if (currentShellCommandResult.TrimEnd('\r', '\n').Equals("0") == true) - { - SetUpProgressBarProcessing(20); - - //***正在生成密钥......*** - currentStatus = Application.Current.FindResource("DisplayInstallInfo_EnableRootCertGenerateCert").ToString(); - MainWindowsShowInfo(currentStatus); - - sshShellCommand = @"rm -rf /tmp/rootuser.key /tmp/rootuser.key.pub"; - currentShellCommandResult = MainWindowsShowCmd(client, sshShellCommand); - - sshShellCommand = @"yes | ssh-keygen -b 2048 -t rsa -f /tmp/rootuser.key -q -N ''"; - currentShellCommandResult = MainWindowsShowCmd(client, sshShellCommand); - - sshShellCommand = @"yes | ssh-keygen -p -P '' -N '' -m PEM -f /tmp/rootuser.key"; - currentShellCommandResult = MainWindowsShowCmd(client, sshShellCommand); - - sshShellCommand = @"mkdir -p /root/.ssh"; - currentShellCommandResult = MainWindowsShowCmd(client, sshShellCommand); - - sshShellCommand = @"cat /tmp/rootuser.key.pub | tee -a /root/.ssh/authorized_keys"; - currentShellCommandResult = MainWindowsShowCmd(client, sshShellCommand); - - sshShellCommand = @"chmod 777 /tmp/rootuser.key"; - currentShellCommandResult = MainWindowsShowCmd(client, sshShellCommand); - - SetUpProgressBarProcessing(30); - //***正在下载密钥......*** - currentStatus = Application.Current.FindResource("DisplayInstallInfo_EnableRootCertDownloadCert").ToString(); - MainWindowsShowInfo(currentStatus); - - filePath = CreateConfigSaveDir(@"root_cert", ReceiveConfigurationParameters[4].Replace(':', '_')); - string localConfigSavePathAndFileName = $"{filePath}\\rootuser.key"; - string remoteConfigPathAndFileName = @"/tmp/rootuser.key"; - DownloadConfig(connectionInfo, localConfigSavePathAndFileName, remoteConfigPathAndFileName); - - localConfigSavePathAndFileName = $"{filePath}\\rootuser.key.pub"; - remoteConfigPathAndFileName = @"/tmp/rootuser.key.pub"; - DownloadConfig(connectionInfo, localConfigSavePathAndFileName, remoteConfigPathAndFileName); - - sshShellCommand = @"rm -rf /tmp/rootuser.key /tmp/rootuser.key.pub"; - currentShellCommandResult = MainWindowsShowCmd(client, sshShellCommand); - - SetUpProgressBarProcessing(50); - //***远程主机启用密钥登录......*** - currentStatus = Application.Current.FindResource("DisplayInstallInfo_EnableRootCertSetCertEnable").ToString(); - MainWindowsShowInfo(currentStatus); - - sshShellCommand = @"sed -i 's/PermitRootLogin /#PermitRootLogin /g' /etc/ssh/sshd_config"; - currentShellCommandResult = MainWindowsShowCmd(client, sshShellCommand); - - sshShellCommand = @"sed -i 's/StrictModes /#StrictModes /g' /etc/ssh/sshd_config"; - currentShellCommandResult = MainWindowsShowCmd(client, sshShellCommand); - - SetUpProgressBarProcessing(70); - sshShellCommand = @"sed -i 's/PubkeyAuthentication /#PubkeyAuthentication /g' /etc/ssh/sshd_config"; - currentShellCommandResult = MainWindowsShowCmd(client, sshShellCommand); - - sshShellCommand = @"sed -i 's/#AuthorizedKeysFile /AuthorizedKeysFile /g' /etc/ssh/sshd_config"; - currentShellCommandResult = MainWindowsShowCmd(client, sshShellCommand); - - SetUpProgressBarProcessing(80); - sshShellCommand = @"sed -i 's/#RSAAuthentication /RSAAuthentication /g' /etc/ssh/sshd_config"; - currentShellCommandResult = MainWindowsShowCmd(client, sshShellCommand); - - sshShellCommand = @"echo 'PermitRootLogin yes' | tee -a /etc/ssh/sshd_config"; - currentShellCommandResult = MainWindowsShowCmd(client, sshShellCommand); - - SetUpProgressBarProcessing(90); - sshShellCommand = @"echo 'StrictModes no' | tee -a /etc/ssh/sshd_config"; - currentShellCommandResult = MainWindowsShowCmd(client, sshShellCommand); - - sshShellCommand = @"echo 'PubkeyAuthentication yes' | tee -a /etc/ssh/sshd_config"; - currentShellCommandResult = MainWindowsShowCmd(client, sshShellCommand); - - sshShellCommand = @"systemctl restart sshd"; - currentShellCommandResult = MainWindowsShowCmd(client, sshShellCommand); - - } - else - { - SetUpProgressBarProcessing(10); - string hostPassword = "'" + ReceiveConfigurationParameters[2] + "'"; - //MessageBox.Show(hostPassword); - sshShellCommand = $"echo {hostPassword} | sudo -S id -u"; - //MessageBox.Show(sshShellCommand); - currentShellCommandResult = MainWindowsShowCmd(client, sshShellCommand); - //MessageBox.Show(currentShellCommandResult); - if (currentShellCommandResult.TrimEnd('\r', '\n').Equals("0") == false) - { - //******"当前账户无法获取sudo权限,设置失败!"****** - currentStatus = Application.Current.FindResource("MessageBoxShow_NoSudoToAccount").ToString(); - MainWindowsShowInfo(currentStatus); - MessageBox.Show(currentStatus); - client.Disconnect(); - return; - } - - SetUpProgressBarProcessing(20); - string cmdPre = $"echo {hostPassword} | sudo -S id -u" + ';'; - //***正在生成密钥......*** - currentStatus = Application.Current.FindResource("DisplayInstallInfo_EnableRootCertGenerateCert").ToString(); - MainWindowsShowInfo(currentStatus); - - sshShellCommand = cmdPre + @"sudo rm -rf /tmp/rootuser.key /tmp/rootuser.key.pub"; - currentShellCommandResult = MainWindowsShowCmd(client, sshShellCommand); - - sshShellCommand = cmdPre + @"yes | sudo ssh-keygen -b 2048 -t rsa -f /tmp/rootuser.key -q -N ''"; - currentShellCommandResult = MainWindowsShowCmd(client, sshShellCommand); - - sshShellCommand = cmdPre + @"yes | sudo ssh-keygen -p -P '' -N '' -m PEM -f /tmp/rootuser.key"; - currentShellCommandResult = MainWindowsShowCmd(client, sshShellCommand); - - sshShellCommand = cmdPre + @"sudo mkdir -p /root/.ssh"; - currentShellCommandResult = MainWindowsShowCmd(client, sshShellCommand); - - sshShellCommand = cmdPre + @"cat /tmp/rootuser.key.pub | sudo tee -a /root/.ssh/authorized_keys"; - currentShellCommandResult = MainWindowsShowCmd(client, sshShellCommand); - - sshShellCommand = cmdPre + @"sudo chmod 777 /tmp/rootuser.key"; - currentShellCommandResult = MainWindowsShowCmd(client, sshShellCommand); - - SetUpProgressBarProcessing(30); - //***正在下载密钥......*** - currentStatus = Application.Current.FindResource("DisplayInstallInfo_EnableRootCertDownloadCert").ToString(); - MainWindowsShowInfo(currentStatus); - - filePath = CreateConfigSaveDir(@"root_cert", ReceiveConfigurationParameters[4].Replace(':', '_')); - string localConfigSavePathAndFileName = $"{filePath}\\rootuser.key"; - string remoteConfigPathAndFileName = @"/tmp/rootuser.key"; - DownloadConfig(connectionInfo, localConfigSavePathAndFileName, remoteConfigPathAndFileName); - - localConfigSavePathAndFileName = $"{filePath}\\rootuser.key.pub"; - remoteConfigPathAndFileName = @"/tmp/rootuser.key.pub"; - DownloadConfig(connectionInfo, localConfigSavePathAndFileName, remoteConfigPathAndFileName); - - sshShellCommand = cmdPre + @"sudo rm -rf /tmp/rootuser.key /tmp/rootuser.key.pub"; - currentShellCommandResult = MainWindowsShowCmd(client, sshShellCommand); - - SetUpProgressBarProcessing(50); - //***远程主机启用密钥登录......*** - currentStatus = Application.Current.FindResource("DisplayInstallInfo_EnableRootCertSetCertEnable").ToString(); - MainWindowsShowInfo(currentStatus); - - //string cmdPre = $"echo {hostPassword} | sudo -S id -u" + ';'; - sshShellCommand = cmdPre + @"sudo sed -i 's/PermitRootLogin /#PermitRootLogin /g' /etc/ssh/sshd_config"; - currentShellCommandResult = MainWindowsShowCmd(client, sshShellCommand); - - sshShellCommand = cmdPre + @"sudo sed -i 's/StrictModes /#StrictModes /g' /etc/ssh/sshd_config"; - currentShellCommandResult = MainWindowsShowCmd(client, sshShellCommand); - - SetUpProgressBarProcessing(70); - sshShellCommand = cmdPre + @"sudo sed -i 's/PubkeyAuthentication /#PubkeyAuthentication /g' /etc/ssh/sshd_config"; - currentShellCommandResult = MainWindowsShowCmd(client, sshShellCommand); - - sshShellCommand = cmdPre + @"sudo sed -i 's/#AuthorizedKeysFile /AuthorizedKeysFile /g' /etc/ssh/sshd_config"; - currentShellCommandResult = MainWindowsShowCmd(client, sshShellCommand); - - SetUpProgressBarProcessing(80); - sshShellCommand = cmdPre + @"sudo sed -i 's/#RSAAuthentication /RSAAuthentication /g' /etc/ssh/sshd_config"; - currentShellCommandResult = MainWindowsShowCmd(client, sshShellCommand); - - sshShellCommand = cmdPre + @"echo 'PermitRootLogin yes' | sudo tee -a /etc/ssh/sshd_config"; - currentShellCommandResult = MainWindowsShowCmd(client, sshShellCommand); - - SetUpProgressBarProcessing(90); - sshShellCommand = cmdPre + @"echo 'StrictModes no' | sudo tee -a /etc/ssh/sshd_config"; - currentShellCommandResult = MainWindowsShowCmd(client, sshShellCommand); - - sshShellCommand = cmdPre + @"echo 'PubkeyAuthentication yes' | sudo tee -a /etc/ssh/sshd_config"; - currentShellCommandResult = MainWindowsShowCmd(client, sshShellCommand); - - sshShellCommand = cmdPre + @"sudo systemctl restart sshd"; - currentShellCommandResult = MainWindowsShowCmd(client, sshShellCommand); - - } - client.Disconnect(); - - SetUpProgressBarProcessing(100); - //******"远程主机root账户证书密钥登录已启用,密钥文件rootuser.key保存在随后打开的文件夹中!"****** - currentStatus = Application.Current.FindResource("MessageBoxShow_ButtonEnableRootCertSuccess").ToString(); - MainWindowsShowInfo(currentStatus); - MessageBox.Show(currentStatus); - System.Diagnostics.Process.Start("explorer.exe", filePath); - - return; - } - } - catch (Exception ex1)//例外处理 - #region 例外处理 - { - ProcessException(ex1.Message); - - //****** "主机登录失败!" ****** - currentStatus = Application.Current.FindResource("DisplayInstallInfo_LoginFailed").ToString(); - MainWindowsShowInfo(currentStatus); - } - #endregion - - } - - - #endregion - - //root禁止密码登录 - private void ButtonRootProhibitsPasswordLogin_Click(object sender, RoutedEventArgs e) - { - //******"本功能需要远程主机已经开启了其他登录方式,如密钥方式等,否则将可能造成远程主机无法连接,是否禁止远程主机的root账户密码登录方式?"****** - string messageShow = Application.Current.FindResource("MessageBoxShow_ButtonRootProhibitsPasswordLogin").ToString(); - MessageBoxResult messageBoxResult = MessageBox.Show(messageShow, "", MessageBoxButton.YesNo, MessageBoxImage.Question); - if (messageBoxResult == MessageBoxResult.Yes) - { - ConnectionInfo connectionInfo = GenerateConnectionInfo(); - if (connectionInfo == null) - { - //****** "远程主机连接信息有误,请检查!" ****** - MessageBox.Show(Application.Current.FindResource("MessageBoxShow_ErrorHostConnection").ToString()); - return; - } - - ReceiveConfigurationParameters[4] = TextBoxHost.Text;//传递主机地址 - ReceiveConfigurationParameters[2] = PasswordBoxHostPassword.Password;//传递主机密码 - - installationDegree = 0; - TextBoxMonitorCommandResults.Text = ""; - Thread thread = new Thread(() => RootProhibitsPasswordLogin(connectionInfo)); - thread.SetApartmentState(ApartmentState.STA); - thread.Start(); - } - } - - //禁止root密码登录进程 - private void RootProhibitsPasswordLogin(ConnectionInfo connectionInfo) - { - functionResult = true; - getApt = false; - getDnf = false; - getYum = false; - onlyIpv6 = false; - - string filePath = String.Empty; - - //******"正在登录远程主机......"****** - SetUpProgressBarProcessing(1); - string currentStatus = Application.Current.FindResource("DisplayInstallInfo_Login").ToString(); - MainWindowsShowInfo(currentStatus); - - try - { - #region 主机指纹,暂未启用 - //byte[] expectedFingerPrint = new byte[] { - // 0x66, 0x31, 0xaf, 0x00, 0x54, 0xb9, 0x87, 0x31, - // 0xff, 0x58, 0x1c, 0x31, 0xb1, 0xa2, 0x4c, 0x6b - // }; - #endregion - using (var client = new SshClient(connectionInfo)) - - { - #region ssh登录验证主机指纹代码块,暂未启用 - // client.HostKeyReceived += (sender, e) => - // { - // if (expectedFingerPrint.Length == e.FingerPrint.Length) - // { - // for (var i = 0; i < expectedFingerPrint.Length; i++) - // { - // if (expectedFingerPrint[i] != e.FingerPrint[i]) - // { - // e.CanTrust = false; - // break; - // } - // } - // } - // else - // { - // e.CanTrust = false; - // } - // }; - #endregion - - client.Connect(); - if (client.IsConnected == true) - { - //******"主机登录成功"****** - SetUpProgressBarProcessing(5); - currentStatus = Application.Current.FindResource("DisplayInstallInfo_LoginSuccessful").ToString(); - MainWindowsShowInfo(currentStatus); - } - - //检测root权限 5--7 - //******"检测是否运行在root权限下..."******01 - SetUpProgressBarProcessing(5); - currentStatus = Application.Current.FindResource("DisplayInstallInfo_DetectionRootPermission").ToString(); - MainWindowsShowInfo(currentStatus); - - sshShellCommand = @"id -u"; - currentShellCommandResult = MainWindowsShowCmd(client, sshShellCommand); - if (currentShellCommandResult.TrimEnd('\r', '\n').Equals("0") == true) - { - SetUpProgressBarProcessing(20); - - //***正在关闭root账户密码登录方式......*** - currentStatus = Application.Current.FindResource("DisplayInstallInfo_SetRootProhibitsPasswordLogin").ToString(); - MainWindowsShowInfo(currentStatus); - - sshShellCommand = @"sed -i 's/PasswordAuthentication /#PasswordAuthentication /g' /etc/ssh/sshd_config"; - currentShellCommandResult = MainWindowsShowCmd(client, sshShellCommand); - - sshShellCommand = @"sed -i 's/PermitEmptyPasswords /#PermitEmptyPasswords /g' /etc/ssh/sshd_config"; - currentShellCommandResult = MainWindowsShowCmd(client, sshShellCommand); - - sshShellCommand = @"echo 'PasswordAuthentication no' | tee -a /etc/ssh/sshd_config"; - currentShellCommandResult = MainWindowsShowCmd(client, sshShellCommand); - - sshShellCommand = @"echo 'PermitEmptyPasswords no' | tee -a /etc/ssh/sshd_config"; - currentShellCommandResult = MainWindowsShowCmd(client, sshShellCommand); - - sshShellCommand = @"systemctl restart sshd"; - currentShellCommandResult = MainWindowsShowCmd(client, sshShellCommand); - } - else - { - SetUpProgressBarProcessing(10); - string hostPassword = "'" + ReceiveConfigurationParameters[2] + "'"; - //MessageBox.Show(hostPassword); - sshShellCommand = $"echo {hostPassword} | sudo -S id -u"; - //MessageBox.Show(sshShellCommand); - currentShellCommandResult = MainWindowsShowCmd(client, sshShellCommand); - //MessageBox.Show(currentShellCommandResult); - if (currentShellCommandResult.TrimEnd('\r', '\n').Equals("0") == false) - { - //******"当前账户无法获取sudo权限,设置失败!"****** - currentStatus = Application.Current.FindResource("MessageBoxShow_NoSudoToAccount").ToString(); - MainWindowsShowInfo(currentStatus); - MessageBox.Show(currentStatus); - client.Disconnect(); - return; - } - - SetUpProgressBarProcessing(20); - string cmdPre = $"echo {hostPassword} | sudo -S id -u" + ';'; - - //***正在关闭root账户密码登录方式......*** - currentStatus = Application.Current.FindResource("DisplayInstallInfo_SetRootProhibitsPasswordLogin").ToString(); - MainWindowsShowInfo(currentStatus); - - sshShellCommand = cmdPre + @"sudo sed -i 's/PasswordAuthentication /#PasswordAuthentication /g' /etc/ssh/sshd_config"; - currentShellCommandResult = MainWindowsShowCmd(client, sshShellCommand); - - sshShellCommand = cmdPre + @"sudo sed -i 's/PermitEmptyPasswords /#PermitEmptyPasswords /g' /etc/ssh/sshd_config"; - currentShellCommandResult = MainWindowsShowCmd(client, sshShellCommand); - - sshShellCommand = cmdPre + @"echo 'PasswordAuthentication no' | sudo tee -a /etc/ssh/sshd_config"; - currentShellCommandResult = MainWindowsShowCmd(client, sshShellCommand); - - sshShellCommand = cmdPre + @"echo 'PermitEmptyPasswords no' | sudo tee -a /etc/ssh/sshd_config"; - currentShellCommandResult = MainWindowsShowCmd(client, sshShellCommand); - - sshShellCommand = cmdPre + @"sudo systemctl restart sshd"; - currentShellCommandResult = MainWindowsShowCmd(client, sshShellCommand); - - } - client.Disconnect(); - - SetUpProgressBarProcessing(100); - //******"远程主机root账户密码登录方式已关闭!"****** - currentStatus = Application.Current.FindResource("MessageBoxShow_RootProhibitsPasswordLoginOK").ToString(); - MainWindowsShowInfo(currentStatus); - MessageBox.Show(currentStatus); - - return; - } - } - catch (Exception ex1)//例外处理 - #region 例外处理 - { - ProcessException(ex1.Message); - - //****** "主机登录失败!" ****** - currentStatus = Application.Current.FindResource("DisplayInstallInfo_LoginFailed").ToString(); - MainWindowsShowInfo(currentStatus); - } - #endregion - } } } diff --git a/ProxySU/Properties/AssemblyInfo.cs b/ProxySU/Properties/AssemblyInfo.cs index 0234378..ff2c8c5 100644 --- a/ProxySU/Properties/AssemblyInfo.cs +++ b/ProxySU/Properties/AssemblyInfo.cs @@ -51,5 +51,5 @@ using System.Windows; // 可以指定所有值,也可以使用以下所示的 "*" 预置版本号和修订号 // 方法是按如下所示使用“*”: : // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("2.4.11.0")] -[assembly: AssemblyFileVersion("2.4.11.0")] +[assembly: AssemblyVersion("2.4.12.0")] +[assembly: AssemblyFileVersion("2.4.12.0")] diff --git a/ProxySU/ResultClientInformation.xaml.cs b/ProxySU/ResultClientInformation.xaml.cs index c80881a..5e9bf26 100644 --- a/ProxySU/ResultClientInformation.xaml.cs +++ b/ProxySU/ResultClientInformation.xaml.cs @@ -355,7 +355,7 @@ namespace ProxySU TextBlockTrojanGoWebSocketPath.Visibility = Visibility.Hidden; TextBlockTrojanGoCaption.Visibility = Visibility.Hidden; - //******"可用于ShadowRocket (ios)、igniter(Android)、Trojan-QT5 (windows) 扫码和导入url。注意:有的客户端可能不支持WebSocket模式。" ****** + //******"可用于ShadowRocket (ios)、igniter(Android)、Qv2ray (windows) 扫码和导入url。注意:有的客户端可能不支持WebSocket模式。" ****** TextBlockQrURLexplain.Text = Application.Current.FindResource("TextBlockQrURLexplainTrojan-go").ToString(); //主机地址 @@ -985,49 +985,50 @@ namespace ProxySU using (StreamWriter sw = new StreamWriter($"{configSavePath}\\readme.txt")) { - sw.WriteLine("config.json"); - //****** "此文件为v2ray官方程序所使用的客户端配置文件,配置为全局模式,socks5地址:127.0.0.1:1080,http代理地址:127.0.0.1:1081" ****** - sw.WriteLine(Application.Current.FindResource("readmeTxtV2RayExplainLine01").ToString()); + ReadmeTxtWriteGenerate(sw); + //sw.WriteLine("config.json"); + ////****** "此文件为v2ray官方程序所使用的客户端配置文件,配置为全局模式,socks5地址:127.0.0.1:1080,http代理地址:127.0.0.1:1081" ****** + //sw.WriteLine(Application.Current.FindResource("readmeTxtV2RayExplainLine01").ToString()); - //****** "v2ray官方网站:https://www.v2ray.com/" ****** - sw.WriteLine(Application.Current.FindResource("readmeTxtV2RayExplainLine02").ToString()); + ////****** "v2ray官方网站:https://www.v2ray.com/" ****** + //sw.WriteLine(Application.Current.FindResource("readmeTxtV2RayExplainLine02").ToString()); - //****** "v2ray官方程序下载地址:https://github.com/v2ray/v2ray-core/releases" ****** - sw.WriteLine(Application.Current.FindResource("readmeTxtV2RayExplainLine03").ToString()); + ////****** "v2ray官方程序下载地址:https://github.com/v2ray/v2ray-core/releases" ****** + //sw.WriteLine(Application.Current.FindResource("readmeTxtV2RayExplainLine03").ToString()); - //****** "下载相应版本,Windows选择v2ray-windows-64.zip或者v2ray-windows-32.zip,解压后提取v2ctl.exe和v2ray.exe。与config.json放在同一目录,运行v2ray.exe即可。" ****** - sw.WriteLine(Application.Current.FindResource("readmeTxtV2RayExplainLine04").ToString()); + ////****** "下载相应版本,Windows选择v2ray-windows-64.zip或者v2ray-windows-32.zip,解压后提取v2ctl.exe和v2ray.exe。与config.json放在同一目录,运行v2ray.exe即可。" ****** + //sw.WriteLine(Application.Current.FindResource("readmeTxtV2RayExplainLine04").ToString()); - sw.WriteLine("-----------------------------------------"); - sw.WriteLine("QR.bmp"); + //sw.WriteLine("-----------------------------------------"); + //sw.WriteLine("QR.bmp"); - //****** "此文件为v2rayN、Trojan-QT5、v2rayNG(Android)、Shadowrocket(ios)扫码导入节点" ****** - sw.WriteLine(Application.Current.FindResource("readmeTxtV2RayExplainLine05").ToString()); + ////****** "此文件为v2rayN(windows)、Qv2ray(windows)、v2rayNG(Android)、Shadowrocket(ios)扫码导入节点" ****** + //sw.WriteLine(Application.Current.FindResource("readmeTxtV2RayExplainLine05").ToString()); - //****** "v2rayN下载网址:https://github.com/2dust/v2rayN/releases" ****** - sw.WriteLine(Application.Current.FindResource("readmeTxtV2RayExplainLine06").ToString()); + ////****** "v2rayN下载网址:https://github.com/2dust/v2rayN/releases" ****** + //sw.WriteLine(Application.Current.FindResource("readmeTxtV2RayExplainLine06").ToString()); - //****** "Trojan-QT5:https://github.com/Trojan-Qt5/Trojan-Qt5" ****** - sw.WriteLine(Application.Current.FindResource("readmeTxtV2RayExplainLine07").ToString()); + ////****** "Qv2ray下载网址:https://github.com/Qv2ray/Qv2ray/releases" ****** + //sw.WriteLine(Application.Current.FindResource("readmeTxtV2RayExplainLine07").ToString()); - //****** "v2rayNG(Android)下载网址:https://github.com/2dust/v2rayNG/releases" ****** - sw.WriteLine(Application.Current.FindResource("readmeTxtV2RayExplainLine08").ToString()); + ////****** "v2rayNG(Android)下载网址:https://github.com/2dust/v2rayNG/releases" ****** + //sw.WriteLine(Application.Current.FindResource("readmeTxtV2RayExplainLine08").ToString()); - //****** "v2rayNG(Android)在Google Play下载网址:https://play.google.com/store/apps/details?id=com.v2ray.ang" ****** - sw.WriteLine(Application.Current.FindResource("readmeTxtV2RayExplainLine09").ToString()); + ////****** "v2rayNG(Android)在Google Play下载网址:https://play.google.com/store/apps/details?id=com.v2ray.ang" ****** + //sw.WriteLine(Application.Current.FindResource("readmeTxtV2RayExplainLine09").ToString()); - //****** "Shadowrocket(ios)下载,需要使用国外区的AppleID。请自行谷歌方法。" ****** - sw.WriteLine(Application.Current.FindResource("readmeTxtV2RayExplainLine10").ToString()); + ////****** "Shadowrocket(ios)下载,需要使用国外区的AppleID。请自行谷歌方法。" ****** + //sw.WriteLine(Application.Current.FindResource("readmeTxtV2RayExplainLine10").ToString()); - sw.WriteLine("-----------------------------------------"); - sw.WriteLine("url.txt"); + //sw.WriteLine("-----------------------------------------"); + //sw.WriteLine("url.txt"); - //****** "此文件为v2rayN、Trojan-QT5、v2rayNG(Android)、Shadowrocket(ios)复制粘贴导入节点的vmess网址" ****** - sw.WriteLine(Application.Current.FindResource("readmeTxtV2RayExplainLine11").ToString()); + ////****** "此文件为v2rayN、Qv2ray、v2rayNG(Android)、Shadowrocket(ios)复制粘贴导入节点的vmess网址" ****** + //sw.WriteLine(Application.Current.FindResource("readmeTxtV2RayExplainLine11").ToString()); - //写入通用配置参数 - TxtWriteGeneralParameters(sw); -} + ////写入通用配置参数 + //TxtWriteGeneralParameters(sw); + } } #region VLESS VMESS XTLS WS共存方案生成链接与说明文件 @@ -1140,13 +1141,13 @@ namespace ProxySU sw.WriteLine("-----------------------------------------"); //sw.WriteLine("QR.bmp"); - //****** "此文件为v2rayN、Trojan-QT5、v2rayNG(Android)、Shadowrocket(ios)扫码导入节点" ****** + //****** "此文件为v2rayN、Qv2ray、v2rayNG(Android)、Shadowrocket(ios)扫码导入节点" ****** //sw.WriteLine(Application.Current.FindResource("readmeTxtV2RayExplainLine05").ToString()); //****** "v2rayN下载网址:https://github.com/2dust/v2rayN/releases" ****** //sw.WriteLine(Application.Current.FindResource("readmeTxtV2RayExplainLine06").ToString()); - //****** "Trojan-QT5:https://github.com/Trojan-Qt5/Trojan-Qt5" ****** + //****** "Qv2ray:https://github.com/Qv2ray/Qv2ray/releases" ****** //sw.WriteLine(Application.Current.FindResource("readmeTxtV2RayExplainLine07").ToString()); //****** "v2rayNG(Android)下载网址:https://github.com/2dust/v2rayNG/releases" ****** @@ -1161,7 +1162,7 @@ namespace ProxySU //sw.WriteLine("-----------------------------------------"); //sw.WriteLine("url.txt"); - //****** "此文件为v2rayN、Trojan-QT5、v2rayNG(Android)、Shadowrocket(ios)复制粘贴导入节点的vmess网址" ****** + //****** "此文件为v2rayN、Qv2ray、v2rayNG(Android)、Shadowrocket(ios)复制粘贴导入节点的vmess网址" ****** //sw.WriteLine(Application.Current.FindResource("readmeTxtV2RayExplainLine11").ToString()); //写入通用配置参数 @@ -1278,13 +1279,13 @@ namespace ProxySU //sw.WriteLine("-----------------------------------------"); //sw.WriteLine("QR.bmp"); - //****** "此文件为v2rayN、Trojan-QT5、v2rayNG(Android)、Shadowrocket(ios)扫码导入节点" ****** + //****** "此文件为v2rayN、Qv2ray、v2rayNG(Android)、Shadowrocket(ios)扫码导入节点" ****** //sw.WriteLine(Application.Current.FindResource("readmeTxtV2RayExplainLine05").ToString()); //****** "v2rayN下载网址:https://github.com/2dust/v2rayN/releases" ****** sw.WriteLine(Application.Current.FindResource("readmeTxtV2RayExplainLine06").ToString()); - //****** "Trojan-QT5:https://github.com/Trojan-Qt5/Trojan-Qt5" ****** + //****** "Qv2ray:https://github.com/Qv2ray/Qv2ray/releases" ****** sw.WriteLine(Application.Current.FindResource("readmeTxtV2RayExplainLine07").ToString()); //****** "v2rayNG(Android)下载网址:https://github.com/2dust/v2rayNG/releases" ****** @@ -1299,7 +1300,7 @@ namespace ProxySU //sw.WriteLine("-----------------------------------------"); //sw.WriteLine("url.txt"); - //****** "此文件为v2rayN、Trojan-QT5、v2rayNG(Android)、Shadowrocket(ios)复制粘贴导入节点的vmess网址" ****** + //****** "此文件为v2rayN、Qv2ray、v2rayNG(Android)、Shadowrocket(ios)复制粘贴导入节点的vmess网址" ****** //sw.WriteLine(Application.Current.FindResource("readmeTxtV2RayExplainLine11").ToString()); //写入通用配置参数-- @@ -1417,13 +1418,13 @@ namespace ProxySU //sw.WriteLine("-----------------------------------------"); //sw.WriteLine("QR.bmp"); - //****** "此文件为v2rayN、Trojan-QT5、v2rayNG(Android)、Shadowrocket(ios)扫码导入节点" ****** + //****** "此文件为v2rayN、Qv2ray、v2rayNG(Android)、Shadowrocket(ios)扫码导入节点" ****** //sw.WriteLine(Application.Current.FindResource("readmeTxtV2RayExplainLine05").ToString()); //****** "v2rayN下载网址:https://github.com/2dust/v2rayN/releases" ****** sw.WriteLine(Application.Current.FindResource("readmeTxtV2RayExplainLine06").ToString()); - //****** "Trojan-QT5:https://github.com/Trojan-Qt5/Trojan-Qt5" ****** + //****** "Qv2ray:https://github.com/Qv2ray/Qv2ray/releases" ****** sw.WriteLine(Application.Current.FindResource("readmeTxtV2RayExplainLine07").ToString()); //****** "v2rayNG(Android)下载网址:https://github.com/2dust/v2rayNG/releases" ****** @@ -1438,7 +1439,7 @@ namespace ProxySU //sw.WriteLine("-----------------------------------------"); //sw.WriteLine("url.txt"); - //****** "此文件为v2rayN、Trojan-QT5、v2rayNG(Android)、Shadowrocket(ios)复制粘贴导入节点的vmess网址" ****** + //****** "此文件为v2rayN、Qv2ray、v2rayNG(Android)、Shadowrocket(ios)复制粘贴导入节点的vmess网址" ****** //sw.WriteLine(Application.Current.FindResource("readmeTxtV2RayExplainLine11").ToString()); //写入通用配置参数-- @@ -1556,13 +1557,13 @@ namespace ProxySU //sw.WriteLine("-----------------------------------------"); //sw.WriteLine("QR.bmp"); - //****** "此文件为v2rayN、Trojan-QT5、v2rayNG(Android)、Shadowrocket(ios)扫码导入节点" ****** + //****** "此文件为v2rayN、Qv2ray、v2rayNG(Android)、Shadowrocket(ios)扫码导入节点" ****** //sw.WriteLine(Application.Current.FindResource("readmeTxtV2RayExplainLine05").ToString()); //****** "v2rayN下载网址:https://github.com/2dust/v2rayN/releases" ****** sw.WriteLine(Application.Current.FindResource("readmeTxtV2RayExplainLine06").ToString()); - //****** "Trojan-QT5:https://github.com/Trojan-Qt5/Trojan-Qt5" ****** + //****** "Qv2ray:https://github.com/Qv2ray/Qv2ray/releases" ****** sw.WriteLine(Application.Current.FindResource("readmeTxtV2RayExplainLine07").ToString()); //****** "v2rayNG(Android)下载网址:https://github.com/2dust/v2rayNG/releases" ****** @@ -1577,7 +1578,7 @@ namespace ProxySU //sw.WriteLine("-----------------------------------------"); //sw.WriteLine("url.txt"); - //****** "此文件为v2rayN、Trojan-QT5、v2rayNG(Android)、Shadowrocket(ios)复制粘贴导入节点的vmess网址" ****** + //****** "此文件为v2rayN、Qv2ray、v2rayNG(Android)、Shadowrocket(ios)复制粘贴导入节点的vmess网址" ****** //sw.WriteLine(Application.Current.FindResource("readmeTxtV2RayExplainLine11").ToString()); //写入通用配置参数-- @@ -1664,49 +1665,50 @@ namespace ProxySU using (StreamWriter sw = new StreamWriter($"{configSavePath}\\readme.txt")) { - sw.WriteLine("config.json"); - //****** "此文件为v2ray官方程序所使用的客户端配置文件,配置为全局模式,socks5地址:127.0.0.1:1080,http代理地址:127.0.0.1:1081" ****** - sw.WriteLine(Application.Current.FindResource("readmeTxtV2RayExplainLine01").ToString()); + ReadmeTxtWriteGenerate(sw); + //sw.WriteLine("config.json"); + ////****** "此文件为v2ray官方程序所使用的客户端配置文件,配置为全局模式,socks5地址:127.0.0.1:1080,http代理地址:127.0.0.1:1081" ****** + //sw.WriteLine(Application.Current.FindResource("readmeTxtV2RayExplainLine01").ToString()); - //****** "v2ray官方网站:https://www.v2ray.com/" ****** - sw.WriteLine(Application.Current.FindResource("readmeTxtV2RayExplainLine02").ToString()); + ////****** "v2ray官方网站:https://www.v2ray.com/" ****** + //sw.WriteLine(Application.Current.FindResource("readmeTxtV2RayExplainLine02").ToString()); - //****** "v2ray官方程序下载地址:https://github.com/v2ray/v2ray-core/releases" ****** - sw.WriteLine(Application.Current.FindResource("readmeTxtV2RayExplainLine03").ToString()); + ////****** "v2ray官方程序下载地址:https://github.com/v2ray/v2ray-core/releases" ****** + //sw.WriteLine(Application.Current.FindResource("readmeTxtV2RayExplainLine03").ToString()); - //****** "下载相应版本,Windows选择v2ray-windows-64.zip或者v2ray-windows-32.zip,解压后提取v2ctl.exe和v2ray.exe。与config.json放在同一目录,运行v2ray.exe即可。" ****** - sw.WriteLine(Application.Current.FindResource("readmeTxtV2RayExplainLine04").ToString()); + ////****** "下载相应版本,Windows选择v2ray-windows-64.zip或者v2ray-windows-32.zip,解压后提取v2ctl.exe和v2ray.exe。与config.json放在同一目录,运行v2ray.exe即可。" ****** + //sw.WriteLine(Application.Current.FindResource("readmeTxtV2RayExplainLine04").ToString()); - sw.WriteLine("-----------------------------------------"); - sw.WriteLine("QR.bmp"); + //sw.WriteLine("-----------------------------------------"); + //sw.WriteLine("QR.bmp"); - //******"此文件为v2rayN、Trojan-QT5、v2rayNG(Android)、Shadowrocket(ios)扫码导入节点" * ***** - sw.WriteLine(Application.Current.FindResource("readmeTxtV2RayExplainLine05").ToString()); + ////******"此文件为v2rayN、Qv2ray、v2rayNG(Android)、Shadowrocket(ios)扫码导入节点" * ***** + //sw.WriteLine(Application.Current.FindResource("readmeTxtV2RayExplainLine05").ToString()); - //****** "v2rayN下载网址:https://github.com/2dust/v2rayN/releases" ****** - sw.WriteLine(Application.Current.FindResource("readmeTxtV2RayExplainLine06").ToString()); + ////****** "v2rayN下载网址:https://github.com/2dust/v2rayN/releases" ****** + //sw.WriteLine(Application.Current.FindResource("readmeTxtV2RayExplainLine06").ToString()); - //****** "Trojan-QT5:https://github.com/Trojan-Qt5/Trojan-Qt5" ****** - sw.WriteLine(Application.Current.FindResource("readmeTxtV2RayExplainLine07").ToString()); + ////****** "Qv2ray:https://github.com/Qv2ray/Qv2ray/releases" ****** + //sw.WriteLine(Application.Current.FindResource("readmeTxtV2RayExplainLine07").ToString()); - //****** "v2rayNG(Android)下载网址:https://github.com/2dust/v2rayNG/releases" ****** - sw.WriteLine(Application.Current.FindResource("readmeTxtV2RayExplainLine08").ToString()); + ////****** "v2rayNG(Android)下载网址:https://github.com/2dust/v2rayNG/releases" ****** + //sw.WriteLine(Application.Current.FindResource("readmeTxtV2RayExplainLine08").ToString()); - //****** "v2rayNG(Android)在Google Play下载网址:https://play.google.com/store/apps/details?id=com.v2ray.ang" ****** - sw.WriteLine(Application.Current.FindResource("readmeTxtV2RayExplainLine09").ToString()); + ////****** "v2rayNG(Android)在Google Play下载网址:https://play.google.com/store/apps/details?id=com.v2ray.ang" ****** + //sw.WriteLine(Application.Current.FindResource("readmeTxtV2RayExplainLine09").ToString()); - //****** "Shadowrocket(ios)下载,需要使用国外区的AppleID。请自行谷歌方法。" ****** - sw.WriteLine(Application.Current.FindResource("readmeTxtV2RayExplainLine10").ToString()); + ////****** "Shadowrocket(ios)下载,需要使用国外区的AppleID。请自行谷歌方法。" ****** + //sw.WriteLine(Application.Current.FindResource("readmeTxtV2RayExplainLine10").ToString()); - sw.WriteLine("-----------------------------------------"); - sw.WriteLine("url.txt"); + //sw.WriteLine("-----------------------------------------"); + //sw.WriteLine("url.txt"); - //******"此文件为v2rayN、Trojan-QT5、v2rayNG(Android)、Shadowrocket(ios)复制粘贴导入节点的vmess网址" * ***** - sw.WriteLine(Application.Current.FindResource("readmeTxtV2RayExplainLine11").ToString()); + ////******"此文件为v2rayN、Qv2ray、v2rayNG(Android)、Shadowrocket(ios)复制粘贴导入节点的vmess网址" * ***** + //sw.WriteLine(Application.Current.FindResource("readmeTxtV2RayExplainLine11").ToString()); + + ////写入通用配置参数-- + //TxtWriteGeneralParameters(sw); - //写入通用配置参数-- - TxtWriteGeneralParameters(sw); - } } @@ -1791,52 +1793,99 @@ namespace ProxySU using (StreamWriter sw = new StreamWriter($"{configSavePath}\\readme.txt")) { - sw.WriteLine("config.json"); - //****** "此文件为v2ray官方程序所使用的客户端配置文件,配置为全局模式,socks5地址:127.0.0.1:1080,http代理地址:127.0.0.1:1081" ****** - sw.WriteLine(Application.Current.FindResource("readmeTxtV2RayExplainLine01").ToString()); + ReadmeTxtWriteGenerate(sw); + //sw.WriteLine("config.json"); + ////****** "此文件为v2ray官方程序所使用的客户端配置文件,配置为全局模式,socks5地址:127.0.0.1:1080,http代理地址:127.0.0.1:1081" ****** + //sw.WriteLine(Application.Current.FindResource("readmeTxtV2RayExplainLine01").ToString()); - //****** "v2ray官方网站:https://www.v2ray.com/" ****** - sw.WriteLine(Application.Current.FindResource("readmeTxtV2RayExplainLine02").ToString()); + ////****** "v2ray官方网站:https://www.v2ray.com/" ****** + //sw.WriteLine(Application.Current.FindResource("readmeTxtV2RayExplainLine02").ToString()); - //****** "v2ray官方程序下载地址:https://github.com/v2ray/v2ray-core/releases" ****** - sw.WriteLine(Application.Current.FindResource("readmeTxtV2RayExplainLine03").ToString()); + ////****** "v2ray官方程序下载地址:https://github.com/v2ray/v2ray-core/releases" ****** + //sw.WriteLine(Application.Current.FindResource("readmeTxtV2RayExplainLine03").ToString()); - //****** "下载相应版本,Windows选择v2ray-windows-64.zip或者v2ray-windows-32.zip,解压后提取v2ctl.exe和v2ray.exe。与config.json放在同一目录,运行v2ray.exe即可。" ****** - sw.WriteLine(Application.Current.FindResource("readmeTxtV2RayExplainLine04").ToString()); + ////****** "下载相应版本,Windows选择v2ray-windows-64.zip或者v2ray-windows-32.zip,解压后提取v2ctl.exe和v2ray.exe。与config.json放在同一目录,运行v2ray.exe即可。" ****** + //sw.WriteLine(Application.Current.FindResource("readmeTxtV2RayExplainLine04").ToString()); - sw.WriteLine("-----------------------------------------"); - sw.WriteLine("QR.bmp"); + //sw.WriteLine("-----------------------------------------"); + //sw.WriteLine("QR.bmp"); - //****** "此文件为v2rayN、Trojan-QT5、v2rayNG(Android)、Shadowrocket(ios)扫码导入节点" ****** - sw.WriteLine(Application.Current.FindResource("readmeTxtV2RayExplainLine05").ToString()); + ////****** "此文件为v2rayN、Qv2ray、v2rayNG(Android)、Shadowrocket(ios)扫码导入节点" ****** + //sw.WriteLine(Application.Current.FindResource("readmeTxtV2RayExplainLine05").ToString()); - //****** "v2rayN下载网址:https://github.com/2dust/v2rayN/releases" ****** - sw.WriteLine(Application.Current.FindResource("readmeTxtV2RayExplainLine06").ToString()); + ////****** "v2rayN下载网址:https://github.com/2dust/v2rayN/releases" ****** + //sw.WriteLine(Application.Current.FindResource("readmeTxtV2RayExplainLine06").ToString()); - //****** "Trojan-QT5:https://github.com/Trojan-Qt5/Trojan-Qt5" ****** - sw.WriteLine(Application.Current.FindResource("readmeTxtV2RayExplainLine07").ToString()); + ////****** "Qv2ray:https://github.com/Qv2ray/Qv2ray/releases" ****** + //sw.WriteLine(Application.Current.FindResource("readmeTxtV2RayExplainLine07").ToString()); - //****** "v2rayNG(Android)下载网址:https://github.com/2dust/v2rayNG/releases" ****** - sw.WriteLine(Application.Current.FindResource("readmeTxtV2RayExplainLine08").ToString()); + ////****** "v2rayNG(Android)下载网址:https://github.com/2dust/v2rayNG/releases" ****** + //sw.WriteLine(Application.Current.FindResource("readmeTxtV2RayExplainLine08").ToString()); - //****** "v2rayNG(Android)在Google Play下载网址:https://play.google.com/store/apps/details?id=com.v2ray.ang" ****** - sw.WriteLine(Application.Current.FindResource("readmeTxtV2RayExplainLine09").ToString()); + ////****** "v2rayNG(Android)在Google Play下载网址:https://play.google.com/store/apps/details?id=com.v2ray.ang" ****** + //sw.WriteLine(Application.Current.FindResource("readmeTxtV2RayExplainLine09").ToString()); - //****** "Shadowrocket(ios)下载,需要使用国外区的AppleID。请自行谷歌方法。" ****** - sw.WriteLine(Application.Current.FindResource("readmeTxtV2RayExplainLine10").ToString()); + ////****** "Shadowrocket(ios)下载,需要使用国外区的AppleID。请自行谷歌方法。" ****** + //sw.WriteLine(Application.Current.FindResource("readmeTxtV2RayExplainLine10").ToString()); - sw.WriteLine("-----------------------------------------"); - sw.WriteLine("url.txt"); + //sw.WriteLine("-----------------------------------------"); + //sw.WriteLine("url.txt"); - //****** "此文件为v2rayN、Trojan-QT5、v2rayNG(Android)、Shadowrocket(ios)复制粘贴导入节点的vmess网址" ****** - sw.WriteLine(Application.Current.FindResource("readmeTxtV2RayExplainLine11").ToString()); + ////****** "此文件为v2rayN、Qv2ray、v2rayNG(Android)、Shadowrocket(ios)复制粘贴导入节点的vmess网址" ****** + //sw.WriteLine(Application.Current.FindResource("readmeTxtV2RayExplainLine11").ToString()); - //写入通用配置参数-- - TxtWriteGeneralParameters(sw); + ////写入通用配置参数-- + //TxtWriteGeneralParameters(sw); } } + //写入VMESS的readme.txt文件 + private void ReadmeTxtWriteGenerate(StreamWriter sw) + { + sw.WriteLine("config.json"); + //****** "此文件为v2ray官方程序所使用的客户端配置文件,配置为全局模式,socks5地址:127.0.0.1:1080,http代理地址:127.0.0.1:1081" ****** + sw.WriteLine(Application.Current.FindResource("readmeTxtV2RayExplainLine01").ToString()); + + //****** "v2ray官方网站:https://www.v2ray.com/" ****** + sw.WriteLine(Application.Current.FindResource("readmeTxtV2RayExplainLine02").ToString()); + + //****** "v2ray官方程序下载地址:https://github.com/v2ray/v2ray-core/releases" ****** + sw.WriteLine(Application.Current.FindResource("readmeTxtV2RayExplainLine03").ToString()); + + //****** "下载相应版本,Windows选择v2ray-windows-64.zip或者v2ray-windows-32.zip,解压后提取v2ctl.exe和v2ray.exe。与config.json放在同一目录,运行v2ray.exe即可。" ****** + sw.WriteLine(Application.Current.FindResource("readmeTxtV2RayExplainLine04").ToString()); + + sw.WriteLine("-----------------------------------------"); + sw.WriteLine("QR.bmp"); + + //****** "此文件为v2rayN(windows)、Qv2ray(windows)、v2rayNG(Android)、Shadowrocket(ios)扫码导入节点" ****** + sw.WriteLine(Application.Current.FindResource("readmeTxtV2RayExplainLine05").ToString()); + + //****** "v2rayN下载网址:https://github.com/2dust/v2rayN/releases" ****** + sw.WriteLine(Application.Current.FindResource("readmeTxtV2RayExplainLine06").ToString()); + + //****** "Qv2ray下载网址:https://github.com/Qv2ray/Qv2ray/releases" ****** + sw.WriteLine(Application.Current.FindResource("readmeTxtV2RayExplainLine07").ToString()); + + //****** "v2rayNG(Android)下载网址:https://github.com/2dust/v2rayNG/releases" ****** + sw.WriteLine(Application.Current.FindResource("readmeTxtV2RayExplainLine08").ToString()); + + //****** "v2rayNG(Android)在Google Play下载网址:https://play.google.com/store/apps/details?id=com.v2ray.ang" ****** + sw.WriteLine(Application.Current.FindResource("readmeTxtV2RayExplainLine09").ToString()); + + //****** "Shadowrocket(ios)下载,需要使用国外区的AppleID。请自行谷歌方法。" ****** + sw.WriteLine(Application.Current.FindResource("readmeTxtV2RayExplainLine10").ToString()); + + sw.WriteLine("-----------------------------------------"); + sw.WriteLine("url.txt"); + + //****** "此文件为v2rayN、Qv2ray、v2rayNG(Android)、Shadowrocket(ios)复制粘贴导入节点的vmess网址" ****** + sw.WriteLine(Application.Current.FindResource("readmeTxtV2RayExplainLine11").ToString()); + + //写入通用配置参数 + TxtWriteGeneralParameters(sw); + } //TXT文件中写入通用配置参数--- private void TxtWriteGeneralParameters(StreamWriter sw,bool alterId = true) { @@ -2146,10 +2195,10 @@ namespace ProxySU sw.WriteLine("-----------------------------------------\n"); sw.WriteLine("QR.bmp"); - //sw.WriteLine("此文件为Trojan-QT5 (windows)、igniter(Android)、Shadowrocket(ios)扫码导入节点"); + //sw.WriteLine("此文件为Qv2ray (windows)、igniter(Android)、Shadowrocket(ios)扫码导入节点"); sw.WriteLine(Application.Current.FindResource("readmeTxtTrojanExplainLine05").ToString()); - //sw.WriteLine("Trojan-QT5 (windows)下载网址:https://github.com/TheWanderingCoel/Trojan-Qt5/releases"); + //sw.WriteLine("Qv2ray (windows)下载网址:https://github.com/Qv2ray/Qv2ray/releases"); sw.WriteLine(Application.Current.FindResource("readmeTxtTrojanExplainLine06").ToString()); //sw.WriteLine("igniter(Android)下载网址:https://github.com/trojan-gfw/igniter/releases"); @@ -2160,7 +2209,7 @@ namespace ProxySU sw.WriteLine("-----------------------------------------\n"); sw.WriteLine("url.txt"); - //sw.WriteLine("此文件为Trojan-QT5 (windows)、igniter(Android)、Shadowrocket(ios)复制粘贴导入节点的网址"); + //sw.WriteLine("此文件为Qv2ray (windows)、igniter(Android)、Shadowrocket(ios)复制粘贴导入节点的网址"); sw.WriteLine(Application.Current.FindResource("readmeTxtTrojanExplainLine09").ToString()); sw.WriteLine("-----------------------------------------\n"); @@ -2222,26 +2271,15 @@ namespace ProxySU configDomainSavePath = CreateConfigSaveDir(proxyfolder, TextBoxNaiveServerHost.Text); string configSavePath = configDomainSavePath; - //string saveFileFolderFirst = TextBoxNaiveServerHost.Text; - //int num = 1; - //saveFileFolder = saveFileFolderFirst; - //CheckDir("naive_config"); - //while (Directory.Exists(@"naive_config\" + saveFileFolder)) - //{ - // saveFileFolder = saveFileFolderFirst + "_copy_" + num.ToString(); - // num++; - //} - //CheckDir(@"naive_config\" + saveFileFolder); - string naiveUrl = $"https://{TextBoxNaiveUser.Text}:{TextBoxNaivePassword.Text}@{TextBoxNaiveServerHost.Text}:443/?name={TextBoxNaiveServerHost.Text}&extra_headers="; - //MessageBox.Show(v2rayNjsonObject.ToString()); - //string trojanUrl = "trojan://" + ToBase64Encode(v2rayNjsonObject.ToString()); + string naiveUrl = $"naive+https://{TextBoxNaiveUser.Text}:{TextBoxNaivePassword.Text}@{TextBoxNaiveServerHost.Text}:443?padding=true#{TextBoxNaiveServerHost.Text}"; + TextBoxURL.Text = naiveUrl; using (StreamWriter sw = new StreamWriter($"{configSavePath}\\url.txt")) { sw.WriteLine(naiveUrl); } - //CreateQRCode(trojanUrl); + ImageShareQRcode.Source = CreateQRCode(naiveUrl, $"{configSavePath}\\QR.bmp"); //移动NaiveProxy官方程序配置文件到相应目录 if (File.Exists(@"naive_config\config.json")) @@ -2266,14 +2304,23 @@ namespace ProxySU //sw.WriteLine("下载相应版本,Windows选择naiveproxy-x.xx-win.zip,解压后提取naive.exe。与config.json放在同一目录,运行naive.exe即可。"); sw.WriteLine(Application.Current.FindResource("readmeTxtNaiveProxyExplainLine04").ToString()); + sw.WriteLine("-----------------------------------------"); + sw.WriteLine("QR.bmp"); + + //sw.WriteLine("此文件为NaiveSharp(windows)复制粘贴导入节点的网址"); + sw.WriteLine(Application.Current.FindResource("readmeTxtNaiveProxyExplainLine05").ToString()); + + //sw.WriteLine("NaiveSharp(windows)下载网址:https://github.com/KevinZonda/NaiveSharp/releases"); + sw.WriteLine(Application.Current.FindResource("readmeTxtNaiveProxyExplainLine06").ToString()); + sw.WriteLine("-----------------------------------------\n"); sw.WriteLine("url.txt"); - //sw.WriteLine("此文件为NaiveGUI(windows)复制粘贴导入节点的网址"); + //sw.WriteLine("此文件为NaiveSharp(windows)复制粘贴导入节点的网址"); sw.WriteLine(Application.Current.FindResource("readmeTxtNaiveProxyExplainLine05").ToString()); - //sw.WriteLine("NaiveGUI(windows)下载网址:https://github.com/ExcitedCodes/NaiveGUI/releases"); + //sw.WriteLine("NaiveSharp(windows)下载网址:https://github.com/KevinZonda/NaiveSharp/releases"); sw.WriteLine(Application.Current.FindResource("readmeTxtNaiveProxyExplainLine06").ToString()); sw.WriteLine("-----------------------------------------\n"); diff --git a/ProxySU/Translations/ProxySU.en-US.xaml b/ProxySU/Translations/ProxySU.en-US.xaml index 1c13f9b..ed2e2b5 100644 --- a/ProxySU/Translations/ProxySU.en-US.xaml +++ b/ProxySU/Translations/ProxySU.en-US.xaml @@ -231,10 +231,10 @@ default auto QR/URL The above parameters can be entered into the client manually or by scanning. The configuration and related files used for the official client have been stored in the directory. Click the OK button to open - QR code and URL link can be used v2rayN(windows) Trojan-QT5(windows) Qv2ray(windows) Shadowrocket(ios) v2rayNG(Android) Import v2ray node Note: The Vless protocol requires manual input of configuration parameters, and the QR code and URL are invalid - " can be used for ShadowRocket (ios), ignore (Android), Trojan-QT5 (windows) to scan codes and import URLs. Note: some clients may not support WebSocket mode ." - "Can be used for ShadowRocket (ios), ignore (Android), Trojan-QT5 (windows) to scan codes and import URLs. Note: Some clients may not support WebSocket mode." - URL import link for NaiveGUI (windows) + QR code and URL link can be used v2rayN(windows) Qv2ray(windows) Qv2ray(windows) Shadowrocket(ios) v2rayNG(Android) Import v2ray node Note: The Vless protocol requires manual input of configuration parameters, and the QR code and URL are invalid + " can be used for ShadowRocket (ios), ignore (Android), Qv2ray (windows) to scan codes and import URLs. Note: some clients may not support WebSocket mode ." + "Can be used for ShadowRocket (ios), ignore (Android), Qv2ray (windows) to scan codes and import URLs. Note: Some clients may not support WebSocket mode." + URL import link for NaiveSharp (windows) Used to scan codes and import URL import links for ShadowsocksR (windows), SSRR (android), Shadowrocket (ios) For mobile phone client shadowsocks(android), Shadowrocket(ios) scan code and URL import link For the computer client Shadowsocks (windows) scan code and URL import link @@ -382,13 +382,13 @@ v2ray official website: https://www.v2ray.com/ v2ray official program download address: https://github.com/v2ray/v2ray-core/releases download the corresponding version, Windows select v2ray-windows-64.zip or v2ray-windows-32.zip, extract v2ctl.exe and v2ray.exe after decompression. Put it in the same directory as config.json, just run v2ray.exe. - This file is v2rayN, Trojan-QT5, v2rayNG(Android), Shadowrocket(ios) scan code import node + This file is v2rayN, Qv2ray, v2rayNG(Android), Shadowrocket(ios) scan code import node v2rayN download URL: https://github.com/2dust/v2rayN/releases - Trojan-QT5: https://github.com/Trojan-Qt5/Trojan-Qt5 + Qv2ray download URL: https://github.com/Qv2ray/Qv2ray/releases v2rayNG(Android) download URL: https://github.com/2dust/v2rayNG/releases v2rayNG (Android) download URL on Google Play: https://play.google.com/store/apps/details?id=com.v2ray.ang Shadowrocket(ios) download, you need to use the AppleID of the foreign region. Please Google method yourself. - This file is v2rayN, Trojan-QT5, v2rayNG(Android), Shadowrocket(ios) copy and paste the vmess URL of the imported node + This file is v2rayN, Qv2ray, v2rayNG(Android), Shadowrocket(ios) copy and paste the vmess URL of the imported node Server general connection configuration parameters This file is the client configuration file used by the official Trojan-go program, configured in global mode, http and socks5 address: 127.0.0.1:1080 @@ -406,19 +406,19 @@ Trojan official website: https://trojan-gfw.github.io/trojan/ Trojan official program download address: https://github.com/trojan-gfw/trojan/releases Download the corresponding version, select Trojan-x.xx-win.zip for Windows, extract trojan.exe after decompression. Put it in the same directory as config.json, just run trojan.exe. - This file is Trojan-QT5 (windows), ignore (Android), Shadowrocket (ios) scan code import node - Trojan-QT5 (windows) download URL: https://github.com/TheWanderingCoel/Trojan-Qt5/releases + This file is Qv2ray (windows), ignore (Android), Shadowrocket (ios) scan code import node + Qv2ray (windows) download URL: https://github.com/Qv2ray/Qv2ray/releases igniter (Android) download URL: https://github.com/trojan-gfw/igniter/releases Shadowrocket(ios) download, you need to use the AppleID of the foreign region. Please Google method yourself. - This file is Trojan-QT5 (windows), ignore (Android), Shadowrocket (ios) copy and paste the URL of the imported node + This file is Qv2ray (windows), ignore (Android), Shadowrocket (ios) copy and paste the URL of the imported node Server general connection configuration parameters This file is the client configuration file used by the official NaiveProxy program, configured in global mode, socks5 address: 127.0.0.1:1080 NaiveProxy official website: https://github.com/klzgrad/naiveproxy NaiveProxy official program download address: https://github.com/klzgrad/naiveproxy/releases download the corresponding version, select naiveproxy-x.xx-win.zip for Windows, extract naive.exe after decompression. Put it in the same directory as config.json, just run naive.exe. - This file is NaiveGUI (windows) copy and paste the URL of the imported node - NaiveGUI(windows) download URL: https://github.com/ExcitedCodes/NaiveGUI/releases + This file is NaiveSharp (windows) copy and paste the URL of the imported node + NaiveSharp(windows) download URL: https://github.com/KevinZonda/NaiveSharp/releases Server general connection configuration parameters This file is for ShadowsocksR (windows), SSRR (Android), Shadowrocket (ios) scan code import node diff --git a/ProxySU/Translations/ProxySU.zh-CN.xaml b/ProxySU/Translations/ProxySU.zh-CN.xaml index 5a7acc8..4906ea7 100644 --- a/ProxySU/Translations/ProxySU.zh-CN.xaml +++ b/ProxySU/Translations/ProxySU.zh-CN.xaml @@ -235,10 +235,10 @@ 默认auto 二维码/URL 以上参数可以手动或扫描输入客户端,用于官方客户端的配置和相关文件已经存放入目录下,点击 确定 按扭可打开 - 二维码和URL链接可用于 v2rayN(windows) Trojan-QT5(windows) Qv2ray(windows) Shadowrocket(ios) v2rayNG(Android) 导入v2ray节点 注意:Vless协议需要手动输入配置参数,二维码和URL无效 - "可用于ShadowRocket (ios)、igniter(Android)、Trojan-QT5 (windows) 扫码和导入url。注意:有的客户端可能不支持WebSocket模式。" - "可用于ShadowRocket (ios)、igniter(Android)、Trojan-QT5 (windows) 扫码和导入url。注意:有的客户端可能不支持WebSocket模式。" - 用于NaiveGUI(windows)的URL导入链接 + 二维码和URL链接可用于 v2rayN(windows) Qv2ray(windows) Qv2ray(windows) Shadowrocket(ios) v2rayNG(Android) 导入v2ray节点 注意:Vless协议需要手动输入配置参数,二维码和URL无效 + "可用于ShadowRocket (ios)、igniter(Android)、Qv2ray (windows) 扫码和导入url。注意:有的客户端可能不支持WebSocket模式。" + "可用于ShadowRocket (ios)、igniter(Android)、Qv2ray (windows) 扫码和导入url。注意:有的客户端可能不支持WebSocket模式。" + 用于NaiveSharp(windows)的URL导入链接 用于ShadowsocksR(windows)、SSRR(android)、Shadowrocket(ios)的扫码和URL导入链接 用于手机客户端shadowsocks(android)、Shadowrocket(ios)的扫码和URL导入链接 用于电脑客户端Shadowsocks (windows)的扫码和URL导入链接 @@ -387,13 +387,13 @@ v2ray官方网站:https://www.v2ray.com/ v2ray官方程序下载地址:https://github.com/v2ray/v2ray-core/releases 下载相应版本,Windows选择v2ray-windows-64.zip或者v2ray-windows-32.zip,解压后提取v2ctl.exe和v2ray.exe。与config.json放在同一目录,运行v2ray.exe即可。 - 此文件为v2rayN、Trojan-QT5、v2rayNG(Android)、Shadowrocket(ios)扫码导入节点 + 此文件为v2rayN(windows)、Qv2ray(windows)、v2rayNG(Android)、Shadowrocket(ios)扫码导入节点 v2rayN下载网址:https://github.com/2dust/v2rayN/releases - Trojan-QT5:https://github.com/Trojan-Qt5/Trojan-Qt5 + Qv2ray下载网址:https://github.com/Qv2ray/Qv2ray/releases v2rayNG(Android)下载网址:https://github.com/2dust/v2rayNG/releases v2rayNG(Android)在Google Play下载网址:https://play.google.com/store/apps/details?id=com.v2ray.ang Shadowrocket(ios)下载,需要使用国外区的AppleID。请自行谷歌方法。 - 此文件为v2rayN、Trojan-QT5、v2rayNG(Android)、Shadowrocket(ios)复制粘贴导入节点的vmess网址 + 此文件为v2rayN、Qv2ray、v2rayNG(Android)、Shadowrocket(ios)复制粘贴导入节点的vmess网址 服务器通用连接配置参数: 此文件为Trojan-go官方程序所使用的客户端配置文件,配置为全局模式,http与socks5地址:127.0.0.1:1080 @@ -411,19 +411,19 @@ Trojan官方网站:https://trojan-gfw.github.io/trojan/ Trojan官方程序下载地址:https://github.com/trojan-gfw/trojan/releases 下载相应版本,Windows选择Trojan-x.xx-win.zip,解压后提取trojan.exe。与config.json放在同一目录,运行trojan.exe即可。 - 此文件为Trojan-QT5 (windows)、igniter(Android)、Shadowrocket(ios)扫码导入节点 - Trojan-QT5 (windows)下载网址:https://github.com/TheWanderingCoel/Trojan-Qt5/releases + 此文件为Qv2ray (windows)、igniter(Android)、Shadowrocket(ios)扫码导入节点 + Qv2ray (windows)下载网址:https://github.com/Qv2ray/Qv2ray/releases igniter(Android)下载网址:https://github.com/trojan-gfw/igniter/releases Shadowrocket(ios)下载,需要使用国外区的AppleID。请自行谷歌方法。 - 此文件为Trojan-QT5 (windows)、igniter(Android)、Shadowrocket(ios)复制粘贴导入节点的网址 + 此文件为Qv2ray (windows)、igniter(Android)、Shadowrocket(ios)复制粘贴导入节点的网址 服务器通用连接配置参数 此文件为NaiveProxy官方程序所使用的客户端配置文件,配置为全局模式,socks5地址:127.0.0.1:1080 NaiveProxy官方网站:https://github.com/klzgrad/naiveproxy NaiveProxy官方程序下载地址:https://github.com/klzgrad/naiveproxy/releases 下载相应版本,Windows选择naiveproxy-x.xx-win.zip,解压后提取naive.exe。与config.json放在同一目录,运行naive.exe即可。 - 此文件为NaiveGUI(windows)复制粘贴导入节点的网址 - NaiveGUI(windows)下载网址:https://github.com/ExcitedCodes/NaiveGUI/releases + 此文件为NaiveSharp(windows)复制粘贴导入节点的网址 + NaiveSharp(windows)下载网址:https://github.com/KevinZonda/NaiveSharp/releases 服务器通用连接配置参数 此文件为ShadowsocksR (windows)、SSRR(Android)、Shadowrocket(ios)扫码导入节点 diff --git a/ProxySU/Translations/ProxySU.zh-TW.xaml b/ProxySU/Translations/ProxySU.zh-TW.xaml index 697bd8e..d60a826 100644 --- a/ProxySU/Translations/ProxySU.zh-TW.xaml +++ b/ProxySU/Translations/ProxySU.zh-TW.xaml @@ -231,10 +231,10 @@ 默認auto 二維碼/URL 以上參數可以手動或掃描輸入客戶端,用於官方客戶端的配置和相關文件已經存放入目錄下,點擊 確定 按扭可打開 - 二維碼和URL鏈接可用於 v2rayN(windows) Trojan-QT5(windows) Qv2ray(windows) Shadowrocket(ios) v2rayNG(Android) 導入v2ray節點 注意:Vless協議需要手動輸入配置參數,二維碼和URL無效 - "可用於ShadowRocket (ios)、igniter(Android)、Trojan-QT5 (windows) 掃碼和導入url。注意:有的客戶端可能不支持WebSocket模式。" - "可用於ShadowRocket (ios)、igniter(Android)、Trojan-QT5 (windows) 掃碼和導入url。注意:有的客戶端可能不支持WebSocket模式。" - 用於NaiveGUI(windows)的URL導入鏈接 + 二維碼和URL鏈接可用於 v2rayN(windows) Qv2ray(windows) Qv2ray(windows) Shadowrocket(ios) v2rayNG(Android) 導入v2ray節點 注意:Vless協議需要手動輸入配置參數,二維碼和URL無效 + "可用於ShadowRocket (ios)、igniter(Android)、Qv2ray (windows) 掃碼和導入url。注意:有的客戶端可能不支持WebSocket模式。" + "可用於ShadowRocket (ios)、igniter(Android)、Qv2ray (windows) 掃碼和導入url。注意:有的客戶端可能不支持WebSocket模式。" + 用於NaiveSharp(windows)的URL導入鏈接 用於ShadowsocksR(windows)、SSRR(android)、Shadowrocket(ios)的掃碼和導入URL導入鏈接 用於手機客戶端shadowsocks(android)、Shadowrocket(ios)的掃碼和URL導入鏈接 用於電腦客戶端Shadowsocks (windows)的掃碼和URL導入鏈接 @@ -383,13 +383,13 @@ v2ray官方網站:https://www.v2ray.com/ v2ray官方程序下載地址:https://github.com/v2ray/v2ray-core/releases 下載相應版本,Windows選擇v2ray-windows-64.zip或者v2ray-windows-32.zip,解壓後提取v2ctl.exe和v2ray.exe。與config.json放在同一目錄,運行v2ray.exe即可。 - 此文件為v2rayN、Trojan-QT5、v2rayNG(Android)、Shadowrocket(ios)掃碼導入節點 + 此文件為v2rayN、Qv2ray、v2rayNG(Android)、Shadowrocket(ios)掃碼導入節點 v2rayN下載網址:https://github.com/2dust/v2rayN/releases - Trojan-QT5:https://github.com/Trojan-Qt5/Trojan-Qt5 + Qv2ray下載網址:https://github.com/Qv2ray/Qv2ray/releases v2rayNG(Android)下載網址:https://github.com/2dust/v2rayNG/releases v2rayNG(Android)在Google Play下載網址:https://play.google.com/store/apps/details?id=com.v2ray.ang Shadowrocket(ios)下載,需要使用國外區的AppleID。請自行谷歌方法。 - 此文件為v2rayN、Trojan-QT5、v2rayNG(Android)、Shadowrocket(ios)複製粘貼導入節點的vmess網址 + 此文件為v2rayN、Qv2ray、v2rayNG(Android)、Shadowrocket(ios)複製粘貼導入節點的vmess網址 服務器通用連接配置參數 此文件為Trojan-go官方程序所使用的客戶端配置文件,配置為全局模式,http與socks5地址:127.0.0.1:1080 @@ -407,19 +407,19 @@ Trojan官方網站:https://trojan-gfw.github.io/trojan/ Trojan官方程序下載地址:https://github.com/trojan-gfw/trojan/releases 下載相應版本,Windows選擇Trojan-x.xx-win.zip,解壓後提取trojan.exe。與config.json放在同一目錄,運行trojan.exe即可。 - 此文件為Trojan-QT5 (windows)、igniter(Android)、Shadowrocket(ios)掃碼導入節點 - Trojan-QT5 (windows)下載網址:https://github.com/TheWanderingCoel/Trojan-Qt5/releases + 此文件為Qv2ray (windows)、igniter(Android)、Shadowrocket(ios)掃碼導入節點 + Qv2ray (windows)下載網址:https://github.com/Qv2ray/Qv2ray/releases igniter(Android)下載網址:https://github.com/trojan-gfw/igniter/releases Shadowrocket(ios)下載,需要使用國外區的AppleID。請自行谷歌方法。 - 此文件為Trojan-QT5 (windows)、igniter(Android)、Shadowrocket(ios)複製粘貼導入節點的網址 + 此文件為Qv2ray (windows)、igniter(Android)、Shadowrocket(ios)複製粘貼導入節點的網址 服務器通用連接配置參數 此文件為NaiveProxy官方程序所使用的客戶端配置文件,配置為全局模式,socks5地址:127.0.0.1:1080 NaiveProxy官方網站:https://github.com/klzgrad/naiveproxy NaiveProxy官方程序下載地址:https://github.com/klzgrad/naiveproxy/releases 下載相應版本,Windows選擇naiveproxy-x.xx-win.zip,解壓後提取naive.exe。與config.json放在同一目錄,運行naive.exe即可。 - 此文件為NaiveGUI(windows)複製粘貼導入節點的網址 - NaiveGUI(windows)下載網址:https://github.com/ExcitedCodes/NaiveGUI/releases + 此文件為NaiveSharp(windows)複製粘貼導入節點的網址 + NaiveSharp(windows)下載網址:https://github.com/KevinZonda/NaiveSharp/releases 服務器通用連接配置參數 此文件為ShadowsocksR (windows)、SSRR(Android)、Shadowrocket(ios)掃碼導入節點 diff --git a/ProxySU/bin/Beta/Beta.zip b/ProxySU/bin/Beta/Beta.zip index d2b310b9a432a9e68ee938e4b573f01830c4e5fe..362c78449bb8439acda53c7478e3ec7255211040 100644 GIT binary patch delta 123764 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 z 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 CqP^h& delta 123974 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�Br2>AV@tZ#)Hs}x>eV&D&RPesZ9>z*4S&Seb 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%0DgV;WT2D4WP8p8fc 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 diff --git a/TemplateConfg/naive/naive_server.caddyfile b/TemplateConfg/naive/naive_server.caddyfile new file mode 100644 index 0000000..f26a145 --- /dev/null +++ b/TemplateConfg/naive/naive_server.caddyfile @@ -0,0 +1,11 @@ +:443, ##domain## +route { + forward_proxy { + ##basicauth## + #basic_auth ##user## ##pass## + hide_ip + hide_via + probe_resistance + } + file_server { root /usr/share/caddy } +} \ No newline at end of file