1
0
mirror of https://github.com/proxysu/ProxySU.git synced 2024-11-22 13:16:09 +03:00

添加Trojan一键安装3

This commit is contained in:
ProxySU 2020-04-23 09:27:49 +08:00
parent 194ecc78c1
commit 77b18dc2fe
11 changed files with 216 additions and 49 deletions

View File

@ -628,12 +628,47 @@ namespace ProxySU
//MessageBox.Show(client.RunCommand(@"lsof -n -P -i :80 | grep LISTEN").Result);
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端口”工具释放出再重新安装");
//MessageBox.Show("80/443端口之一或全部被占用请先用系统工具中的“释放80/443端口”工具释放出再重新安装");
MessageBoxResult dialogResult = MessageBox.Show("80/443端口之一或全部被占用将强制停止占用80/443端口的程序?", "Stop application", MessageBoxButton.YesNo);
if (dialogResult == MessageBoxResult.No)
{
currentStatus = "端口被占用,安装失败......";
textBlockName.Dispatcher.BeginInvoke(updateAction, textBlockName, progressBar, currentStatus);
Thread.Sleep(1000);
return;
}
currentStatus = "正在释放80/443端口......";
textBlockName.Dispatcher.BeginInvoke(updateAction, textBlockName, progressBar, currentStatus);
Thread.Sleep(1000);
string cmdTestPort = @"lsof -n -P -i :443 | grep LISTEN";
string cmdResult = client.RunCommand(cmdTestPort).Result;
//MessageBox.Show(cmdTestPort);
if (String.IsNullOrEmpty(cmdResult) == false)
{
//MessageBox.Show(cmdResult);
string[] cmdResultArry443 = cmdResult.Split(' ');
//MessageBox.Show(cmdResultArry443[3]);
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);
}
}
currentStatus = "符合安装要求,布署中......";
textBlockName.Dispatcher.BeginInvoke(updateAction, textBlockName, progressBar, currentStatus);
@ -1148,6 +1183,7 @@ namespace ProxySU
{
return;
}
ConnectionInfo testconnect = GenerateConnectionInfo();
try
{
@ -1178,7 +1214,7 @@ namespace ProxySU
client.RunCommand($"systemctl disable {cmdResultArry80[0]}");
client.RunCommand($"kill -9 {cmdResultArry80[3]}");
}
MessageBox.Show("执行完毕!");
MessageBox.Show("释放完毕!");
client.Disconnect();
}
}
@ -1472,12 +1508,46 @@ namespace ProxySU
//MessageBox.Show(client.RunCommand(@"lsof -n -P -i :80 | grep LISTEN").Result);
if (String.IsNullOrEmpty(client.RunCommand(@"lsof -n -P -i :80 | grep LISTEN").Result) == false || String.IsNullOrEmpty(client.RunCommand(@"lsof -n -P -i :443 | grep LISTEN").Result) == false)
{
MessageBox.Show("80/443端口之一或全部被占用请先用系统工具中的“释放80/443端口”工具释放出再重新安装");
MessageBoxResult dialogResult = MessageBox.Show("80/443端口之一或全部被占用将强制停止占用80/443端口的程序?", "Stop application", MessageBoxButton.YesNo);
if (dialogResult == MessageBoxResult.No)
{
currentStatus = "端口被占用,安装失败......";
textBlockName.Dispatcher.BeginInvoke(updateAction, textBlockName, progressBar, currentStatus);
Thread.Sleep(1000);
return;
}
currentStatus = "正在释放80/443端口......";
textBlockName.Dispatcher.BeginInvoke(updateAction, textBlockName, progressBar, currentStatus);
Thread.Sleep(1000);
string cmdTestPort = @"lsof -n -P -i :443 | grep LISTEN";
string cmdResult = client.RunCommand(cmdTestPort).Result;
//MessageBox.Show(cmdTestPort);
if (String.IsNullOrEmpty(cmdResult) == false)
{
//MessageBox.Show(cmdResult);
string[] cmdResultArry443 = cmdResult.Split(' ');
//MessageBox.Show(cmdResultArry443[3]);
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);
}
}
currentStatus = "符合安装要求,布署中......";
textBlockName.Dispatcher.BeginInvoke(updateAction, textBlockName, progressBar, currentStatus);
@ -1509,7 +1579,7 @@ namespace ProxySU
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");
//client.RunCommand("bash /tmp/go.sh -f");
string installResult = client.RunCommand("find / -name trojan").Result.ToString();
if (!installResult.Contains("/usr/local/bin/trojan"))

