mirror of
https://github.com/proxysu/ProxySU.git
synced 2024-11-22 21:26:09 +03:00
增加vless+tcp+tls+web,修复几处Bug,代码结构优化
This commit is contained in:
parent
e7afe102b3
commit
6475544bbf
@ -5,7 +5,7 @@
|
|||||||
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||||
xmlns:local="clr-namespace:ProxySU"
|
xmlns:local="clr-namespace:ProxySU"
|
||||||
mc:Ignorable="d"
|
mc:Ignorable="d"
|
||||||
Title="ProxySU - v1.8.4" Height="600" Width="530">
|
Title="ProxySU - v1.8.5" Height="600" Width="530">
|
||||||
<!--以下样式参考自:https://yq.aliyun.com/articles/331878
|
<!--以下样式参考自:https://yq.aliyun.com/articles/331878
|
||||||
https://docs.microsoft.com/en-us/dotnet/desktop-wpf/fundamentals/styles-templates-overview-->
|
https://docs.microsoft.com/en-us/dotnet/desktop-wpf/fundamentals/styles-templates-overview-->
|
||||||
<Window.Resources>
|
<Window.Resources>
|
||||||
@ -60,12 +60,12 @@
|
|||||||
<RowDefinition ></RowDefinition>
|
<RowDefinition ></RowDefinition>
|
||||||
<RowDefinition Height="60"></RowDefinition>
|
<RowDefinition Height="60"></RowDefinition>
|
||||||
</Grid.RowDefinitions>
|
</Grid.RowDefinitions>
|
||||||
<TextBlock Text="主机名" HorizontalAlignment="Left" VerticalAlignment="Bottom" Margin="5" Grid.Column="0" Grid.Row="0"></TextBlock>
|
<TextBlock Text="主机名:" HorizontalAlignment="Right" VerticalAlignment="Bottom" Margin="5" Grid.Column="0" Grid.Row="0"></TextBlock>
|
||||||
<TextBlock Text="端口" HorizontalAlignment="Left" VerticalAlignment="Bottom" Margin="5" Grid.Column="2" Grid.Row="0"></TextBlock>
|
<TextBlock Text="端口:" HorizontalAlignment="Right" VerticalAlignment="Bottom" Margin="5" Grid.Column="2" Grid.Row="0"></TextBlock>
|
||||||
<TextBox x:Name="TextBoxHost" Text="" Style="{StaticResource TitleText}" Tag="IP或域名(不可为空)" Margin="5" Grid.Column="1" Grid.Row="0"></TextBox>
|
<TextBox x:Name="TextBoxHost" Text="" Style="{StaticResource TitleText}" Tag="IP或域名(不可为空)" Margin="5" Grid.Column="1" Grid.Row="0"></TextBox>
|
||||||
<TextBox x:Name="TextBoxPort" CommandManager.PreviewExecuted="TextBoxPort_PreviewExecuted" Text="22" Margin="5" Grid.Column="3" Grid.Row="0" PreviewTextInput="TextBoxPort_PreviewTextInput"/>
|
<TextBox x:Name="TextBoxPort" CommandManager.PreviewExecuted="TextBoxPort_PreviewExecuted" Text="22" Margin="5" Grid.Column="3" Grid.Row="0" PreviewTextInput="TextBoxPort_PreviewTextInput"/>
|
||||||
<TextBlock Text="用户名:" HorizontalAlignment="Left" VerticalAlignment="Bottom" Margin="5" Grid.Column="0" Grid.Row="1"></TextBlock>
|
<TextBlock Text="用户名:" HorizontalAlignment="Right" VerticalAlignment="Bottom" Margin="5" Grid.Column="0" Grid.Row="1"></TextBlock>
|
||||||
<TextBlock x:Name="TextBlockPassword" Text="密码:" HorizontalAlignment="Left" VerticalAlignment="Bottom" Margin="5" Grid.Column="2" Grid.Row="1"></TextBlock>
|
<TextBlock x:Name="TextBlockPassword" Text="密码:" HorizontalAlignment="Right" VerticalAlignment="Bottom" Margin="5" Grid.Column="2" Grid.Row="1"></TextBlock>
|
||||||
<TextBox x:Name="TextBoxUserName" Text="root" Margin="5" Grid.Column="1" Grid.Row="1"></TextBox>
|
<TextBox x:Name="TextBoxUserName" Text="root" Margin="5" Grid.Column="1" Grid.Row="1"></TextBox>
|
||||||
<PasswordBox x:Name="PasswordBoxHostPassword" Password="" Margin="5" Grid.Column="3" Grid.Row="1"></PasswordBox>
|
<PasswordBox x:Name="PasswordBoxHostPassword" Password="" Margin="5" Grid.Column="3" Grid.Row="1"></PasswordBox>
|
||||||
<RadioButton x:Name="RadioButtonPasswordLogin" GroupName="CertIsYesNo" Content="密码登录" Visibility="Hidden" Grid.Column="0" Grid.Row="2" Checked="RadioButtonPasswordLogin_Checked"></RadioButton>
|
<RadioButton x:Name="RadioButtonPasswordLogin" GroupName="CertIsYesNo" Content="密码登录" Visibility="Hidden" Grid.Column="0" Grid.Row="2" Checked="RadioButtonPasswordLogin_Checked"></RadioButton>
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -1,44 +0,0 @@
|
|||||||
<Window x:Class="ProxySU.NaiveProxyResultInfoWindow"
|
|
||||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
|
||||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
|
||||||
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
|
||||||
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
|
||||||
xmlns:local="clr-namespace:ProxySU"
|
|
||||||
mc:Ignorable="d"
|
|
||||||
Title="NaiveProxyResultInfoWindow" Height="300" Width="400">
|
|
||||||
<Grid>
|
|
||||||
<Grid.RowDefinitions>
|
|
||||||
<RowDefinition></RowDefinition>
|
|
||||||
<RowDefinition Height="0.5*"></RowDefinition>
|
|
||||||
</Grid.RowDefinitions>
|
|
||||||
<GroupBox Header="服务器连接参数" Grid.Row="0">
|
|
||||||
<Grid>
|
|
||||||
<Grid.ColumnDefinitions>
|
|
||||||
<ColumnDefinition Width="0.6*"></ColumnDefinition>
|
|
||||||
<ColumnDefinition></ColumnDefinition>
|
|
||||||
<ColumnDefinition Width="0.4*"></ColumnDefinition>
|
|
||||||
</Grid.ColumnDefinitions>
|
|
||||||
<Grid.RowDefinitions>
|
|
||||||
<RowDefinition></RowDefinition>
|
|
||||||
<RowDefinition></RowDefinition>
|
|
||||||
<RowDefinition></RowDefinition>
|
|
||||||
<RowDefinition></RowDefinition>
|
|
||||||
<RowDefinition></RowDefinition>
|
|
||||||
</Grid.RowDefinitions>
|
|
||||||
<TextBlock Text="服务器地址:" Grid.Column="0" Grid.Row="1"></TextBlock>
|
|
||||||
<TextBox x:Name="TextBoxNaiveServerHost" Grid.Column="1" Grid.Row="1" Margin="4"></TextBox>
|
|
||||||
<TextBlock Grid.Column="2" Grid.Row="1"></TextBlock>
|
|
||||||
<TextBlock Text="用户名:" Grid.Column="0" Grid.Row="2"></TextBlock>
|
|
||||||
<TextBox x:Name="TextBoxNaiveUser" Grid.Column="1" Grid.Row="2" Margin="4"></TextBox>
|
|
||||||
<TextBlock Grid.Column="2" Grid.Row="2"></TextBlock>
|
|
||||||
<TextBlock Text="密码:" Grid.Column="0" Grid.Row="3"></TextBlock>
|
|
||||||
<TextBox x:Name="TextBoxNaivePassword" Grid.Column="1" Grid.Row="3" Margin="4"></TextBox>
|
|
||||||
<TextBlock Grid.Column="2" Grid.Row="3"></TextBlock>
|
|
||||||
<Button x:Name="ButtonOpenDir" Content="确定" Grid.Column="1" Grid.Row="4" Margin="40,3,40,3" Click="ButtonOpenDir_Click"></Button>
|
|
||||||
</Grid>
|
|
||||||
</GroupBox>
|
|
||||||
<GroupBox Header="NaiveGUI导入URL" Grid.Row="1">
|
|
||||||
<TextBox x:Name="TextBoxNaiveGUIurl" Margin="10" TextWrapping="Wrap"></TextBox>
|
|
||||||
</GroupBox>
|
|
||||||
</Grid>
|
|
||||||
</Window>
|
|
@ -1,119 +0,0 @@
|
|||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Windows;
|
|
||||||
using System.Windows.Controls;
|
|
||||||
using System.Windows.Data;
|
|
||||||
using System.Windows.Documents;
|
|
||||||
using System.Windows.Input;
|
|
||||||
using System.Windows.Media;
|
|
||||||
using System.Windows.Media.Imaging;
|
|
||||||
using System.Windows.Shapes;
|
|
||||||
using System.IO;
|
|
||||||
using Renci.SshNet;
|
|
||||||
using Newtonsoft.Json;
|
|
||||||
using Newtonsoft.Json.Linq;
|
|
||||||
using Newtonsoft.Json.Serialization;
|
|
||||||
using System.Drawing;
|
|
||||||
using QRCoder;
|
|
||||||
namespace ProxySU
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// NaiveProxyResultInfoWindow.xaml 的交互逻辑
|
|
||||||
/// </summary>
|
|
||||||
public partial class NaiveProxyResultInfoWindow : Window
|
|
||||||
{
|
|
||||||
private string saveFileFolder = "";
|
|
||||||
public NaiveProxyResultInfoWindow()
|
|
||||||
{
|
|
||||||
InitializeComponent();
|
|
||||||
TextBoxNaiveServerHost.Text = MainWindow.ReceiveConfigurationParameters[4];
|
|
||||||
TextBoxNaiveUser.Text = MainWindow.ReceiveConfigurationParameters[3];
|
|
||||||
TextBoxNaivePassword.Text= MainWindow.ReceiveConfigurationParameters[2];
|
|
||||||
GenerateV2rayShareQRcodeAndBase64Url();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void GenerateV2rayShareQRcodeAndBase64Url()
|
|
||||||
{
|
|
||||||
|
|
||||||
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}&padding=true";
|
|
||||||
//MessageBox.Show(v2rayNjsonObject.ToString());
|
|
||||||
//string trojanUrl = "trojan://" + ToBase64Encode(v2rayNjsonObject.ToString());
|
|
||||||
TextBoxNaiveGUIurl.Text = naiveUrl;
|
|
||||||
using (StreamWriter sw = new StreamWriter($"naive_config\\{saveFileFolder}\\url.txt"))
|
|
||||||
{
|
|
||||||
sw.WriteLine(naiveUrl);
|
|
||||||
|
|
||||||
}
|
|
||||||
//CreateQRCode(trojanUrl);
|
|
||||||
|
|
||||||
//移动NaiveProxy官方程序配置文件到相应目录
|
|
||||||
if (File.Exists(@"naive_config\config.json"))
|
|
||||||
{
|
|
||||||
File.Move(@"naive_config\config.json", @"naive_config\" + saveFileFolder + @"\config.json");
|
|
||||||
//File.Delete(@"config\config.json");//删除该文件
|
|
||||||
}
|
|
||||||
|
|
||||||
using (StreamWriter sw = new StreamWriter($"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):{TextBoxNaiveServerHost.Text}");
|
|
||||||
sw.WriteLine($"用户名:{TextBoxNaiveUser.Text}");
|
|
||||||
sw.WriteLine($"密钥:{TextBoxNaivePassword.Text}");
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
//判断目录是否存在,不存在则创建
|
|
||||||
private static bool CheckDir(string folder)
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
if (!Directory.Exists(folder))//如果不存在就创建file文件夹
|
|
||||||
Directory.CreateDirectory(folder);//创建该文件夹
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
catch (Exception)
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
private void ButtonOpenDir_Click(object sender, RoutedEventArgs e)
|
|
||||||
{
|
|
||||||
string openFolderPath = @"naive_config\" + saveFileFolder;
|
|
||||||
System.Diagnostics.Process.Start("explorer.exe", openFolderPath);
|
|
||||||
this.Close();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -81,27 +81,18 @@
|
|||||||
<Generator>MSBuild:Compile</Generator>
|
<Generator>MSBuild:Compile</Generator>
|
||||||
<SubType>Designer</SubType>
|
<SubType>Designer</SubType>
|
||||||
</ApplicationDefinition>
|
</ApplicationDefinition>
|
||||||
<Compile Include="NaiveProxyResultInfoWindow.xaml.cs">
|
|
||||||
<DependentUpon>NaiveProxyResultInfoWindow.xaml</DependentUpon>
|
|
||||||
</Compile>
|
|
||||||
<Compile Include="ProofreadTimeWindow.xaml.cs">
|
<Compile Include="ProofreadTimeWindow.xaml.cs">
|
||||||
<DependentUpon>ProofreadTimeWindow.xaml</DependentUpon>
|
<DependentUpon>ProofreadTimeWindow.xaml</DependentUpon>
|
||||||
</Compile>
|
</Compile>
|
||||||
<Compile Include="ResultClientInformation.xaml.cs">
|
<Compile Include="ResultClientInformation.xaml.cs">
|
||||||
<DependentUpon>ResultClientInformation.xaml</DependentUpon>
|
<DependentUpon>ResultClientInformation.xaml</DependentUpon>
|
||||||
</Compile>
|
</Compile>
|
||||||
<Compile Include="TemplateConfiguration.xaml.cs">
|
<Compile Include="V2RayTemplateWindow.xaml.cs">
|
||||||
<DependentUpon>TemplateConfiguration.xaml</DependentUpon>
|
<DependentUpon>V2RayTemplateWindow.xaml</DependentUpon>
|
||||||
</Compile>
|
|
||||||
<Compile Include="TrojanGoResultClientInfoWindow.xaml.cs">
|
|
||||||
<DependentUpon>TrojanGoResultClientInfoWindow.xaml</DependentUpon>
|
|
||||||
</Compile>
|
</Compile>
|
||||||
<Compile Include="TrojanGoTemplateWindow.xaml.cs">
|
<Compile Include="TrojanGoTemplateWindow.xaml.cs">
|
||||||
<DependentUpon>TrojanGoTemplateWindow.xaml</DependentUpon>
|
<DependentUpon>TrojanGoTemplateWindow.xaml</DependentUpon>
|
||||||
</Compile>
|
</Compile>
|
||||||
<Compile Include="TrojanResultClientInfoWindow.xaml.cs">
|
|
||||||
<DependentUpon>TrojanResultClientInfoWindow.xaml</DependentUpon>
|
|
||||||
</Compile>
|
|
||||||
<Page Include="MainWindow.xaml">
|
<Page Include="MainWindow.xaml">
|
||||||
<Generator>MSBuild:Compile</Generator>
|
<Generator>MSBuild:Compile</Generator>
|
||||||
<SubType>Designer</SubType>
|
<SubType>Designer</SubType>
|
||||||
@ -114,10 +105,6 @@
|
|||||||
<DependentUpon>MainWindow.xaml</DependentUpon>
|
<DependentUpon>MainWindow.xaml</DependentUpon>
|
||||||
<SubType>Code</SubType>
|
<SubType>Code</SubType>
|
||||||
</Compile>
|
</Compile>
|
||||||
<Page Include="NaiveProxyResultInfoWindow.xaml">
|
|
||||||
<SubType>Designer</SubType>
|
|
||||||
<Generator>MSBuild:Compile</Generator>
|
|
||||||
</Page>
|
|
||||||
<Page Include="ProofreadTimeWindow.xaml">
|
<Page Include="ProofreadTimeWindow.xaml">
|
||||||
<SubType>Designer</SubType>
|
<SubType>Designer</SubType>
|
||||||
<Generator>MSBuild:Compile</Generator>
|
<Generator>MSBuild:Compile</Generator>
|
||||||
@ -126,11 +113,7 @@
|
|||||||
<SubType>Designer</SubType>
|
<SubType>Designer</SubType>
|
||||||
<Generator>MSBuild:Compile</Generator>
|
<Generator>MSBuild:Compile</Generator>
|
||||||
</Page>
|
</Page>
|
||||||
<Page Include="TemplateConfiguration.xaml">
|
<Page Include="V2RayTemplateWindow.xaml">
|
||||||
<SubType>Designer</SubType>
|
|
||||||
<Generator>MSBuild:Compile</Generator>
|
|
||||||
</Page>
|
|
||||||
<Page Include="TrojanGoResultClientInfoWindow.xaml">
|
|
||||||
<SubType>Designer</SubType>
|
<SubType>Designer</SubType>
|
||||||
<Generator>MSBuild:Compile</Generator>
|
<Generator>MSBuild:Compile</Generator>
|
||||||
</Page>
|
</Page>
|
||||||
@ -138,10 +121,6 @@
|
|||||||
<SubType>Designer</SubType>
|
<SubType>Designer</SubType>
|
||||||
<Generator>MSBuild:Compile</Generator>
|
<Generator>MSBuild:Compile</Generator>
|
||||||
</Page>
|
</Page>
|
||||||
<Page Include="TrojanResultClientInfoWindow.xaml">
|
|
||||||
<SubType>Designer</SubType>
|
|
||||||
<Generator>MSBuild:Compile</Generator>
|
|
||||||
</Page>
|
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Compile Include="Properties\AssemblyInfo.cs">
|
<Compile Include="Properties\AssemblyInfo.cs">
|
||||||
|
@ -7,8 +7,13 @@
|
|||||||
mc:Ignorable="d"
|
mc:Ignorable="d"
|
||||||
Title="ResultClientInformation" Height="650" Width="600">
|
Title="ResultClientInformation" Height="650" Width="600">
|
||||||
<Grid>
|
<Grid>
|
||||||
<GroupBox Header="服务器连接配置">
|
<Grid.RowDefinitions>
|
||||||
<Grid>
|
<RowDefinition ></RowDefinition>
|
||||||
|
<RowDefinition Height="0.8*"></RowDefinition>
|
||||||
|
<RowDefinition Height="0.12*"></RowDefinition>
|
||||||
|
</Grid.RowDefinitions>
|
||||||
|
<GroupBox Header="V2Ray 客户端配置参数" x:Name="GroupBoxV2rayClient" Visibility="Visible" Grid.Row="0">
|
||||||
|
<Grid >
|
||||||
<Grid.ColumnDefinitions>
|
<Grid.ColumnDefinitions>
|
||||||
<ColumnDefinition></ColumnDefinition>
|
<ColumnDefinition></ColumnDefinition>
|
||||||
<ColumnDefinition></ColumnDefinition>
|
<ColumnDefinition></ColumnDefinition>
|
||||||
@ -26,14 +31,7 @@
|
|||||||
<RowDefinition></RowDefinition>
|
<RowDefinition></RowDefinition>
|
||||||
<RowDefinition></RowDefinition>
|
<RowDefinition></RowDefinition>
|
||||||
<RowDefinition></RowDefinition>
|
<RowDefinition></RowDefinition>
|
||||||
<RowDefinition></RowDefinition>
|
|
||||||
<RowDefinition></RowDefinition>
|
|
||||||
<RowDefinition></RowDefinition>
|
|
||||||
<RowDefinition></RowDefinition>
|
|
||||||
<RowDefinition></RowDefinition>
|
|
||||||
<RowDefinition></RowDefinition>
|
|
||||||
<RowDefinition></RowDefinition>
|
|
||||||
<RowDefinition></RowDefinition>
|
|
||||||
</Grid.RowDefinitions>
|
</Grid.RowDefinitions>
|
||||||
<TextBlock Text="地址(address)" Grid.Column="0" Grid.Row="0" Margin="1"></TextBlock>
|
<TextBlock Text="地址(address)" Grid.Column="0" Grid.Row="0" Margin="1"></TextBlock>
|
||||||
<TextBox x:Name="TextBoxHostAddress" IsReadOnly="True" Grid.Column="1" Grid.Row="0" Margin="2"></TextBox>
|
<TextBox x:Name="TextBoxHostAddress" IsReadOnly="True" Grid.Column="1" Grid.Row="0" Margin="2"></TextBox>
|
||||||
@ -44,9 +42,9 @@
|
|||||||
<TextBlock Text="用户ID(uuid)" Grid.Column="0" Grid.Row="2" Margin="1"></TextBlock>
|
<TextBlock Text="用户ID(uuid)" Grid.Column="0" Grid.Row="2" Margin="1"></TextBlock>
|
||||||
<TextBox x:Name="TextBoxUUID" IsReadOnly="True" Grid.Column="1" Grid.Row="2" Margin="2"></TextBox>
|
<TextBox x:Name="TextBoxUUID" IsReadOnly="True" Grid.Column="1" Grid.Row="2" Margin="2"></TextBox>
|
||||||
<TextBlock Text="说明" Grid.Column="2" Grid.Row="2"></TextBlock>
|
<TextBlock Text="说明" Grid.Column="2" Grid.Row="2"></TextBlock>
|
||||||
<TextBlock Text="额外ID" Grid.Column="0" Grid.Row="3" Margin="1"></TextBlock>
|
<TextBlock x:Name="TextBlockUUIDextra" Text="额外ID" Grid.Column="0" Grid.Row="3" Margin="1"></TextBlock>
|
||||||
<TextBox x:Name="TextBoxUUIDextra" IsReadOnly="False" Grid.Column="1" Grid.Row="3" Margin="2"></TextBox>
|
<TextBox x:Name="TextBoxUUIDextra" IsReadOnly="False" Grid.Column="1" Grid.Row="3" Margin="2"></TextBox>
|
||||||
<TextBlock Text="默认16,可以填不超过64的值,客户端没有此选项可不填" TextWrapping="Wrap" Grid.Column="2" Grid.Row="3"></TextBlock>
|
<TextBlock x:Name="TextBlockUUIDextraExplanation" Text="默认16,可以填不超过64的值,客户端没有此选项可不填" TextWrapping="Wrap" Grid.Column="2" Grid.Row="3"></TextBlock>
|
||||||
<TextBlock Text="加密方式" Grid.Column="0" Grid.Row="4" Margin="1"></TextBlock>
|
<TextBlock Text="加密方式" Grid.Column="0" Grid.Row="4" Margin="1"></TextBlock>
|
||||||
<TextBox x:Name="TextBoxEncryption" IsReadOnly="True" Grid.Column="1" Grid.Row="4" Margin="2"></TextBox>
|
<TextBox x:Name="TextBoxEncryption" IsReadOnly="True" Grid.Column="1" Grid.Row="4" Margin="2"></TextBox>
|
||||||
<TextBlock Text="默认auto" Grid.Column="2" Grid.Row="4"></TextBlock>
|
<TextBlock Text="默认auto" Grid.Column="2" Grid.Row="4"></TextBlock>
|
||||||
@ -70,21 +68,149 @@
|
|||||||
<TextBox x:Name="TextBoxQuicKey" IsReadOnly="True" Grid.Column="1" Grid.Row="10" Margin="2"></TextBox>
|
<TextBox x:Name="TextBoxQuicKey" IsReadOnly="True" Grid.Column="1" Grid.Row="10" Margin="2"></TextBox>
|
||||||
<TextBlock x:Name="TextBlockQuicKeyExplain" Text="说明" Grid.Column="2" Grid.Row="10"></TextBlock>
|
<TextBlock x:Name="TextBlockQuicKeyExplain" Text="说明" Grid.Column="2" Grid.Row="10"></TextBlock>
|
||||||
|
|
||||||
<TextBlock Text="以上参数可以手动输入客户端,用于V2ray官方客户端的配置文件已经存放入config目录下,点击确定可打开" Grid.Column="0" Grid.Row="11" Grid.ColumnSpan="2" TextWrapping="Wrap"></TextBlock>
|
|
||||||
<Button x:Name="ButtonOpenSaveDir" Content="确定" Grid.Column="2" Grid.Row="11" Grid.RowSpan="1" Margin="5" Click="ButtonOpenSaveDir_Click"></Button>
|
|
||||||
<Grid Grid.Column="0" Grid.Row="12" Grid.ColumnSpan="2" Grid.RowSpan="7">
|
|
||||||
<Grid>
|
|
||||||
<Grid.ColumnDefinitions>
|
|
||||||
<ColumnDefinition Width="85"></ColumnDefinition>
|
|
||||||
<ColumnDefinition></ColumnDefinition>
|
|
||||||
</Grid.ColumnDefinitions>
|
|
||||||
<TextBlock Text="二维码和vmess链接可用于

v2rayN(windows)

Trojan-QT5(windows)

Qv2ray(windows)

Shadowrocket(ios)

v2rayNG(Android)

导入v2ray节点" TextWrapping="Wrap" Grid.Column="0"></TextBlock>
|
|
||||||
<Image x:Name="ImageShareQRcode" Grid.Column="1"></Image>
|
|
||||||
</Grid>
|
|
||||||
</Grid>
|
|
||||||
<TextBox x:Name="TextBoxvVmessUrl" TextWrapping="Wrap" Grid.Column="2" Grid.Row="12" Grid.RowSpan="7"></TextBox>
|
|
||||||
|
|
||||||
</Grid>
|
</Grid>
|
||||||
</GroupBox>
|
</GroupBox>
|
||||||
|
<GroupBox Header="Trojan-go 客户端配置参数" x:Name="GroupBoxTrojanGoClient" Visibility="Collapsed" Grid.Row="0">
|
||||||
|
<Grid >
|
||||||
|
<Grid.ColumnDefinitions>
|
||||||
|
<ColumnDefinition Width="0.5*"></ColumnDefinition>
|
||||||
|
<ColumnDefinition></ColumnDefinition>
|
||||||
|
<ColumnDefinition></ColumnDefinition>
|
||||||
|
</Grid.ColumnDefinitions>
|
||||||
|
<Grid.RowDefinitions>
|
||||||
|
<RowDefinition></RowDefinition>
|
||||||
|
<RowDefinition Height="30"></RowDefinition>
|
||||||
|
<RowDefinition Height="30"></RowDefinition>
|
||||||
|
<RowDefinition Height="30"></RowDefinition>
|
||||||
|
<RowDefinition Height="30"></RowDefinition>
|
||||||
|
<RowDefinition></RowDefinition>
|
||||||
|
|
||||||
|
|
||||||
|
</Grid.RowDefinitions>
|
||||||
|
<TextBlock Text="服务器地址:" Grid.Column="0" Grid.Row="1" HorizontalAlignment="Right" VerticalAlignment="Center" ></TextBlock>
|
||||||
|
<TextBox x:Name="TextBoxTrojanGoServerHost" Grid.Column="1" Grid.Row="1" Margin="4"></TextBox>
|
||||||
|
<TextBlock Grid.Column="2" Grid.Row="1"></TextBlock>
|
||||||
|
<TextBlock Text="端口:" Grid.Column="0" Grid.Row="2" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
|
||||||
|
<TextBox x:Name="TextBoxTrojanGoServerPort" Grid.Column="1" Grid.Row="2" Margin="4"></TextBox>
|
||||||
|
<TextBlock Grid.Column="2" Grid.Row="2"></TextBlock>
|
||||||
|
<TextBlock Text="密钥:" Grid.Column="0" Grid.Row="3" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
|
||||||
|
<TextBox x:Name="TextBoxTrojanGoServerPassword" Grid.Column="1" Grid.Row="3" Margin="4"></TextBox>
|
||||||
|
<TextBlock Grid.Column="2" Grid.Row="3"></TextBlock>
|
||||||
|
<TextBlock x:Name="TextBlockTrojanGoWebSocketPath" Text="WebSocket路径:" Grid.Column="0" Grid.Row="4" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
|
||||||
|
<TextBox x:Name="TextBoxTrojanGoWSPath" Grid.Column="1" Grid.Row="4" Margin="4"></TextBox>
|
||||||
|
<TextBlock x:Name="TextBlockTrojanGoCaption" Grid.Column="2" Grid.Row="4"></TextBlock>
|
||||||
|
|
||||||
|
</Grid>
|
||||||
|
</GroupBox>
|
||||||
|
<GroupBox Header="Trojan 客户端配置参数" x:Name="GroupBoxTrojanClient" Visibility="Collapsed" Grid.Row="0">
|
||||||
|
<Grid >
|
||||||
|
<Grid.ColumnDefinitions>
|
||||||
|
<ColumnDefinition Width="0.5*"></ColumnDefinition>
|
||||||
|
<ColumnDefinition></ColumnDefinition>
|
||||||
|
<ColumnDefinition></ColumnDefinition>
|
||||||
|
</Grid.ColumnDefinitions>
|
||||||
|
<Grid.RowDefinitions>
|
||||||
|
<RowDefinition></RowDefinition>
|
||||||
|
<RowDefinition Height="30"></RowDefinition>
|
||||||
|
<RowDefinition Height="30"></RowDefinition>
|
||||||
|
<RowDefinition Height="30"></RowDefinition>
|
||||||
|
<RowDefinition Height="30"></RowDefinition>
|
||||||
|
<RowDefinition></RowDefinition>
|
||||||
|
|
||||||
|
|
||||||
|
</Grid.RowDefinitions>
|
||||||
|
<TextBlock Text="服务器地址:" Grid.Column="0" Grid.Row="1" HorizontalAlignment="Right" VerticalAlignment="Center" ></TextBlock>
|
||||||
|
<TextBox x:Name="TextBoxTrojanServerHost" Grid.Column="1" Grid.Row="1" Margin="4"></TextBox>
|
||||||
|
<TextBlock Grid.Column="2" Grid.Row="1"></TextBlock>
|
||||||
|
<TextBlock Text="端口:" Grid.Column="0" Grid.Row="2" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
|
||||||
|
<TextBox x:Name="TextBoxTrojanServerPort" Grid.Column="1" Grid.Row="2" Margin="4"></TextBox>
|
||||||
|
<TextBlock Grid.Column="2" Grid.Row="2"></TextBlock>
|
||||||
|
<TextBlock Text="密钥:" Grid.Column="0" Grid.Row="3" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
|
||||||
|
<TextBox x:Name="TextBoxTrojanServerPassword" Grid.Column="1" Grid.Row="3" Margin="4"></TextBox>
|
||||||
|
<TextBlock Grid.Column="2" Grid.Row="3"></TextBlock>
|
||||||
|
|
||||||
|
|
||||||
|
</Grid>
|
||||||
|
</GroupBox>
|
||||||
|
<GroupBox Header="NaiveProxy 客户端配置参数" x:Name="GroupBoxNaiveProxyClient" Visibility="Collapsed" Grid.Row="0">
|
||||||
|
<Grid >
|
||||||
|
<Grid.ColumnDefinitions>
|
||||||
|
<ColumnDefinition Width="0.5*"></ColumnDefinition>
|
||||||
|
<ColumnDefinition></ColumnDefinition>
|
||||||
|
<ColumnDefinition></ColumnDefinition>
|
||||||
|
</Grid.ColumnDefinitions>
|
||||||
|
<Grid.RowDefinitions>
|
||||||
|
<RowDefinition></RowDefinition>
|
||||||
|
<RowDefinition Height="30"></RowDefinition>
|
||||||
|
<RowDefinition Height="30"></RowDefinition>
|
||||||
|
<RowDefinition Height="30"></RowDefinition>
|
||||||
|
<RowDefinition></RowDefinition>
|
||||||
|
<RowDefinition></RowDefinition>
|
||||||
|
|
||||||
|
|
||||||
|
</Grid.RowDefinitions>
|
||||||
|
<TextBlock Text="服务器地址:" Grid.Column="0" Grid.Row="1" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
|
||||||
|
<TextBox x:Name="TextBoxNaiveServerHost" Grid.Column="1" Grid.Row="1" Margin="4"></TextBox>
|
||||||
|
<TextBlock Grid.Column="2" Grid.Row="1"></TextBlock>
|
||||||
|
<TextBlock Text="用户名:" Grid.Column="0" Grid.Row="2" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
|
||||||
|
<TextBox x:Name="TextBoxNaiveUser" Grid.Column="1" Grid.Row="2" Margin="4"></TextBox>
|
||||||
|
<TextBlock Grid.Column="2" Grid.Row="2"></TextBlock>
|
||||||
|
<TextBlock Text="密码:" Grid.Column="0" Grid.Row="3" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
|
||||||
|
<TextBox x:Name="TextBoxNaivePassword" Grid.Column="1" Grid.Row="3" Margin="4"></TextBox>
|
||||||
|
<TextBlock Grid.Column="2" Grid.Row="3"></TextBlock>
|
||||||
|
<!--<Button x:Name="ButtonOpenDir" Content="确定" Grid.Column="1" Grid.Row="4" Margin="40,3,40,3" Click="ButtonOpenDir_Click"></Button>-->
|
||||||
|
|
||||||
|
|
||||||
|
</Grid>
|
||||||
|
</GroupBox>
|
||||||
|
<!--<GroupBox Header="客户端配置参数" x:Name="GroupBoxClient" Visibility="Collapsed" Grid.Row="0">
|
||||||
|
<Grid >
|
||||||
|
<Grid.ColumnDefinitions>
|
||||||
|
<ColumnDefinition></ColumnDefinition>
|
||||||
|
<ColumnDefinition></ColumnDefinition>
|
||||||
|
<ColumnDefinition></ColumnDefinition>
|
||||||
|
</Grid.ColumnDefinitions>
|
||||||
|
<Grid.RowDefinitions>
|
||||||
|
<RowDefinition></RowDefinition>
|
||||||
|
<RowDefinition></RowDefinition>
|
||||||
|
<RowDefinition></RowDefinition>
|
||||||
|
<RowDefinition></RowDefinition>
|
||||||
|
<RowDefinition></RowDefinition>
|
||||||
|
<RowDefinition></RowDefinition>
|
||||||
|
<RowDefinition></RowDefinition>
|
||||||
|
<RowDefinition></RowDefinition>
|
||||||
|
<RowDefinition></RowDefinition>
|
||||||
|
<RowDefinition></RowDefinition>
|
||||||
|
<RowDefinition></RowDefinition>
|
||||||
|
|
||||||
|
</Grid.RowDefinitions>
|
||||||
|
|
||||||
|
|
||||||
|
</Grid>
|
||||||
|
</GroupBox>-->
|
||||||
|
|
||||||
|
<GroupBox Header="二维码/URL" Grid.Row="1">
|
||||||
|
<Grid>
|
||||||
|
<Grid.ColumnDefinitions>
|
||||||
|
<ColumnDefinition Width="0.5*"></ColumnDefinition>
|
||||||
|
<ColumnDefinition></ColumnDefinition>
|
||||||
|
<ColumnDefinition Width="0.6*"></ColumnDefinition>
|
||||||
|
</Grid.ColumnDefinitions>
|
||||||
|
<TextBlock x:Name="TextBlockQrURLexplain" Text="二维码和URL链接可用于

v2rayN(windows)

Trojan-QT5(windows)

Qv2ray(windows)

Shadowrocket(ios)

v2rayNG(Android)

导入v2ray节点" TextWrapping="Wrap" Grid.Column="0"></TextBlock>
|
||||||
|
<Image x:Name="ImageShareQRcode" Grid.Column="1"></Image>
|
||||||
|
<TextBox x:Name="TextBoxURL" TextWrapping="Wrap" Grid.Column="2"></TextBox>
|
||||||
|
</Grid>
|
||||||
|
</GroupBox>
|
||||||
|
<Grid Grid.Row="2">
|
||||||
|
<Grid.ColumnDefinitions>
|
||||||
|
<ColumnDefinition></ColumnDefinition>
|
||||||
|
<ColumnDefinition Width="0.3*"></ColumnDefinition>
|
||||||
|
</Grid.ColumnDefinitions>
|
||||||
|
<TextBlock Text="以上参数可以手动或扫描输入客户端,用于官方客户端的配置和相关文件已经存放入目录下,点击 确定 按扭可打开" Grid.Column="0" Grid.Row="0" Grid.ColumnSpan="1" Margin="5" TextWrapping="Wrap"></TextBlock>
|
||||||
|
<Button x:Name="ButtonOpenSaveDir" Content="确定" Grid.Column="1" Grid.Row="0" Grid.RowSpan="1" Margin="5" Click="ButtonOpenSaveDir_Click"></Button>
|
||||||
|
|
||||||
|
</Grid>
|
||||||
|
|
||||||
</Grid>
|
</Grid>
|
||||||
</Window>
|
</Window>
|
||||||
|
@ -31,236 +31,323 @@ namespace ProxySU
|
|||||||
{
|
{
|
||||||
InitializeComponent();
|
InitializeComponent();
|
||||||
|
|
||||||
//主机端口
|
if (String.Equals(MainWindow.proxyType, "V2Ray"))
|
||||||
TextBoxPort.Text = MainWindow.ReceiveConfigurationParameters[1];
|
{
|
||||||
//用户ID(uuid)
|
GroupBoxV2rayClient.Visibility = Visibility.Visible;
|
||||||
TextBoxUUID.Text = MainWindow.ReceiveConfigurationParameters[2];
|
GroupBoxTrojanGoClient.Visibility = Visibility.Collapsed;
|
||||||
//额外ID
|
GroupBoxTrojanClient.Visibility = Visibility.Collapsed;
|
||||||
TextBoxUUIDextra.Text = "16";
|
GroupBoxNaiveProxyClient.Visibility = Visibility.Collapsed;
|
||||||
//路径Path
|
//主机地址
|
||||||
TextBoxPath.Text = MainWindow.ReceiveConfigurationParameters[3];
|
TextBoxHostAddress.Text = MainWindow.ReceiveConfigurationParameters[4];
|
||||||
//主机地址
|
//主机端口
|
||||||
TextBoxHostAddress.Text = MainWindow.ReceiveConfigurationParameters[4];
|
TextBoxPort.Text = MainWindow.ReceiveConfigurationParameters[1];
|
||||||
//TLS的Host
|
//用户ID(uuid)
|
||||||
TextBoxHost.Text = "";
|
TextBoxUUID.Text = MainWindow.ReceiveConfigurationParameters[2];
|
||||||
//加密方式,一般都为auto
|
//额外ID
|
||||||
TextBoxEncryption.Text = "auto";
|
TextBoxUUIDextra.Text = "16";
|
||||||
//伪装类型
|
//加密方式,一般都为auto
|
||||||
TextBoxCamouflageType.Text = MainWindow.ReceiveConfigurationParameters[5];
|
TextBoxEncryption.Text = "auto";
|
||||||
//QUIC密钥
|
//传输协议
|
||||||
TextBoxQuicKey.Text = MainWindow.ReceiveConfigurationParameters[6];
|
TextBoxTransmission.Text = "";
|
||||||
|
//伪装类型
|
||||||
|
TextBoxCamouflageType.Text = MainWindow.ReceiveConfigurationParameters[5];
|
||||||
|
//是否启用TLS
|
||||||
|
TextBoxTLS.Text = "none";
|
||||||
|
//TLS的Host
|
||||||
|
TextBoxHost.Text = "";
|
||||||
|
//路径Path
|
||||||
|
TextBoxPath.Text = MainWindow.ReceiveConfigurationParameters[3];
|
||||||
|
//QUIC密钥
|
||||||
|
TextBoxQuicKey.Text = MainWindow.ReceiveConfigurationParameters[6];
|
||||||
|
|
||||||
if (String.Equals(MainWindow.ReceiveConfigurationParameters[0], "WebSocketTLS2Web"))
|
if (String.Equals(MainWindow.ReceiveConfigurationParameters[0], "WebSocketTLS2Web"))
|
||||||
{
|
{
|
||||||
TextBoxTransmission.Text = "ws";
|
TextBoxTransmission.Text = "ws"; //传输协议
|
||||||
TextBoxCamouflageType.Text = "none";
|
TextBoxCamouflageType.Text = "none"; //伪装类型
|
||||||
TextBoxTLS.Text = "tls";
|
TextBoxTLS.Text = "tls"; //是否启用TLS
|
||||||
ShowPath();
|
ShowPath(); //显示路径
|
||||||
HideQuicKey();
|
HideQuicKey(); //隐藏Quic\mKCP密钥
|
||||||
}
|
}
|
||||||
else if (String.Equals(MainWindow.ReceiveConfigurationParameters[0], "TCP"))
|
else if (String.Equals(MainWindow.ReceiveConfigurationParameters[0], "TCP"))
|
||||||
{
|
{
|
||||||
TextBoxTransmission.Text = "tcp";
|
TextBoxTransmission.Text = "tcp";
|
||||||
TextBoxCamouflageType.Text = "none";
|
TextBoxCamouflageType.Text = "none";
|
||||||
TextBoxTLS.Text = "none";
|
TextBoxTLS.Text = "none";
|
||||||
HidePath();
|
HidePath();
|
||||||
HideQuicKey();
|
HideQuicKey();
|
||||||
}
|
}
|
||||||
else if (String.Equals(MainWindow.ReceiveConfigurationParameters[0], "TCPhttp"))
|
else if (String.Equals(MainWindow.ReceiveConfigurationParameters[0], "TCPhttp"))
|
||||||
{
|
{
|
||||||
TextBoxTransmission.Text = "tcp";
|
TextBoxTransmission.Text = "tcp";
|
||||||
TextBoxCamouflageType.Text = "http";
|
TextBoxCamouflageType.Text = "http";
|
||||||
TextBoxTLS.Text = "none";
|
TextBoxTLS.Text = "none";
|
||||||
HidePath();
|
HidePath();
|
||||||
HideQuicKey();
|
HideQuicKey();
|
||||||
}
|
}
|
||||||
else if (String.Equals(MainWindow.ReceiveConfigurationParameters[0], "tcpTLS"))
|
else if (String.Equals(MainWindow.ReceiveConfigurationParameters[0], "tcpTLS"))
|
||||||
{
|
{
|
||||||
TextBoxTransmission.Text = "tcp";
|
TextBoxTransmission.Text = "tcp";
|
||||||
TextBoxCamouflageType.Text = "none";
|
TextBoxCamouflageType.Text = "none";
|
||||||
TextBoxTLS.Text = "tls";
|
TextBoxTLS.Text = "tls";
|
||||||
HidePath();
|
HidePath();
|
||||||
HideQuicKey();
|
HideQuicKey();
|
||||||
}
|
}
|
||||||
else if (String.Equals(MainWindow.ReceiveConfigurationParameters[0], "tcpTLSselfSigned"))
|
else if (String.Equals(MainWindow.ReceiveConfigurationParameters[0], "tcpTLSselfSigned"))
|
||||||
{
|
{
|
||||||
TextBoxTransmission.Text = "tcp";
|
TextBoxTransmission.Text = "tcp";
|
||||||
TextBoxCamouflageType.Text = "none";
|
TextBoxCamouflageType.Text = "none";
|
||||||
TextBoxTLS.Text = "tls";
|
TextBoxTLS.Text = "tls";
|
||||||
HidePath();
|
HidePath();
|
||||||
HideQuicKey();
|
HideQuicKey();
|
||||||
}
|
}
|
||||||
else if (String.Equals(MainWindow.ReceiveConfigurationParameters[0], "webSocket"))
|
else if (String.Equals(MainWindow.ReceiveConfigurationParameters[0], "VlessTcpTlsWeb"))
|
||||||
{
|
{
|
||||||
TextBoxTransmission.Text = "ws";
|
TextBoxTransmission.Text = "tcp";
|
||||||
TextBoxCamouflageType.Text = "none";
|
TextBoxCamouflageType.Text = "none";
|
||||||
TextBoxTLS.Text = "none";
|
TextBoxEncryption.Text = "none";
|
||||||
HidePath();
|
TextBoxTLS.Text = "tls";
|
||||||
HideQuicKey();
|
HideAlterId();
|
||||||
}
|
HidePath();
|
||||||
else if (String.Equals(MainWindow.ReceiveConfigurationParameters[0], "WebSocketTLS"))
|
HideQuicKey();
|
||||||
{
|
}
|
||||||
TextBoxTransmission.Text = "ws";
|
else if (String.Equals(MainWindow.ReceiveConfigurationParameters[0], "webSocket"))
|
||||||
TextBoxCamouflageType.Text = "none";
|
{
|
||||||
TextBoxTLS.Text = "tls";
|
TextBoxTransmission.Text = "ws";
|
||||||
ShowPath();
|
TextBoxCamouflageType.Text = "none";
|
||||||
HideQuicKey();
|
TextBoxTLS.Text = "none";
|
||||||
}
|
HidePath();
|
||||||
else if (String.Equals(MainWindow.ReceiveConfigurationParameters[0], "WebSocketTLSselfSigned"))
|
HideQuicKey();
|
||||||
{
|
}
|
||||||
TextBoxTransmission.Text = "ws";
|
else if (String.Equals(MainWindow.ReceiveConfigurationParameters[0], "WebSocketTLS"))
|
||||||
TextBoxCamouflageType.Text = "none";
|
{
|
||||||
TextBoxTLS.Text = "tls";
|
TextBoxTransmission.Text = "ws";
|
||||||
ShowPath();
|
TextBoxCamouflageType.Text = "none";
|
||||||
HideQuicKey();
|
TextBoxTLS.Text = "tls";
|
||||||
}
|
ShowPath();
|
||||||
else if (String.Equals(MainWindow.ReceiveConfigurationParameters[0], "Http2"))
|
HideQuicKey();
|
||||||
{
|
}
|
||||||
TextBoxTransmission.Text = "h2";
|
else if (String.Equals(MainWindow.ReceiveConfigurationParameters[0], "WebSocketTLSselfSigned"))
|
||||||
TextBoxCamouflageType.Text = "none";
|
{
|
||||||
TextBoxTLS.Text = "tls";
|
TextBoxTransmission.Text = "ws";
|
||||||
ShowPath();
|
TextBoxCamouflageType.Text = "none";
|
||||||
HideQuicKey();
|
TextBoxTLS.Text = "tls";
|
||||||
}
|
ShowPath();
|
||||||
else if (String.Equals(MainWindow.ReceiveConfigurationParameters[0], "http2Web"))
|
HideQuicKey();
|
||||||
{
|
}
|
||||||
TextBoxTransmission.Text = "h2";
|
else if (String.Equals(MainWindow.ReceiveConfigurationParameters[0], "Http2"))
|
||||||
TextBoxCamouflageType.Text = "none";
|
{
|
||||||
TextBoxHost.Text = MainWindow.ReceiveConfigurationParameters[4];
|
TextBoxTransmission.Text = "h2";
|
||||||
TextBoxTLS.Text = "tls";
|
TextBoxCamouflageType.Text = "none";
|
||||||
ShowPath();
|
TextBoxTLS.Text = "tls";
|
||||||
HideQuicKey();
|
ShowPath();
|
||||||
}
|
HideQuicKey();
|
||||||
else if (String.Equals(MainWindow.ReceiveConfigurationParameters[0], "http2selfSigned"))
|
}
|
||||||
{
|
else if (String.Equals(MainWindow.ReceiveConfigurationParameters[0], "http2Web"))
|
||||||
TextBoxTransmission.Text = "h2";
|
{
|
||||||
TextBoxCamouflageType.Text = "none";
|
TextBoxTransmission.Text = "h2";
|
||||||
TextBoxTLS.Text = "tls";
|
TextBoxCamouflageType.Text = "none";
|
||||||
ShowPath();
|
TextBoxHost.Text = MainWindow.ReceiveConfigurationParameters[4];
|
||||||
HideQuicKey();
|
TextBoxTLS.Text = "tls";
|
||||||
}
|
ShowPath();
|
||||||
else if (String.Equals(MainWindow.ReceiveConfigurationParameters[0], "mKCPNone"))
|
HideQuicKey();
|
||||||
{
|
}
|
||||||
TextBoxTransmission.Text = "kcp";
|
else if (String.Equals(MainWindow.ReceiveConfigurationParameters[0], "http2selfSigned"))
|
||||||
TextBoxCamouflageType.Text = "none";
|
{
|
||||||
TextBoxQuicKey.Text = MainWindow.ReceiveConfigurationParameters[6];
|
TextBoxTransmission.Text = "h2";
|
||||||
TextBoxTLS.Text = "none";
|
TextBoxCamouflageType.Text = "none";
|
||||||
HidePath();
|
TextBoxTLS.Text = "tls";
|
||||||
ShowQuicKey();
|
ShowPath();
|
||||||
}
|
HideQuicKey();
|
||||||
else if (String.Equals(MainWindow.ReceiveConfigurationParameters[0], "mKCP2SRTP"))
|
}
|
||||||
{
|
else if (String.Equals(MainWindow.ReceiveConfigurationParameters[0], "mKCPNone"))
|
||||||
TextBoxTransmission.Text = "kcp";
|
{
|
||||||
TextBoxCamouflageType.Text = "srtp";
|
TextBoxTransmission.Text = "kcp";
|
||||||
TextBoxQuicKey.Text = MainWindow.ReceiveConfigurationParameters[6];
|
TextBoxCamouflageType.Text = "none";
|
||||||
TextBoxTLS.Text = "none";
|
TextBoxQuicKey.Text = MainWindow.ReceiveConfigurationParameters[6];
|
||||||
HidePath();
|
TextBoxTLS.Text = "none";
|
||||||
ShowQuicKey();
|
HidePath();
|
||||||
}
|
ShowQuicKey();
|
||||||
else if (String.Equals(MainWindow.ReceiveConfigurationParameters[0], "mKCPuTP"))
|
}
|
||||||
{
|
else if (String.Equals(MainWindow.ReceiveConfigurationParameters[0], "mKCP2SRTP"))
|
||||||
TextBoxTransmission.Text = "kcp";
|
{
|
||||||
TextBoxCamouflageType.Text = "utp";
|
TextBoxTransmission.Text = "kcp";
|
||||||
TextBoxQuicKey.Text = MainWindow.ReceiveConfigurationParameters[6];
|
TextBoxCamouflageType.Text = "srtp";
|
||||||
TextBoxTLS.Text = "none";
|
TextBoxQuicKey.Text = MainWindow.ReceiveConfigurationParameters[6];
|
||||||
HidePath();
|
TextBoxTLS.Text = "none";
|
||||||
ShowQuicKey();
|
HidePath();
|
||||||
}
|
ShowQuicKey();
|
||||||
else if (String.Equals(MainWindow.ReceiveConfigurationParameters[0], "mKCP2WechatVideo"))
|
}
|
||||||
{
|
else if (String.Equals(MainWindow.ReceiveConfigurationParameters[0], "mKCPuTP"))
|
||||||
TextBoxTransmission.Text = "kcp";
|
{
|
||||||
TextBoxCamouflageType.Text = "wechat-video";
|
TextBoxTransmission.Text = "kcp";
|
||||||
TextBoxQuicKey.Text = MainWindow.ReceiveConfigurationParameters[6];
|
TextBoxCamouflageType.Text = "utp";
|
||||||
TextBoxTLS.Text = "none";
|
TextBoxQuicKey.Text = MainWindow.ReceiveConfigurationParameters[6];
|
||||||
HidePath();
|
TextBoxTLS.Text = "none";
|
||||||
ShowQuicKey();
|
HidePath();
|
||||||
}
|
ShowQuicKey();
|
||||||
else if (String.Equals(MainWindow.ReceiveConfigurationParameters[0], "mKCP2DTLS"))
|
}
|
||||||
{
|
else if (String.Equals(MainWindow.ReceiveConfigurationParameters[0], "mKCP2WechatVideo"))
|
||||||
TextBoxTransmission.Text = "kcp";
|
{
|
||||||
TextBoxCamouflageType.Text = "dtls";
|
TextBoxTransmission.Text = "kcp";
|
||||||
TextBoxQuicKey.Text = MainWindow.ReceiveConfigurationParameters[6];
|
TextBoxCamouflageType.Text = "wechat-video";
|
||||||
TextBoxTLS.Text = "none";
|
TextBoxQuicKey.Text = MainWindow.ReceiveConfigurationParameters[6];
|
||||||
HidePath();
|
TextBoxTLS.Text = "none";
|
||||||
ShowQuicKey();
|
HidePath();
|
||||||
}
|
ShowQuicKey();
|
||||||
else if (String.Equals(MainWindow.ReceiveConfigurationParameters[0], "mKCP2WireGuard"))
|
}
|
||||||
{
|
else if (String.Equals(MainWindow.ReceiveConfigurationParameters[0], "mKCP2DTLS"))
|
||||||
TextBoxTransmission.Text = "kcp";
|
{
|
||||||
TextBoxCamouflageType.Text = "wireguard";
|
TextBoxTransmission.Text = "kcp";
|
||||||
TextBoxQuicKey.Text = MainWindow.ReceiveConfigurationParameters[6];
|
TextBoxCamouflageType.Text = "dtls";
|
||||||
TextBoxTLS.Text = "none";
|
TextBoxQuicKey.Text = MainWindow.ReceiveConfigurationParameters[6];
|
||||||
HidePath();
|
TextBoxTLS.Text = "none";
|
||||||
ShowQuicKey();
|
HidePath();
|
||||||
}
|
ShowQuicKey();
|
||||||
else if (String.Equals(MainWindow.ReceiveConfigurationParameters[0], "QuicNone"))
|
}
|
||||||
{
|
else if (String.Equals(MainWindow.ReceiveConfigurationParameters[0], "mKCP2WireGuard"))
|
||||||
TextBoxTransmission.Text = "quic";
|
{
|
||||||
TextBoxCamouflageType.Text = "none";
|
TextBoxTransmission.Text = "kcp";
|
||||||
TextBoxQuicKey.Text = MainWindow.ReceiveConfigurationParameters[6];
|
TextBoxCamouflageType.Text = "wireguard";
|
||||||
TextBoxTLS.Text = "none";
|
TextBoxQuicKey.Text = MainWindow.ReceiveConfigurationParameters[6];
|
||||||
HidePath();
|
TextBoxTLS.Text = "none";
|
||||||
ShowQuicKey();
|
HidePath();
|
||||||
}
|
ShowQuicKey();
|
||||||
else if (String.Equals(MainWindow.ReceiveConfigurationParameters[0], "QuicSRTP"))
|
}
|
||||||
{
|
else if (String.Equals(MainWindow.ReceiveConfigurationParameters[0], "QuicNone"))
|
||||||
TextBoxTransmission.Text = "quic";
|
{
|
||||||
TextBoxCamouflageType.Text = "srtp";
|
TextBoxTransmission.Text = "quic";
|
||||||
TextBoxQuicKey.Text = MainWindow.ReceiveConfigurationParameters[6];
|
TextBoxCamouflageType.Text = "none";
|
||||||
TextBoxTLS.Text = "none";
|
TextBoxQuicKey.Text = MainWindow.ReceiveConfigurationParameters[6];
|
||||||
HidePath();
|
TextBoxTLS.Text = "none";
|
||||||
ShowQuicKey();
|
HidePath();
|
||||||
}
|
ShowQuicKey();
|
||||||
else if (String.Equals(MainWindow.ReceiveConfigurationParameters[0], "Quic2uTP"))
|
}
|
||||||
{
|
else if (String.Equals(MainWindow.ReceiveConfigurationParameters[0], "QuicSRTP"))
|
||||||
TextBoxTransmission.Text = "quic";
|
{
|
||||||
TextBoxCamouflageType.Text = "utp";
|
TextBoxTransmission.Text = "quic";
|
||||||
TextBoxQuicKey.Text = MainWindow.ReceiveConfigurationParameters[6];
|
TextBoxCamouflageType.Text = "srtp";
|
||||||
TextBoxTLS.Text = "none";
|
TextBoxQuicKey.Text = MainWindow.ReceiveConfigurationParameters[6];
|
||||||
HidePath();
|
TextBoxTLS.Text = "none";
|
||||||
ShowQuicKey();
|
HidePath();
|
||||||
}
|
ShowQuicKey();
|
||||||
else if (String.Equals(MainWindow.ReceiveConfigurationParameters[0], "QuicWechatVideo"))
|
}
|
||||||
{
|
else if (String.Equals(MainWindow.ReceiveConfigurationParameters[0], "Quic2uTP"))
|
||||||
TextBoxTransmission.Text = "quic";
|
{
|
||||||
TextBoxCamouflageType.Text = "wechat-video";
|
TextBoxTransmission.Text = "quic";
|
||||||
TextBoxQuicKey.Text = MainWindow.ReceiveConfigurationParameters[6];
|
TextBoxCamouflageType.Text = "utp";
|
||||||
TextBoxTLS.Text = "none";
|
TextBoxQuicKey.Text = MainWindow.ReceiveConfigurationParameters[6];
|
||||||
HidePath();
|
TextBoxTLS.Text = "none";
|
||||||
ShowQuicKey();
|
HidePath();
|
||||||
}
|
ShowQuicKey();
|
||||||
else if (String.Equals(MainWindow.ReceiveConfigurationParameters[0], "QuicDTLS"))
|
}
|
||||||
{
|
else if (String.Equals(MainWindow.ReceiveConfigurationParameters[0], "QuicWechatVideo"))
|
||||||
TextBoxTransmission.Text = "quic";
|
{
|
||||||
TextBoxCamouflageType.Text = "dtls";
|
TextBoxTransmission.Text = "quic";
|
||||||
TextBoxQuicKey.Text = MainWindow.ReceiveConfigurationParameters[6];
|
TextBoxCamouflageType.Text = "wechat-video";
|
||||||
TextBoxTLS.Text = "none";
|
TextBoxQuicKey.Text = MainWindow.ReceiveConfigurationParameters[6];
|
||||||
HidePath();
|
TextBoxTLS.Text = "none";
|
||||||
ShowQuicKey();
|
HidePath();
|
||||||
}
|
ShowQuicKey();
|
||||||
else if (String.Equals(MainWindow.ReceiveConfigurationParameters[0], "QuicWireGuard"))
|
}
|
||||||
{
|
else if (String.Equals(MainWindow.ReceiveConfigurationParameters[0], "QuicDTLS"))
|
||||||
TextBoxTransmission.Text = "quic";
|
{
|
||||||
TextBoxCamouflageType.Text = "wireguard";
|
TextBoxTransmission.Text = "quic";
|
||||||
TextBoxQuicKey.Text = MainWindow.ReceiveConfigurationParameters[6];
|
TextBoxCamouflageType.Text = "dtls";
|
||||||
TextBoxTLS.Text = "none";
|
TextBoxQuicKey.Text = MainWindow.ReceiveConfigurationParameters[6];
|
||||||
HidePath();
|
TextBoxTLS.Text = "none";
|
||||||
ShowQuicKey();
|
HidePath();
|
||||||
}
|
ShowQuicKey();
|
||||||
|
}
|
||||||
|
else if (String.Equals(MainWindow.ReceiveConfigurationParameters[0], "QuicWireGuard"))
|
||||||
|
{
|
||||||
|
TextBoxTransmission.Text = "quic";
|
||||||
|
TextBoxCamouflageType.Text = "wireguard";
|
||||||
|
TextBoxQuicKey.Text = MainWindow.ReceiveConfigurationParameters[6];
|
||||||
|
TextBoxTLS.Text = "none";
|
||||||
|
HidePath();
|
||||||
|
ShowQuicKey();
|
||||||
|
}
|
||||||
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
TextBoxTransmission.Text = "tcp";
|
TextBoxTransmission.Text = "tcp";
|
||||||
TextBoxCamouflageType.Text = "none";
|
TextBoxCamouflageType.Text = "none";
|
||||||
TextBoxTLS.Text = "none";
|
TextBoxTLS.Text = "none";
|
||||||
HidePath();
|
HidePath();
|
||||||
HideQuicKey();
|
HideQuicKey();
|
||||||
}
|
}
|
||||||
CheckDir("v2ray_config");
|
CheckDir("v2ray_config");
|
||||||
|
|
||||||
GenerateV2rayShareQRcodeAndBase64Url();
|
GenerateV2rayShareQRcodeAndBase64Url();
|
||||||
|
}
|
||||||
|
else if (String.Equals(MainWindow.proxyType, "TrojanGo"))
|
||||||
|
{
|
||||||
|
//GroupBoxTrojanClient.Header = "Trojan-go 客户端配置参数";
|
||||||
|
GroupBoxV2rayClient.Visibility = Visibility.Collapsed;
|
||||||
|
GroupBoxTrojanGoClient.Visibility = Visibility.Visible;
|
||||||
|
GroupBoxTrojanClient.Visibility = Visibility.Collapsed;
|
||||||
|
GroupBoxNaiveProxyClient.Visibility = Visibility.Collapsed;
|
||||||
|
|
||||||
|
TextBoxTrojanGoWSPath.Visibility = Visibility.Hidden;
|
||||||
|
TextBlockTrojanGoWebSocketPath.Visibility = Visibility.Hidden;
|
||||||
|
TextBlockTrojanGoCaption.Visibility = Visibility.Hidden;
|
||||||
|
|
||||||
|
TextBlockQrURLexplain.Text = "可用于ShadowRocket (ios)、igniter(Android)、Trojan-QT5 (windows) 扫码和导入url";
|
||||||
|
|
||||||
|
//主机地址
|
||||||
|
TextBoxTrojanGoServerHost.Text = MainWindow.ReceiveConfigurationParameters[4];
|
||||||
|
//主机端口
|
||||||
|
TextBoxTrojanGoServerPort.Text = "443";
|
||||||
|
//密钥(uuid)
|
||||||
|
TextBoxTrojanGoServerPassword.Text = MainWindow.ReceiveConfigurationParameters[2];
|
||||||
|
//WebSocket路径
|
||||||
|
if (MainWindow.ReceiveConfigurationParameters[0].Equals("TrojanGoWebSocketTLS2Web"))
|
||||||
|
{
|
||||||
|
TextBoxTrojanGoWSPath.Text = MainWindow.ReceiveConfigurationParameters[3];
|
||||||
|
TextBoxTrojanGoWSPath.Visibility = Visibility.Visible;
|
||||||
|
TextBlockTrojanGoWebSocketPath.Visibility = Visibility.Visible;
|
||||||
|
TextBlockTrojanGoCaption.Visibility = Visibility.Visible;
|
||||||
|
|
||||||
|
}
|
||||||
|
CheckDir("trojan-go_config");
|
||||||
|
GenerateTrojanGoShareQRcodeAndBase64Url();
|
||||||
|
}
|
||||||
|
else if (String.Equals(MainWindow.proxyType, "Trojan"))
|
||||||
|
{
|
||||||
|
GroupBoxV2rayClient.Visibility = Visibility.Collapsed;
|
||||||
|
GroupBoxTrojanGoClient.Visibility = Visibility.Collapsed;
|
||||||
|
GroupBoxTrojanClient.Visibility = Visibility.Visible;
|
||||||
|
GroupBoxNaiveProxyClient.Visibility = Visibility.Collapsed;
|
||||||
|
|
||||||
|
//主机地址
|
||||||
|
TextBoxTrojanServerHost.Text = MainWindow.ReceiveConfigurationParameters[4];
|
||||||
|
//主机端口
|
||||||
|
TextBoxTrojanServerPort.Text = "443";
|
||||||
|
//密钥(uuid)
|
||||||
|
TextBoxTrojanServerPassword.Text = MainWindow.ReceiveConfigurationParameters[2];
|
||||||
|
|
||||||
|
TextBlockQrURLexplain.Text = "可用于ShadowRocket (ios)、igniter(Android)、Trojan-QT5 (windows) 扫码和导入url";
|
||||||
|
|
||||||
|
CheckDir("trojan_config");
|
||||||
|
GenerateTrojanShareQRcodeAndBase64Url();
|
||||||
|
}
|
||||||
|
else if (String.Equals(MainWindow.proxyType, "NaiveProxy"))
|
||||||
|
{
|
||||||
|
GroupBoxV2rayClient.Visibility = Visibility.Collapsed;
|
||||||
|
GroupBoxTrojanGoClient.Visibility = Visibility.Collapsed;
|
||||||
|
GroupBoxTrojanClient.Visibility = Visibility.Collapsed;
|
||||||
|
GroupBoxNaiveProxyClient.Visibility = Visibility.Visible;
|
||||||
|
|
||||||
|
TextBlockQrURLexplain.Text = "用于NaiveGUI(windows)的URL导入链接";
|
||||||
|
|
||||||
|
TextBoxNaiveServerHost.Text = MainWindow.ReceiveConfigurationParameters[4];
|
||||||
|
TextBoxNaiveUser.Text = MainWindow.ReceiveConfigurationParameters[3];
|
||||||
|
TextBoxNaivePassword.Text = MainWindow.ReceiveConfigurationParameters[2];
|
||||||
|
GenerateNaivePrxoyShareQRcodeAndBase64Url();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
#region 界面控制相关
|
||||||
private void HidePath()
|
private void HidePath()
|
||||||
{
|
{
|
||||||
TextBlockPath.Visibility = Visibility.Collapsed;
|
TextBlockPath.Visibility = Visibility.Collapsed;
|
||||||
@ -281,6 +368,20 @@ namespace ProxySU
|
|||||||
TextBoxQuicKey.Visibility = Visibility.Collapsed;
|
TextBoxQuicKey.Visibility = Visibility.Collapsed;
|
||||||
TextBlockQuicKeyExplain.Visibility = Visibility.Collapsed;
|
TextBlockQuicKeyExplain.Visibility = Visibility.Collapsed;
|
||||||
|
|
||||||
|
}
|
||||||
|
private void ShowAlterId()
|
||||||
|
{
|
||||||
|
TextBlockUUIDextra.Visibility = Visibility.Visible;
|
||||||
|
TextBoxUUIDextra.Visibility = Visibility.Visible;
|
||||||
|
TextBlockUUIDextraExplanation.Visibility = Visibility.Visible;
|
||||||
|
|
||||||
|
}
|
||||||
|
private void HideAlterId()
|
||||||
|
{
|
||||||
|
TextBlockUUIDextra.Visibility = Visibility.Collapsed;
|
||||||
|
TextBoxUUIDextra.Visibility = Visibility.Collapsed;
|
||||||
|
TextBlockUUIDextraExplanation.Visibility = Visibility.Collapsed;
|
||||||
|
|
||||||
}
|
}
|
||||||
private void ShowQuicKey()
|
private void ShowQuicKey()
|
||||||
{
|
{
|
||||||
@ -289,6 +390,7 @@ namespace ProxySU
|
|||||||
TextBlockQuicKeyExplain.Visibility = Visibility.Visible;
|
TextBlockQuicKeyExplain.Visibility = Visibility.Visible;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
#endregion
|
||||||
//生成v2rayN客户端导入文件
|
//生成v2rayN客户端导入文件
|
||||||
private void GenerateV2rayShareQRcodeAndBase64Url()
|
private void GenerateV2rayShareQRcodeAndBase64Url()
|
||||||
{
|
{
|
||||||
@ -344,13 +446,13 @@ namespace ProxySU
|
|||||||
CheckDir(@"v2ray_config\" + saveFileFolder);
|
CheckDir(@"v2ray_config\" + saveFileFolder);
|
||||||
//MessageBox.Show(v2rayNjsonObject.ToString());
|
//MessageBox.Show(v2rayNjsonObject.ToString());
|
||||||
string vmessUrl = "vmess://" + ToBase64Encode(v2rayNjsonObject.ToString());
|
string vmessUrl = "vmess://" + ToBase64Encode(v2rayNjsonObject.ToString());
|
||||||
TextBoxvVmessUrl.Text = vmessUrl;
|
TextBoxURL.Text = vmessUrl;
|
||||||
using (StreamWriter sw = new StreamWriter($"v2ray_config\\{saveFileFolder}\\url.txt"))
|
using (StreamWriter sw = new StreamWriter($"v2ray_config\\{saveFileFolder}\\url.txt"))
|
||||||
{
|
{
|
||||||
sw.WriteLine(vmessUrl);
|
sw.WriteLine(vmessUrl);
|
||||||
|
|
||||||
}
|
}
|
||||||
CreateQRCode(vmessUrl);
|
CreateQRCode(vmessUrl,"v2ray_config");
|
||||||
|
|
||||||
if (File.Exists(@"v2ray_config\config.json"))
|
if (File.Exists(@"v2ray_config\config.json"))
|
||||||
{
|
{
|
||||||
@ -395,6 +497,190 @@ namespace ProxySU
|
|||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//生成TrojanGo客户端资料
|
||||||
|
private void GenerateTrojanGoShareQRcodeAndBase64Url()
|
||||||
|
{
|
||||||
|
|
||||||
|
string saveFileFolderFirst = TextBoxTrojanServerHost.Text;
|
||||||
|
int num = 1;
|
||||||
|
saveFileFolder = saveFileFolderFirst;
|
||||||
|
CheckDir("trojan-go_config");
|
||||||
|
while (Directory.Exists(@"trojan-go_config\" + saveFileFolder))
|
||||||
|
{
|
||||||
|
saveFileFolder = saveFileFolderFirst + "_copy_" + num.ToString();
|
||||||
|
num++;
|
||||||
|
}
|
||||||
|
CheckDir(@"trojan-go_config\" + saveFileFolder);
|
||||||
|
string trojanUrl = $"trojan://{TextBoxTrojanServerPassword.Text}@{TextBoxTrojanServerHost.Text}:{TextBoxTrojanServerPort.Text}?allowinsecure=0&tfo=0&sni=&mux=0&ws=0&group=#{TextBoxTrojanServerHost.Text}";
|
||||||
|
//MessageBox.Show(v2rayNjsonObject.ToString());
|
||||||
|
//string trojanUrl = "trojan://" + ToBase64Encode(v2rayNjsonObject.ToString());
|
||||||
|
TextBoxURL.Text = trojanUrl;
|
||||||
|
using (StreamWriter sw = new StreamWriter($"trojan-go_config\\{saveFileFolder}\\url.txt"))
|
||||||
|
{
|
||||||
|
sw.WriteLine(trojanUrl);
|
||||||
|
|
||||||
|
}
|
||||||
|
CreateQRCode(trojanUrl, "trojan-go_config");
|
||||||
|
|
||||||
|
//移动Trojan官方程序配置文件到相应目录
|
||||||
|
if (File.Exists(@"trojan-go_config\config.json"))
|
||||||
|
{
|
||||||
|
File.Move(@"trojan-go_config\config.json", @"trojan-go_config\" + saveFileFolder + @"\config.json");
|
||||||
|
//File.Delete(@"config\config.json");//删除该文件
|
||||||
|
}
|
||||||
|
|
||||||
|
using (StreamWriter sw = new StreamWriter($"trojan-go_config\\{saveFileFolder}\\说明.txt"))
|
||||||
|
{
|
||||||
|
sw.WriteLine("config.json");
|
||||||
|
sw.WriteLine("此文件为Trojan-go官方程序所使用的客户端配置文件,配置为全局模式,http与socks5地址:127.0.0.1:1080");
|
||||||
|
sw.WriteLine("Trojan-go官方网站:https://github.com/p4gefau1t/trojan-go");
|
||||||
|
sw.WriteLine("Trojan-go官方程序下载地址:https://github.com/p4gefau1t/trojan-go/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)扫码导入节点(Trojan-Go的WebSocket模式暂不支持)");
|
||||||
|
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)复制粘贴导入节点的网址(Trojan-Go的WebSocket模式暂不支持)");
|
||||||
|
sw.WriteLine("-----------------------------------------\n");
|
||||||
|
sw.WriteLine("服务器通用连接配置参数");
|
||||||
|
sw.WriteLine($"地址(address):{TextBoxTrojanServerHost.Text}");
|
||||||
|
sw.WriteLine($"端口(Port):{TextBoxTrojanServerPort.Text}");
|
||||||
|
sw.WriteLine($"密钥:{TextBoxTrojanServerPassword.Text}");
|
||||||
|
sw.WriteLine($"WebSocket路径:{TextBoxTrojanGoWSPath.Text}");
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
//生成Trojan客户端资料
|
||||||
|
private void GenerateTrojanShareQRcodeAndBase64Url()
|
||||||
|
{
|
||||||
|
|
||||||
|
string saveFileFolderFirst = TextBoxTrojanServerHost.Text;
|
||||||
|
int num = 1;
|
||||||
|
saveFileFolder = saveFileFolderFirst;
|
||||||
|
CheckDir("trojan_config");
|
||||||
|
while (Directory.Exists(@"trojan_config\" + saveFileFolder))
|
||||||
|
{
|
||||||
|
saveFileFolder = saveFileFolderFirst + "_copy_" + num.ToString();
|
||||||
|
num++;
|
||||||
|
}
|
||||||
|
CheckDir(@"trojan_config\" + saveFileFolder);
|
||||||
|
string trojanUrl = $"trojan://{TextBoxTrojanServerPassword.Text}@{TextBoxTrojanServerHost.Text}:{TextBoxTrojanServerPort.Text}#{TextBoxTrojanServerHost.Text}";
|
||||||
|
//MessageBox.Show(v2rayNjsonObject.ToString());
|
||||||
|
//string trojanUrl = "trojan://" + ToBase64Encode(v2rayNjsonObject.ToString());
|
||||||
|
TextBoxURL.Text = trojanUrl;
|
||||||
|
using (StreamWriter sw = new StreamWriter($"trojan_config\\{saveFileFolder}\\url.txt"))
|
||||||
|
{
|
||||||
|
sw.WriteLine(trojanUrl);
|
||||||
|
|
||||||
|
}
|
||||||
|
CreateQRCode(trojanUrl, "trojan_config");
|
||||||
|
|
||||||
|
//移动Trojan官方程序配置文件到相应目录
|
||||||
|
if (File.Exists(@"trojan_config\config.json"))
|
||||||
|
{
|
||||||
|
File.Move(@"trojan_config\config.json", @"trojan_config\" + saveFileFolder + @"\config.json");
|
||||||
|
//File.Delete(@"config\config.json");//删除该文件
|
||||||
|
}
|
||||||
|
|
||||||
|
using (StreamWriter sw = new StreamWriter($"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):{TextBoxTrojanServerHost.Text}");
|
||||||
|
sw.WriteLine($"端口(Port):{TextBoxTrojanServerPort.Text}");
|
||||||
|
sw.WriteLine($"密钥:{TextBoxTrojanServerPassword.Text}");
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
//生成NaiveProxy客户端资料
|
||||||
|
private void GenerateNaivePrxoyShareQRcodeAndBase64Url()
|
||||||
|
{
|
||||||
|
|
||||||
|
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());
|
||||||
|
TextBoxURL.Text = naiveUrl;
|
||||||
|
using (StreamWriter sw = new StreamWriter($"naive_config\\{saveFileFolder}\\url.txt"))
|
||||||
|
{
|
||||||
|
sw.WriteLine(naiveUrl);
|
||||||
|
|
||||||
|
}
|
||||||
|
//CreateQRCode(trojanUrl);
|
||||||
|
|
||||||
|
//移动NaiveProxy官方程序配置文件到相应目录
|
||||||
|
if (File.Exists(@"naive_config\config.json"))
|
||||||
|
{
|
||||||
|
File.Move(@"naive_config\config.json", @"naive_config\" + saveFileFolder + @"\config.json");
|
||||||
|
//File.Delete(@"config\config.json");//删除该文件
|
||||||
|
}
|
||||||
|
|
||||||
|
using (StreamWriter sw = new StreamWriter($"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):{TextBoxNaiveServerHost.Text}");
|
||||||
|
sw.WriteLine($"用户名:{TextBoxNaiveUser.Text}");
|
||||||
|
sw.WriteLine($"密钥:{TextBoxNaivePassword.Text}");
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
//生成base64
|
//生成base64
|
||||||
private string ToBase64Encode(string text)
|
private string ToBase64Encode(string text)
|
||||||
{
|
{
|
||||||
@ -406,8 +692,9 @@ namespace ProxySU
|
|||||||
byte[] textBytes = Encoding.UTF8.GetBytes(text);
|
byte[] textBytes = Encoding.UTF8.GetBytes(text);
|
||||||
return Convert.ToBase64String(textBytes);
|
return Convert.ToBase64String(textBytes);
|
||||||
}
|
}
|
||||||
|
|
||||||
//生成QRcoder图片
|
//生成QRcoder图片
|
||||||
private void CreateQRCode(string varBase64)
|
private void CreateQRCode(string varBase64,string configPath)
|
||||||
{
|
{
|
||||||
//string varBase64 = varBase64;
|
//string varBase64 = varBase64;
|
||||||
QRCodeGenerator qrGenerator = new QRCodeGenerator();
|
QRCodeGenerator qrGenerator = new QRCodeGenerator();
|
||||||
@ -418,9 +705,10 @@ namespace ProxySU
|
|||||||
BitmapSource imgsource = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(myImagePtr, IntPtr.Zero, Int32Rect.Empty, BitmapSizeOptions.FromEmptyOptions());
|
BitmapSource imgsource = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(myImagePtr, IntPtr.Zero, Int32Rect.Empty, BitmapSizeOptions.FromEmptyOptions());
|
||||||
ImageShareQRcode.Source = imgsource;
|
ImageShareQRcode.Source = imgsource;
|
||||||
//DeleteObject(myImagePtr);
|
//DeleteObject(myImagePtr);
|
||||||
qrCodeImage.Save($"v2ray_config\\{saveFileFolder}\\QR.bmp");
|
qrCodeImage.Save($"{configPath}\\{saveFileFolder}\\QR.bmp");
|
||||||
//ImageShareQRcode.Source = @"config\v2rayN.bmp";
|
//ImageShareQRcode.Source = @"config\v2rayN.bmp";
|
||||||
}
|
}
|
||||||
|
|
||||||
//判断目录是否存在,不存在则创建
|
//判断目录是否存在,不存在则创建
|
||||||
private static bool CheckDir(string folder)
|
private static bool CheckDir(string folder)
|
||||||
{
|
{
|
||||||
@ -436,11 +724,33 @@ namespace ProxySU
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//打开文件夹
|
||||||
private void ButtonOpenSaveDir_Click(object sender, RoutedEventArgs e)
|
private void ButtonOpenSaveDir_Click(object sender, RoutedEventArgs e)
|
||||||
{
|
{
|
||||||
string openFolderPath = @"v2ray_config\" + saveFileFolder;
|
if (String.Equals(MainWindow.proxyType, "V2Ray"))
|
||||||
System.Diagnostics.Process.Start("explorer.exe", openFolderPath);
|
{
|
||||||
this.Close();
|
string openFolderPath = @"v2ray_config\" + saveFileFolder;
|
||||||
|
System.Diagnostics.Process.Start("explorer.exe", openFolderPath);
|
||||||
|
this.Close();
|
||||||
|
}
|
||||||
|
else if (String.Equals(MainWindow.proxyType, "TrojanGo"))
|
||||||
|
{
|
||||||
|
string openFolderPath = @"trojan-go_config\" + saveFileFolder;
|
||||||
|
System.Diagnostics.Process.Start("explorer.exe", openFolderPath);
|
||||||
|
this.Close();
|
||||||
|
}
|
||||||
|
else if (String.Equals(MainWindow.proxyType, "Trojan"))
|
||||||
|
{
|
||||||
|
string openFolderPath = @"trojan_config\" + saveFileFolder;
|
||||||
|
System.Diagnostics.Process.Start("explorer.exe", openFolderPath);
|
||||||
|
this.Close();
|
||||||
|
}
|
||||||
|
else if (String.Equals(MainWindow.proxyType, "NaiveProxy"))
|
||||||
|
{
|
||||||
|
string openFolderPath = @"naive_config\" + saveFileFolder;
|
||||||
|
System.Diagnostics.Process.Start("explorer.exe", openFolderPath);
|
||||||
|
this.Close();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,72 +0,0 @@
|
|||||||
<Window x:Class="ProxySU.TrojanGoResultClientInfoWindow"
|
|
||||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
|
||||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
|
||||||
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
|
||||||
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
|
||||||
xmlns:local="clr-namespace:ProxySU"
|
|
||||||
mc:Ignorable="d"
|
|
||||||
Title="TrojanGoResultClientInfoWindow" Height="550" Width="400">
|
|
||||||
<Grid>
|
|
||||||
<Grid>
|
|
||||||
<Grid.ColumnDefinitions>
|
|
||||||
<ColumnDefinition></ColumnDefinition>
|
|
||||||
</Grid.ColumnDefinitions>
|
|
||||||
<Grid.RowDefinitions>
|
|
||||||
<RowDefinition Height="0.7*"></RowDefinition>
|
|
||||||
<RowDefinition></RowDefinition>
|
|
||||||
<RowDefinition Height="0.2*"></RowDefinition>
|
|
||||||
</Grid.RowDefinitions>
|
|
||||||
<GroupBox Header="服务器连接参数" Grid.Row="0">
|
|
||||||
<Grid>
|
|
||||||
<Grid.ColumnDefinitions>
|
|
||||||
<ColumnDefinition></ColumnDefinition>
|
|
||||||
<ColumnDefinition></ColumnDefinition>
|
|
||||||
<ColumnDefinition></ColumnDefinition>
|
|
||||||
</Grid.ColumnDefinitions>
|
|
||||||
<Grid.RowDefinitions>
|
|
||||||
<RowDefinition></RowDefinition>
|
|
||||||
<RowDefinition></RowDefinition>
|
|
||||||
<RowDefinition></RowDefinition>
|
|
||||||
<RowDefinition></RowDefinition>
|
|
||||||
<RowDefinition></RowDefinition>
|
|
||||||
</Grid.RowDefinitions>
|
|
||||||
<TextBlock Text="服务器地址:" Grid.Column="0" Grid.Row="1"></TextBlock>
|
|
||||||
<TextBox x:Name="TextBoxTrojanServerHost" Grid.Column="1" Grid.Row="1" Margin="4"></TextBox>
|
|
||||||
<TextBlock Grid.Column="2" Grid.Row="1"></TextBlock>
|
|
||||||
<TextBlock Text="端口:" Grid.Column="0" Grid.Row="2"></TextBlock>
|
|
||||||
<TextBox x:Name="TextBoxTrojanServerPort" Grid.Column="1" Grid.Row="2" Margin="4"></TextBox>
|
|
||||||
<TextBlock Grid.Column="2" Grid.Row="2"></TextBlock>
|
|
||||||
<TextBlock Text="密钥:" Grid.Column="0" Grid.Row="3"></TextBlock>
|
|
||||||
<TextBox x:Name="TextBoxTrojanServerPassword" Grid.Column="1" Grid.Row="3" Margin="4"></TextBox>
|
|
||||||
<TextBlock Grid.Column="2" Grid.Row="3"></TextBlock>
|
|
||||||
<TextBlock x:Name="TextBlockTrojanGoWebSocketPath" Text="WebSocket路径:" Grid.Column="0" Grid.Row="4"></TextBlock>
|
|
||||||
<TextBox x:Name="TextBoxTrojanGoWSPath" Grid.Column="1" Grid.Row="4" Margin="4"></TextBox>
|
|
||||||
<TextBlock x:Name="TextBlockTrojanGoCaption" Grid.Column="2" Grid.Row="4"></TextBlock>
|
|
||||||
</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)、igniter(Android)、Trojan-QT5 (windows) 扫码和导入url" TextWrapping="Wrap" Grid.Column="0" Grid.Row="0" Grid.ColumnSpan="2"></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>
|
|
||||||
<ColumnDefinition></ColumnDefinition>
|
|
||||||
<ColumnDefinition></ColumnDefinition>
|
|
||||||
</Grid.ColumnDefinitions>
|
|
||||||
<Button x:Name="ButtonTrojanResultOpen" Content="确定" Grid.Column="1" Margin="4" Click="ButtonTrojanResultOpen_Click"></Button>
|
|
||||||
</Grid>
|
|
||||||
</Grid>
|
|
||||||
</Grid>
|
|
||||||
</Window>
|
|
@ -1,161 +0,0 @@
|
|||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Windows;
|
|
||||||
using System.Windows.Controls;
|
|
||||||
using System.Windows.Data;
|
|
||||||
using System.Windows.Documents;
|
|
||||||
using System.Windows.Input;
|
|
||||||
using System.Windows.Media;
|
|
||||||
using System.Windows.Media.Imaging;
|
|
||||||
using System.Windows.Shapes;
|
|
||||||
using System.IO;
|
|
||||||
using Renci.SshNet;
|
|
||||||
using Newtonsoft.Json;
|
|
||||||
using Newtonsoft.Json.Linq;
|
|
||||||
using Newtonsoft.Json.Serialization;
|
|
||||||
using System.Drawing;
|
|
||||||
using QRCoder;
|
|
||||||
|
|
||||||
namespace ProxySU
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// TrojanGoResultClientInfoWindow.xaml 的交互逻辑
|
|
||||||
/// </summary>
|
|
||||||
public partial class TrojanGoResultClientInfoWindow : Window
|
|
||||||
{
|
|
||||||
private string saveFileFolder = "";
|
|
||||||
public TrojanGoResultClientInfoWindow()
|
|
||||||
{
|
|
||||||
InitializeComponent();
|
|
||||||
TextBoxTrojanGoWSPath.Visibility = Visibility.Hidden;
|
|
||||||
TextBlockTrojanGoWebSocketPath.Visibility = Visibility.Hidden;
|
|
||||||
TextBlockTrojanGoCaption.Visibility = Visibility.Hidden;
|
|
||||||
//主机地址
|
|
||||||
TextBoxTrojanServerHost.Text = MainWindow.ReceiveConfigurationParameters[4];
|
|
||||||
//主机端口
|
|
||||||
TextBoxTrojanServerPort.Text = "443";
|
|
||||||
//密钥(uuid)
|
|
||||||
TextBoxTrojanServerPassword.Text = MainWindow.ReceiveConfigurationParameters[2];
|
|
||||||
//WebSocket路径
|
|
||||||
if (MainWindow.ReceiveConfigurationParameters[0].Equals("TrojanGoWebSocketTLS2Web"))
|
|
||||||
{
|
|
||||||
TextBoxTrojanGoWSPath.Text = MainWindow.ReceiveConfigurationParameters[3];
|
|
||||||
TextBoxTrojanGoWSPath.Visibility = Visibility.Visible;
|
|
||||||
TextBlockTrojanGoWebSocketPath.Visibility = Visibility.Visible;
|
|
||||||
TextBlockTrojanGoCaption.Visibility = Visibility.Visible;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
GenerateV2rayShareQRcodeAndBase64Url();
|
|
||||||
}
|
|
||||||
private void GenerateV2rayShareQRcodeAndBase64Url()
|
|
||||||
{
|
|
||||||
|
|
||||||
string saveFileFolderFirst = TextBoxTrojanServerHost.Text;
|
|
||||||
int num = 1;
|
|
||||||
saveFileFolder = saveFileFolderFirst;
|
|
||||||
CheckDir("trojan-go_config");
|
|
||||||
while (Directory.Exists(@"trojan-go_config\" + saveFileFolder))
|
|
||||||
{
|
|
||||||
saveFileFolder = saveFileFolderFirst + "_copy_" + num.ToString();
|
|
||||||
num++;
|
|
||||||
}
|
|
||||||
CheckDir(@"trojan-go_config\" + saveFileFolder);
|
|
||||||
string trojanUrl = $"trojan://{TextBoxTrojanServerPassword.Text}@{TextBoxTrojanServerHost.Text}:{TextBoxTrojanServerPort.Text}?allowinsecure=0&tfo=0&sni=&mux=0&ws=0&group=#{TextBoxTrojanServerHost.Text}";
|
|
||||||
//MessageBox.Show(v2rayNjsonObject.ToString());
|
|
||||||
//string trojanUrl = "trojan://" + ToBase64Encode(v2rayNjsonObject.ToString());
|
|
||||||
TextBoxTrojanUrl.Text = trojanUrl;
|
|
||||||
using (StreamWriter sw = new StreamWriter($"trojan-go_config\\{saveFileFolder}\\url.txt"))
|
|
||||||
{
|
|
||||||
sw.WriteLine(trojanUrl);
|
|
||||||
|
|
||||||
}
|
|
||||||
CreateQRCode(trojanUrl);
|
|
||||||
|
|
||||||
//移动Trojan官方程序配置文件到相应目录
|
|
||||||
if (File.Exists(@"trojan-go_config\config.json"))
|
|
||||||
{
|
|
||||||
File.Move(@"trojan-go_config\config.json", @"trojan-go_config\" + saveFileFolder + @"\config.json");
|
|
||||||
//File.Delete(@"config\config.json");//删除该文件
|
|
||||||
}
|
|
||||||
|
|
||||||
using (StreamWriter sw = new StreamWriter($"trojan-go_config\\{saveFileFolder}\\说明.txt"))
|
|
||||||
{
|
|
||||||
sw.WriteLine("config.json");
|
|
||||||
sw.WriteLine("此文件为Trojan-go官方程序所使用的客户端配置文件,配置为全局模式,http与socks5地址:127.0.0.1:1080");
|
|
||||||
sw.WriteLine("Trojan-go官方网站:https://github.com/p4gefau1t/trojan-go");
|
|
||||||
sw.WriteLine("Trojan-go官方程序下载地址:https://github.com/p4gefau1t/trojan-go/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)扫码导入节点(Trojan-Go的WebSocket模式暂不支持)");
|
|
||||||
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)复制粘贴导入节点的网址(Trojan-Go的WebSocket模式暂不支持)");
|
|
||||||
sw.WriteLine("-----------------------------------------\n");
|
|
||||||
sw.WriteLine("服务器通用连接配置参数");
|
|
||||||
sw.WriteLine($"地址(address):{TextBoxTrojanServerHost.Text}");
|
|
||||||
sw.WriteLine($"端口(Port):{TextBoxTrojanServerPort.Text}");
|
|
||||||
sw.WriteLine($"密钥:{TextBoxTrojanServerPassword.Text}");
|
|
||||||
sw.WriteLine($"WebSocket路径:{TextBoxTrojanGoWSPath.Text}");
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
//生成base64
|
|
||||||
//private string ToBase64Encode(string text)
|
|
||||||
//{
|
|
||||||
// if (String.IsNullOrEmpty(text))
|
|
||||||
// {
|
|
||||||
// return text;
|
|
||||||
// }
|
|
||||||
|
|
||||||
// byte[] textBytes = Encoding.UTF8.GetBytes(text);
|
|
||||||
// return Convert.ToBase64String(textBytes);
|
|
||||||
//}
|
|
||||||
|
|
||||||
//生成QRcoder图片
|
|
||||||
private void CreateQRCode(string varBase64)
|
|
||||||
{
|
|
||||||
//string varBase64 = varBase64;
|
|
||||||
QRCodeGenerator qrGenerator = new QRCodeGenerator();
|
|
||||||
QRCodeData qrCodeData = qrGenerator.CreateQrCode(varBase64, 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());
|
|
||||||
ImageTrojanShareQRurl.Source = imgsource;
|
|
||||||
//DeleteObject(myImagePtr);
|
|
||||||
qrCodeImage.Save($"trojan-go_config\\{saveFileFolder}\\QR.bmp");
|
|
||||||
|
|
||||||
}
|
|
||||||
//判断目录是否存在,不存在则创建
|
|
||||||
private static bool CheckDir(string folder)
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
if (!Directory.Exists(folder))//如果不存在就创建file文件夹
|
|
||||||
Directory.CreateDirectory(folder);//创建该文件夹
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
catch (Exception)
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
private void ButtonTrojanResultOpen_Click(object sender, RoutedEventArgs e)
|
|
||||||
{
|
|
||||||
string openFolderPath = @"trojan-go_config\" + saveFileFolder;
|
|
||||||
System.Diagnostics.Process.Start("explorer.exe", openFolderPath);
|
|
||||||
this.Close();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -54,9 +54,9 @@
|
|||||||
<RowDefinition></RowDefinition>
|
<RowDefinition></RowDefinition>
|
||||||
</Grid.RowDefinitions>
|
</Grid.RowDefinitions>
|
||||||
<RadioButton x:Name="RadioButtonTrojanGoTLS2Web" Content="Trojan-Go+TLS+Web" Grid.Column="0" Grid.Row="1" Checked="RadioButtonTrojanTLS2Web_Checked"></RadioButton>
|
<RadioButton x:Name="RadioButtonTrojanGoTLS2Web" Content="Trojan-Go+TLS+Web" Grid.Column="0" Grid.Row="1" Checked="RadioButtonTrojanTLS2Web_Checked"></RadioButton>
|
||||||
<TextBlock Text="说明" Grid.Column="1" Grid.Row="1"></TextBlock>
|
<TextBlock Text="http/2传输,Caddy2伪装网站,抗识别,暂不支持CloudFlare的CDN" Grid.Column="1" Grid.ColumnSpan="2" Grid.Row="1"></TextBlock>
|
||||||
<RadioButton x:Name="RadioButtonTrojanGoWebSocketTLS2Web" Content="Trojan-Go+WebSocket+TLS+Web" Grid.Column="0" Grid.Row="2" Checked="RadioButtonTrojanGoWebSocketTLS2Web_Checked"></RadioButton>
|
<RadioButton x:Name="RadioButtonTrojanGoWebSocketTLS2Web" Content="Trojan-Go+WebSocket+TLS+Web" Grid.Column="0" Grid.Row="2" Checked="RadioButtonTrojanGoWebSocketTLS2Web_Checked"></RadioButton>
|
||||||
<TextBlock Text="支持CDN" Grid.Column="1" Grid.Row="2"></TextBlock>
|
<TextBlock Text="使用WebSocket传输,Caddy2伪装网站,抗识别,支持CloudFlare的CDN" Grid.Column="1" Grid.ColumnSpan="2" Grid.Row="2"></TextBlock>
|
||||||
</Grid>
|
</Grid>
|
||||||
</GroupBox>
|
</GroupBox>
|
||||||
<GroupBox Header="其他设置" Grid.Row="1">
|
<GroupBox Header="其他设置" Grid.Row="1">
|
||||||
|
@ -1,72 +0,0 @@
|
|||||||
<Window x:Class="ProxySU.TrojanResultClientInfoWindow"
|
|
||||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
|
||||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
|
||||||
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
|
||||||
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
|
||||||
xmlns:local="clr-namespace:ProxySU"
|
|
||||||
mc:Ignorable="d"
|
|
||||||
Title="TrojanResultClientInfoWindow" Height="550" Width="400">
|
|
||||||
<Grid>
|
|
||||||
<Grid>
|
|
||||||
<Grid.ColumnDefinitions>
|
|
||||||
<ColumnDefinition></ColumnDefinition>
|
|
||||||
</Grid.ColumnDefinitions>
|
|
||||||
<Grid.RowDefinitions>
|
|
||||||
<RowDefinition Height="0.7*"></RowDefinition>
|
|
||||||
<RowDefinition></RowDefinition>
|
|
||||||
<RowDefinition Height="0.2*"></RowDefinition>
|
|
||||||
</Grid.RowDefinitions>
|
|
||||||
<GroupBox Header="服务器连接参数" Grid.Row="0">
|
|
||||||
<Grid>
|
|
||||||
<Grid.ColumnDefinitions>
|
|
||||||
<ColumnDefinition></ColumnDefinition>
|
|
||||||
<ColumnDefinition></ColumnDefinition>
|
|
||||||
<ColumnDefinition></ColumnDefinition>
|
|
||||||
</Grid.ColumnDefinitions>
|
|
||||||
<Grid.RowDefinitions>
|
|
||||||
<RowDefinition></RowDefinition>
|
|
||||||
<RowDefinition></RowDefinition>
|
|
||||||
<RowDefinition></RowDefinition>
|
|
||||||
<RowDefinition></RowDefinition>
|
|
||||||
<RowDefinition></RowDefinition>
|
|
||||||
</Grid.RowDefinitions>
|
|
||||||
<TextBlock Text="服务器地址:" Grid.Column="0" Grid.Row="1"></TextBlock>
|
|
||||||
<TextBox x:Name="TextBoxTrojanServerHost" Grid.Column="1" Grid.Row="1" Margin="4"></TextBox>
|
|
||||||
<TextBlock Grid.Column="2" Grid.Row="1"></TextBlock>
|
|
||||||
<TextBlock Text="端口:" Grid.Column="0" Grid.Row="2"></TextBlock>
|
|
||||||
<TextBox x:Name="TextBoxTrojanServerPort" Grid.Column="1" Grid.Row="2" Margin="4"></TextBox>
|
|
||||||
<TextBlock Grid.Column="2" Grid.Row="2"></TextBlock>
|
|
||||||
<TextBlock Text="密钥:" Grid.Column="0" Grid.Row="3"></TextBlock>
|
|
||||||
<TextBox x:Name="TextBoxTrojanServerPassword" Grid.Column="1" Grid.Row="3" Margin="4"></TextBox>
|
|
||||||
<TextBlock Grid.Column="2" Grid.Row="3"></TextBlock>
|
|
||||||
<!--<TextBlock x:Name="TextBlockTrojanGoWebSocketPath" Text="WebSocket路径:" Grid.Column="0" Grid.Row="4"></TextBlock>
|
|
||||||
<TextBox x:Name="TextBoxTrojanGoWSPath" Grid.Column="1" Grid.Row="4" Margin="4"></TextBox>
|
|
||||||
<TextBlock x:Name="TextBlockTrojanGoCaption" Grid.Column="2" Grid.Row="4"></TextBlock>-->
|
|
||||||
</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)、igniter(Android)、Trojan-QT5 (windows) 扫码和导入url" TextWrapping="Wrap" Grid.Column="0" Grid.Row="0" Grid.ColumnSpan="2"></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>
|
|
||||||
<ColumnDefinition></ColumnDefinition>
|
|
||||||
<ColumnDefinition></ColumnDefinition>
|
|
||||||
</Grid.ColumnDefinitions>
|
|
||||||
<Button x:Name="ButtonTrojanResultOpen" Content="确定" Grid.Column="1" Margin="4" Click="ButtonTrojanResultOpen_Click"></Button>
|
|
||||||
</Grid>
|
|
||||||
</Grid>
|
|
||||||
</Grid>
|
|
||||||
</Window>
|
|
@ -1,163 +0,0 @@
|
|||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Windows;
|
|
||||||
using System.Windows.Controls;
|
|
||||||
using System.Windows.Data;
|
|
||||||
using System.Windows.Documents;
|
|
||||||
using System.Windows.Input;
|
|
||||||
using System.Windows.Media;
|
|
||||||
using System.Windows.Media.Imaging;
|
|
||||||
using System.Windows.Shapes;
|
|
||||||
using System.IO;
|
|
||||||
using Renci.SshNet;
|
|
||||||
using Newtonsoft.Json;
|
|
||||||
using Newtonsoft.Json.Linq;
|
|
||||||
using Newtonsoft.Json.Serialization;
|
|
||||||
using System.Drawing;
|
|
||||||
using QRCoder;
|
|
||||||
|
|
||||||
namespace ProxySU
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// TrojanResultClientInfoWindow.xaml 的交互逻辑
|
|
||||||
/// </summary>
|
|
||||||
public partial class TrojanResultClientInfoWindow : Window
|
|
||||||
{
|
|
||||||
private string saveFileFolder = "";
|
|
||||||
public TrojanResultClientInfoWindow()
|
|
||||||
{
|
|
||||||
InitializeComponent();
|
|
||||||
//TextBoxTrojanGoWSPath.Visibility = Visibility.Hidden;
|
|
||||||
//TextBlockTrojanGoWebSocketPath.Visibility = Visibility.Hidden;
|
|
||||||
//TextBlockTrojanGoCaption.Visibility = Visibility.Hidden;
|
|
||||||
//主机地址
|
|
||||||
TextBoxTrojanServerHost.Text = MainWindow.ReceiveConfigurationParameters[4];
|
|
||||||
//主机端口
|
|
||||||
TextBoxTrojanServerPort.Text = "443";
|
|
||||||
//密钥(uuid)
|
|
||||||
TextBoxTrojanServerPassword.Text = MainWindow.ReceiveConfigurationParameters[2];
|
|
||||||
//WebSocket路径
|
|
||||||
//if (MainWindow.ReceiveConfigurationParameters[0].Equals("TrojanGoWebSocketTLS2Web"))
|
|
||||||
//{
|
|
||||||
// TextBoxTrojanGoWSPath.Text = MainWindow.ReceiveConfigurationParameters[3];
|
|
||||||
// TextBoxTrojanGoWSPath.Visibility = Visibility.Visible;
|
|
||||||
// TextBlockTrojanGoWebSocketPath.Visibility = Visibility.Visible;
|
|
||||||
// TextBlockTrojanGoCaption.Visibility = Visibility.Visible;
|
|
||||||
|
|
||||||
//}
|
|
||||||
|
|
||||||
GenerateV2rayShareQRcodeAndBase64Url();
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
//生成Trojan-QT5 (windows)、igniter(Android)、Shadowrocket(ios)客户端导入文件
|
|
||||||
private void GenerateV2rayShareQRcodeAndBase64Url()
|
|
||||||
{
|
|
||||||
|
|
||||||
string saveFileFolderFirst = TextBoxTrojanServerHost.Text;
|
|
||||||
int num = 1;
|
|
||||||
saveFileFolder = saveFileFolderFirst;
|
|
||||||
CheckDir("trojan_config");
|
|
||||||
while (Directory.Exists(@"trojan_config\" + saveFileFolder))
|
|
||||||
{
|
|
||||||
saveFileFolder = saveFileFolderFirst + "_copy_" + num.ToString();
|
|
||||||
num++;
|
|
||||||
}
|
|
||||||
CheckDir(@"trojan_config\" + saveFileFolder);
|
|
||||||
string trojanUrl = $"trojan://{TextBoxTrojanServerPassword.Text}@{TextBoxTrojanServerHost.Text}:{TextBoxTrojanServerPort.Text}#{TextBoxTrojanServerHost.Text}";
|
|
||||||
//MessageBox.Show(v2rayNjsonObject.ToString());
|
|
||||||
//string trojanUrl = "trojan://" + ToBase64Encode(v2rayNjsonObject.ToString());
|
|
||||||
TextBoxTrojanUrl.Text = trojanUrl;
|
|
||||||
using (StreamWriter sw = new StreamWriter($"trojan_config\\{saveFileFolder}\\url.txt"))
|
|
||||||
{
|
|
||||||
sw.WriteLine(trojanUrl);
|
|
||||||
|
|
||||||
}
|
|
||||||
CreateQRCode(trojanUrl);
|
|
||||||
|
|
||||||
//移动Trojan官方程序配置文件到相应目录
|
|
||||||
if (File.Exists(@"trojan_config\config.json"))
|
|
||||||
{
|
|
||||||
File.Move(@"trojan_config\config.json", @"trojan_config\" + saveFileFolder + @"\config.json");
|
|
||||||
//File.Delete(@"config\config.json");//删除该文件
|
|
||||||
}
|
|
||||||
|
|
||||||
using (StreamWriter sw = new StreamWriter($"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):{TextBoxTrojanServerHost.Text}");
|
|
||||||
sw.WriteLine($"端口(Port):{TextBoxTrojanServerPort.Text}");
|
|
||||||
sw.WriteLine($"密钥:{TextBoxTrojanServerPassword.Text}");
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
//生成base64
|
|
||||||
//private string ToBase64Encode(string text)
|
|
||||||
//{
|
|
||||||
// if (String.IsNullOrEmpty(text))
|
|
||||||
// {
|
|
||||||
// return text;
|
|
||||||
// }
|
|
||||||
|
|
||||||
// byte[] textBytes = Encoding.UTF8.GetBytes(text);
|
|
||||||
// return Convert.ToBase64String(textBytes);
|
|
||||||
//}
|
|
||||||
|
|
||||||
//生成QRcoder图片
|
|
||||||
private void CreateQRCode(string varBase64)
|
|
||||||
{
|
|
||||||
//string varBase64 = varBase64;
|
|
||||||
QRCodeGenerator qrGenerator = new QRCodeGenerator();
|
|
||||||
QRCodeData qrCodeData = qrGenerator.CreateQrCode(varBase64, 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());
|
|
||||||
ImageTrojanShareQRurl.Source = imgsource;
|
|
||||||
//DeleteObject(myImagePtr);
|
|
||||||
qrCodeImage.Save($"trojan_config\\{saveFileFolder}\\QR.bmp");
|
|
||||||
|
|
||||||
}
|
|
||||||
//判断目录是否存在,不存在则创建
|
|
||||||
private static bool CheckDir(string folder)
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
if (!Directory.Exists(folder))//如果不存在就创建file文件夹
|
|
||||||
Directory.CreateDirectory(folder);//创建该文件夹
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
catch (Exception)
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
private void ButtonTrojanResultOpen_Click(object sender, RoutedEventArgs e)
|
|
||||||
{
|
|
||||||
string openFolderPath = @"trojan_config\" + saveFileFolder;
|
|
||||||
System.Diagnostics.Process.Start("explorer.exe", openFolderPath);
|
|
||||||
this.Close();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -5,7 +5,7 @@
|
|||||||
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||||
xmlns:local="clr-namespace:ProxySU"
|
xmlns:local="clr-namespace:ProxySU"
|
||||||
mc:Ignorable="d"
|
mc:Ignorable="d"
|
||||||
Title="TemplateConfiguration" Height="600" Width="850">
|
Title="V2RayTemplateConfiguration" Height="600" Width="850">
|
||||||
<Window.Resources>
|
<Window.Resources>
|
||||||
<Style BasedOn="{StaticResource {x:Type TextBox}}"
|
<Style BasedOn="{StaticResource {x:Type TextBox}}"
|
||||||
TargetType="TextBox"
|
TargetType="TextBox"
|
||||||
@ -61,9 +61,9 @@
|
|||||||
<RowDefinition></RowDefinition>
|
<RowDefinition></RowDefinition>
|
||||||
</Grid.RowDefinitions>
|
</Grid.RowDefinitions>
|
||||||
<RadioButton x:Name="RadioButtonWebSocketTLS2WebHot" Content="WebSocket+TLS+Web" GroupName="TemplateGroup" Grid.Column="0" Grid.Row="1" Checked="RadioButtonWebSocketTLS2Web_Checked"></RadioButton>
|
<RadioButton x:Name="RadioButtonWebSocketTLS2WebHot" Content="WebSocket+TLS+Web" GroupName="TemplateGroup" Grid.Column="0" Grid.Row="1" Checked="RadioButtonWebSocketTLS2Web_Checked"></RadioButton>
|
||||||
<TextBlock Text="稳定性强,使用Caddy做前置,隐藏代理,会被识别为访问网站的https流量,抗封锁识别最强。(需要域名)" TextWrapping="Wrap" Grid.Column="1" Grid.Row="1" Grid.ColumnSpan="3"></TextBlock>
|
<TextBlock Text="稳定性强,Caddy2做前置,隐藏代理特征,被识别为访问网站的https流量,抗封锁识别最强,需要域名,支持CDN" TextWrapping="Wrap" Grid.Column="1" Grid.Row="1" Grid.ColumnSpan="3"></TextBlock>
|
||||||
<RadioButton x:Name="RadioButtonHTTP2WebHot" Content="HTTP2+TLS+Web" GroupName="TemplateGroup" Grid.Column="0" Grid.Row="2" Checked="RadioButtonWebSocketTLS2Web_Checked"></RadioButton>
|
<RadioButton x:Name="RadioButtonHTTP2WebHot" Content="HTTP2+TLS+Web" GroupName="TemplateGroup" Grid.Column="0" Grid.Row="2" Checked="RadioButtonWebSocketTLS2Web_Checked"></RadioButton>
|
||||||
<TextBlock Text="基于 HTTP/2 的传输方式。它完整按照 HTTP/2 标准实现,使用Caddy做前置,需要域名" Grid.Column="1" Grid.Row="2" Grid.ColumnSpan="3"></TextBlock>
|
<TextBlock Text="基于 HTTP/2 传输。完整按 HTTP/2 标准实现,Caddy2做前置,隐藏代理特征,H2C协议转发到V2Ray,需要域名,暂不支持CloudFlare的CDN" TextWrapping="Wrap" Grid.Column="1" Grid.Row="2" Grid.ColumnSpan="3"></TextBlock>
|
||||||
|
|
||||||
</Grid>
|
</Grid>
|
||||||
</TabItem>
|
</TabItem>
|
||||||
@ -90,10 +90,12 @@
|
|||||||
<RadioButton x:Name="RadioButtonTCPhttp" Content="TCP+Http伪装" GroupName="TemplateGroup" Grid.Column="0" Grid.Row="2" Checked="RadioButtonTCPhttp_Checked" ></RadioButton>
|
<RadioButton x:Name="RadioButtonTCPhttp" Content="TCP+Http伪装" GroupName="TemplateGroup" Grid.Column="0" Grid.Row="2" Checked="RadioButtonTCPhttp_Checked" ></RadioButton>
|
||||||
<TextBlock Text="数据加密传输,并做http伪装,会被识别为http流量,但并不是真正的http访问" Grid.Column="1" Grid.Row="2" Grid.ColumnSpan="3"></TextBlock>
|
<TextBlock Text="数据加密传输,并做http伪装,会被识别为http流量,但并不是真正的http访问" Grid.Column="1" Grid.Row="2" Grid.ColumnSpan="3"></TextBlock>
|
||||||
<RadioButton x:Name="RadioButtonTCP2TLS" Content="TCP+TLS" GroupName="TemplateGroup" Grid.Column="0" Grid.Row="3" Checked="RadioButtonTCP2TLS_Checked" />
|
<RadioButton x:Name="RadioButtonTCP2TLS" Content="TCP+TLS" GroupName="TemplateGroup" Grid.Column="0" Grid.Row="3" Checked="RadioButtonTCP2TLS_Checked" />
|
||||||
<TextBlock Text="数据加密传输,传输协议使用TLS,会被识别为TLS流量,不等同于https流量特征 (需要域名)" Grid.Column="1" Grid.Row="3" Grid.ColumnSpan="3"></TextBlock>
|
<TextBlock Text="数据加密传输,传输协议使用TLS,会被识别为TLS流量,不等同于https流量特征 (需域名)" Grid.Column="1" Grid.Row="3" Grid.ColumnSpan="3"></TextBlock>
|
||||||
<RadioButton x:Name="RadioButtonTcpTLS2SelfSigned" Content="TCP+TLS((自签证书)" GroupName="TemplateGroup" Grid.Column="0" Grid.Row="4" Checked="RadioButtonTCP2TLSnoDomain_Checked" />
|
<RadioButton x:Name="RadioButtonTcpTLS2SelfSigned" Content="TCP+TLS((自签证书)" GroupName="TemplateGroup" Grid.Column="0" Grid.Row="4" Checked="RadioButtonTCP2TLSnoDomain_Checked" />
|
||||||
<TextBlock Text="数据加密传输,传输协议使用TLS,会被识别为TLS流量,不等同于https流量特征 (无需域名)" Grid.Column="1" Grid.Row="4" Grid.ColumnSpan="3"></TextBlock>
|
<TextBlock Text="数据加密传输,传输协议使用TLS,会被识别为TLS流量,不等同于https流量特征 (无需域名)" Grid.Column="1" Grid.Row="4" Grid.ColumnSpan="3"></TextBlock>
|
||||||
<TextBlock Text="Shadowrocket (ios)需要手动打开“允许不安全”选项" TextWrapping="Wrap" Grid.Column="4" Grid.Row="4" ></TextBlock>
|
<TextBlock Text="Shadowrocket (ios)需要手动打开“允许不安全”选项" TextWrapping="Wrap" Grid.Column="4" Grid.Row="4" ></TextBlock>
|
||||||
|
<RadioButton x:Name="RadioButtonVlessTcpTlsWeb" Content="VLESS+TCP+TLS+Web" GroupName="TemplateGroup" Grid.Column="0" Grid.Row="5" Checked="RadioButtonTCP2TLS_Checked" ></RadioButton>
|
||||||
|
<TextBlock Text="轻量协议VLESS,占用更少主机资源,数据TLS加密传输,用Caddy2在节点上做伪装网站。适合配置低的VPS,或多人共用节点,服务端客户端版本要求4.27+ (需域名)," TextWrapping="Wrap" Grid.Column="1" Grid.Row="5" Grid.ColumnSpan="3"></TextBlock>
|
||||||
|
|
||||||
</Grid>
|
</Grid>
|
||||||
</TabItem>
|
</TabItem>
|
||||||
@ -120,7 +122,7 @@
|
|||||||
<RadioButton x:Name="RadioButtonWebSocketTLS" Content="WebSocket+TLS" GroupName="TemplateGroup" Grid.Column="0" Grid.Row="2" Checked="RadioButtonHTTP2_Checked"/>
|
<RadioButton x:Name="RadioButtonWebSocketTLS" Content="WebSocket+TLS" GroupName="TemplateGroup" Grid.Column="0" Grid.Row="2" Checked="RadioButtonHTTP2_Checked"/>
|
||||||
<TextBlock Text="数据加密传输,传输协议使用WebSocket,启用TLS,将被识别为TLS流量。(需要域名)" TextWrapping="Wrap" Grid.Column="1" Grid.Row="2" Grid.ColumnSpan="3"></TextBlock>
|
<TextBlock Text="数据加密传输,传输协议使用WebSocket,启用TLS,将被识别为TLS流量。(需要域名)" TextWrapping="Wrap" Grid.Column="1" Grid.Row="2" Grid.ColumnSpan="3"></TextBlock>
|
||||||
<RadioButton x:Name="RadioButtonWebSocketTLS2Web" Content="WebSocket+TLS+Web" GroupName="TemplateGroup" Grid.Column="0" Grid.Row="3" Checked="RadioButtonWebSocketTLS2Web_Checked"></RadioButton>
|
<RadioButton x:Name="RadioButtonWebSocketTLS2Web" Content="WebSocket+TLS+Web" GroupName="TemplateGroup" Grid.Column="0" Grid.Row="3" Checked="RadioButtonWebSocketTLS2Web_Checked"></RadioButton>
|
||||||
<TextBlock Text="稳定性强,使用使用Caddy做前置,隐藏代理,会被识别为访问网站的https流量,抗封锁识别最强。(需要域名)" TextWrapping="Wrap" Grid.Column="1" Grid.Row="3" Grid.ColumnSpan="3"></TextBlock>
|
<TextBlock Text="稳定性强,Caddy2做前置,隐藏代理特征,被识别为访问网站的https流量,抗封锁识别最强,需要域名,支持CDN" TextWrapping="Wrap" Grid.Column="1" Grid.Row="3" Grid.ColumnSpan="3"></TextBlock>
|
||||||
<RadioButton x:Name="RadioButtonWebSocketTLSselfSigned" Content="WebSocket+TLS(自签证书)" GroupName="TemplateGroup" Grid.Column="0" Grid.Row="4" Checked="RadioButtonWebSocketTLSselfSigned_Checked"></RadioButton>
|
<RadioButton x:Name="RadioButtonWebSocketTLSselfSigned" Content="WebSocket+TLS(自签证书)" GroupName="TemplateGroup" Grid.Column="0" Grid.Row="4" Checked="RadioButtonWebSocketTLSselfSigned_Checked"></RadioButton>
|
||||||
<TextBlock Text="数据加密传输,传输协议使用WebSocket,启用TLS,将被识别为TLS流量。(无需域名)" TextWrapping="Wrap" Grid.Column="1" Grid.Row="4" Grid.ColumnSpan="3"></TextBlock>
|
<TextBlock Text="数据加密传输,传输协议使用WebSocket,启用TLS,将被识别为TLS流量。(无需域名)" TextWrapping="Wrap" Grid.Column="1" Grid.Row="4" Grid.ColumnSpan="3"></TextBlock>
|
||||||
<TextBlock Text="Shadowrocket (ios)需要手动打开“允许不安全”选项" TextWrapping="Wrap" Grid.Column="4" Grid.Row="4" ></TextBlock>
|
<TextBlock Text="Shadowrocket (ios)需要手动打开“允许不安全”选项" TextWrapping="Wrap" Grid.Column="4" Grid.Row="4" ></TextBlock>
|
||||||
@ -148,9 +150,9 @@
|
|||||||
<RadioButton x:Name="RadioButtonHTTP2" Content="HTTP2" GroupName="TemplateGroup" Grid.Column="0" Grid.Row="1" Checked="RadioButtonHTTP2_Checked"></RadioButton>
|
<RadioButton x:Name="RadioButtonHTTP2" Content="HTTP2" GroupName="TemplateGroup" Grid.Column="0" Grid.Row="1" Checked="RadioButtonHTTP2_Checked"></RadioButton>
|
||||||
<TextBlock Text="基于 HTTP/2 的传输方式。它完整按照 HTTP/2 标准实现,需要域名" Grid.Column="1" Grid.Row="1" Grid.ColumnSpan="3"></TextBlock>
|
<TextBlock Text="基于 HTTP/2 的传输方式。它完整按照 HTTP/2 标准实现,需要域名" Grid.Column="1" Grid.Row="1" Grid.ColumnSpan="3"></TextBlock>
|
||||||
<RadioButton x:Name="RadioButtonHTTP2Web" Content="HTTP2+TLS+Web" GroupName="TemplateGroup" Grid.Column="0" Grid.Row="2" Checked="RadioButtonWebSocketTLS2Web_Checked"></RadioButton>
|
<RadioButton x:Name="RadioButtonHTTP2Web" Content="HTTP2+TLS+Web" GroupName="TemplateGroup" Grid.Column="0" Grid.Row="2" Checked="RadioButtonWebSocketTLS2Web_Checked"></RadioButton>
|
||||||
<TextBlock Text="基于 HTTP/2 的传输方式。它完整按照 HTTP/2 标准实现,使用Caddy做前置,需要域名" Grid.Column="1" Grid.Row="2" Grid.ColumnSpan="3"></TextBlock>
|
<TextBlock Text="基于 HTTP/2 传输。完整按 HTTP/2 标准实现,Caddy2做前置,隐藏代理特征,H2C协议转发到V2Ray,需要域名,暂不支持CloudFlare的CDN" TextWrapping="Wrap" Grid.Column="1" Grid.Row="2" Grid.ColumnSpan="3"></TextBlock>
|
||||||
<RadioButton x:Name="RadioButtonHTTP2selfSigned" Content="HTTP2(自签证书)" GroupName="TemplateGroup" Grid.Column="0" Grid.Row="3" Checked="RadioButtonWebSocketTLSselfSigned_Checked"></RadioButton>
|
<RadioButton x:Name="RadioButtonHTTP2selfSigned" Content="HTTP2(自签证书)" GroupName="TemplateGroup" Grid.Column="0" Grid.Row="3" Checked="RadioButtonWebSocketTLSselfSigned_Checked"></RadioButton>
|
||||||
<TextBlock Text="基于 HTTP/2 的传输方式。它完整按照 HTTP/2 标准实现,可以不需要域名。" Grid.Column="1" Grid.Row="3" Grid.ColumnSpan="3"></TextBlock>
|
<TextBlock Text="基于 HTTP/2 的传输方式。它完整按照 HTTP/2 标准实现,使用自签名证书,不需要域名" Grid.Column="1" Grid.Row="3" Grid.ColumnSpan="3"></TextBlock>
|
||||||
<TextBlock Text="Shadowrocket (ios)需要手动打开“允许不安全”选项" TextWrapping="Wrap" Grid.Column="4" Grid.Row="3" ></TextBlock>
|
<TextBlock Text="Shadowrocket (ios)需要手动打开“允许不安全”选项" TextWrapping="Wrap" Grid.Column="4" Grid.Row="3" ></TextBlock>
|
||||||
|
|
||||||
</Grid>
|
</Grid>
|
||||||
@ -176,7 +178,7 @@
|
|||||||
<RowDefinition></RowDefinition>
|
<RowDefinition></RowDefinition>
|
||||||
</Grid.RowDefinitions>
|
</Grid.RowDefinitions>
|
||||||
<RadioButton x:Name="RadioButtonMkcpNone" Content="mKCP(无伪装)" GroupName="TemplateGroup" Grid.Column="0" Grid.Row="1" Checked="RadioButtonQuicNone_Checked"></RadioButton>
|
<RadioButton x:Name="RadioButtonMkcpNone" Content="mKCP(无伪装)" GroupName="TemplateGroup" Grid.Column="0" Grid.Row="1" Checked="RadioButtonQuicNone_Checked"></RadioButton>
|
||||||
<TextBlock Text="数据加密传输,以增加流量消耗来加速,减少延迟,udp协议,无伪装,会被识别为udp流量" Grid.Column="1" Grid.Row="1" Grid.ColumnSpan="3"></TextBlock>
|
<TextBlock Text="数据加密传输,以增加带宽占用,减少延迟,udp协议,无伪装,会被识别为udp流量" Grid.Column="1" Grid.Row="1" Grid.ColumnSpan="3"></TextBlock>
|
||||||
<RadioButton x:Name="RadioButton2mKCP2SRTP" Content="mKCP+SRTP" GroupName="TemplateGroup" Grid.Column="0" Grid.Row="2" Checked="RadioButtonQuicNone_Checked"></RadioButton>
|
<RadioButton x:Name="RadioButton2mKCP2SRTP" Content="mKCP+SRTP" GroupName="TemplateGroup" Grid.Column="0" Grid.Row="2" Checked="RadioButtonQuicNone_Checked"></RadioButton>
|
||||||
<TextBlock Text="同mKCP(无伪装),增加伪装成 SRTP 数据包,会被识别为视频通话数据(如 FaceTime)" Grid.Column="1" Grid.Row="2" Grid.ColumnSpan="3"></TextBlock>
|
<TextBlock Text="同mKCP(无伪装),增加伪装成 SRTP 数据包,会被识别为视频通话数据(如 FaceTime)" Grid.Column="1" Grid.Row="2" Grid.ColumnSpan="3"></TextBlock>
|
||||||
<RadioButton x:Name="RadioButton2mKCPuTP" Content="mKCP+uTP" GroupName="TemplateGroup" Grid.Column="0" Grid.Row="3" Checked="RadioButtonQuicNone_Checked"></RadioButton>
|
<RadioButton x:Name="RadioButton2mKCPuTP" Content="mKCP+uTP" GroupName="TemplateGroup" Grid.Column="0" Grid.Row="3" Checked="RadioButtonQuicNone_Checked"></RadioButton>
|
||||||
@ -251,7 +253,8 @@
|
|||||||
</Grid.RowDefinitions>
|
</Grid.RowDefinitions>
|
||||||
<TextBlock x:Name="TextBlockServerListenPort" Text="服务端口:" Grid.Column="0" Grid.Row="0" Grid.ColumnSpan="1"></TextBlock>
|
<TextBlock x:Name="TextBlockServerListenPort" Text="服务端口:" Grid.Column="0" Grid.Row="0" Grid.ColumnSpan="1"></TextBlock>
|
||||||
<TextBox x:Name="TextBoxServerListenPort" Grid.Column="1" Grid.Row="0" Grid.ColumnSpan="3" Margin="3"></TextBox>
|
<TextBox x:Name="TextBoxServerListenPort" Grid.Column="1" Grid.Row="0" Grid.ColumnSpan="3" Margin="3"></TextBox>
|
||||||
<Button x:Name="ButtonServerListenPort" Content="随机选择" Grid.Column="4" Grid.Row="0" Margin="2" Click="ButtonServerListenPort_Click"></Button>
|
<Button x:Name="ButtonServerListenPort" Content="随机选择" Grid.Column="4" Grid.Row="0" Margin="2" Click="ButtonServerListenPort_Click"></Button>
|
||||||
|
<TextBlock Text="若使用TLS加密,请保持默认的443端口" Grid.Column="5" Grid.ColumnSpan="2" Grid.Row="0" Margin="3"></TextBlock>
|
||||||
<TextBlock x:Name="TextBlockNewUUID" Text="UUID:" Grid.Column="0" Grid.Row="1" Grid.ColumnSpan="1"></TextBlock>
|
<TextBlock x:Name="TextBlockNewUUID" Text="UUID:" Grid.Column="0" Grid.Row="1" Grid.ColumnSpan="1"></TextBlock>
|
||||||
<TextBox x:Name="TextBoxNewUUID" Grid.Column="1" Grid.Row="1" Grid.ColumnSpan="3" Margin="3"></TextBox>
|
<TextBox x:Name="TextBoxNewUUID" Grid.Column="1" Grid.Row="1" Grid.ColumnSpan="3" Margin="3"></TextBox>
|
||||||
<Button x:Name="ButtonNewUUID" Content="更新" Grid.Column="4" Grid.Row="1" Margin="2" Click="ButtonNewUUID_Click"></Button>
|
<Button x:Name="ButtonNewUUID" Content="更新" Grid.Column="4" Grid.Row="1" Margin="2" Click="ButtonNewUUID_Click"></Button>
|
||||||
@ -259,7 +262,7 @@
|
|||||||
<TextBlock x:Name="TextBlockQuicUUID" Text="mKCP/QUIC密钥" Grid.Column="0" Grid.Row="2" Grid.ColumnSpan="1"></TextBlock>
|
<TextBlock x:Name="TextBlockQuicUUID" Text="mKCP/QUIC密钥" Grid.Column="0" Grid.Row="2" Grid.ColumnSpan="1"></TextBlock>
|
||||||
<TextBox x:Name="TextBoxQuicUUID" Grid.Column="1" Grid.Row="2" Grid.ColumnSpan="3" Margin="3"></TextBox>
|
<TextBox x:Name="TextBoxQuicUUID" Grid.Column="1" Grid.Row="2" Grid.ColumnSpan="3" Margin="3"></TextBox>
|
||||||
<Button x:Name="ButtonQuicUUID" Content="更新" Grid.Column="4" Grid.Row="2" Margin="2" Click="ButtonQuicUUID_Click"></Button>
|
<Button x:Name="ButtonQuicUUID" Content="更新" Grid.Column="4" Grid.Row="2" Margin="2" Click="ButtonQuicUUID_Click"></Button>
|
||||||
<TextBlock x:Name="TextBlockMkcpUUID" Text="启用mKCP密钥,可增强抗识别,删除留空则禁用,要求版本4.24.2以上" TextWrapping="Wrap" Grid.Column="5" Grid.Row="2" Grid.ColumnSpan="2"></TextBlock>
|
<TextBlock x:Name="TextBlockMkcpUUID" Text="启用mKCP密钥,可增强抗识别,留空则禁用,要求版本4.24.2以上,V2rayN暂不支持" TextWrapping="Wrap" Grid.Column="5" Grid.Row="2" Grid.ColumnSpan="2"></TextBlock>
|
||||||
|
|
||||||
<TextBlock x:Name="TextBlockPath" Text="路径:" Grid.Column="0" Grid.Row="3" Grid.ColumnSpan="1"></TextBlock>
|
<TextBlock x:Name="TextBlockPath" Text="路径:" Grid.Column="0" Grid.Row="3" Grid.ColumnSpan="1"></TextBlock>
|
||||||
<TextBox x:Name="TextBoxPath" Grid.Column="1" Grid.Row="3" Grid.ColumnSpan="3" Margin="3"></TextBox>
|
<TextBox x:Name="TextBoxPath" Grid.Column="1" Grid.Row="3" Grid.ColumnSpan="3" Margin="3"></TextBox>
|
@ -88,6 +88,37 @@ namespace ProxySU
|
|||||||
// MainWindow.ReceiveConfigurationParameters[4] = TextBoxDomain.Text.ToString();
|
// MainWindow.ReceiveConfigurationParameters[4] = TextBoxDomain.Text.ToString();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
//VLESS+TCP+TLS+Caddy模式选中
|
||||||
|
else if (RadioButtonVlessTcpTlsWeb.IsChecked == true)
|
||||||
|
{
|
||||||
|
if (string.IsNullOrEmpty(TextBoxDomain.Text.ToString()) == true)
|
||||||
|
{
|
||||||
|
MessageBox.Show("域名不能为空!");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
//传递模板类型
|
||||||
|
MainWindow.ReceiveConfigurationParameters[0] = "VlessTcpTlsWeb";
|
||||||
|
|
||||||
|
//传递域名
|
||||||
|
MainWindow.ReceiveConfigurationParameters[4] = TextBoxDomain.Text.ToString();
|
||||||
|
//传递伪装网站
|
||||||
|
MainWindow.ReceiveConfigurationParameters[7] = TextBoxMaskSites.Text.ToString();
|
||||||
|
//处理伪装网站域名中的前缀
|
||||||
|
DisguiseURLprocessing();
|
||||||
|
//if (TextBoxMaskSites.Text.ToString().Length >= 7)
|
||||||
|
//{
|
||||||
|
// string testDomain = TextBoxMaskSites.Text.Substring(0, 7);
|
||||||
|
// if (String.Equals(testDomain, "https:/") || String.Equals(testDomain, "http://"))
|
||||||
|
// {
|
||||||
|
// //MessageBox.Show(testDomain);
|
||||||
|
// MainWindow.ReceiveConfigurationParameters[7] = TextBoxMaskSites.Text.Replace("/", "\\/");
|
||||||
|
// }
|
||||||
|
// else
|
||||||
|
// {
|
||||||
|
// MainWindow.ReceiveConfigurationParameters[7] = "http:\\/\\/" + TextBoxMaskSites.Text;
|
||||||
|
// }
|
||||||
|
//}
|
||||||
|
}
|
||||||
//webSocket模式被选中
|
//webSocket模式被选中
|
||||||
else if (RadioButtonWebSocket.IsChecked == true)
|
else if (RadioButtonWebSocket.IsChecked == true)
|
||||||
{
|
{
|
||||||
@ -129,19 +160,20 @@ namespace ProxySU
|
|||||||
//传递伪装网站
|
//传递伪装网站
|
||||||
MainWindow.ReceiveConfigurationParameters[7] = TextBoxMaskSites.Text.ToString();
|
MainWindow.ReceiveConfigurationParameters[7] = TextBoxMaskSites.Text.ToString();
|
||||||
//处理伪装网站域名中的前缀
|
//处理伪装网站域名中的前缀
|
||||||
if (TextBoxMaskSites.Text.ToString().Length >= 7)
|
DisguiseURLprocessing();
|
||||||
{
|
//if (TextBoxMaskSites.Text.ToString().Length >= 7)
|
||||||
string testDomain = TextBoxMaskSites.Text.Substring(0, 7);
|
//{
|
||||||
if (String.Equals(testDomain, "https:/") || String.Equals(testDomain, "http://"))
|
// string testDomain = TextBoxMaskSites.Text.Substring(0, 7);
|
||||||
{
|
// if (String.Equals(testDomain, "https:/") || String.Equals(testDomain, "http://"))
|
||||||
//MessageBox.Show(testDomain);
|
// {
|
||||||
MainWindow.ReceiveConfigurationParameters[7] = TextBoxMaskSites.Text.Replace("/", "\\/");
|
// //MessageBox.Show(testDomain);
|
||||||
}
|
// MainWindow.ReceiveConfigurationParameters[7] = TextBoxMaskSites.Text.Replace("/", "\\/");
|
||||||
else
|
// }
|
||||||
{
|
// else
|
||||||
MainWindow.ReceiveConfigurationParameters[7] = "http:\\/\\/" + TextBoxMaskSites.Text;
|
// {
|
||||||
}
|
// MainWindow.ReceiveConfigurationParameters[7] = "http:\\/\\/" + TextBoxMaskSites.Text;
|
||||||
}
|
// }
|
||||||
|
//}
|
||||||
}
|
}
|
||||||
//WebSocket+TLS(自签证书)模式被选中
|
//WebSocket+TLS(自签证书)模式被选中
|
||||||
else if (RadioButtonWebSocketTLSselfSigned.IsChecked == true)
|
else if (RadioButtonWebSocketTLSselfSigned.IsChecked == true)
|
||||||
@ -187,19 +219,20 @@ namespace ProxySU
|
|||||||
//传递伪装网站
|
//传递伪装网站
|
||||||
MainWindow.ReceiveConfigurationParameters[7] = TextBoxMaskSites.Text.ToString();
|
MainWindow.ReceiveConfigurationParameters[7] = TextBoxMaskSites.Text.ToString();
|
||||||
//处理伪装网站域名中的前缀
|
//处理伪装网站域名中的前缀
|
||||||
if (TextBoxMaskSites.Text.ToString().Length >= 7)
|
DisguiseURLprocessing();
|
||||||
{
|
//if (TextBoxMaskSites.Text.ToString().Length >= 7)
|
||||||
string testDomain = TextBoxMaskSites.Text.Substring(0, 7);
|
//{
|
||||||
if (String.Equals(testDomain, "https:/") || String.Equals(testDomain, "http://"))
|
// string testDomain = TextBoxMaskSites.Text.Substring(0, 7);
|
||||||
{
|
// if (String.Equals(testDomain, "https:/") || String.Equals(testDomain, "http://"))
|
||||||
//MessageBox.Show(testDomain);
|
// {
|
||||||
MainWindow.ReceiveConfigurationParameters[7] = TextBoxMaskSites.Text.Replace("/", "\\/");
|
// //MessageBox.Show(testDomain);
|
||||||
}
|
// MainWindow.ReceiveConfigurationParameters[7] = TextBoxMaskSites.Text.Replace("/", "\\/");
|
||||||
else
|
// }
|
||||||
{
|
// else
|
||||||
MainWindow.ReceiveConfigurationParameters[7] = "http:\\/\\/" + TextBoxMaskSites.Text;
|
// {
|
||||||
}
|
// MainWindow.ReceiveConfigurationParameters[7] = "http:\\/\\/" + TextBoxMaskSites.Text;
|
||||||
}
|
// }
|
||||||
|
//}
|
||||||
}
|
}
|
||||||
//http2(自签证书)模式被选中
|
//http2(自签证书)模式被选中
|
||||||
else if (RadioButtonHTTP2selfSigned.IsChecked == true)
|
else if (RadioButtonHTTP2selfSigned.IsChecked == true)
|
||||||
@ -342,6 +375,25 @@ namespace ProxySU
|
|||||||
|
|
||||||
private void ButtondCancel_Click(object sender, RoutedEventArgs e) => Close();
|
private void ButtondCancel_Click(object sender, RoutedEventArgs e) => Close();
|
||||||
|
|
||||||
|
|
||||||
|
//伪装网站处理
|
||||||
|
private void DisguiseURLprocessing()
|
||||||
|
{
|
||||||
|
//处理伪装网站域名中的前缀
|
||||||
|
if (TextBoxMaskSites.Text.ToString().Length >= 7)
|
||||||
|
{
|
||||||
|
string testDomain = TextBoxMaskSites.Text.Substring(0, 7);
|
||||||
|
if (String.Equals(testDomain, "https:/") || String.Equals(testDomain, "http://"))
|
||||||
|
{
|
||||||
|
//MessageBox.Show(testDomain);
|
||||||
|
MainWindow.ReceiveConfigurationParameters[7] = TextBoxMaskSites.Text.Replace("/", "\\/");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
MainWindow.ReceiveConfigurationParameters[7] = "http:\\/\\/" + TextBoxMaskSites.Text;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
#region 其他设置中的界面控制
|
#region 其他设置中的界面控制
|
||||||
private void RadioButtonTCP_Checked(object sender, RoutedEventArgs e)
|
private void RadioButtonTCP_Checked(object sender, RoutedEventArgs e)
|
||||||
{
|
{
|
Binary file not shown.
@ -1,46 +1,46 @@
|
|||||||
{
|
{
|
||||||
"inbounds": [
|
"inbounds": [
|
||||||
{
|
{
|
||||||
"protocol": "http",
|
"protocol": "http",
|
||||||
"port": 1081
|
"port": 1081
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"port": 1080,
|
"port": 1080,
|
||||||
"protocol": "socks",
|
"protocol": "socks",
|
||||||
"sniffing": {
|
"sniffing": {
|
||||||
"enabled": true,
|
"enabled": true,
|
||||||
"destOverride": [
|
"destOverride": [
|
||||||
"http",
|
"http",
|
||||||
"tls"
|
"tls"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"settings": {
|
"settings": {
|
||||||
"auth": "noauth"
|
"auth": "noauth"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"outbounds": [
|
"outbounds": [
|
||||||
{
|
{
|
||||||
"protocol": "vmess",
|
"protocol": "vmess",
|
||||||
"settings": {
|
"settings": {
|
||||||
"vnext": [
|
"vnext": [
|
||||||
{
|
{
|
||||||
"address": null,
|
"address": null,
|
||||||
"port": null,
|
"port": null,
|
||||||
"users": [
|
"users": [
|
||||||
{
|
{
|
||||||
"id": null,
|
"id": null,
|
||||||
"alterId": 16,
|
"alterId": 16,
|
||||||
"security": "auto"
|
"security": "auto"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"streamSettings": {
|
"streamSettings": {
|
||||||
"network": "tcp",
|
"network": "tcp",
|
||||||
"security": "tls"
|
"security": "tls"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
43
TemplateConfg/tcp_vless_tls_caddy_cilent_config.json
Normal file
43
TemplateConfg/tcp_vless_tls_caddy_cilent_config.json
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
{
|
||||||
|
"log": {
|
||||||
|
"loglevel": "warning"
|
||||||
|
},
|
||||||
|
"inbounds": [
|
||||||
|
{
|
||||||
|
"protocol": "http",
|
||||||
|
"port": 1081
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"port": 1080,
|
||||||
|
"listen": "127.0.0.1",
|
||||||
|
"protocol": "socks",
|
||||||
|
"settings": {
|
||||||
|
"udp": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"outbounds": [
|
||||||
|
{
|
||||||
|
"protocol": "vless",
|
||||||
|
"settings": {
|
||||||
|
"vnext": [
|
||||||
|
{
|
||||||
|
"address": null,
|
||||||
|
"port": 443,
|
||||||
|
"users": [
|
||||||
|
{
|
||||||
|
"id": null,
|
||||||
|
"encryption": "none",
|
||||||
|
"level": 0
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"streamSettings": {
|
||||||
|
"network": "tcp",
|
||||||
|
"security": "tls"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
42
TemplateConfg/tcp_vless_tls_caddy_server_config.json
Normal file
42
TemplateConfg/tcp_vless_tls_caddy_server_config.json
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
{
|
||||||
|
"log": {
|
||||||
|
"loglevel": "warning"
|
||||||
|
},
|
||||||
|
"inbounds": [
|
||||||
|
{
|
||||||
|
"port": 443,
|
||||||
|
"protocol": "vless",
|
||||||
|
"settings": {
|
||||||
|
"clients": [
|
||||||
|
{
|
||||||
|
"id": null
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"decryption": "none",
|
||||||
|
"fallback": {
|
||||||
|
"port": 88
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"streamSettings": {
|
||||||
|
"network": "tcp",
|
||||||
|
"security": "tls",
|
||||||
|
"tlsSettings": {
|
||||||
|
"alpn": [
|
||||||
|
"http/1.1"
|
||||||
|
],
|
||||||
|
"certificates": [
|
||||||
|
{
|
||||||
|
"certificateFile": "/usr/local/etc/v2ray/ssl/v2ray_ssl.crt",
|
||||||
|
"keyFile": "/usr/local/etc/v2ray/ssl/v2ray_ssl.key"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"outbounds": [
|
||||||
|
{
|
||||||
|
"protocol": "freedom"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user