1
0
mirror of https://github.com/proxysu/ProxySU.git synced 2024-11-22 21:26:09 +03:00
ProxySU/ProxySuper.Core/Services/BrookProject.cs
2021-07-07 12:01:41 +08:00

129 lines
4.2 KiB
C#

using ProxySuper.Core.Models.Projects;
using Renci.SshNet;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ProxySuper.Core.Services
{
public class BrookProject : ProjectBase<BrookSettings>
{
private string brookServiceTemp = @"
[Unit]
Description=brook service
After=network.target syslog.target
Wants=network.target
[Service]
Type=simple
ExecStart=##run_cmd##
[Install]
WantedBy=multi-user.target";
public BrookProject(SshClient sshClient, BrookSettings parameters, Action<string> writeOutput) : base(sshClient, parameters, writeOutput)
{
}
public override void Install()
{
WriteOutput("检测安装系统环境...");
EnsureSystemEnv();
WriteOutput("检测安装系统环境完成");
WriteOutput("配置服务器端口...");
OpenPort(Parameters.FreePorts.ToArray());
Parameters.FreePorts.ForEach(port =>
{
SetPortFree(port);
});
WriteOutput("端口配置完成");
WriteOutput("安装必要的系统工具...");
ConfigureSoftware();
WriteOutput("系统工具安装完成");
if (Parameters.BrookType == BrookType.wssserver)
{
WriteOutput("检测域名是否绑定本机IP...");
ValidateDomain();
WriteOutput("域名检测完成");
}
InstallBrook();
Console.WriteLine("*************安装完成,尽情享用吧**********");
}
public void InstallBrook()
{
Console.WriteLine("安装Brook");
string url = "https://github.com/txthinking/brook/releases/latest/download/brook_linux_amd64";
if (ArchType == ArchType.arm)
{
url = url.Replace("brook_linux_amd64", "brook_linux_arm7");
}
RunCmd($"curl -L {url} -o /usr/bin/brook");
RunCmd("chmod +x /usr/bin/brook");
Console.WriteLine("安装Brook完成");
var brookService = brookServiceTemp.Replace("##run_cmd##", GetRunBrookCommand());
RunCmd("rm -rf /etc/systemd/system/brook.service");
RunCmd("touch /etc/systemd/system/brook.service");
RunCmd($"echo \"{brookService}\" > /etc/systemd/system/brook.service");
RunCmd("sudo chmod 777 /etc/systemd/system/brook.service");
RunCmd("systemctl enable brook");
RunCmd("systemctl restart brook");
WriteOutput("********************");
WriteOutput("安装完成,尽情想用吧~ ");
WriteOutput("*********************");
}
private string GetRunBrookCommand()
{
var runBrookCmd = string.Empty;
if (Parameters.BrookType == BrookType.server)
{
return $"/usr/bin/brook server --listen :{Parameters.Port} --password {Parameters.Password}";
}
if (Parameters.BrookType == BrookType.wsserver)
{
return $"/usr/bin/brook wsserver --listen :{Parameters.Port} --password {Parameters.Password}";
}
if (Parameters.BrookType == BrookType.wssserver)
{
return $"/usr/bin/brook wssserver --domain {Parameters.Domain} --password {Parameters.Password}";
}
if (Parameters.BrookType == BrookType.socks5)
{
return $"/usr/bin/brook socks5 --socks5 :{Parameters.Port}";
}
return runBrookCmd;
}
public void Uninstall()
{
RunCmd("killall brook");
Console.WriteLine("关闭端口");
ClosePort(Parameters.FreePorts.ToArray());
Console.WriteLine("******卸载完成******");
}
}
}