View File

@ -167,6 +167,6 @@
<PostBuildEvent>del "$(TargetDir)*.xml"
del "$(TargetDir)*.pdb"
del "$(TargetDir)*.zip"
"D:\Program Files\7-Zip\7z.exe" a $(TargetDir)Release.zip $(TargetDir) -xr!config</PostBuildEvent>
"D:\Program Files\7-Zip\7z.exe" a $(TargetDir)Release.zip $(TargetDir) -xr!*config</PostBuildEvent>
</PropertyGroup>
</Project>

View File

@ -42,7 +42,20 @@
</Grid>
</GroupBox>
<GroupBox Header="二维码/URL" Grid.Row="1">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition Width="0.4*"></ColumnDefinition>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="0.2*"></RowDefinition>
<RowDefinition></RowDefinition>
</Grid.RowDefinitions>
<TextBlock Text="可用于ShadowRocket (ios) Trojan-QT5 (windows) 扫码和导入url" Grid.Column="0" Grid.Row="0" Grid.ColumnSpan="2" TextWrapping="Wrap"></TextBlock>
<Image x:Name="ImageTrojanShareQRurl" Grid.Column="0" Grid.Row="1"></Image>
<TextBox x:Name="TextBoxTrojanUrl" TextWrapping="Wrap" Grid.Column="1" Grid.Row="1"></TextBox>
</Grid>
</GroupBox>
<Grid Grid.Row="2">
<Grid.ColumnDefinitions>

View File

@ -54,15 +54,16 @@ namespace ProxySU
num++;
}
CheckDir(@"trojan_config\" + saveFileFolder);
string trojanUrl = $"trojan://{TextBoxTrojanServerPassword.Text}@{TextBoxTrojanServerHost.Text}:{TextBoxTrojanServerPort.Text}#{TextBoxTrojanServerHost.Text}";
//MessageBox.Show(v2rayNjsonObject.ToString());
// string vmessUrl = "vmess://" + ToBase64Encode(v2rayNjsonObject.ToString());
//TextBoxvVmessUrl.Text = vmessUrl;
//using (StreamWriter sw = new StreamWriter($"trojan_config\\{saveFileFolder}\\url.txt"))
//{
// sw.WriteLine(vmessUrl);
//string trojanUrl = "trojan://" + ToBase64Encode(v2rayNjsonObject.ToString());
TextBoxTrojanUrl.Text = trojanUrl;
using (StreamWriter sw = new StreamWriter($"trojan_config\\{saveFileFolder}\\url.txt"))
{
sw.WriteLine(trojanUrl);
//}
//CreateQRCode(vmessUrl);
}
CreateQRCode(trojanUrl);
//移动Trojan官方程序配置文件到相应目录
if (File.Exists(@"trojan_config\config.json"))
@ -78,46 +79,38 @@ namespace ProxySU
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("-----------------------------------------");
//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("-----------------------------------------\n");
sw.WriteLine("QR.bmp");
sw.WriteLine("此文件为Trojan-QT5 (windows)、Shadowrocket(ios)扫码导入节点");
sw.WriteLine("Trojan-QT5 (windows)下载网址https://github.com/TheWanderingCoel/Trojan-Qt5/releases");
sw.WriteLine("Shadowrocket(ios)下载,需要使用国外区的AppleID。请自行谷歌方法。");
//sw.WriteLine("-----------------------------------------");
//sw.WriteLine("url.txt");
//sw.WriteLine("此文件为v2rayN、v2rayNG(Android)、Shadowrocket(ios)复制粘贴导入节点的vmess网址");
//sw.WriteLine("-----------------------------------------\n");
sw.WriteLine("-----------------------------------------\n");
sw.WriteLine("url.txt");
sw.WriteLine("此文件为Trojan-QT5 (windows)、Shadowrocket(ios)复制粘贴导入节点的网址");
sw.WriteLine("-----------------------------------------\n");
sw.WriteLine("服务器通用连接配置参数");
sw.WriteLine($"地址(address){TextBoxTrojanServerHost.Text}");
sw.WriteLine($"端口(Port){TextBoxTrojanServerPort.Text}");
sw.WriteLine($"密钥:{TextBoxTrojanServerPassword.Text}");
//sw.WriteLine($"额外ID{TextBoxUUIDextra.Text}");
//sw.WriteLine($"加密方式:{TextBoxEncryption.Text}");
//sw.WriteLine($"传输协议:{TextBoxTransmission.Text}");
//sw.WriteLine($"伪装类型:{TextBoxCamouflageType.Text}");
//sw.WriteLine($"是否使用TLS{TextBoxTLS.Text}");
//sw.WriteLine($"host{TextBoxHostAddress.Text}");
//sw.WriteLine($"路径(Path){TextBoxPath.Text}");
//sw.WriteLine($"QUIC密钥{TextBoxQuicKey.Text}");
}
}
//生成base64
private string ToBase64Encode(string text)
{
if (String.IsNullOrEmpty(text))
{
return text;
}
//private string ToBase64Encode(string text)
//{
// if (String.IsNullOrEmpty(text))
// {
// return text;
// }
// byte[] textBytes = Encoding.UTF8.GetBytes(text);
// return Convert.ToBase64String(textBytes);
//}
byte[] textBytes = Encoding.UTF8.GetBytes(text);
return Convert.ToBase64String(textBytes);
}
//生成QRcoder图片
private void CreateQRCode(string varBase64)
{
@ -128,10 +121,10 @@ namespace ProxySU
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;
ImageTrojanShareQRurl.Source = imgsource;
//DeleteObject(myImagePtr);
qrCodeImage.Save($"trojan_config\\{saveFileFolder}\\QR.bmp");
//ImageShareQRcode.Source = @"config\v2rayN.bmp";
}
//判断目录是否存在,不存在则创建
private static bool CheckDir(string folder)

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,7 @@
##domain## {
log stdout
errors stderr
root /var/www
tls off
##sites##
}

View File

@ -0,0 +1,31 @@
{
"run_type": "client",
"local_addr": "127.0.0.1",
"local_port": 1080,
"remote_addr": null,
"remote_port": 443,
"password": [
""
],
"log_level": 1,
"ssl": {
"verify": true,
"verify_hostname": true,
"cert": "",
"cipher": "ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-RSA-AES128-SHA:ECDHE-RSA-AES256-SHA:RSA-AES128-GCM-SHA256:RSA-AES256-GCM-SHA384:RSA-AES128-SHA:RSA-AES256-SHA:RSA-3DES-EDE-SHA",
"sni": "",
"alpn": [
"h2",
"http/1.1"
],
"reuse_session": true,
"session_ticket": false,
"curves": ""
},
"tcp": {
"no_delay": true,
"keep_alive": true,
"fast_open": false,
"fast_open_qlen": 20
}
}

View File

@ -0,0 +1,11 @@
server {
listen 80;
listen [::]:80;
server_name ##domain##;
root /var/www/html;
index index.html index.htm;
location / {
proxy_pass ##sites##;
try_files $uri $uri/ =404;
}
}

View File

@ -0,0 +1,42 @@
{
"run_type": "server",
"local_addr": "0.0.0.0",
"local_port": 443,
"remote_addr": "127.0.0.1",
"remote_port": 80,
"password": [
""
],
"log_level": 1,
"ssl": {
"cert": "/usr/local/etc/trojan/trojan_ssl.crt",
"key": "/usr/local/etc/trojan/trojan_ssl.key",
"key_password": "",
"cipher": "ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256",
"prefer_server_cipher": true,
"alpn": [
"http/1.1"
],
"reuse_session": true,
"session_ticket": false,
"session_timeout": 600,
"plain_http_response": "",
"curves": "",
"dhparam": ""
},
"tcp": {
"prefer_ipv4": false,
"no_delay": true,
"keep_alive": true,
"fast_open": false,
"fast_open_qlen": 20
},
"mysql": {
"enabled": false,
"server_addr": "127.0.0.1",
"server_port": 3306,
"database": "trojan",
"username": "trojan",
"password": ""
}
}