1
0
mirror of https://github.com/proxysu/ProxySU.git synced 2024-11-22 05:06:08 +03:00

v4.0.1 release

This commit is contained in:
next-autumn 2021-05-26 16:50:19 +08:00
parent 880494a331
commit b614bc676c
299 changed files with 0 additions and 65290 deletions

BIN
7z/7z.exe

Binary file not shown.

View File

@ -1 +0,0 @@
这个7z.exe文件只是为了生成Release.zip方便。可有可无。ProxySU并不调用。

View File

@ -3,15 +3,6 @@ Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 16
VisualStudioVersion = 16.0.31005.135
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ProxySU", "ProxySU\ProxySU.csproj", "{DD5505BC-E7F1-4D03-ABC7-B636E893FC09}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ProxySU_Core", "ProxySU_Core\ProxySU_Core.csproj", "{B066015C-D347-4493-92F1-6556D3863996}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{18714411-764D-47E5-AFE6-A96200B7CE41}"
ProjectSection(SolutionItems) = preProject
.editorconfig = .editorconfig
EndProjectSection
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Libs", "Libs", "{CE908112-DB46-4B91-8236-9139A19D66E9}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ProxySuper.WPF", "ProxySuper.WPF\ProxySuper.WPF.csproj", "{B083EBFD-2925-46C9-8B00-E2C1300CEBA1}"
@ -24,14 +15,6 @@ Global
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{DD5505BC-E7F1-4D03-ABC7-B636E893FC09}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{DD5505BC-E7F1-4D03-ABC7-B636E893FC09}.Debug|Any CPU.Build.0 = Debug|Any CPU
{DD5505BC-E7F1-4D03-ABC7-B636E893FC09}.Release|Any CPU.ActiveCfg = Release|Any CPU
{DD5505BC-E7F1-4D03-ABC7-B636E893FC09}.Release|Any CPU.Build.0 = Release|Any CPU
{B066015C-D347-4493-92F1-6556D3863996}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{B066015C-D347-4493-92F1-6556D3863996}.Debug|Any CPU.Build.0 = Debug|Any CPU
{B066015C-D347-4493-92F1-6556D3863996}.Release|Any CPU.ActiveCfg = Release|Any CPU
{B066015C-D347-4493-92F1-6556D3863996}.Release|Any CPU.Build.0 = Release|Any CPU
{B083EBFD-2925-46C9-8B00-E2C1300CEBA1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{B083EBFD-2925-46C9-8B00-E2C1300CEBA1}.Debug|Any CPU.Build.0 = Debug|Any CPU
{B083EBFD-2925-46C9-8B00-E2C1300CEBA1}.Release|Any CPU.ActiveCfg = Release|Any CPU

View File

@ -1,15 +0,0 @@
<Application x:Class="ProxySU.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:ProxySU"
StartupUri="MainWindow.xaml">
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Translations\ProxySU.zh-CN.xaml" />
<ResourceDictionary Source="Translations\ProxySU.en-US.xaml" />
<ResourceDictionary Source="Translations\ProxySU.zh-TW.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
</Application>

View File

@ -1,16 +0,0 @@
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Windows;
namespace ProxySU
{
/// <summary>
/// App.xaml 的交互逻辑
/// </summary>
public partial class App : Application
{
}
}

View File

@ -1,86 +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.Navigation;
using System.Windows.Shapes;
using System.Text.RegularExpressions;
using System.Threading;
using System.Threading.Tasks;
using System.IO;
using Renci.SshNet;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using Newtonsoft.Json.Serialization;
using System.Drawing;
using QRCoder;
using System.Net;
using System.ComponentModel;
using System.Net.Sockets;
using System.Runtime.InteropServices;
using System.Runtime;
using System.Globalization;
using Microsoft.Win32;
using System.Security;
namespace ProxySU
{
class ClassModel
{
//检测域名是否为空
public static bool TestDomainIsEmpty(string domainStr)
{
domainStr = domainStr.Trim();
if (string.IsNullOrEmpty(domainStr) == true)
{
//****** "域名不能为空,请检查相关参数设置!" ******
MessageBox.Show(Application.Current.FindResource("MessageBoxShow_DomainNotEmpty").ToString());
return false;
}
else
{
return true;
}
}
//伪装网站预处理
public static bool PreDomainMask(string uri)
{
uri = uri.Trim();
if (String.IsNullOrEmpty(uri) == false)
{
if (uri.Contains("/") == true)
{
//MessageBox.Show("伪装网址输入格式错误!请重新输入!");
MessageBox.Show(Application.Current.FindResource("MessageBoxShow_MaskSitesToolTip").ToString());
return false;
}
}
return true;
}
//伪装网址的处理
public static string DisguiseURLprocessing(string fakeUrl)
{
fakeUrl = fakeUrl.Trim();
return fakeUrl;
//处理伪装网站域名中的前缀
//if (fakeUrl.Length >= 7)
//{
// string testDomainMask = fakeUrl.Substring(0, 7);
// if (String.Equals(testDomainMask, "https:/") || String.Equals(testDomainMask, "http://"))
// {
// var uri = new Uri(fakeUrl);
// return uri.Host;
// }
//}
}
}
}

View File

@ -1,849 +0,0 @@
<Window x:Class="ProxySU.MainWindow"
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="ProxySU - v2.5.6" Height="720" Width="660">
<!--以下样式参考自https://yq.aliyun.com/articles/331878
https://docs.microsoft.co/en-us/dotnet/desktop-wpf/fundamentals/styles-templates-overview-->
<Window.Resources>
<Style BasedOn="{StaticResource {x:Type TextBox}}"
TargetType="TextBox"
x:Key="TitleText">
<Style.Triggers>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="Text" Value=""/>
<Condition Property="TextBox.IsFocused" Value="false"/>
</MultiTrigger.Conditions>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate>
<Border BorderThickness="1" BorderBrush="Gray" Margin="0">
<TextBlock x:Name="MainTextBlock" Text="{TemplateBinding TextBox.Tag}" Width="{TemplateBinding TextBox.ActualWidth}" Foreground="Gray" VerticalAlignment="Center" HorizontalAlignment="Left"/>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</MultiTrigger>
</Style.Triggers>
</Style>
</Window.Resources>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="25"></RowDefinition>
<RowDefinition></RowDefinition>
</Grid.RowDefinitions>
<Grid Grid.Row="0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="0.5*"></ColumnDefinition>
<ColumnDefinition Width="1.6*"></ColumnDefinition>
<ColumnDefinition Width="0.5*"></ColumnDefinition>
<ColumnDefinition Width="0.6*"></ColumnDefinition>
<ColumnDefinition Width="0.7*"></ColumnDefinition>
</Grid.ColumnDefinitions>
<TextBlock x:Name="TextBlockLastVersionProxySU" Foreground="Red" Grid.Column="0" Margin="3" Visibility="Hidden" HorizontalAlignment="Right" ></TextBlock>
<TextBlock x:Name="TextBlockNewVersionReminder" Text="{DynamicResource TextBlockNewVersionReminder}" Grid.Column="1" Grid.ColumnSpan="1" Margin="3" Visibility="Hidden"></TextBlock>
<TextBlock x:Name="TextBlockNewVersionDown" Text="{DynamicResource TextBlockNewVersionDown}" Grid.Column="1" Grid.ColumnSpan="1" Margin="3" Visibility="Hidden"></TextBlock>
<Button x:Name="ButtonUpgradeProxySU" Content="{DynamicResource ButtonUpgradeProxySU}" Grid.Column="2" Margin="3" Visibility="Hidden" Click="ButtonUpgradeProxySU_Click"></Button>
<TextBlock Grid.Column="3" Text="{DynamicResource MainWindowsLanguage}" HorizontalAlignment="Right" VerticalAlignment="Center" Margin="5"></TextBlock>
<ComboBox x:Name="ComboBoxLanguage" Grid.Column="4" Height="20" Width="80" SelectionChanged="ComboBoxLanguage_SelectionChanged"></ComboBox>
</Grid>
<Grid Grid.Row="1">
<TabControl>
<TabItem Header="{DynamicResource TabItemHeaderAppDeployment}" Width="110" Height="30">
<Grid>
<Grid.RowDefinitions>
<RowDefinition></RowDefinition>
<RowDefinition Height="40"></RowDefinition>
<RowDefinition Height="1.3*"></RowDefinition>
<RowDefinition Height="1.8*"></RowDefinition>
</Grid.RowDefinitions>
<Grid Grid.Row="0">
<Grid.RowDefinitions>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition Height="2*"></RowDefinition>
</Grid.RowDefinitions>
<Grid Grid.Row="0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="50"></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition Width="70"></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition Width="50"></ColumnDefinition>
<ColumnDefinition Width="110"></ColumnDefinition>
</Grid.ColumnDefinitions>
<TextBlock Text="{DynamicResource TextBlockHostName}" HorizontalAlignment="Right" VerticalAlignment="Center" Margin="5" Grid.Column="0" ></TextBlock>
<TextBox x:Name="TextBoxHost" Text="" Style="{StaticResource TitleText}" Tag="{DynamicResource TextBoxHostNamePrompt}" Margin="3" Grid.Column="1"/>
<TextBlock Text="{DynamicResource TextBlockHostPart}" HorizontalAlignment="Right" VerticalAlignment="Center" Margin="5" Grid.Column="2"></TextBlock>
<TextBox x:Name="TextBoxPort" CommandManager.PreviewExecuted="TextBoxPort_PreviewExecuted" Text="22" Margin="3" Grid.Column="3" PreviewTextInput="TextBoxPort_PreviewTextInput"/>
<RadioButton x:Name="RadioButtonPasswordLogin" GroupName="CertIsYesNo" Content="{DynamicResource RadioButtonPasswordLogin}" Grid.Column="5" Checked="RadioButtonPasswordLogin_Checked" VerticalAlignment="Center"></RadioButton>
</Grid>
<Grid Grid.Row="1">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="50"></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition Width="70"></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition Width="50"></ColumnDefinition>
<ColumnDefinition Width="110"></ColumnDefinition>
</Grid.ColumnDefinitions>
<TextBlock Text="{DynamicResource TextBlockHostUser}" HorizontalAlignment="Right" VerticalAlignment="Center" Margin="3" Grid.Column="0" Grid.Row="1"></TextBlock>
<TextBox x:Name="TextBoxUserName" Text="root" Margin="3" Grid.Column="1" Grid.Row="1"/>
<TextBlock x:Name="TextBlockPassword" Text="{DynamicResource TextBlockHostPassword}" HorizontalAlignment="Right" VerticalAlignment="Center" Margin="3" Grid.Column="2" Grid.Row="1"></TextBlock>
<TextBlock x:Name="TextBlockCert" Text="{DynamicResource TextBlockHostCert}" HorizontalAlignment="Right" VerticalAlignment="Center" Margin="3" Grid.Column="2" Grid.Row="1"></TextBlock>
<PasswordBox x:Name="PasswordBoxHostPassword" Password="" Margin="3" Grid.Column="3" Grid.Row="1"/>
<TextBox x:Name="TextBoxCertFilePath" Text="" Style="{StaticResource TitleText}" Tag="{DynamicResource TextBoxKeyNotEmptyPrompt}" Margin="3" Grid.Column="3"/>
<Button x:Name="ButtonOpenFileDialog" Content="{DynamicResource ButtonOpenFileDialog}" Margin="3" Grid.Column="4" Grid.Row="2" Click="ButtonOpenFileDialog_Click"></Button>
<RadioButton x:Name="RadioButtonCertLogin" GroupName="CertIsYesNo" Content="{DynamicResource RadioButtonCertLogin}" Grid.Column="5" Checked="RadioButtonCertLogin_Checked" VerticalAlignment="Center"></RadioButton>
</Grid>
<Grid Grid.Row="2">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="75"></ColumnDefinition>
<ColumnDefinition Width="70"></ColumnDefinition>
<ColumnDefinition Width="70"></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition Width="1.2*"></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
</Grid.ColumnDefinitions>
<RadioButton x:Name="RadioButtonNoProxy" GroupName="ProxyIsYesNo" Content="{DynamicResource RadioButtonNoProxy}" Grid.Column="0" Grid.Row="0" Checked="RadioButtonNoProxy_Checked" Unchecked="RadioButtonNoProxy_Unchecked" VerticalAlignment="Center" HorizontalAlignment="Center"/>
<RadioButton x:Name="RadioButtonHttp" GroupName="ProxyIsYesNo" Content="Http" Grid.Column="1" Grid.Row="0" VerticalAlignment="Center" HorizontalAlignment="Center"/>
<RadioButton x:Name="RadioButtonSocks5" GroupName="ProxyIsYesNo" Content="Socks5" Grid.Column="2" Grid.Row="0" VerticalAlignment="Center" HorizontalAlignment="Center"/>
<RadioButton x:Name="RadioButtonSocks4" GroupName="ProxyIsYesNo" Content="Socks4" Visibility="Collapsed" Grid.Column="3" Grid.Row="0" VerticalAlignment="Center" />
<RadioButton x:Name="RadioButtonProxyNoLogin" Content="{DynamicResource RadioButtonProxyNoLogin}" GroupName="proxyYesNOLogin" Grid.Column="4" Checked="RadioButtonProxyNoLogin_Checked" VerticalAlignment="Center" ></RadioButton>
<RadioButton x:Name="RadiobuttonProxyYesLogin" Content="{DynamicResource RadiobuttonProxyYesLogin}" GroupName="proxyYesNOLogin" Grid.Column="5" Checked="RadiobuttonProxyYesLogin_Checked" VerticalAlignment="Center" ></RadioButton>
</Grid>
<Grid Grid.Row="3">
<Grid.RowDefinitions>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="80"></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition Width="70"></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition Width="70"></ColumnDefinition>
<ColumnDefinition Width="80"></ColumnDefinition>
</Grid.ColumnDefinitions>
<!--代理设置-->
<TextBlock x:Name="TextBlockProxyHost" IsEnabled="False" Text="{DynamicResource TextBlockProxyHost}" HorizontalAlignment="Right" Margin="5,10,0,5" Grid.Column="0" Grid.Row="0" VerticalAlignment="Center" />
<TextBox x:Name="TextBoxProxyHost" IsEnabled="False" Text="127.0.0.1" Margin="3" Grid.Column="1" Grid.Row="0" />
<TextBlock x:Name="TextBlockProxyPort" IsEnabled="False" Text="{DynamicResource TextBlockHostPart}" HorizontalAlignment="Right" VerticalAlignment="Center" Margin="5" Grid.Column="2" Grid.Row="0"></TextBlock>
<TextBox x:Name="TextBoxProxyPort" IsEnabled="False" CommandManager.PreviewExecuted="TextBoxPort_PreviewExecuted" Text="1080" Margin="3" Grid.Column="3" Grid.Row="0" PreviewTextInput="TextBoxPort_PreviewTextInput" />
<!--代理用户名密码设置-->
<TextBlock x:Name="TextBlockProxyUser" IsEnabled="False" Text="{DynamicResource TextBlockHostUser}" HorizontalAlignment="Right" VerticalAlignment="Center" Margin="5" Grid.Column="0" Grid.Row="1" ></TextBlock>
<TextBlock x:Name="TextBlockProxyPassword" IsEnabled="False" Text="{DynamicResource TextBlockHostPassword}" HorizontalAlignment="Right" VerticalAlignment="Center" Margin="5" Grid.Column="2" Grid.Row="1" ></TextBlock>
<TextBox x:Name="TextBoxProxyUserName" IsEnabled="False" Text="" Margin="3" Grid.Column="1" Grid.Row="1" />
<PasswordBox x:Name="PasswordBoxProxyPassword" IsEnabled="False" Password="" Margin="3" Grid.Column="3" Grid.Row="1"></PasswordBox>
</Grid>
</Grid>
<Grid Grid.Row="1">
<StackPanel Margin="10,0,0,0" Orientation="Horizontal" VerticalAlignment="Center">
<TextBlock Foreground="Red" x:Name="AcmeEmailLabel" Text="Email:" VerticalAlignment="Center" />
<TextBox Margin="10,0,0,0" Height="20" Width="200" x:Name="AcmeEmailTextBox" />
<TextBlock Margin="10,0,0,0" Text="{DynamicResource AcmeEmailDesc}" Foreground="Red" />
</StackPanel>
</Grid>
<Grid Grid.Row="2">
<Grid.RowDefinitions>
<RowDefinition Height="20"></RowDefinition>
<RowDefinition Height="20"></RowDefinition>
<RowDefinition></RowDefinition>
</Grid.RowDefinitions>
<Button x:Name="ButtonSaveInstalledLog" Content="{DynamicResource ButtonSaveInstalledLog}" Margin="0,0,10,0" Width="140" HorizontalAlignment="Right" Click="ButtonSaveInstalledLog_Click"></Button>
<TextBlock x:Name="TextBlockSetUpProcessing" Text="{DynamicResource TextBlockSetUpProcessing}" Foreground="Blue" HorizontalAlignment="Center" VerticalAlignment="Center" Grid.Row="0"></TextBlock>
<ProgressBar x:Name="ProgressBarSetUpProcessing" Minimum="0" Maximum="100" Value="{Binding InsertBindingHere}" Margin="10,0,10,3" Grid.Row="1"></ProgressBar>
<TextBlock Text="{Binding ElementName=ProgressBarSetUpProcessing, Path=Value, StringFormat={}{0:0}%}" HorizontalAlignment="Center" VerticalAlignment="Center" Grid.Row="1"/>
<TextBox x:Name="TextBoxMonitorCommandResults" IsReadOnly="True" TextWrapping="Wrap" AcceptsReturn="True" VerticalScrollBarVisibility="Auto" Grid.Row="2" Margin="10,0,10,3"></TextBox>
</Grid>
<Grid Grid.Row="3">
<TabControl Grid.Column="0" Grid.Row="9" Grid.ColumnSpan="4" Grid.RowSpan="3">
<TabItem Header="Xray" Width="60" Height="30">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="50"></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition Height="60"></RowDefinition>
</Grid.RowDefinitions>
<!--<Button x:Name="ButtonGuideConfiguration" Visibility="Visible" Content="启用向导" Grid.Column="0" Grid.Row="0" Click="ButtonGuideConfiguration_Click"></Button>
<TextBlock Text="通过向导生成配置文件" Visibility="Visible" Grid.Column="0" Grid.Row="1" Grid.RowSpan="2" HorizontalAlignment="Center"></TextBlock>-->
<Button x:Name="ButtonTemplateConfigurationXray" Content="{DynamicResource ButtonTemplateConfigurationXray}" Grid.Column="1" Grid.Row="0" Margin="5" Click="ButtonTemplateConfigurationXray_Click"></Button>
<!--<TextBlock Text="模板库" Grid.Column="1" Grid.Row="1" Grid.RowSpan="2" HorizontalAlignment="Center"></TextBlock>-->
<!--<Button x:Name="ButtonAdvancedConfiguration" Visibility="Visible" Content="配置编辑器" Grid.Column="2" Grid.Row="0" Click="ButtonAdvancedConfiguration_Click"></Button>
<TextBlock Text="配置文件高级生成器&#x0a;(有经验用户可以使用)" Visibility="Visible" Grid.Column="2" Grid.Row="1" Grid.RowSpan="2" HorizontalAlignment="Center"></TextBlock>-->
<!--<RadioButton x:Name="RadioButtonGuideConfiguration" Content="向导生成配置" Grid.Column="0" Grid.Row="0"></RadioButton>
<RadioButton x:Name="RadioButtonTemplateConfiguration" Content="模板配置" Grid.Column="0" Grid.Row="1"></RadioButton>
<RadioButton x:Name="RadioButtonAdvancedConfiguration" Content="高级配置" Grid.Column="0" Grid.Row="2"></RadioButton>
<TextBox x:Name="TextBoxJsonPath" Margin="10" Grid.Column="1" Grid.Row="1"></TextBox>
<Button x:Name="ButtonSetConfiguration" Margin="6" Content="配置" Grid.Column="2" Grid.Row="2" Click="ButtonSetConfiguration_Click"></Button>-->
<Grid Grid.Column="0" Grid.Row="1" Grid.ColumnSpan="3">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="0.5*"></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
</Grid.RowDefinitions>
<TextBlock Text="{DynamicResource TextBlockCurrentlySelectedPlan}" Grid.Column="0" Grid.Row="0" HorizontalAlignment="Center" VerticalAlignment="Center" ></TextBlock>
<TextBlock x:Name="TextBlockCurrentlySelectedPlanXray" Text="{DynamicResource TextBlockCurrentlySelectedPlanNo}" Grid.Column="1" Grid.Row="0" HorizontalAlignment="Left" VerticalAlignment="Center"></TextBlock>
<Grid x:Name="GridXrayCurrentlyPlan" Grid.Column="0" Grid.Row="1" Grid.ColumnSpan="2" Grid.RowSpan="5">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="0.5*"></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
</Grid.RowDefinitions>
<TextBlock x:Name="TextBlockXrayShowPort" Text="{DynamicResource TextBlockV2RayServerPort}" Grid.Column="0" Grid.Row="0" HorizontalAlignment="Center" VerticalAlignment="Center"></TextBlock>
<TextBlock x:Name="TextBlockCurrentlySelectedPlanPortXray" Grid.Column="1" Grid.Row="0" HorizontalAlignment="Left" VerticalAlignment="Center"></TextBlock>
<TextBlock x:Name="TextBlockXrayShowUUID" Text="UUID:" Grid.Column="0" Grid.Row="1" HorizontalAlignment="Center" VerticalAlignment="Center"></TextBlock>
<TextBlock x:Name="TextBlockCurrentlySelectedPlanUUIDXray" Grid.Column="1" Grid.Row="1" HorizontalAlignment="Left" VerticalAlignment="Center"></TextBlock>
<TextBlock x:Name="TextBlockXrayShowPathSeedKey" Text="Path/mKCP Seed/Quic Key" Visibility="Collapsed" Grid.Column="0" Grid.Row="2" HorizontalAlignment="Center" VerticalAlignment="Center"></TextBlock>
<TextBlock x:Name="TextBlockCurrentlySelectedPlanPathSeedKeyXray" Visibility="Collapsed" Grid.Column="1" Grid.Row="2" HorizontalAlignment="Left" VerticalAlignment="Center"></TextBlock>
<Grid x:Name="GridVlessVmessXtlsTcpWsXray" Grid.Column="0" Grid.Row="2" Grid.ColumnSpan="2">
<Grid.ColumnDefinitions>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
</Grid.ColumnDefinitions>
<TextBlock x:Name="TextBlockPathVlessWsXray" Text="{DynamicResource TextBlockV2RayVlessWsPath}" Grid.Column="0" Grid.Row="3" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
<TextBlock x:Name="TextBlockBoxPathVlessWSXray" Grid.Column="1" Grid.Row="3" Margin="0"></TextBlock>
<TextBlock x:Name="TextBlockPathVmessTcpXray" Text="{DynamicResource TextBlockV2RayVmessTcpPath}" Grid.Column="2" Grid.Row="3" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
<TextBlock x:Name="TextBlockBoxPathVmessTcpXray" Grid.Column="3" Grid.Row="3" Margin="0"></TextBlock>
<TextBlock x:Name="TextBlockPathVmessWsXray" Text="{DynamicResource TextBlockV2RayVmessWsPath}" Grid.Column="4" Grid.Row="3" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
<TextBlock x:Name="TextBlockBoxPathVmessWSXray" Grid.Column="5" Grid.Row="3" Margin="0"></TextBlock>
</Grid>
<TextBlock x:Name="TextBlockXrayShowCurrentlySelectedPlanDomain" Text="Domain/Quic Encrypt" Grid.Column="0" Grid.Row="3" HorizontalAlignment="Center" VerticalAlignment="Center"></TextBlock>
<TextBlock x:Name="TextBlockCurrentlySelectedPlanDomainXray" Grid.Column="1" Grid.Row="3" HorizontalAlignment="Left" VerticalAlignment="Center"></TextBlock>
<TextBlock x:Name="TextBlockXrayShowCurrentlySelectedPlanFakeWebsite" Text="{DynamicResource TextBlockV2RayMaskSites}" Grid.Column="0" Grid.Row="4" HorizontalAlignment="Center" VerticalAlignment="Center"></TextBlock>
<TextBlock x:Name="TextBlockCurrentlySelectedPlanFakeWebsiteXray" Grid.Column="1" Grid.Row="4" HorizontalAlignment="Left" VerticalAlignment="Center"></TextBlock>
</Grid>
</Grid>
<Button x:Name="ButtonXraySetUP" Content="{DynamicResource Button_LoginXray}" Margin="10" Grid.Column="0" Grid.Row="2" Click="ButtonXraySetUP_Click"></Button>
<Button x:Name="ButtonUpdateXray" Content="{DynamicResource ButtonUpdateXray}" Margin="10" Grid.Column="1" Grid.Row="2" Click="ButtonUpdateXray_Click"></Button>
<Button x:Name="Button_Xraycanel" Content="{DynamicResource Button_canel}" Margin="10" Grid.Column="2" Grid.Row="2" Click="Button_canel_Click"></Button>
</Grid>
</TabItem>
<TabItem Header="V2Ray" Width="60" Height="30">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="50"></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition Height="60"></RowDefinition>
</Grid.RowDefinitions>
<!--<Button x:Name="ButtonGuideConfiguration" Visibility="Visible" Content="启用向导" Grid.Column="0" Grid.Row="0" Click="ButtonGuideConfiguration_Click"></Button>
<TextBlock Text="通过向导生成配置文件" Visibility="Visible" Grid.Column="0" Grid.Row="1" Grid.RowSpan="2" HorizontalAlignment="Center"></TextBlock>-->
<Button x:Name="ButtonTemplateConfiguration" Content="{DynamicResource ButtonV2RayTemplateConfiguration}" Grid.Column="1" Grid.Row="0" Margin="5" Click="ButtonTemplateConfiguration_Click"></Button>
<!--<TextBlock Text="模板库" Grid.Column="1" Grid.Row="1" Grid.RowSpan="2" HorizontalAlignment="Center"></TextBlock>-->
<!--<Button x:Name="ButtonAdvancedConfiguration" Visibility="Visible" Content="配置编辑器" Grid.Column="2" Grid.Row="0" Click="ButtonAdvancedConfiguration_Click"></Button>
<TextBlock Text="配置文件高级生成器&#x0a;(有经验用户可以使用)" Visibility="Visible" Grid.Column="2" Grid.Row="1" Grid.RowSpan="2" HorizontalAlignment="Center"></TextBlock>-->
<!--<RadioButton x:Name="RadioButtonGuideConfiguration" Content="向导生成配置" Grid.Column="0" Grid.Row="0"></RadioButton>
<RadioButton x:Name="RadioButtonTemplateConfiguration" Content="模板配置" Grid.Column="0" Grid.Row="1"></RadioButton>
<RadioButton x:Name="RadioButtonAdvancedConfiguration" Content="高级配置" Grid.Column="0" Grid.Row="2"></RadioButton>
<TextBox x:Name="TextBoxJsonPath" Margin="10" Grid.Column="1" Grid.Row="1"></TextBox>
<Button x:Name="ButtonSetConfiguration" Margin="6" Content="配置" Grid.Column="2" Grid.Row="2" Click="ButtonSetConfiguration_Click"></Button>-->
<Grid Grid.Column="0" Grid.Row="1" Grid.ColumnSpan="3">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="0.5*"></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
</Grid.RowDefinitions>
<TextBlock Text="{DynamicResource TextBlockCurrentlySelectedPlan}" Grid.Column="0" Grid.Row="0" HorizontalAlignment="Center" VerticalAlignment="Center" ></TextBlock>
<TextBlock x:Name="TextBlockCurrentlySelectedPlan" Text="{DynamicResource TextBlockCurrentlySelectedPlanNo}" Grid.Column="1" Grid.Row="0" HorizontalAlignment="Left" VerticalAlignment="Center"></TextBlock>
<Grid x:Name="GridV2rayCurrentlyPlan" Grid.Column="0" Grid.Row="1" Grid.ColumnSpan="2" Grid.RowSpan="5">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="0.5*"></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
</Grid.RowDefinitions>
<TextBlock x:Name="TextBlockV2RayShowPort" Text="{DynamicResource TextBlockV2RayServerPort}" Grid.Column="0" Grid.Row="0" HorizontalAlignment="Center" VerticalAlignment="Center"></TextBlock>
<TextBlock x:Name="TextBlockCurrentlySelectedPlanPort" Grid.Column="1" Grid.Row="0" HorizontalAlignment="Left" VerticalAlignment="Center"></TextBlock>
<TextBlock x:Name="TextBlockV2RayShowUUID" Text="UUID:" Grid.Column="0" Grid.Row="1" HorizontalAlignment="Center" VerticalAlignment="Center"></TextBlock>
<TextBlock x:Name="TextBlockCurrentlySelectedPlanUUID" Grid.Column="1" Grid.Row="1" HorizontalAlignment="Left" VerticalAlignment="Center"></TextBlock>
<TextBlock x:Name="TextBlockV2RayShowPathSeedKey" Text="Path/mKCP Seed/Quic Key" Visibility="Collapsed" Grid.Column="0" Grid.Row="2" HorizontalAlignment="Center" VerticalAlignment="Center"></TextBlock>
<TextBlock x:Name="TextBlockCurrentlySelectedPlanPathSeedKey" Visibility="Collapsed" Grid.Column="1" Grid.Row="2" HorizontalAlignment="Left" VerticalAlignment="Center"></TextBlock>
<Grid x:Name="GridVlessVmessXtlsTcpWs" Grid.Column="0" Grid.Row="2" Grid.ColumnSpan="2">
<Grid.ColumnDefinitions>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
</Grid.ColumnDefinitions>
<TextBlock x:Name="TextBlockPathVlessWs" Text="{DynamicResource TextBlockV2RayVlessWsPath}" Grid.Column="0" Grid.Row="3" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
<TextBlock x:Name="TextBlockBoxPathVlessWS" Grid.Column="1" Grid.Row="3" Margin="0"></TextBlock>
<TextBlock x:Name="TextBlockPathVmessTcp" Text="{DynamicResource TextBlockV2RayVmessTcpPath}" Grid.Column="2" Grid.Row="3" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
<TextBlock x:Name="TextBlockBoxPathVmessTcp" Grid.Column="3" Grid.Row="3" Margin="0"></TextBlock>
<TextBlock x:Name="TextBlockPathVmessWs" Text="{DynamicResource TextBlockV2RayVmessWsPath}" Grid.Column="4" Grid.Row="3" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
<TextBlock x:Name="TextBlockBoxPathVmessWS" Grid.Column="5" Grid.Row="3" Margin="0"></TextBlock>
</Grid>
<TextBlock x:Name="TextBlockV2RayShowCurrentlySelectedPlanDomain" Text="Domain/Quic Encrypt" Grid.Column="0" Grid.Row="3" HorizontalAlignment="Center" VerticalAlignment="Center"></TextBlock>
<TextBlock x:Name="TextBlockCurrentlySelectedPlanDomain" Grid.Column="1" Grid.Row="3" HorizontalAlignment="Left" VerticalAlignment="Center"></TextBlock>
<TextBlock x:Name="TextBlockV2RayShowCurrentlySelectedPlanFakeWebsite" Text="{DynamicResource TextBlockV2RayMaskSites}" Grid.Column="0" Grid.Row="4" HorizontalAlignment="Center" VerticalAlignment="Center"></TextBlock>
<TextBlock x:Name="TextBlockCurrentlySelectedPlanFakeWebsite" Grid.Column="1" Grid.Row="4" HorizontalAlignment="Left" VerticalAlignment="Center"></TextBlock>
</Grid>
</Grid>
<Button x:Name="Button_Login" Content="{DynamicResource ButtonV2RayOneKeyInstall}" Margin="10" Grid.Column="0" Grid.Row="2" Click="Button_Login_Click"></Button>
<Button x:Name="ButtonUpdateV2ray" Content="{DynamicResource ButtonUpdateV2ray}" Margin="10" Grid.Column="1" Grid.Row="2" Click="ButtonUpdateV2ray_Click"></Button>
<Button x:Name="Button_canel" Content="{DynamicResource Button_canel}" Margin="10" Grid.Column="2" Grid.Row="2" Click="Button_canel_Click"></Button>
</Grid>
</TabItem>
<TabItem Header="Trojan-Go" Width="70" Height="30">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="50"></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition Height="60"></RowDefinition>
</Grid.RowDefinitions>
<!--<Button x:Name="ButtonTrojanTemplate" Content="Trojan参数设置" Grid.Column="1" Grid.Row="0" Margin="5" Click="ButtonTrojanTemplate_Click"/>-->
<!--<TextBlock Text="Trojan参数设置" Grid.Column="1" Grid.Row="1" Grid.RowSpan="2" HorizontalAlignment="Center"></TextBlock>-->
<Button x:Name="ButtonTrojanGoTemplate" Content="{DynamicResource ButtonTrojanGoTemplate}" Grid.Column="1" Grid.Row="0" Margin="5" Click="ButtonTrojanGoTemplate_Click"/>
<Grid Grid.Column="0" Grid.Row="1" Grid.ColumnSpan="3">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="0.5*"></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
</Grid.RowDefinitions>
<TextBlock Text="{DynamicResource TextBlockCurrentlySelectedPlan}" Grid.Column="0" Grid.Row="0" HorizontalAlignment="Center" VerticalAlignment="Center" ></TextBlock>
<TextBlock x:Name="TextBlockTrojanGoShowPort" Text="{DynamicResource TextBlockV2RayServerPort}" Grid.Column="0" Grid.Row="1" HorizontalAlignment="Center" VerticalAlignment="Center" Visibility="Hidden"></TextBlock>
<TextBlock x:Name="TextBlockTrojanGoShowPassword" Text="UUID:" Grid.Column="0" Grid.Row="2" HorizontalAlignment="Center" VerticalAlignment="Center" Visibility="Hidden"></TextBlock>
<TextBlock x:Name="TextBlockTrojanGoShowPath" Grid.Column="0" Grid.Row="3" HorizontalAlignment="Center" VerticalAlignment="Center" Visibility="Hidden"></TextBlock>
<TextBlock x:Name="TextBlockTrojanGoShowCurrentlySelectedPlanDomain" Text="{DynamicResource TextBlockV2RayDomain}" Grid.Column="0" Grid.Row="4" HorizontalAlignment="Center" VerticalAlignment="Center" Visibility="Hidden"></TextBlock>
<TextBlock x:Name="TextBlockTrojanGoShowCurrentlySelectedPlanFakeWebsite" Text="{DynamicResource TextBlockV2RayMaskSites}" Grid.Column="0" Grid.Row="5" HorizontalAlignment="Center" VerticalAlignment="Center" Visibility="Hidden"></TextBlock>
<TextBlock x:Name="TextBlockTrojanGoCurrentlySelectedPlan" Text="{DynamicResource TextBlockCurrentlySelectedPlanNo}" Grid.Column="1" Grid.Row="0" HorizontalAlignment="Left" VerticalAlignment="Center"></TextBlock>
<TextBlock x:Name="TextBlockTrojanGoCurrentlySelectedPlanPort" Grid.Column="1" Grid.Row="1" HorizontalAlignment="Left" VerticalAlignment="Center" Visibility="Hidden"></TextBlock>
<TextBlock x:Name="TextBlockTrojanGoCurrentlySelectedPlanPassword" Grid.Column="1" Grid.Row="2" HorizontalAlignment="Left" VerticalAlignment="Center" Visibility="Hidden"></TextBlock>
<TextBlock x:Name="TextBlockTrojanGoCurrentlySelectedPlanPathSeedKey" Grid.Column="1" Grid.Row="3" HorizontalAlignment="Left" VerticalAlignment="Center" Visibility="Hidden"></TextBlock>
<TextBlock x:Name="TextBlockTrojanGoCurrentlySelectedPlanDomain" Grid.Column="1" Grid.Row="4" HorizontalAlignment="Left" VerticalAlignment="Center" Visibility="Hidden"></TextBlock>
<TextBlock x:Name="TextBlockTrojanGoCurrentlySelectedPlanFakeWebsite" Grid.Column="1" Grid.Row="5" HorizontalAlignment="Left" VerticalAlignment="Center" Visibility="Hidden"></TextBlock>
</Grid>
<Button x:Name="ButtonTrojanGoSetUp" Content="{DynamicResource ButtonTrojanGoSetUp}" Margin="10" Grid.Column="0" Grid.Row="2" Click="ButtonTrojanGoSetUp_Click"/>
<Button x:Name="ButtonUpdateTrojanGo" Content="{DynamicResource ButtonUpdateTrojanGo}" Margin="10" Grid.Column="1" Grid.Row="2" Click="ButtonUpdateTrojanGo_Click"></Button>
<Button x:Name="ButtonTrojanGoCancel" Content="{DynamicResource ButtonTrojanGoCancel}" Margin="10" Grid.Column="2" Grid.Row="2" Click="Button_canel_Click"></Button>
</Grid>
</TabItem>
<TabItem Header="Trojan" Width="60" Height="30">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition Height="60"></RowDefinition>
</Grid.RowDefinitions>
<GroupBox Header="{DynamicResource GroupBoxHeaderParameterTrojan}" Grid.Column="0" Grid.Row="0" Grid.ColumnSpan="3" Grid.RowSpan="2">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="0.5*"></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="{DynamicResource TextBlockTrojanTemplateExplanation}" Grid.Column="1" Grid.Row="0" HorizontalAlignment="Center" VerticalAlignment="Center"></TextBlock>
<TextBlock Text="{DynamicResource TextBlockTrojanServerDomain}" Grid.Column="0" Grid.Row="1" VerticalAlignment="Center" HorizontalAlignment="Right" Margin="5"></TextBlock>
<TextBox x:Name="TextBoxTrojanHostDomain" Style="{StaticResource TitleText}" Tag="{DynamicResource TextBoxDomainPrompt}" Grid.Column="1" Grid.Row="1" Margin="3"></TextBox>
<TextBlock Text="{DynamicResource TextBlockTrojanPort}" Grid.Column="2" Grid.Row="1" HorizontalAlignment="Left" VerticalAlignment="Center"></TextBlock>
<!--<TextBlock Text="用户名:" Grid.Column="0" Grid.Row="2"></TextBlock>
<TextBox x:Name="TextBoxUser" Grid.Column="1" Grid.Row="2" Margin="3"></TextBox>
<Button x:Name="ButtonNaiveUser" Content="随机" Grid.Column="2" Grid.Row="2" Margin="2" Click="ButtonNaiveUser_Click"></Button>-->
<TextBlock Text="{DynamicResource TextBlockTrojanHostPassword}" Grid.Column="0" Grid.Row="2" HorizontalAlignment="Right" VerticalAlignment="Center" Margin="5"></TextBlock>
<TextBox x:Name="TextBoxTrojanPassword" Grid.Column="1" Grid.Row="2" Margin="3"></TextBox>
<Button x:Name="ButtonTrojanPassword" Content="{DynamicResource ButtonTrojanChangePassword}" Grid.Column="2" Grid.Row="2" Margin="2" Click="ButtonTrojanPassword_Click" ></Button>
<TextBlock Text="{DynamicResource TextBlockV2RayMaskSites}" Grid.Column="0" Grid.Row="3" HorizontalAlignment="Right" VerticalAlignment="Center" ></TextBlock>
<TextBox x:Name="TextBoxTrojanSites" Style="{StaticResource TitleText}" Tag="{DynamicResource TextBoxV2RayMaskSitesTag}" ToolTip="{DynamicResource TextBoxV2RayMaskSitesToolTip}" Grid.Column="1" Grid.Row="3" Margin="3"></TextBox>
</Grid>
</GroupBox>
<!--<Button x:Name="ButtonTrojanTemplate" Content="Trojan参数设置" Grid.Column="1" Grid.Row="0" Margin="5" Click="ButtonTrojanTemplate_Click"/>-->
<!--<TextBlock Text="Trojan参数设置" Grid.Column="1" Grid.Row="1" Grid.RowSpan="2" HorizontalAlignment="Center"></TextBlock>-->
<!--<Button x:Name="ButtonTrojanGoTemplate" Content="Trojan-Go参数设置" Grid.Column="2" Grid.Row="0" Margin="5" Click="ButtonTrojanGoTemplate_Click"/>-->
<Button x:Name="ButtonTrojanSetUp" Content="{DynamicResource ButtonTrojanSetUp}" Grid.Column="0" Grid.Row="2" Margin="10" Click="ButtonTrojanSetUp_Click"/>
<Button x:Name="ButtonUpdateTrojan" Content="{DynamicResource ButtonUpdateTrojan}" Grid.Column="1" Grid.Row="2" Margin="10" Click="ButtonUpdateTrojan_Click"></Button>
<Button x:Name="ButtonTrojanCancel" Content="{DynamicResource ButtonTrojanCancel}" Grid.Column="2" Grid.Row="2" Margin="10" Click="Button_canel_Click"></Button>
</Grid>
</TabItem>
<TabItem x:Name="TabItemNaiveProxy" Header="NaiveProxy" Width="80" Height="30">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition Height="60"></RowDefinition>
</Grid.RowDefinitions>
<GroupBox Header="{DynamicResource GroupBoxHeaderParameterTrojan}" Grid.Column="0" Grid.Row="0" Grid.ColumnSpan="3" Grid.RowSpan="2">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="0.4*"></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="{DynamicResource TextBlockNaiveProxyTemplateExplanation}" Grid.Column="1" Grid.Row="0" HorizontalAlignment="Center" VerticalAlignment="Center"></TextBlock>
<TextBlock Text="{DynamicResource TextBlockTrojanServerDomain}" Grid.Column="0" Grid.Row="1" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
<TextBox x:Name="TextBoxNaiveHostDomain" Style="{StaticResource TitleText}" Tag="{DynamicResource TextBoxDomainPrompt}" Grid.Column="1" Grid.Row="1" Margin="3"></TextBox>
<TextBlock Text="{DynamicResource TextBlockTrojanPort}" Grid.Column="2" Grid.Row="1" HorizontalAlignment="Left" VerticalAlignment="Center"></TextBlock>
<TextBlock Text="{DynamicResource TextBlockHostUser}" Grid.Column="0" Grid.Row="2" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
<TextBox x:Name="TextBoxNaiveUser" Grid.Column="1" Grid.Row="2" Margin="3"></TextBox>
<Button x:Name="ButtonNaiveUser" Content="{DynamicResource ButtonNaiveProxyChangeUser}" Grid.Column="2" Grid.Row="2" Margin="2" Click="ButtonNaiveUser_Click"></Button>
<TextBlock Text="{DynamicResource TextBlockTrojanHostPassword}" Grid.Column="0" Grid.Row="3" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
<TextBox x:Name="TextBoxNaivePassword" Grid.Column="1" Grid.Row="3" Margin="3"></TextBox>
<Button x:Name="ButtonNaivePassword" Content="{DynamicResource ButtonTrojanChangePassword}" Grid.Column="2" Grid.Row="3" Margin="2" Click="ButtonNaivePassword_Click"></Button>
<TextBlock Text="{DynamicResource TextBlockV2RayMaskSites}" Grid.Column="0" Grid.Row="4" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
<TextBox x:Name="TextBoxNaiveSites" Style="{StaticResource TitleText}" Tag="{DynamicResource TextBoxV2RayMaskSitesTag}" ToolTip="{DynamicResource TextBoxV2RayMaskSitesToolTip}" Grid.Column="1" Grid.Row="4" Margin="3"></TextBox>
</Grid>
</GroupBox>
<!--<Button x:Name="ButtonNaiveTemplate" Content="Naive设置" Grid.Column="1" Grid.Row="0" Margin="5" Click="ButtonTrojanTemplate_Click"/>
<TextBlock Text="Naive参数设置" Grid.Column="1" Grid.Row="1" Grid.RowSpan="2" HorizontalAlignment="Center"></TextBlock>-->
<Button x:Name="ButtonNavieSetUp" Content="{DynamicResource ButtonNavieSetUp}" Grid.ColumnSpan="1" Margin="10" Grid.Column="0" Grid.Row="2" Click="ButtonNavieSetUp_Click"/>
<Button x:Name="ButtonNaiveCancel" Content="{DynamicResource ButtonNaiveCancel}" Grid.ColumnSpan="1" Margin="10" Grid.Column="2" Grid.Row="2" Click="Button_canel_Click"></Button>
</Grid>
</TabItem>
<TabItem Header="SSR" Width="60" Height="30">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition Height="60"></RowDefinition>
</Grid.RowDefinitions>
<GroupBox Header="{DynamicResource GroupBoxHeaderParameterTrojan}" Grid.Column="0" Grid.Row="0" Grid.ColumnSpan="3" Grid.RowSpan="2">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="0.5*"></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="{DynamicResource TextBlockSSRTemplateExplanation}" Grid.Column="1" Grid.Row="0" HorizontalAlignment="Center" VerticalAlignment="Center"></TextBlock>
<TextBlock Text="{DynamicResource TextBlockTrojanServerDomain}" Grid.Column="0" Grid.Row="1" VerticalAlignment="Center" HorizontalAlignment="Right" Margin="5"></TextBlock>
<TextBox x:Name="TextBoxSSRHostDomain" Style="{StaticResource TitleText}" Tag="{DynamicResource TextBoxDomainPrompt}" Grid.Column="1" Grid.Row="1" Margin="3"></TextBox>
<TextBlock Text="{DynamicResource TextBlockTrojanPort}" Grid.Column="2" Grid.Row="1" HorizontalAlignment="Left" VerticalAlignment="Center"></TextBlock>
<!--<TextBlock Text="用户名:" Grid.Column="0" Grid.Row="2"></TextBlock>
<TextBox x:Name="TextBoxUser" Grid.Column="1" Grid.Row="2" Margin="3"></TextBox>
<Button x:Name="ButtonNaiveUser" Content="随机" Grid.Column="2" Grid.Row="2" Margin="2" Click="ButtonNaiveUser_Click"></Button>-->
<TextBlock Text="{DynamicResource TextBlockTrojanHostPassword}" Grid.Column="0" Grid.Row="2" HorizontalAlignment="Right" VerticalAlignment="Center" Margin="5"></TextBlock>
<TextBox x:Name="TextBoxSSRPassword" Grid.Column="1" Grid.Row="2" Margin="3"></TextBox>
<Button x:Name="ButtonSSRPassword" Content="{DynamicResource ButtonTrojanChangePassword}" Grid.Column="2" Grid.Row="2" Margin="2" Click="ButtonSSRPassword_Click" ></Button>
<TextBlock Text="{DynamicResource TextBlockV2RayMaskSites}" Grid.Column="0" Grid.Row="3" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
<TextBox x:Name="TextBoxSSRSites" Style="{StaticResource TitleText}" Tag="{DynamicResource TextBoxV2RayMaskSitesTag}" ToolTip="{DynamicResource TextBoxV2RayMaskSitesToolTip}" Grid.Column="1" Grid.Row="3" Margin="3"></TextBox>
</Grid>
</GroupBox>
<Button x:Name="ButtonSSRSetUp" Content="{DynamicResource ButtonSSRSetUp}" Grid.Column="0" Grid.Row="2" Margin="10" Click="ButtonSSRSetUp_Click"/>
<!--<Button x:Name="ButtonUpdateTrojan" Content="{DynamicResource ButtonUpdateTrojan}" Grid.Column="1" Grid.Row="2" Margin="10" Click="ButtonUpdateTrojan_Click"></Button>-->
<Button x:Name="ButtonSSRCancel" Content="{DynamicResource ButtonTrojanCancel}" Grid.Column="2" Grid.Row="2" Margin="10" Click="Button_canel_Click"></Button>
</Grid>
</TabItem>
<TabItem Header="SS" Width="60" Height="30">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="50"></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition Height="60"></RowDefinition>
</Grid.RowDefinitions>
<Button x:Name="ButtonTemplateConfigurationSS" Content="{DynamicResource ButtonTemplateConfigurationSS}" Grid.Column="1" Grid.Row="0" Margin="5" Click="ButtonTemplateConfigurationSS_Click"></Button>
<Grid Grid.Column="0" Grid.Row="1" Grid.ColumnSpan="3">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="0.5*"></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
</Grid.RowDefinitions>
<TextBlock Text="{DynamicResource TextBlockCurrentlySelectedPlan}" Grid.Column="0" Grid.Row="0" HorizontalAlignment="Center" VerticalAlignment="Center" ></TextBlock>
<TextBlock x:Name="TextBlockShowPortSS" Text="{DynamicResource TextBlockV2RayServerPort}" Grid.Column="0" Grid.Row="1" HorizontalAlignment="Center" VerticalAlignment="Center" Visibility="Collapsed"></TextBlock>
<TextBlock x:Name="TextBlockShowUUIDSS" Text="{DynamicResource TextBlockTrojanHostPassword}" Grid.Column="0" Grid.Row="2" HorizontalAlignment="Center" VerticalAlignment="Center" Visibility="Collapsed"></TextBlock>
<TextBlock x:Name="TextBlockShowMethodSS" Text="{DynamicResource TextBlockEncryption}" Grid.Column="0" Grid.Row="3" HorizontalAlignment="Center" VerticalAlignment="Center" Visibility="Collapsed"></TextBlock>
<TextBlock x:Name="TextBlockShowDomainSS" Text="{DynamicResource TextBlockV2RayDomain}" Grid.Column="0" Grid.Row="4" HorizontalAlignment="Center" VerticalAlignment="Center" Visibility="Collapsed"></TextBlock>
<TextBlock x:Name="TextBlockShowPathSS" Text="{DynamicResource TextBlockTrojanGoWebSocketPath}" Grid.Column="0" Grid.Row="5" HorizontalAlignment="Center" VerticalAlignment="Center" Visibility="Collapsed"></TextBlock>
<TextBlock x:Name="TextBlockShowFakeWebsiteSS" Text="{DynamicResource TextBlockV2RayMaskSites}" Grid.Column="0" Grid.Row="5" HorizontalAlignment="Center" VerticalAlignment="Center" Visibility="Hidden"></TextBlock>
<TextBlock x:Name="TextBlockCurrentlySelectedPlanSS" Text="{DynamicResource TextBlockCurrentlySelectedPlanNo}" Grid.Column="1" Grid.Row="0" HorizontalAlignment="Left" VerticalAlignment="Center"></TextBlock>
<TextBlock x:Name="TextBlockCurrentlySelectedPlanPortSS" Grid.Column="1" Grid.Row="1" HorizontalAlignment="Left" VerticalAlignment="Center" Visibility="Visible"></TextBlock>
<TextBlock x:Name="TextBlockCurrentlySelectedPlanUUIDSS" Grid.Column="1" Grid.Row="2" HorizontalAlignment="Left" VerticalAlignment="Center" Visibility="Visible"></TextBlock>
<TextBlock x:Name="TextBlockCurrentlySelectedPlanMethodSS" Grid.Column="1" Grid.Row="3" HorizontalAlignment="Left" VerticalAlignment="Center" Visibility="Visible"></TextBlock>
<TextBlock x:Name="TextBlockCurrentlySelectedPlanDomainSS" Grid.Column="1" Grid.Row="4" HorizontalAlignment="Left" VerticalAlignment="Center" Visibility="Visible"></TextBlock>
<TextBlock x:Name="TextBlockCurrentlySelectedPlanPathSS" Grid.Column="1" Grid.Row="5" HorizontalAlignment="Left" VerticalAlignment="Center" Visibility="Visible"></TextBlock>
<TextBlock x:Name="TextBlockCurrentlySelectedPlanFakeWebsiteSS" Grid.Column="1" Grid.Row="5" HorizontalAlignment="Left" VerticalAlignment="Center" Visibility="Visible"></TextBlock>
</Grid>
<Button x:Name="Button_LoginSS" Content="{DynamicResource ButtonSetUpSS}" Margin="10" Grid.Column="0" Grid.Row="2" Click="Button_LoginSS_Click"></Button>
<!--<Button x:Name="ButtonUpdateSS" Content="{DynamicResource ButtonUpdateV2ray}" Margin="10" Grid.Column="1" Grid.Row="2" Click="ButtonUpdateV2ray_Click"></Button>-->
<Button x:Name="Button_canelSS" Content="{DynamicResource Button_canel}" Margin="10" Grid.Column="2" Grid.Row="2" Click="Button_canel_Click"></Button>
</Grid>
</TabItem>
<TabItem Header="MTProto" Width="70" Height="30">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition Height="60"></RowDefinition>
</Grid.RowDefinitions>
<GroupBox Header="{DynamicResource GroupBoxHeaderParameterTrojan}" Grid.Column="0" Grid.Row="0" Grid.ColumnSpan="3" Grid.RowSpan="2">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="0.2*"></ColumnDefinition>
<ColumnDefinition Width="0.5*"></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
</Grid.RowDefinitions>
<TextBlock Text="{DynamicResource TextBlockMtgTemplateExplanation}" Grid.Column="0" Grid.Row="0" Grid.ColumnSpan="3" HorizontalAlignment="Center" VerticalAlignment="Center"></TextBlock>
<TextBlock Text="{DynamicResource TextBlockHostPart}" Grid.Column="0" Grid.Row="1" VerticalAlignment="Center" HorizontalAlignment="Right" Margin="5"></TextBlock>
<TextBox x:Name="TextBoxMtgHostPort" Text="443" Grid.Column="1" Grid.Row="1" Margin="3"></TextBox>
<TextBlock Text="{DynamicResource TextBlockMtgPortExplanation}" Grid.Column="2" Grid.Row="1" HorizontalAlignment="Left" VerticalAlignment="Center"></TextBlock>
<TextBlock Text="{DynamicResource TextBlockHostCert}" Grid.Column="0" Grid.Row="2" HorizontalAlignment="Right" VerticalAlignment="Center" Margin="5"></TextBlock>
<TextBlock Grid.Column="1" Grid.Row="2" Grid.ColumnSpan="2" Text="{DynamicResource TextBlockMtgSecretExplanation}" VerticalAlignment="Center"></TextBlock>
<!--<TextBox x:Name="TextBoxMtgPassword" Grid.Column="1" Grid.Row="2" Margin="3"></TextBox>
<Button x:Name="ButtonMtgPassword" Content="{DynamicResource ButtonTrojanChangePassword}" Grid.Column="2" Grid.Row="2" Margin="2" Click="ButtonSSRPassword_Click" ></Button>-->
<TextBlock Text="{DynamicResource TextBlockMtgFakeDomainExplanation}" Grid.Column="0" Grid.Row="3" VerticalAlignment="Center" HorizontalAlignment="Right"></TextBlock>
<TextBox x:Name="TextBoxMtgSites" Style="{StaticResource TitleText}" Tag="azure.microsoft.com" ToolTip="{DynamicResource TextBoxV2RayMaskSitesToolTip}" Grid.Column="1" Grid.Row="3" Margin="3" ></TextBox>
<TextBlock Text="{DynamicResource TextBoxV2RayMaskSitesTag}" Grid.Column="2" Grid.Row="3" VerticalAlignment="Center" HorizontalAlignment="Left"></TextBlock>
<TextBlock Text="TAG" Grid.Column="0" Grid.Row="4" VerticalAlignment="Center" HorizontalAlignment="Right" Visibility="Collapsed"></TextBlock>
<TextBox x:Name="TextBoxMtgTag" Style="{StaticResource TitleText}" Tag="{DynamicResource TextBoxV2RayMaskSitesTag}" Grid.Column="1" Grid.Row="4" Margin="3" Visibility="Collapsed"></TextBox>
</Grid>
</GroupBox>
<Button x:Name="ButtonMtgSetUp" Content="{DynamicResource ButtonMtgSetUp}" Grid.Column="0" Grid.Row="2" Margin="10" Click="ButtonMtgSetUp_Click" />
<!--<Button x:Name="ButtonUpdateTrojan" Content="{DynamicResource ButtonUpdateTrojan}" Grid.Column="1" Grid.Row="2" Margin="10" Click="ButtonUpdateTrojan_Click"></Button>-->
<Button x:Name="ButtonMtgCancel" Content="{DynamicResource ButtonTrojanCancel}" Grid.Column="2" Grid.Row="2" Margin="10" Click="Button_canel_Click"></Button>
</Grid>
</TabItem>
<!--<TabItem Header="三合一" Width="100" Height="30" Visibility="Collapsed">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
</Grid.RowDefinitions>
<Grid Grid.Column="0" Grid.Row="0" Grid.ColumnSpan="4" Grid.RowSpan="2">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="0.55*"></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition Width="0.5*"></ColumnDefinition>
<ColumnDefinition Width="0.55*"></ColumnDefinition>
<ColumnDefinition ></ColumnDefinition>
<ColumnDefinition Width="0.5*"></ColumnDefinition>
<ColumnDefinition Width="0.55*"></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition Width="0.5*"></ColumnDefinition>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
</Grid.RowDefinitions>
<TextBlock Text="安装V2ray,Trojan,NaiveProxy在一台VPS中此处方案仅为实验性的偏重娱乐性相比单一代理并不具优势可依自己喜好来是否选用。" Grid.Column="0" Grid.Row="0" Grid.ColumnSpan="8" Margin="0"></TextBlock>
<TextBlock Text="*共用设置*" Grid.Column="0" Grid.Row="1" Margin="3"></TextBlock>
<TextBlock Text="地址(域名)" Grid.Column="0" Grid.Row="2" Margin="3"></TextBlock>
<TextBox x:Name="TextBoxDomain3in1" Text="" Style="{StaticResource TitleText}" Tag="IP或域名(不可为空)" Grid.Column="1" Grid.Row="2" Margin="3"></TextBox>
<TextBlock Text="端口443" Grid.Column="2" Grid.Row="2" Margin="3"></TextBlock>
-->
<!--<TextBox x:Name="TextBoxPort3in1" Text="443" IsReadOnly="True" Grid.Column="3" Grid.Row="2" Margin="3"></TextBox>
<TextBlock Text="伪装网站:" Grid.Column="3" Grid.Row="2" Margin="3"></TextBlock>
<TextBox x:Name="TextBoxSites3in1" Text="" Style="{StaticResource TitleText}" Tag="伪装网站域名(可为空)" Grid.Column="4" Grid.Row="2" Margin="3"></TextBox>
<TextBlock Text="*V2ray设置*" Grid.Column="0" Grid.Row="3" Margin="3"></TextBlock>
<TextBlock Text="UUID" Grid.Column="0" Grid.Row="4" Margin="3"></TextBlock>
<TextBox x:Name="TextBoxV2rayUUID3in1" Grid.Column="1" Grid.Row="4" Margin="3"></TextBox>
<Button x:Name="ButtonV2rayUUID3in1" Content="更新" Grid.Column="2" Grid.Row="4" Margin="3" Click="ButtonV2rayUUID3in1_Click"></Button>
<TextBlock Text="路径(Path)" Grid.Column="0" Grid.Row="5" Margin="3"></TextBlock>
<TextBox x:Name="TextBoxV2rayPath3in1" Grid.Column="1" Grid.Row="5" Margin="3"></TextBox>
<Button x:Name="ButtonV2rayPath3in1" Content="随机" Grid.Column="2" Grid.Row="5" Margin="3" Click="ButtonV2rayPath3in1_Click"></Button>
<TextBlock Text="*Trojan设置*" Grid.Column="3" Grid.Row="3" Margin="3"></TextBlock>
<TextBlock Text="密码:" Grid.Column="3" Grid.Row="4" Margin="3"></TextBlock>
<TextBox x:Name="TextBoxTrojanPassword3in1" Grid.Column="4" Grid.Row="4" Margin="3"></TextBox>
<Button x:Name="ButtonTrojanPassword3in1" Content="更新" Grid.Column="5" Grid.Row="4" Margin="3" Click="ButtonTrojanPassword3in1_Click"></Button>
<TextBlock Text="*Naive设置*" Grid.Column="6" Grid.Row="3" Margin="3"></TextBlock>
<TextBlock Text="用户名:" Grid.Column="6" Grid.Row="4" Margin="3"></TextBlock>
<TextBox x:Name="TextBoxNaiveUser3in1" Grid.Column="7" Grid.Row="4" Margin="3"></TextBox>
<Button x:Name="ButtonNaiveUser3in1" Content="随机" Grid.Column="8" Grid.Row="4" Margin="3" Click="ButtonNaiveUser3in1_Click"></Button>
<TextBlock Text="密码:" Grid.Column="6" Grid.Row="5" Margin="3"></TextBlock>
<TextBox x:Name="TextBoxNaivePassword3in1" Grid.Column="7" Grid.Row="5" Margin="3"></TextBox>
<Button x:Name="ButtonNaivePassword3in1" Content="随机" Grid.Column="8" Grid.Row="5" Margin="3" Click="ButtonNaivePassword3in1_Click"></Button>
</Grid>
</Grid>
<Button x:Name="Button_Login3in1" Content="一键安装" Grid.ColumnSpan="1" Margin="10" Grid.Column="0" Grid.Row="2" Click="Button_Login3in1_Click"/>
<Button x:Name="Button_canel3in1" Content="取消" Grid.ColumnSpan="1" Margin="10" Grid.Column="2" Grid.Row="2" Click="Button_canel_Click"></Button>
</Grid>
</TabItem>-->
<TabItem Header="{DynamicResource TabItemHeaderSysTools}" Width="90" Height="30">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
</Grid.RowDefinitions>
<Button x:Name="ButtonProofreadTime" Content="{DynamicResource ButtonProofreadTime}" Grid.Column="0" Grid.Row="0" Margin="5" Click="ButtonProofreadTime_Click"/>
<Button x:Name="ButtonClearOccupiedPorts" Content="{DynamicResource ButtonClearOccupiedPorts}" Grid.Column="1" Grid.Row="0" Margin="5" Click="ButtonClearOccupiedPorts_Click"></Button>
<Button x:Name="ButtonTestAndEnableBBR" Content="{DynamicResource ButtonTestAndEnableBBR}" Grid.Column="2" Grid.Row="0" Margin="5" Click="ButtonTestAndEnableBBR_Click"></Button>
<Button x:Name="ButtonRemoveAllSoft" Content="{DynamicResource ButtonRemoveAllSoft}" Grid.Column="3" Grid.Row="0" Margin="5" Click="ButtonRemoveAllSoft_Click"></Button>
<Button x:Name="ButtonEnableRootPassWord" Content="{DynamicResource ButtonEnableRootPassWord}" ToolTip="{DynamicResource ButtonEnableRootPassWordToolTip}" Grid.Column="0" Grid.Row="1" Margin="5" Click="ButtonEnableRootPassWord_Click"></Button>
<Button x:Name="ButtonEnableRootCert" Content="{DynamicResource ButtonEnableRootCert}" ToolTip="{DynamicResource ButtonEnableRootCertToolTip}" Grid.Column="1" Grid.Row="1" Margin="5" Click="ButtonEnableRootCert_Click"></Button>
<Button x:Name="ButtonRootProhibitsPasswordLogin" Content="{DynamicResource ButtonRootProhibitsPasswordLogin}" ToolTip="{DynamicResource ButtonRootProhibitsPasswordLoginToolTip}" Grid.Column="2" Grid.Row="1" Margin="5" Click="ButtonRootProhibitsPasswordLogin_Click"></Button>
<Button Content="test" Grid.Column="3" Grid.Row="2" Margin="10" Click="Button_Click" Visibility="Collapsed"></Button>
</Grid>
</TabItem>
</TabControl>
</Grid>
</Grid>
</TabItem>
<TabItem Header="{DynamicResource TabItemHeaderResourceTools}" Width="110" Height="30">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="70"></ColumnDefinition>
<ColumnDefinition Width="70"></ColumnDefinition>
<ColumnDefinition Width="70"></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="40"></RowDefinition>
<RowDefinition></RowDefinition>
</Grid.RowDefinitions>
<Button x:Name="ButtonWebBrowserHomePage" Content="{DynamicResource ButtonWebBrowserHomePage}" Grid.Column="0" Grid.Row="0" Margin="5" Click="ButtonWebBrowserHomePage_Click"></Button>
<Button x:Name="ButtonWebBrowserForward" Content="{DynamicResource ButtonWebBrowserForward}" Grid.Column="2" Grid.Row="0" Margin="5" Click="ButtonWebBrowserForward_Click"></Button>
<Button x:Name="ButtonWebBrowserBack" Content="{DynamicResource ButtonWebBrowserBack}" Grid.Column="1" Grid.Row="0" Margin="5" Click="ButtonWebBrowserBack_Click"/>
<TextBlock Text="{DynamicResource TextBlockWebExplain}" TextWrapping="Wrap" Grid.Column="4" Grid.Row="0" Margin="8"></TextBlock>
<!--<TextBox x:Name="TextBoxWebBrowserProxyUrl" Style="{StaticResource TitleText}" Tag="粘贴被墙的网址到这里点击 GO(下面被墙网址右击==复制快捷方式)" Grid.Column="3" Grid.Row="0" Grid.ColumnSpan="5" Margin="5"></TextBox>
<Button x:Name="ButtonWebBrowserProxyGo" Content="Go" Grid.Column="8" Grid.Row="0" Margin="5" Click="ButtonWebBrowserProxyGo_Click"></Button>-->
<WebBrowser x:Name="WebBrowserResourcesAndTools" Grid.Column="0" Grid.Row="1" Grid.ColumnSpan="4" Source="https://github.com/proxysu/windows/wiki/ResourcesAndTools" />
</Grid>
</TabItem>
<TabItem Header="{DynamicResource TabItemHeaderFreeWallURL}" Width="110" Height="30">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="70"></ColumnDefinition>
<ColumnDefinition Width="70"></ColumnDefinition>
<ColumnDefinition Width="70"></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="40"></RowDefinition>
<RowDefinition></RowDefinition>
</Grid.RowDefinitions>
<Button x:Name="ButtonWebBrowserHomePageFreeWallURL" Content="{DynamicResource ButtonWebBrowserHomePage}" Grid.Column="0" Grid.Row="0" Margin="5" Click="ButtonWebBrowserHomePageFreeWallURL_Click"></Button>
<Button x:Name="ButtonWebBrowserForwardFreeWallURL" Content="{DynamicResource ButtonWebBrowserForward}" Grid.Column="2" Grid.Row="0" Margin="5" Click="ButtonWebBrowserForwardFreeWallURL_Click"></Button>
<Button x:Name="ButtonWebBrowserBackFreeWallURL" Content="{DynamicResource ButtonWebBrowserBack}" Grid.Column="1" Grid.Row="0" Margin="5" Click="ButtonWebBrowserBackFreeWallURL_Click"></Button>
<TextBlock Text="{DynamicResource TextBlockWebExplain}" TextWrapping="Wrap" Grid.Column="4" Grid.Row="0" Margin="8"></TextBlock>
<!--<TextBox x:Name="TextBoxWebBrowserProxyUrl" Style="{StaticResource TitleText}" Tag="粘贴被墙的网址到这里点击 GO(下面被墙网址右击==复制快捷方式)" Grid.Column="3" Grid.Row="0" Grid.ColumnSpan="5" Margin="5"></TextBox>
<Button x:Name="ButtonWebBrowserProxyGo" Content="Go" Grid.Column="8" Grid.Row="0" Margin="5" Click="ButtonWebBrowserProxyGo_Click"></Button>-->
<WebBrowser x:Name="WebBrowserResourcesAndToolsFreeWallURL" Grid.Column="0" Grid.Row="1" Grid.ColumnSpan="4" Source="https://github.com/proxysu/windows/wiki/FreeWallURL" />
</Grid>
</TabItem>
<TabItem Header="{DynamicResource TabItemHeaderCommonError}" Width="110" Height="30">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="70"></ColumnDefinition>
<ColumnDefinition Width="70"></ColumnDefinition>
<ColumnDefinition Width="70"></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="40"></RowDefinition>
<RowDefinition></RowDefinition>
</Grid.RowDefinitions>
<Button x:Name="ButtonWebBrowserHomePageCommonError" Content="{DynamicResource ButtonWebBrowserHomePage}" Grid.Column="0" Grid.Row="0" Margin="5" Click="ButtonWebBrowserHomePageCommonError_Click"></Button>
<Button x:Name="ButtonWebBrowserForwardCommonError" Content="{DynamicResource ButtonWebBrowserForward}" Grid.Column="2" Grid.Row="0" Margin="5" Click="ButtonWebBrowserForwardCommonError_Click"></Button>
<Button x:Name="ButtonWebBrowserBackCommonError" Content="{DynamicResource ButtonWebBrowserBack}" Grid.Column="1" Grid.Row="0" Margin="5" Click="ButtonWebBrowserBackCommonError_Click"></Button>
<TextBlock Text="{DynamicResource TextBlockWebExplain}" TextWrapping="Wrap" Grid.Column="4" Grid.Row="0" Margin="8"></TextBlock>
<!--<TextBox x:Name="TextBoxWebBrowserProxyUrl" Style="{StaticResource TitleText}" Tag="粘贴被墙的网址到这里点击 GO(下面被墙网址右击==复制快捷方式)" Grid.Column="3" Grid.Row="0" Grid.ColumnSpan="5" Margin="5"></TextBox>
<Button x:Name="ButtonWebBrowserProxyGo" Content="Go" Grid.Column="8" Grid.Row="0" Margin="5" Click="ButtonWebBrowserProxyGo_Click"></Button>-->
<WebBrowser x:Name="WebBrowserCommonError" Grid.Column="0" Grid.Row="1" Grid.ColumnSpan="4" Source="https://github.com/proxysu/windows/wiki/CommonError" />
</Grid>
</TabItem>
</TabControl>
</Grid>
</Grid>
</Window>

File diff suppressed because it is too large Load Diff

View File

@ -1,58 +0,0 @@
<Window x:Class="ProxySU.ProofreadTimeWindow"
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="ProofreadTimeWindow" Height="450" Width="600">
<Grid>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
</Grid.RowDefinitions>
<Grid Grid.Column="0" Grid.Row="0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="0.4*"></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
</Grid.ColumnDefinitions>
<RadioButton x:Name="RadioButtonNetworkTime" IsChecked="True" Content="" GroupName="FreadTimeGroup" Grid.Column="0" Grid.Row="0" HorizontalAlignment="Right" VerticalAlignment="Center"></RadioButton>
<TextBlock Text="{DynamicResource RadioButtonNetworkTime}" Grid.Column="1" HorizontalAlignment="Left" VerticalAlignment="Center" MouseDown="TextBlock_MouseDown"></TextBlock>
</Grid>
<TextBlock Text="{DynamicResource TextBlockNetworkTime}" TextWrapping="Wrap" Grid.Column="0" Grid.Row="1" Grid.RowSpan="2" Margin="20"></TextBlock>
<Grid Grid.Column="1" Grid.Row="0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="0.4*"></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
</Grid.ColumnDefinitions>
<RadioButton x:Name="RadioButtonLocalTime" Content="" GroupName="FreadTimeGroup" Grid.Column="0" Grid.Row="0" HorizontalAlignment="Right" VerticalAlignment="Center"></RadioButton>
<TextBlock Text="{DynamicResource RadioButtonLocalTime}" Grid.Column="1" HorizontalAlignment="Left" VerticalAlignment="Center" MouseDown="TextBlock_MouseDown_1"></TextBlock>
</Grid>
<TextBlock Text="{DynamicResource TextBlockLocalTime}" TextWrapping="Wrap" Grid.Column="1" Grid.Row="1" Grid.RowSpan="2" Margin="20"></TextBlock>
<Grid Grid.Column="2" Grid.Row="0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="0.4*"></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
</Grid.ColumnDefinitions>
<RadioButton x:Name="RadioButtonUpDateLocalTime" Content="" GroupName="FreadTimeGroup" Grid.Column="0" Grid.Row="0" HorizontalAlignment="Right" VerticalAlignment="Center"></RadioButton>
<TextBlock Text="{DynamicResource RadioButtonUpDateLocalTime}" Grid.Column="1" HorizontalAlignment="Left" VerticalAlignment="Center" MouseDown="TextBlock_MouseDown_2"></TextBlock>
</Grid>
<TextBlock Text="{DynamicResource TextBlockUpDateLocalTime}" TextWrapping="Wrap" Grid.Column="2" Grid.Row="1" Grid.RowSpan="2" Margin="20"></TextBlock>
<Button x:Name="ButtonTestTime" Content="{DynamicResource ButtonTestTime}" Grid.Column="0" Grid.Row="3" Margin="30" Click="ButtonTestTime_Click"/>
<Button x:Name="ButtonProofreading" Content="{DynamicResource ButtonProofreading}" Grid.Column="2" Grid.Row="3" Margin="30" Click="ButtonProofreading_Click"></Button>
<!--<Button x:Name="ButtonTEST" Content="测试命令" Grid.Column="1" Grid.Row="3" Margin="30" Click="ButtonTEST_Click"></Button>-->
</Grid>
</Grid>
</Window>

View File

@ -1,258 +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.Text.RegularExpressions;
using System.Threading;
using System.Threading.Tasks;
using System.IO;
using Renci.SshNet;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using Newtonsoft.Json.Serialization;
using System.Drawing;
using QRCoder;
using System.Net;
using System.Net.Sockets;
using System.Net.NetworkInformation;
using System.Runtime.InteropServices;
using System.Runtime;
using System.Globalization;
namespace ProxySU
{
/// <summary>
/// ProofreadTimeWindow.xaml 的交互逻辑
/// </summary>
public partial class ProofreadTimeWindow : Window
{
public static ConnectionInfo ProfreadTimeReceiveConnectionInfo { get; set; }
//ProfreadTimeReceiveParameters
public ProofreadTimeWindow()
{
InitializeComponent();
}
private void ButtonTestTime_Click(object sender, RoutedEventArgs e)
{
using (var client = new SshClient(ProfreadTimeReceiveConnectionInfo))
{
client.Connect();
client.RunCommand("rm -f /etc/localtime");
client.RunCommand("ln -s /usr/share/zoneinfo/UTC /etc/localtime");
//获取远程主机的时间戳
long timeStampVPS = Convert.ToInt64(client.RunCommand("date +%s").Result.ToString());
//获取本地时间戳
TimeSpan ts = DateTime.Now.ToUniversalTime() - new DateTime(1970, 1, 1, 0, 0, 0, 0);
long timeStampLocal = Convert.ToInt64(ts.TotalSeconds);
client.Disconnect();
if (Math.Abs(timeStampLocal - timeStampVPS) >= 90)
{
MessageBox.Show("本地时间与远程主机时间相差超过限制(90秒)V2ray无法建立连接");
return;
}
else
{
MessageBox.Show("误差为:" + Math.Abs(timeStampLocal - timeStampVPS).ToString()+" 可以连接");
}
}
}
private void ButtonProofreading_Click(object sender, RoutedEventArgs e)
{
if (RadioButtonUpDateLocalTime.IsChecked == true)
{
//将本机电脑与网络时间同步
DateTime netUTCtime = NetTime.GetUTCTime();
if (!DateTime.Equals(netUTCtime, new DateTime(1970, 1, 1, 0, 0, 0, 0)))
{
DateTime localTime = netUTCtime.ToLocalTime();
bool setD = UpdateTime.SetDate(localTime);
if (setD == true)
{
MessageBox.Show("本机时间已经更新为网络时间(国家授时中心获取)");
}
else
{
MessageBox.Show("更新失败,请重试。");
}
}
return;
}
using (var client = new SshClient(ProfreadTimeReceiveConnectionInfo))
{
client.Connect();
//设置vps为UTC时区
client.RunCommand("rm -f /etc/localtime");
client.RunCommand("ln -s /usr/share/zoneinfo/UTC /etc/localtime");
if (RadioButtonLocalTime.IsChecked == true)
{
//以本地时间为准,校正远程主机时间
//获取本地时间戳
TimeSpan ts = DateTime.Now.ToUniversalTime() - new DateTime(1970, 1, 1, 0, 0, 0, 0);
long timeStampLocal = Convert.ToInt64(ts.TotalSeconds);
string sshCmd = $"date --set=\"$(date \"+%Y-%m-%d %H:%M:%S\" -d @{timeStampLocal.ToString()})\"";
client.RunCommand(sshCmd);
MessageBox.Show("同步本地时间校时完毕");
}
else
{
//以网络时间为准,校正远程主机时间
TimeSpan utcTS = NetTime.GetUTCTime() - new DateTime(1970, 1, 1, 0, 0, 0, 0);
long timeStampVPS = Convert.ToInt64(utcTS.TotalSeconds);
if (timeStampVPS!=0)
{
string sshCmd = $"date --set=\"$(date \"+%Y-%m-%d %H:%M:%S\" -d @{timeStampVPS.ToString()})\"";
client.RunCommand(sshCmd);
MessageBox.Show("同步网络时间校时完毕");
}
}
client.Disconnect();
}
}
private void TextBlock_MouseDown(object sender, MouseButtonEventArgs e)
{
RadioButtonNetworkTime.IsChecked = true;
}
private void TextBlock_MouseDown_1(object sender, MouseButtonEventArgs e)
{
RadioButtonLocalTime.IsChecked = true;
}
private void TextBlock_MouseDown_2(object sender, MouseButtonEventArgs e)
{
RadioButtonUpDateLocalTime.IsChecked = true;
}
//private void ButtonTEST_Click(object sender, RoutedEventArgs e)
//{
// //NetTime netTime = new NetTime();
// string netDatetime = NetTime.GetUTCTime().ToString();
// MessageBox.Show(netDatetime);
// //NetTime netTime = new NetTime();
// //UpdateTime updateTime = new UpdateTime();
// //DateTime netDateTime = netTime.GetBeijingTime();
// //MessageBox.Show(netDateTime.ToString());
//}
}
/// <summary>
/// 网络时间 代码从网上复制原网址https://www.codeleading.com/article/23791981303/
/// </summary>
public class NetTime
{
/// <summary>
/// 从国家授时中心获取标准GMT时间读取https://www.tsa.cn
/// GMT时间与UTC时间没有差别可以UTC=GMT
/// </summary>
/// <returns>返回网络时间</returns>
public static DateTime GetUTCTime()
{
DateTime time;
////Thread.Sleep(5000);
try
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://www.tsa.cn");
request.Method = "HEAD";
request.AllowAutoRedirect = false;
HttpWebResponse reponse = (HttpWebResponse)request.GetResponse();
string cc = reponse.GetResponseHeader("date");
reponse.Close();
bool s = GMTStrParse(cc, out time);
return time;
}
catch (Exception ex1)
{
if (ex1.ToString().Contains("403"))
{
MessageBox.Show("校时操作太频繁,请稍等片刻再操作!");
}
else
{
MessageBox.Show(ex1.Message);
}
return time = new DateTime(1970, 1, 1, 0, 0, 0, 0);
}
//return time.AddHours(8); //GMT要加8个小时才是北京时间
}
public static bool GMTStrParse(string gmtStr, out DateTime gmtTime) //抓取的date是GMT格式的字符串这里转成datetime
{
CultureInfo enUS = new CultureInfo("en-US");
bool s = DateTime.TryParseExact(gmtStr, "r", enUS, DateTimeStyles.None, out gmtTime);
return s;
}
}
/// <summary>
/// 更新系统时间代码从网上复制原网址https://www.open-open.com/code/view/1430552965599
/// </summary>
public class UpdateTime
{
//设置系统时间的API函数
[DllImport("kernel32.dll")]
private static extern bool SetLocalTime(ref SYSTEMTIME time);
[StructLayout(LayoutKind.Sequential)]
private struct SYSTEMTIME
{
public short year;
public short month;
public short dayOfWeek;
public short day;
public short hour;
public short minute;
public short second;
public short milliseconds;
}
/// <summary>
/// 设置系统时间
/// </summary>
/// <param name="dt">需要设置的时间</param>
/// <returns>返回系统时间设置状态true为成功false为失败</returns>
public static bool SetDate(DateTime dt)
{
SYSTEMTIME st;
st.year = (short)dt.Year;
st.month = (short)dt.Month;
st.dayOfWeek = (short)dt.DayOfWeek;
st.day = (short)dt.Day;
st.hour = (short)dt.Hour;
st.minute = (short)dt.Minute;
st.second = (short)dt.Second;
st.milliseconds = (short)dt.Millisecond;
bool rt = SetLocalTime(ref st);
return rt;
}
}
}

View File

@ -1,55 +0,0 @@
using System.Reflection;
using System.Resources;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Windows;
// 有关程序集的一般信息由以下
// 控制。更改这些特性值可修改
// 与程序集关联的信息。
[assembly: AssemblyTitle("ProxySU")]
[assembly: AssemblyDescription("V2rayTrojanNaiveProxyTrojan-Go等一键安装工具")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("ProxySU")]
[assembly: AssemblyProduct("ProxySU")]
[assembly: AssemblyCopyright("Copyright © 2020")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// 将 ComVisible 设置为 false 会使此程序集中的类型
//对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型
//请将此类型的 ComVisible 特性设置为 true。
[assembly: ComVisible(false)]
//若要开始生成可本地化的应用程序,请设置
//.csproj 文件中的 <UICulture>CultureYouAreCodingWith</UICulture>
//例如,如果您在源文件中使用的是美国英语,
//使用的是美国英语,请将 <UICulture> 设置为 en-US。 然后取消
//对以下 NeutralResourceLanguage 特性的注释。 更新
//以下行中的“en-US”以匹配项目文件中的 UICulture 设置。
//[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)]
[assembly: ThemeInfo(
ResourceDictionaryLocation.None, //主题特定资源词典所处位置
//(未在页面中找到资源时使用,
//或应用程序资源字典中找到时使用)
ResourceDictionaryLocation.SourceAssembly //常规资源词典所处位置
//(未在页面中找到资源时使用,
//、应用程序或任何主题专用资源字典中找到时使用)
)]
// 程序集的版本信息由下列四个值组成:
//
// 主版本
// 次版本
// 生成号
// 修订号
//
// 可以指定所有值,也可以使用以下所示的 "*" 预置版本号和修订号
// 方法是按如下所示使用“*”: :
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("2.5.6.0")]
[assembly: AssemblyFileVersion("2.5.6.0")]

View File

@ -1,71 +0,0 @@
//------------------------------------------------------------------------------
// <auto-generated>
// 此代码由工具生成。
// 运行时版本: 4.0.30319.42000
//
// 对此文件的更改可能导致不正确的行为,如果
// 重新生成代码,则所做更改将丢失。
// </auto-generated>
//------------------------------------------------------------------------------
namespace ProxySU.Properties
{
/// <summary>
/// 强类型资源类,用于查找本地化字符串等。
/// </summary>
// 此类是由 StronglyTypedResourceBuilder
// 类通过类似于 ResGen 或 Visual Studio 的工具自动生成的。
// 若要添加或删除成员,请编辑 .ResX 文件,然后重新运行 ResGen
// (以 /str 作为命令选项),或重新生成 VS 项目。
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class Resources
{
private static global::System.Resources.ResourceManager resourceMan;
private static global::System.Globalization.CultureInfo resourceCulture;
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
internal Resources()
{
}
/// <summary>
/// 返回此类使用的缓存 ResourceManager 实例。
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Resources.ResourceManager ResourceManager
{
get
{
if ((resourceMan == null))
{
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("ProxySU.Properties.Resources", typeof(Resources).Assembly);
resourceMan = temp;
}
return resourceMan;
}
}
/// <summary>
/// 覆盖当前线程的 CurrentUICulture 属性
/// 使用此强类型的资源类的资源查找。
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture
{
get
{
return resourceCulture;
}
set
{
resourceCulture = value;
}
}
}
}

View File

@ -1,117 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@ -1,30 +0,0 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace ProxySU.Properties
{
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")]
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase
{
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
public static Settings Default
{
get
{
return defaultInstance;
}
}
}
}

View File

@ -1,7 +0,0 @@
<?xml version='1.0' encoding='utf-8'?>
<SettingsFile xmlns="uri:settings" CurrentProfile="(Default)">
<Profiles>
<Profile Name="(Default)" />
</Profiles>
<Settings />
</SettingsFile>

View File

@ -1,213 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{DD5505BC-E7F1-4D03-ABC7-B636E893FC09}</ProjectGuid>
<OutputType>WinExe</OutputType>
<RootNamespace>ProxySU</RootNamespace>
<AssemblyName>ProxySU</AssemblyName>
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<ProjectTypeGuids>{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
<WarningLevel>4</WarningLevel>
<Deterministic>true</Deterministic>
<IsWebBootstrapper>false</IsWebBootstrapper>
<PublishUrl>publish\</PublishUrl>
<Install>true</Install>
<InstallFrom>Disk</InstallFrom>
<UpdateEnabled>false</UpdateEnabled>
<UpdateMode>Foreground</UpdateMode>
<UpdateInterval>7</UpdateInterval>
<UpdateIntervalUnits>Days</UpdateIntervalUnits>
<UpdatePeriodically>false</UpdatePeriodically>
<UpdateRequired>false</UpdateRequired>
<MapFileExtensions>true</MapFileExtensions>
<ApplicationRevision>1</ApplicationRevision>
<ApplicationVersion>1.0.0.%2a</ApplicationVersion>
<UseApplicationTrust>false</UseApplicationTrust>
<PublishWizardCompleted>true</PublishWizardCompleted>
<BootstrapperEnabled>true</BootstrapperEnabled>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup>
<ApplicationIcon>ProxySU.ico</ApplicationIcon>
</PropertyGroup>
<PropertyGroup>
<ManifestCertificateThumbprint>01AFC64B121E781F77B42A6E9F1B587DDBAD475A</ManifestCertificateThumbprint>
</PropertyGroup>
<PropertyGroup>
<ManifestKeyFile>ProxySU_TemporaryKey.pfx</ManifestKeyFile>
</PropertyGroup>
<PropertyGroup>
<GenerateManifests>true</GenerateManifests>
</PropertyGroup>
<PropertyGroup>
<SignManifests>true</SignManifests>
</PropertyGroup>
<ItemGroup>
<Reference Include="Newtonsoft.Json">
<HintPath>..\json.net\net40\Newtonsoft.Json.dll</HintPath>
</Reference>
<Reference Include="QRCoder">
<HintPath>..\qrcoder\net40\QRCoder.dll</HintPath>
</Reference>
<Reference Include="Renci.SshNet, Version=2020.0.1.0, Culture=neutral, PublicKeyToken=1cee9f8bde3db106, processorArchitecture=MSIL">
<HintPath>..\packages\SSH.NET.2020.0.1\lib\net40\Renci.SshNet.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Data" />
<Reference Include="System.Drawing" />
<Reference Include="System.Web" />
<Reference Include="System.Xml" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Core" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="System.Xaml">
<RequiredTargetFramework>4.0</RequiredTargetFramework>
</Reference>
<Reference Include="WindowsBase" />
<Reference Include="PresentationCore" />
<Reference Include="PresentationFramework" />
</ItemGroup>
<ItemGroup>
<ApplicationDefinition Include="App.xaml">
<Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType>
</ApplicationDefinition>
<Compile Include="ClassModel.cs" />
<Compile Include="ProofreadTimeWindow.xaml.cs">
<DependentUpon>ProofreadTimeWindow.xaml</DependentUpon>
</Compile>
<Compile Include="ResultClientInformation.xaml.cs">
<DependentUpon>ResultClientInformation.xaml</DependentUpon>
</Compile>
<Compile Include="SSpluginWindow.xaml.cs">
<DependentUpon>SSpluginWindow.xaml</DependentUpon>
</Compile>
<Compile Include="XayTemplateWindow.xaml.cs">
<DependentUpon>XayTemplateWindow.xaml</DependentUpon>
</Compile>
<Compile Include="V2RayTemplateWindow.xaml.cs">
<DependentUpon>V2RayTemplateWindow.xaml</DependentUpon>
</Compile>
<Compile Include="TrojanGoTemplateWindow.xaml.cs">
<DependentUpon>TrojanGoTemplateWindow.xaml</DependentUpon>
</Compile>
<Page Include="MainWindow.xaml">
<Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType>
</Page>
<Compile Include="App.xaml.cs">
<DependentUpon>App.xaml</DependentUpon>
<SubType>Code</SubType>
</Compile>
<Compile Include="MainWindow.xaml.cs">
<DependentUpon>MainWindow.xaml</DependentUpon>
<SubType>Code</SubType>
</Compile>
<Page Include="ProofreadTimeWindow.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Include="ResultClientInformation.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Include="SSpluginWindow.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Include="Translations\ProxySU.zh-CN.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Include="Translations\ProxySU.en-US.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Include="Translations\ProxySU.zh-TW.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Include="XayTemplateWindow.xaml">
<Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType>
</Page>
<Page Include="V2RayTemplateWindow.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Include="TrojanGoTemplateWindow.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
</ItemGroup>
<ItemGroup>
<Compile Include="Properties\AssemblyInfo.cs">
<SubType>Code</SubType>
</Compile>
<Compile Include="Properties\Resources.Designer.cs">
<AutoGen>True</AutoGen>
<DesignTime>True</DesignTime>
<DependentUpon>Resources.resx</DependentUpon>
</Compile>
<Compile Include="Properties\Settings.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Settings.settings</DependentUpon>
<DesignTimeSharedInput>True</DesignTimeSharedInput>
</Compile>
<EmbeddedResource Include="Properties\Resources.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
</EmbeddedResource>
<None Include="..\.editorconfig">
<Link>.editorconfig</Link>
</None>
<None Include="packages.config" />
<None Include="Properties\Settings.settings">
<Generator>SettingsSingleFileGenerator</Generator>
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
</None>
</ItemGroup>
<ItemGroup>
<BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
<Visible>False</Visible>
<ProductName>.NET Framework 3.5 SP1</ProductName>
<Install>false</Install>
</BootstrapperPackage>
</ItemGroup>
<ItemGroup>
<Resource Include="ProxySU.ico" />
</ItemGroup>
<ItemGroup />
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<PropertyGroup>
<PostBuildEvent>
</PostBuildEvent>
</PropertyGroup>
<PropertyGroup>
<PreBuildEvent>
</PreBuildEvent>
</PropertyGroup>
</Project>

View File

@ -1,17 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<PublishUrlHistory>publish\</PublishUrlHistory>
<InstallUrlHistory />
<SupportUrlHistory />
<UpdateUrlHistory />
<BootstrapperUrlHistory />
<ErrorReportUrlHistory />
<FallbackCulture>zh-CN</FallbackCulture>
<VerifyUploadedFiles>false</VerifyUploadedFiles>
<ProjectView>ProjectFiles</ProjectView>
</PropertyGroup>
<PropertyGroup>
<EnableSecurityDebugging>false</EnableSecurityDebugging>
</PropertyGroup>
</Project>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

View File

@ -1,570 +0,0 @@
<Window x:Class="ProxySU.ResultClientInformation"
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="ResultClientInformation" Height="650" Width="600">
<Grid>
<Grid.RowDefinitions>
<RowDefinition ></RowDefinition>
<RowDefinition Height="0.8*"></RowDefinition>
<RowDefinition Height="0.12*"></RowDefinition>
</Grid.RowDefinitions>
<!-- Xray客户端配置参数 -->
<GroupBox Header="{DynamicResource GroupBoxHeaderClientParameter}" x:Name="GroupBoxXrayClient" Visibility="Visible" Grid.Row="0">
<Grid >
<Grid.ColumnDefinitions>
<ColumnDefinition Width="0.5*"></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition Width="0.8*"></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>
<TextBlock Text="{DynamicResource TextBlockServerAddress}" Grid.Column="0" Grid.Row="0" Margin="1" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
<TextBox x:Name="TextBoxHostAddressXray" IsReadOnly="True" Grid.Column="1" Grid.Row="0" Margin="2" MouseDoubleClick="TextBoxHostAddressXray_MouseDoubleClick"></TextBox>
<TextBlock x:Name="TextBlockVmessOrVlessXray" Text="" Grid.Column="2" Grid.Row="0" HorizontalAlignment="Center" VerticalAlignment="Center"></TextBlock>
<TextBlock Text="{DynamicResource TextBlockServerPort}" Grid.Column="0" Grid.Row="1" Margin="1" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
<TextBox x:Name="TextBoxPortXray" IsReadOnly="True" Grid.Column="1" Grid.Row="1" Margin="2" MouseDoubleClick="TextBoxPortXray_MouseDoubleClick"></TextBox>
<TextBlock Text="{DynamicResource TextBlockUserUUID}" Grid.Column="0" Grid.Row="2" Margin="1" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
<TextBox x:Name="TextBoxUUIDXray" IsReadOnly="True" Grid.Column="1" Grid.Row="2" Margin="2" MouseDoubleClick="TextBoxUUIDXray_MouseDoubleClick"></TextBox>
<Grid x:Name="GridNotTrojanParametersXray" Grid.Column="0" Grid.Row="3" Grid.ColumnSpan="2" Grid.RowSpan="7">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="0.5*"></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
</Grid.RowDefinitions>
<TextBlock x:Name="TextBlockUUIDextraXray" Text="{DynamicResource TextBlockV2RayAlterId}" Grid.Column="0" Grid.Row="0" Margin="1" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
<TextBox x:Name="TextBoxUUIDextraXray" IsReadOnly="False" Grid.Column="1" Grid.Row="0" Margin="2" MouseDoubleClick="TextBoxUUIDextraXray_MouseDoubleClick"></TextBox>
<TextBlock x:Name="TextBlockEncryptionXray" Text="{DynamicResource TextBlockEncryption}" Grid.Column="0" Grid.Row="1" Margin="1" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
<TextBox x:Name="TextBoxEncryptionXray" IsReadOnly="True" Grid.Column="1" Grid.Row="1" Margin="2" MouseDoubleClick="TextBoxEncryptionXray_MouseDoubleClick"></TextBox>
<TextBlock x:Name="TextBlockTransferProtocolXray" Text="{DynamicResource TextBlockTransferProtocol}" Grid.Column="0" Grid.Row="2" Margin="1" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
<TextBox x:Name="TextBoxTransmissionXray" IsReadOnly="True" Grid.Column="1" Grid.Row="2" Margin="2" MouseDoubleClick="TextBoxTransmissionXray_MouseDoubleClick"></TextBox>
<TextBlock x:Name="TextBlockCamouflageTypeXray" Text="{DynamicResource TextBlockCamouflageType}" Grid.Column="0" Grid.Row="3" Margin="1" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
<TextBox x:Name="TextBoxCamouflageTypeXray" IsReadOnly="True" Grid.Column="1" Grid.Row="3" Margin="2" MouseDoubleClick="TextBoxCamouflageTypeXray_MouseDoubleClick"></TextBox>
<TextBlock x:Name="TextBlockQuicEncryptionXray" Text="{DynamicResource TextBlockQuicEncryption}" Visibility="Collapsed" Grid.Column="0" Grid.Row="4" Margin="1" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
<TextBlock x:Name="TextBlockHostXray" Text="Host:" Grid.Column="0" Grid.Row="4" Margin="1" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
<TextBox x:Name="TextBoxHostQuicEncryptionXray" IsReadOnly="True" Grid.Column="1" Grid.Row="4" Margin="2" MouseDoubleClick="TextBoxHostQuicEncryptionXray_MouseDoubleClick"></TextBox>
<TextBlock x:Name="TextBlockPathXray" Text="{DynamicResource TextBlockClientPath}" Visibility="Visible" Grid.Column="0" Grid.Row="5" Margin="1" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
<TextBlock x:Name="TextBlockMkcpSeedXray" Text="{DynamicResource TextBlockClientMkcpSeed}" Visibility="Collapsed" Grid.Column="0" Grid.Row="5" Margin="1" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
<TextBlock x:Name="TextBlockQuicKeyXray" Text="{DynamicResource TextBlockClientQuicKey}" Visibility="Collapsed" Grid.Column="0" Grid.Row="5" Margin="1" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
<TextBox x:Name="TextBoxQuicKeyMkcpSeedPathXray" IsReadOnly="True" Grid.Column="1" Grid.Row="5" Margin="2" MouseDoubleClick="TextBoxQuicKeyMkcpSeedPathXray_MouseDoubleClick"></TextBox>
<TextBlock x:Name="TextBlocTLSonOrNoXray" Text="{DynamicResource TextBlockIsOrNotTLS}" Grid.Column="0" Grid.Row="6" Margin="1" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
<TextBox x:Name="TextBoxTLSXray" IsReadOnly="True" Grid.Column="1" Grid.Row="6" Margin="2" MouseDoubleClick="TextBoxTLSXray_MouseDoubleClick"></TextBox>
</Grid>
<TextBlock x:Name="TextBlockUUIDextraExplanationXray" Text="{DynamicResource TextBlockV2RayAlterIdExplain}" TextWrapping="Wrap" Grid.Column="2" Grid.Row="3" VerticalAlignment="Center"></TextBlock>
<TextBlock Text="{DynamicResource TextBlockEncryptionIsAuto}" Grid.Column="2" Grid.Row="4" Visibility="Collapsed" VerticalAlignment="Center"></TextBlock>
<TextBlock Text="{DynamicResource TextBlockCopyToClipExplain}" Grid.Column="0" Grid.Row="10" Grid.ColumnSpan="2" Margin="5"></TextBlock>
<GroupBox x:Name="GroupBoxSelectVlessVmessXtlsTcpWsXray" Grid.Column="2" Grid.Row="5" Grid.RowSpan="6" Margin="10,0,2,0">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="5"></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
</Grid.RowDefinitions>
<RadioButton x:Name="RadioButtonVlessTcpXtlsXray" Content="VLESS over TCP with XTLS" Grid.Column="1" Grid.Row="0" VerticalAlignment="Center" Checked="RadioButtonVlessTcpXtlsXray_Checked"></RadioButton>
<RadioButton x:Name="RadioButtonVlessTcpTlsXray" Content="VLESS over TCP with TLS" Grid.Column="1" Grid.Row="1" VerticalAlignment="Center" Checked="RadioButtonVlessTcpTlsXray_Checked"></RadioButton>
<RadioButton x:Name="RadioButtonVlessWsTlsXray" Content="VLESS over WS with TLS" Grid.Column="1" Grid.Row="2" VerticalAlignment="Center" Checked="RadioButtonVlessWsTlsXray_Checked"></RadioButton>
<RadioButton x:Name="RadioButtonVmessTcpTlsXray" Content="VMess over TCP with TLS" Grid.Column="1" Grid.Row="3" VerticalAlignment="Center" Checked="RadioButtonVmessTcpTlsXray_Checked"></RadioButton>
<RadioButton x:Name="RadioButtonVmessWsTlsXray" Content="VMess over WS with TLS" Grid.Column="1" Grid.Row="4" VerticalAlignment="Center" Checked="RadioButtonVmessWsTlsXray_Checked"></RadioButton>
<RadioButton x:Name="RadioButtonTrojanTcpTlsXray" Content="Trojan over TCP with TLS" Grid.Column="1" Grid.Row="5" VerticalAlignment="Center" Checked="RadioButtonTrojanTcpTlsXray_Checked" ></RadioButton>
</Grid>
</GroupBox>
</Grid>
</GroupBox>
<!-- V2Ray客户端配置参数 -->
<GroupBox Header="{DynamicResource GroupBoxHeaderClientParameter}" x:Name="GroupBoxV2rayClient" Visibility="Collapsed" Grid.Row="0">
<Grid >
<Grid.ColumnDefinitions>
<ColumnDefinition Width="0.5*"></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition Width="0.8*"></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>
<TextBlock Text="{DynamicResource TextBlockServerAddress}" Grid.Column="0" Grid.Row="0" Margin="1" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
<TextBox x:Name="TextBoxHostAddress" IsReadOnly="True" Grid.Column="1" Grid.Row="0" Margin="2" MouseDoubleClick="TextBoxHostAddress_MouseDoubleClick"></TextBox>
<TextBlock x:Name="TextBlockVmessOrVless" Text="" Grid.Column="2" Grid.Row="0" HorizontalAlignment="Center" VerticalAlignment="Center"></TextBlock>
<TextBlock Text="{DynamicResource TextBlockServerPort}" Grid.Column="0" Grid.Row="1" Margin="1" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
<TextBox x:Name="TextBoxPort" IsReadOnly="True" Grid.Column="1" Grid.Row="1" Margin="2" MouseDoubleClick="TextBoxPort_MouseDoubleClick"></TextBox>
<TextBlock Text="{DynamicResource TextBlockUserUUID}" Grid.Column="0" Grid.Row="2" Margin="1" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
<TextBox x:Name="TextBoxUUID" IsReadOnly="True" Grid.Column="1" Grid.Row="2" Margin="2" MouseDoubleClick="TextBoxUUID_MouseDoubleClick"></TextBox>
<Grid x:Name="GridNotTrojanParameters" Grid.Column="0" Grid.Row="3" Grid.ColumnSpan="2" Grid.RowSpan="7">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="0.5*"></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
</Grid.RowDefinitions>
<TextBlock x:Name="TextBlockUUIDextra" Text="{DynamicResource TextBlockV2RayAlterId}" Grid.Column="0" Grid.Row="0" Margin="1" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
<TextBox x:Name="TextBoxUUIDextra" IsReadOnly="False" Grid.Column="1" Grid.Row="0" Margin="2" MouseDoubleClick="TextBoxUUIDextra_MouseDoubleClick"></TextBox>
<TextBlock x:Name="TextBlockEncryption" Text="{DynamicResource TextBlockEncryption}" Grid.Column="0" Grid.Row="1" Margin="1" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
<TextBox x:Name="TextBoxEncryption" IsReadOnly="True" Grid.Column="1" Grid.Row="1" Margin="2" MouseDoubleClick="TextBoxEncryption_MouseDoubleClick"></TextBox>
<TextBlock x:Name="TextBlockTransferProtocol" Text="{DynamicResource TextBlockTransferProtocol}" Grid.Column="0" Grid.Row="2" Margin="1" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
<TextBox x:Name="TextBoxTransmission" IsReadOnly="True" Grid.Column="1" Grid.Row="2" Margin="2" MouseDoubleClick="TextBoxTransmission_MouseDoubleClick"></TextBox>
<TextBlock x:Name="TextBlockCamouflageType" Text="{DynamicResource TextBlockCamouflageType}" Grid.Column="0" Grid.Row="3" Margin="1" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
<TextBox x:Name="TextBoxCamouflageType" IsReadOnly="True" Grid.Column="1" Grid.Row="3" Margin="2" MouseDoubleClick="TextBoxCamouflageType_MouseDoubleClick"></TextBox>
<TextBlock x:Name="TextBlockQuicEncryption" Text="{DynamicResource TextBlockQuicEncryption}" Visibility="Collapsed" Grid.Column="0" Grid.Row="4" Margin="1" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
<TextBlock x:Name="TextBlockHost" Text="Host:" Grid.Column="0" Grid.Row="4" Margin="1" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
<TextBox x:Name="TextBoxHostQuicEncryption" IsReadOnly="True" Grid.Column="1" Grid.Row="4" Margin="2" MouseDoubleClick="TextBoxHostQuicEncryption_MouseDoubleClick"></TextBox>
<TextBlock x:Name="TextBlockPath" Text="{DynamicResource TextBlockClientPath}" Visibility="Visible" Grid.Column="0" Grid.Row="5" Margin="1" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
<TextBlock x:Name="TextBlockMkcpSeed" Text="{DynamicResource TextBlockClientMkcpSeed}" Visibility="Collapsed" Grid.Column="0" Grid.Row="5" Margin="1" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
<TextBlock x:Name="TextBlockQuicKey" Text="{DynamicResource TextBlockClientQuicKey}" Visibility="Collapsed" Grid.Column="0" Grid.Row="5" Margin="1" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
<TextBox x:Name="TextBoxQuicKeyMkcpSeedPath" IsReadOnly="True" Grid.Column="1" Grid.Row="5" Margin="2" MouseDoubleClick="TextBoxQuicKeyMkcpSeedPath_MouseDoubleClick"></TextBox>
<TextBlock x:Name="TextBlocTLSonOrNo" Text="{DynamicResource TextBlockIsOrNotTLS}" Grid.Column="0" Grid.Row="6" Margin="1" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
<TextBox x:Name="TextBoxTLS" IsReadOnly="True" Grid.Column="1" Grid.Row="6" Margin="2" MouseDoubleClick="TextBoxTLS_MouseDoubleClick"></TextBox>
</Grid>
<TextBlock x:Name="TextBlockUUIDextraExplanation" Text="{DynamicResource TextBlockV2RayAlterIdExplain}" TextWrapping="Wrap" Grid.Column="2" Grid.Row="3" VerticalAlignment="Center"></TextBlock>
<TextBlock Text="{DynamicResource TextBlockEncryptionIsAuto}" Grid.Column="2" Grid.Row="4" Visibility="Collapsed" VerticalAlignment="Center"></TextBlock>
<TextBlock Text="{DynamicResource TextBlockCopyToClipExplain}" Grid.Column="0" Grid.Row="10" Grid.ColumnSpan="2" Margin="5"></TextBlock>
<GroupBox x:Name="GroupBoxSelectVlessVmessXtlsTcpWs" Grid.Column="2" Grid.Row="5" Grid.RowSpan="6" Margin="10,0,2,0">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="5"></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
</Grid.RowDefinitions>
<RadioButton x:Name="RadioButtonVlessTcpXtls" Content="VLESS over TCP with XTLS" Grid.Column="1" Grid.Row="0" VerticalAlignment="Center" Checked="RadioButtonVlessTcpXtls_Checked" Visibility="Collapsed"></RadioButton>
<RadioButton x:Name="RadioButtonVlessTcpTls" Content="VLESS over TCP with TLS" Grid.Column="1" Grid.Row="1" VerticalAlignment="Center" Checked="RadioButtonVlessTcpTls_Checked"></RadioButton>
<RadioButton x:Name="RadioButtonVlessWsTls" Content="VLESS over WS with TLS" Grid.Column="1" Grid.Row="2" VerticalAlignment="Center" Checked="RadioButtonVlessWsTls_Checked"></RadioButton>
<RadioButton x:Name="RadioButtonVmessTcpTls" Content="VMess over TCP with TLS" Grid.Column="1" Grid.Row="3" VerticalAlignment="Center" Checked="RadioButtonVmessTcpTls_Checked"></RadioButton>
<RadioButton x:Name="RadioButtonVmessWsTls" Content="VMess over WS with TLS" Grid.Column="1" Grid.Row="4" VerticalAlignment="Center" Checked="RadioButtonVmessWsTls_Checked"></RadioButton>
<RadioButton x:Name="RadioButtonTrojanTcpTls" Content="Trojan over TCP with TLS" Grid.Column="1" Grid.Row="5" VerticalAlignment="Center" Checked="RadioButtonTrojanTcpTls_Checked" ></RadioButton>
</Grid>
</GroupBox>
</Grid>
</GroupBox>
<!-- Trojan-Go客户端配置参数 -->
<GroupBox Header="{DynamicResource GroupBoxHeaderClientParameter}" x:Name="GroupBoxTrojanGoClient" Visibility="Collapsed" Grid.Row="0">
<Grid >
<Grid.ColumnDefinitions>
<ColumnDefinition Width="0.5*"></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition Width="0.5*"></ColumnDefinition>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition></RowDefinition>
<RowDefinition Height="30"></RowDefinition>
<RowDefinition Height="30"></RowDefinition>
<RowDefinition Height="30"></RowDefinition>
<RowDefinition Height="30"></RowDefinition>
<RowDefinition Height="30"></RowDefinition>
<RowDefinition Height="30"></RowDefinition>
<RowDefinition Height="30"></RowDefinition>
<RowDefinition Height="30"></RowDefinition>
<RowDefinition></RowDefinition>
</Grid.RowDefinitions>
<TextBlock Text="{DynamicResource TextBlockServerAddress}" Grid.Column="0" Grid.Row="1" HorizontalAlignment="Right" VerticalAlignment="Center" ></TextBlock>
<TextBox x:Name="TextBoxTrojanGoServerHost" IsReadOnly="True" Grid.Column="1" Grid.Row="1" Margin="4" MouseDoubleClick="TextBoxTrojanGoServerHost_MouseDoubleClick"></TextBox>
<TextBlock Grid.Column="2" Grid.Row="1"></TextBlock>
<TextBlock Text="{DynamicResource TextBlockServerPort}" Grid.Column="0" Grid.Row="2" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
<TextBox x:Name="TextBoxTrojanGoServerPort" IsReadOnly="True" Grid.Column="1" Grid.Row="2" Margin="4" MouseDoubleClick="TextBoxTrojanGoServerPort_MouseDoubleClick"></TextBox>
<TextBlock Grid.Column="2" Grid.Row="2"></TextBlock>
<TextBlock Text="{DynamicResource TextBlockHostPassword}" Grid.Column="0" Grid.Row="3" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
<TextBox x:Name="TextBoxTrojanGoServerPassword" IsReadOnly="True" Grid.Column="1" Grid.Row="3" Margin="4" MouseDoubleClick="TextBoxTrojanGoServerPassword_MouseDoubleClick"></TextBox>
<TextBlock Text="SNI:" Grid.Column="0" Grid.Row="4" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
<TextBox x:Name="TextBoxTrojanGoSNI" IsReadOnly="True" Grid.Column="1" Grid.Row="4" Margin="4" MouseDoubleClick="TextBoxTrojanGoSNI_MouseDoubleClick" ></TextBox>
<TextBlock Text="Type:" Grid.Column="0" Grid.Row="5" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
<TextBox x:Name="TextBoxTrojanGoType" IsReadOnly="True" Grid.Column="1" Grid.Row="5" Margin="4" MouseDoubleClick="TextBoxTrojanGoType_MouseDoubleClick"></TextBox>
<TextBlock x:Name="TextBlockTrojanGoHost" Text="Host:" Grid.Column="0" Grid.Row="6" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
<TextBox x:Name="TextBoxTrojanGoHost" IsReadOnly="True" Grid.Column="1" Grid.Row="6" Margin="4" MouseDoubleClick="TextBoxTrojanGoHost_MouseDoubleClick"></TextBox>
<TextBlock x:Name="TextBlockTrojanGoWebSocketPath" Text="{DynamicResource TextBlockTrojanGoWebSocketPath}" Grid.Column="0" Grid.Row="7" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
<TextBox x:Name="TextBoxTrojanGoWSPath" IsReadOnly="True" Grid.Column="1" Grid.Row="7" Margin="4" MouseDoubleClick="TextBoxTrojanGoWSPath_MouseDoubleClick"></TextBox>
<TextBlock x:Name="TextBlockTrojanGoCaption" Grid.Column="2" Grid.Row="7"></TextBlock>
<TextBlock x:Name="TextBlockMuxSelect" Text="{DynamicResource CheckBoxMuxSelect}" Grid.Column="0" Grid.Row="8" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
<Grid x:Name="GridMuxSelect" Grid.Column="1" Grid.Row="8">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="85"></ColumnDefinition>
<ColumnDefinition Width="50"></ColumnDefinition>
<ColumnDefinition Width="85"></ColumnDefinition>
<ColumnDefinition Width="50"></ColumnDefinition>
<ColumnDefinition Width="10"></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
</Grid.ColumnDefinitions>
<TextBlock Text="concurrency:" Grid.Column="0" Margin="5" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
<TextBox x:Name="TextBoxConcurrency" Grid.Column="1" Margin="5" MouseDoubleClick="TextBoxConcurrency_MouseDoubleClick"/>
<TextBlock Text="idle_timeout:" Grid.Column="2" Margin="5" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
<TextBox x:Name="TextBoxIdle_timeout" Grid.Column="3" Margin="5" MouseDoubleClick="TextBoxIdle_timeout_MouseDoubleClick"/>
<TextBlock Grid.Column="4" Text="s" HorizontalAlignment="Left" VerticalAlignment="Center"></TextBlock>
</Grid>
<TextBlock x:Name="TextBlockExplainCheckBoxMuxSelectResult" Text="{DynamicResource TextBlockExplainCheckBoxMuxSelectResult}" TextWrapping="Wrap" Grid.Column="2" Grid.Row="8" Grid.RowSpan="2"></TextBlock>
<TextBlock Text="{DynamicResource TextBlockCopyToClipExplain}" Grid.Column="0" Grid.Row="9" Grid.ColumnSpan="2" Margin="5" VerticalAlignment="Center"></TextBlock>
</Grid>
</GroupBox>
<!-- Trojan客户端配置参数 -->
<GroupBox Header="{DynamicResource GroupBoxHeaderClientParameter}" 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="{DynamicResource TextBlockServerAddress}" Grid.Column="0" Grid.Row="1" HorizontalAlignment="Right" VerticalAlignment="Center" ></TextBlock>
<TextBox x:Name="TextBoxTrojanServerHost" IsReadOnly="True" Grid.Column="1" Grid.Row="1" Margin="4" MouseDoubleClick="TextBoxTrojanServerHost_MouseDoubleClick"></TextBox>
<TextBlock Grid.Column="2" Grid.Row="1"></TextBlock>
<TextBlock Text="{DynamicResource TextBlockServerPort}" Grid.Column="0" Grid.Row="2" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
<TextBox x:Name="TextBoxTrojanServerPort" IsReadOnly="True" Grid.Column="1" Grid.Row="2" Margin="4" MouseDoubleClick="TextBoxTrojanServerPort_MouseDoubleClick"></TextBox>
<TextBlock Grid.Column="2" Grid.Row="2"></TextBlock>
<TextBlock Text="{DynamicResource TextBlockHostPassword}" Grid.Column="0" Grid.Row="3" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
<TextBox x:Name="TextBoxTrojanServerPassword" IsReadOnly="True" Grid.Column="1" Grid.Row="3" Margin="4" MouseDoubleClick="TextBoxTrojanServerPassword_MouseDoubleClick"></TextBox>
<TextBlock Grid.Column="2" Grid.Row="3"></TextBlock>
<TextBlock Text="{DynamicResource TextBlockCopyToClipExplain}" Grid.Column="0" Grid.Row="10" Grid.ColumnSpan="2" Margin="5"></TextBlock>
</Grid>
</GroupBox>
<!-- NaiveProxy客户端配置参数 -->
<GroupBox Header="{DynamicResource GroupBoxHeaderClientParameter}" x:Name="GroupBoxNaiveProxyClient" Visibility="Collapsed" Grid.Row="0">
<Grid >
<Grid.ColumnDefinitions>
<ColumnDefinition Width="0.5*"></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition Width="0.5*"></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>
<RowDefinition></RowDefinition>
</Grid.RowDefinitions>
<TextBlock Text="{DynamicResource TextBlockServerAddress}" Grid.Column="0" Grid.Row="1" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
<TextBox x:Name="TextBoxNaiveServerHost" IsReadOnly="True" Grid.Column="1" Grid.Row="1" Margin="4" MouseDoubleClick="TextBoxNaiveServerHost_MouseDoubleClick"></TextBox>
<TextBlock Text="{DynamicResource TextBlockHostPart}" Grid.Column="0" Grid.Row="2" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
<TextBox x:Name="TextBoxNaivePort" Text="443" IsReadOnly="True" Grid.Column="1" Grid.Row="2" Margin="4" MouseDoubleClick="TextBoxNaivePort_MouseDoubleClick"></TextBox>
<TextBlock Text="{DynamicResource TextBlockHostUser}" Grid.Column="0" Grid.Row="3" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
<TextBox x:Name="TextBoxNaiveUser" IsReadOnly="True" Grid.Column="1" Grid.Row="3" Margin="4" MouseDoubleClick="TextBoxNaiveUser_MouseDoubleClick"></TextBox>
<TextBlock Text="{DynamicResource TextBlockHostPassword}" Grid.Column="0" Grid.Row="4" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
<TextBox x:Name="TextBoxNaivePassword" IsReadOnly="True" Grid.Column="1" Grid.Row="4" Margin="4" MouseDoubleClick="TextBoxNaivePassword_MouseDoubleClick"></TextBox>
<TextBlock Text="{DynamicResource TextBlockCopyToClipExplain}" Grid.Column="0" Grid.Row="6" Grid.ColumnSpan="2" Margin="5"></TextBlock>
<!--<Button x:Name="ButtonOpenDir" Content="确定" Grid.Column="1" Grid.Row="4" Margin="40,3,40,3" Click="ButtonOpenDir_Click"></Button>-->
</Grid>
</GroupBox>
<!-- SSR+TLS+Caddy客户端配置参数 -->
<GroupBox Header="{DynamicResource GroupBoxHeaderClientParameter}" x:Name="GroupBoxSSRClient" Visibility="Collapsed" Grid.Row="0">
<Grid >
<Grid.ColumnDefinitions>
<ColumnDefinition Width="0.6*"></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="30"></RowDefinition>
<RowDefinition Height="30"></RowDefinition>
<RowDefinition Height="30"></RowDefinition>
<RowDefinition Height="30"></RowDefinition>
<RowDefinition Height="30"></RowDefinition>
<RowDefinition Height="30"></RowDefinition>
<RowDefinition Height="30"></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
</Grid.RowDefinitions>
<TextBlock Text="{DynamicResource TextBlockServerAddress}" Grid.Column="0" Grid.Row="1" Margin="1" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
<TextBox x:Name="TextBoxSSRHostAddress" IsReadOnly="True" Grid.Column="1" Grid.Row="1" Margin="4" MouseDoubleClick="TextBoxSSRHostAddress_MouseDoubleClick"></TextBox>
<TextBlock Text="{DynamicResource TextBlockServerPort}" Grid.Column="0" Grid.Row="2" Margin="1" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
<TextBox x:Name="TextBoxSSRPort" IsReadOnly="True" Grid.Column="1" Grid.Row="2" Margin="4" MouseDoubleClick="TextBoxSSRPort_MouseDoubleClick"></TextBox>
<TextBlock Text="{DynamicResource TextBlockTrojanGoPassword}" Grid.Column="0" Grid.Row="3" Margin="1" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
<TextBox x:Name="TextBoxSSRUUID" IsReadOnly="True" Grid.Column="1" Grid.Row="3" Margin="4" MouseDoubleClick="TextBoxSSRUUID_MouseDoubleClick"></TextBox>
<TextBlock Text="{DynamicResource TextBlockEncryption}" Grid.Column="0" Grid.Row="4" Margin="1" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
<TextBox x:Name="TextBoxSSREncryption" IsReadOnly="True" Grid.Column="1" Grid.Row="4" Margin="4" MouseDoubleClick="TextBoxSSREncryption_MouseDoubleClick"></TextBox>
<TextBlock Text="{DynamicResource TextBlockTransferProtocol}" Grid.Column="0" Grid.Row="5" Margin="1" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
<TextBox x:Name="TextBoxSSRTransmission" IsReadOnly="True" Grid.Column="1" Grid.Row="5" Margin="4" MouseDoubleClick="TextBoxSSRTransmission_MouseDoubleClick"></TextBox>
<TextBlock Text="{DynamicResource TextBlockCamouflageType}" Grid.Column="0" Grid.Row="6" Margin="1" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
<TextBox x:Name="TextBoxSSRCamouflageType" IsReadOnly="True" Grid.Column="1" Grid.Row="6" Margin="4" MouseDoubleClick="TextBoxSSRCamouflageType_MouseDoubleClick"></TextBox>
<TextBlock Text="{DynamicResource TextBlockCopyToClipExplain}" Grid.Column="0" Grid.Row="7" Grid.ColumnSpan="2" Margin="5" VerticalAlignment="Bottom"></TextBlock>
<!--<TextBlock x:Name="TextBlocSSRTLSonOrNo" Text="{DynamicResource TextBlockIsOrNotTLS}" Grid.Column="0" Grid.Row="7" Margin="1" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
<TextBox x:Name="TextBoxSSRTLS" IsReadOnly="True" Grid.Column="1" Grid.Row="7" Margin="2"></TextBox>
<TextBlock x:Name="TextBlocSSRTLSonOrNoExplain" Text="" Grid.Column="2" Grid.Row="7"></TextBlock>
<TextBlock x:Name="TextBlockSSRHost" Text="Host:" Grid.Column="0" Grid.Row="8" Margin="1" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
<TextBox x:Name="TextBoxSSRHost" IsReadOnly="True" Grid.Column="1" Grid.Row="8" Margin="2"></TextBox>
<TextBlock x:Name="TextBlockSSRHostExplain" Text="" Grid.Column="2" Grid.Row="8"></TextBlock>-->
<!--<TextBlock x:Name="TextBlockSSRPath" Text="{DynamicResource TextBlockClientPath}" Grid.Column="0" Grid.Row="9" Margin="1" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
<TextBox x:Name="TextBoxSSRPath" IsReadOnly="True" Grid.Column="1" Grid.Row="9" Margin="2"></TextBox>
<TextBlock x:Name="TextBlockSSRPathExplain" Text="" Grid.Column="2" Grid.Row="9"></TextBlock>
<TextBlock x:Name="TextBlockSSRQuicKey" Text="{DynamicResource TextBlockClientMkcpQuicKey}" Grid.Column="0" Grid.Row="10" Margin="1" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
<TextBox x:Name="TextBoxSSRQuicKey" IsReadOnly="True" Grid.Column="1" Grid.Row="10" Margin="2"></TextBox>
<TextBlock x:Name="TextBlockSSRQuicKeyExplain" Text="" Grid.Column="2" Grid.Row="10"></TextBlock>-->
</Grid>
</GroupBox>
<!-- SS客户端配置参数 -->
<GroupBox Header="{DynamicResource GroupBoxHeaderClientParameter}" x:Name="GroupBoxClientSS" Visibility="Collapsed" Grid.Row="0">
<Grid >
<Grid.ColumnDefinitions>
<ColumnDefinition Width="0.6*"></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>
</Grid.RowDefinitions>
<TextBlock Text="{DynamicResource TextBlockServerAddress}" Grid.Column="0" Grid.Row="0" Margin="1" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
<TextBox x:Name="TextBoxHostAddressSS" IsReadOnly="True" Grid.Column="1" Grid.Row="0" Margin="2" VerticalAlignment="Center" MouseDoubleClick="TextBoxHostAddressSS_MouseDoubleClick"/>
<TextBlock Text="" Grid.Column="2" Grid.Row="0"></TextBlock>
<TextBlock Text="{DynamicResource TextBlockServerPort}" Grid.Column="0" Grid.Row="1" Margin="1" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
<TextBox x:Name="TextBoxPortSS" IsReadOnly="True" Grid.Column="1" Grid.Row="1" Margin="2" VerticalAlignment="Center" MouseDoubleClick="TextBoxPortSS_MouseDoubleClick"/>
<TextBlock Text="" Grid.Column="2" Grid.Row="1"></TextBlock>
<TextBlock Text="{DynamicResource TextBlockTrojanGoPassword}" Grid.Column="0" Grid.Row="2" Margin="1" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
<TextBox x:Name="TextBoxPasswordSS" IsReadOnly="True" Grid.Column="1" Grid.Row="2" Margin="2" VerticalAlignment="Center" MouseDoubleClick="TextBoxPasswordSS_MouseDoubleClick"/>
<TextBlock Text="" Grid.Column="2" Grid.Row="2"></TextBlock>
<!--<TextBlock x:Name="TextBlockSSRUUIDextra" Text="{DynamicResource TextBlockV2RayAlterId}" Grid.Column="0" Grid.Row="3" Margin="1" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
<TextBox x:Name="TextBoxSSRUUIDextra" IsReadOnly="False" Grid.Column="1" Grid.Row="3" Margin="2"></TextBox>
<TextBlock x:Name="TextBlockSSRUUIDextraExplanation" Text="{DynamicResource TextBlockV2RayAlterIdExplain}" TextWrapping="Wrap" Grid.Column="2" Grid.Row="3"></TextBlock>-->
<TextBlock Text="{DynamicResource TextBlockEncryption}" Grid.Column="0" Grid.Row="3" Margin="1" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
<TextBox x:Name="TextBoxEncryptionSS" IsReadOnly="True" Grid.Column="1" Grid.Row="3" Margin="2" VerticalAlignment="Center" MouseDoubleClick="TextBoxEncryptionSS_MouseDoubleClick"/>
<!--<TextBlock Text="{DynamicResource TextBlockEncryptionIsAuto}" Grid.Column="2" Grid.Row="3"></TextBlock>-->
<TextBlock x:Name="TextBlockPluginNameExplainSS" Text="{DynamicResource TextBlockPluginNameExplainSS}" Grid.Column="0" Grid.Row="4" Margin="1" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
<TextBox x:Name="TextBoxPluginNameExplainSS" IsReadOnly="True" Grid.Column="1" Grid.Row="4" Margin="2" VerticalAlignment="Center" MouseDoubleClick="TextBoxPluginNameExplainSS_MouseDoubleClick"/>
<TextBox x:Name="TextBoxPluginNameExplainSSpc" IsReadOnly="True" Grid.Column="1" Grid.Row="4" Margin="2" Visibility="Collapsed" VerticalAlignment="Center" MouseDoubleClick="TextBoxPluginNameExplainSSpc_MouseDoubleClick"/>
<TextBlock Text="" Grid.Column="2" Grid.Row="4"></TextBlock>
<TextBlock x:Name="TextBlockPluginOptionExplainSS" Text="{DynamicResource TextBlockPluginOptionExplainSS}" Grid.Column="0" Grid.Row="5" Margin="1" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
<TextBox x:Name="TextBoxPluginOptionExplainSS" IsReadOnly="True" Grid.Column="1" Grid.Row="5" Margin="2" VerticalAlignment="Center" MouseDoubleClick="TextBoxPluginOptionExplainSS_MouseDoubleClick"/>
<TextBlock Text="" Grid.Column="2" Grid.Row="5"></TextBlock>
<TextBlock Text="{DynamicResource TextBlockCopyToClipExplain}" Grid.Column="0" Grid.Row="6" Grid.ColumnSpan="2" Margin="5"></TextBlock>
<TextBlock x:Name="TextBlockClientPromptSS" Text="{DynamicResource TextBlockClientPromptSS}" Foreground="Red" TextWrapping="Wrap" Grid.Column="0" Grid.Row="7" Grid.ColumnSpan="3" Margin="10,0,0,0"></TextBlock>
<RadioButton x:Name="RadioButtonMobile" Content="{DynamicResource RadioButtonMobileSS}" Grid.Column="1" Grid.Row="8" HorizontalAlignment="Left" VerticalAlignment="Center" Checked="RadioButtonMobile_Checked"></RadioButton>
<RadioButton x:Name="RadioButtonPC" Content="{DynamicResource RadioButtonPCSS}" Grid.Column="2" Grid.Row="8" HorizontalAlignment="Left" VerticalAlignment="Center" Checked="RadioButtonPC_Checked"></RadioButton>
</Grid>
</GroupBox>
<!-- MTProto客户端配置参数 -->
<GroupBox Header="{DynamicResource GroupBoxHeaderClientParameter}" x:Name="GroupBoxClientMTProto" Visibility="Collapsed" Grid.Row="0" Grid.RowSpan="2">
<Grid >
<Grid.ColumnDefinitions>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="30"></RowDefinition>
<RowDefinition></RowDefinition>
</Grid.RowDefinitions>
<RadioButton x:Name="RadioButtonMtgIpv4" Content="IPV4" Grid.Column="0" Grid.Row="0" VerticalAlignment="Center" HorizontalAlignment="Center" Checked="RadioButtonMtgIpv4_Checked"></RadioButton>
<RadioButton x:Name="RadioButtonMtgIpv6" Content="IPV6" Grid.Column="1" Grid.Row="0" VerticalAlignment="Center" HorizontalAlignment="Center" Checked="RadioButtonMtgIpv6_Checked"></RadioButton>
<Grid x:Name="GridMtgIpv4" Grid.Column="0" Grid.Row="2" Grid.ColumnSpan="2">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="0.2*"></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition></RowDefinition>
<RowDefinition Height="0.3*"></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition Height="0.3*"></RowDefinition>
</Grid.RowDefinitions>
<TextBlock Text="{DynamicResource TextBlockShareQRcodeMtgTgIpv4}" Grid.Column="0" Grid.Row="0" HorizontalAlignment="Center" VerticalAlignment="Center"></TextBlock>
<Image x:Name="ImageShareQRcodeMtgTgIpv4" Grid.Column="1" Grid.Row="0"></Image>
<TextBlock Text="{DynamicResource TextBlockURLMtgTgIpv4}" TextWrapping="Wrap" Grid.Column="0" Grid.Row="1" HorizontalAlignment="Center" VerticalAlignment="Center"></TextBlock>
<TextBox x:Name="TextBoxURLMtgTgIpv4" TextWrapping="Wrap" Grid.Column="1" Grid.Row="1" MouseDoubleClick="TextBoxURLMtgTgIpv4_MouseDoubleClick"></TextBox>
<TextBlock Text="{DynamicResource TextBlockShareQRcodeMtgTmeIpv4}" Grid.Column="0" Grid.Row="2" HorizontalAlignment="Center" VerticalAlignment="Center"></TextBlock>
<Image x:Name="ImageShareQRcodeMtgTmeIpv4" Grid.Column="1" Grid.Row="2"></Image>
<TextBlock Text="{DynamicResource TextBlockURLMtgTmeIpv4}" TextWrapping="Wrap" Grid.Column="0" Grid.Row="3" HorizontalAlignment="Center" VerticalAlignment="Center"></TextBlock>
<TextBox x:Name="TextBoxURLMtgTmeIpv4" TextWrapping="Wrap" Grid.Column="1" Grid.Row="3" MouseDoubleClick="TextBoxURLMtgTmeIpv4_MouseDoubleClick"></TextBox>
</Grid>
<Grid x:Name="GridMtgIpv6" Grid.Column="0" Grid.Row="2" Grid.ColumnSpan="2" Visibility="Collapsed">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="0.2*"></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition></RowDefinition>
<RowDefinition Height="0.3*"></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition Height="0.3*"></RowDefinition>
</Grid.RowDefinitions>
<TextBlock Text="{DynamicResource TextBlockShareQRcodeMtgTgIpv4}" Grid.Column="0" Grid.Row="0" HorizontalAlignment="Center" VerticalAlignment="Center"></TextBlock>
<Image x:Name="ImageShareQRcodeMtgTgIpv6" Grid.Column="1" Grid.Row="0"></Image>
<TextBlock Text="{DynamicResource TextBlockURLMtgTgIpv4}" TextWrapping="Wrap" Grid.Column="0" Grid.Row="1" HorizontalAlignment="Center" VerticalAlignment="Center"></TextBlock>
<TextBox x:Name="TextBoxURLMtgTgIpv6" TextWrapping="Wrap" Grid.Column="1" Grid.Row="1" MouseDoubleClick="TextBoxURLMtgTgIpv6_MouseDoubleClick"></TextBox>
<TextBlock Text="{DynamicResource TextBlockShareQRcodeMtgTmeIpv4}" Grid.Column="0" Grid.Row="2" HorizontalAlignment="Center" VerticalAlignment="Center"></TextBlock>
<Image x:Name="ImageShareQRcodeMtgTmeIpv6" Grid.Column="1" Grid.Row="2"></Image>
<TextBlock Text="{DynamicResource TextBlockURLMtgTmeIpv4}" TextWrapping="Wrap" Grid.Column="0" Grid.Row="3" HorizontalAlignment="Center" VerticalAlignment="Center"></TextBlock>
<TextBox x:Name="TextBoxURLMtgTmeIpv6" TextWrapping="Wrap" Grid.Column="1" Grid.Row="3" MouseDoubleClick="TextBoxURLMtgTmeIpv6_MouseDoubleClick"></TextBox>
</Grid>
</Grid>
</GroupBox>
<!--<GroupBox Header="{DynamicResource GroupBoxHeaderClientParameter}" 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 x:Name="GroupBoxClientQRandURL" Header="{DynamicResource GrouBoxHeaderUrlOrQR}" Grid.Row="1" Visibility="Visible">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="0.5*"></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition Width="0.6*"></ColumnDefinition>
</Grid.ColumnDefinitions>
<TextBlock x:Name="TextBlockQrURLexplain" Text="{DynamicResource TextBlockQrURLexplainV2Ray}" TextWrapping="Wrap" Grid.Column="0"></TextBlock>
<Image x:Name="ImageShareQRcode" Grid.Column="1"></Image>
<Grid x:Name="GridShareURL" Grid.Column="2">
<Grid.RowDefinitions>
<RowDefinition></RowDefinition>
<RowDefinition Height="0.15*"></RowDefinition>
</Grid.RowDefinitions>
<TextBox x:Name="TextBoxURL" TextWrapping="Wrap" Grid.Row="0" MouseDoubleClick="TextBoxURL_MouseDoubleClick"></TextBox>
<TextBlock Text="{DynamicResource TextBlockCopyToClipExplain}" TextWrapping="Wrap" Grid.Row="1"></TextBlock>
</Grid>
</Grid>
</GroupBox>
<GroupBox x:Name="GroupBoxClientSSpc" Header="{DynamicResource GrouBoxHeaderUrlOrQR}" Grid.Row="1" Visibility="Collapsed">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="0.5*"></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition Width="0.6*"></ColumnDefinition>
</Grid.ColumnDefinitions>
<TextBlock x:Name="TextBlockQrURLexplainSSpc" TextWrapping="Wrap" Grid.Column="0"></TextBlock>
<Image x:Name="ImageShareQRcodeSSpc" Grid.Column="1"></Image>
<Grid x:Name="GridShareURLpc" Grid.Column="2">
<Grid.RowDefinitions>
<RowDefinition></RowDefinition>
<RowDefinition Height="0.15*"></RowDefinition>
</Grid.RowDefinitions>
<TextBox x:Name="TextBoxURLpcSS" TextWrapping="Wrap" Grid.Column="2" MouseDoubleClick="TextBoxURLpcSS_MouseDoubleClick"></TextBox>
<TextBlock Text="{DynamicResource TextBlockCopyToClipExplain}" TextWrapping="Wrap" Grid.Row="1"></TextBlock>
</Grid>
</Grid>
</GroupBox>
<Grid Grid.Row="2">
<Grid.ColumnDefinitions>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition Width="0.3*"></ColumnDefinition>
</Grid.ColumnDefinitions>
<TextBlock Text="{DynamicResource TextBlockUsedParameter}" Grid.Column="0" Grid.Row="0" Grid.ColumnSpan="1" Margin="5" TextWrapping="Wrap"></TextBlock>
<Button x:Name="ButtonOpenSaveDir" Content="{DynamicResource ButtonTrojanGoTemplateOK}" Grid.Column="1" Grid.Row="0" Grid.RowSpan="1" Margin="5" Click="ButtonOpenSaveDir_Click"></Button>
</Grid>
</Grid>
</Window>

File diff suppressed because it is too large Load Diff

View File

@ -1,279 +0,0 @@
<Window x:Class="ProxySU.SSpluginWindow"
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="SSpluginWindow" Height="600" Width="850">
<Window.Resources>
<Style BasedOn="{StaticResource {x:Type TextBox}}"
TargetType="TextBox"
x:Key="TitleText">
<Style.Triggers>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="Text" Value=""/>
<Condition Property="TextBox.IsFocused" Value="false"/>
</MultiTrigger.Conditions>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate>
<Border BorderThickness="1" BorderBrush="Gray" Margin="0">
<TextBlock x:Name="MainTextBlock" Text="{TemplateBinding TextBox.Tag}" Width="{TemplateBinding TextBox.ActualWidth}" Foreground="Gray" VerticalAlignment="Center" HorizontalAlignment="Left"/>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</MultiTrigger>
</Style.Triggers>
</Style>
</Window.Resources>
<Grid>
<Grid.RowDefinitions>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
</Grid.RowDefinitions>
<GroupBox Header="{DynamicResource ButtonTemplateConfigurationSS}" Grid.Row="0" Grid.RowSpan="3">
<Grid>
<TabControl x:Name="TabControlTemplate">
<TabItem Header="{DynamicResource TabItemHeaderV2RayHotPlan}" Width="110" Height="30">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="1.5*"></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition Width="0.3*"></ColumnDefinition>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition></RowDefinition>
<RowDefinition Height="1.2*"></RowDefinition>
<RowDefinition Height="1.2*"></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
</Grid.RowDefinitions>
<RadioButton x:Name="RadioButtonWebSocketTLSWebFrontSSHot" Content="{DynamicResource RadioButtonWebSocketTLSWebFrontSS}" GroupName="TemplateGroup" Grid.Column="0" Grid.Row="1" HorizontalAlignment="Left" VerticalAlignment="Center" Checked="RadioButtonUseDomainWebsocketTls_Checked"></RadioButton>
<TextBlock Text="{DynamicResource TextBlockV2RayWebSocketTlsWebExplain}" TextWrapping="Wrap" Grid.Column="1" Grid.Row="1" Grid.ColumnSpan="3" VerticalAlignment="Center" HorizontalAlignment="Left"></TextBlock>
<!--<RadioButton x:Name="RadioButtonHTTP2WebHot" Content="HTTP2+TLS+Web" GroupName="TemplateGroup" Grid.Column="0" Grid.Row="2" HorizontalAlignment="Left" VerticalAlignment="Center"></RadioButton>
<TextBlock Text="{DynamicResource TextBlockV2RayHttp2TlsWebExplain}" TextWrapping="Wrap" Grid.Column="1" Grid.Row="2" Grid.ColumnSpan="3" VerticalAlignment="Center" HorizontalAlignment="Left"></TextBlock>-->
</Grid>
</TabItem>
<!--<TabItem Header="{DynamicResource TabItemHeaderV2RayTcpProtocol}" Width="110" Height="30">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition Height="1.3*"></RowDefinition>
<RowDefinition Height="1.7*"></RowDefinition>
<RowDefinition></RowDefinition>
</Grid.RowDefinitions>
<RadioButton x:Name="RadioButtonTCP" Content="TCP" GroupName="TemplateGroup" Grid.Column="0" Grid.Row="1" Checked="RadioButtonTCP_Checked" VerticalAlignment="Center" HorizontalAlignment="Left"></RadioButton>
<TextBlock Text="{DynamicResource TextBlockV2RayTcpExplain}" Grid.Column="1" Grid.Row="1" Grid.ColumnSpan="3" HorizontalAlignment="Left" VerticalAlignment="Center"></TextBlock>
<RadioButton x:Name="RadioButtonTCPhttp" Content="{DynamicResource RadioButtonV2RayTcpHttp}" GroupName="TemplateGroup" Grid.Column="0" Grid.Row="2" Checked="RadioButtonTCPhttp_Checked" VerticalAlignment="Center" HorizontalAlignment="Left" ></RadioButton>
<TextBlock Text="{DynamicResource TextBlockV2RayTcpHttpExplain}" TextWrapping="Wrap" Grid.Column="1" Grid.Row="2" Grid.ColumnSpan="3" VerticalAlignment="Center" HorizontalAlignment="Left"></TextBlock>
<RadioButton x:Name="RadioButtonTCP2TLS" Content="TCP+TLS" GroupName="TemplateGroup" Grid.Column="0" Grid.Row="3" Checked="RadioButtonTCP2TLS_Checked" VerticalAlignment="Center" HorizontalAlignment="Left" />
<TextBlock Text="{DynamicResource TextBlockV2RayTcpTlsExplain}" TextWrapping="Wrap" Grid.Column="1" Grid.Row="3" Grid.ColumnSpan="3" VerticalAlignment="Center" HorizontalAlignment="Left"></TextBlock>
<RadioButton x:Name="RadioButtonTcpTLS2SelfSigned" Content="{DynamicResource RadioButtonV2RayTcpTlsSelfSigned}" GroupName="TemplateGroup" Grid.Column="0" Grid.Row="4" Checked="RadioButtonTCP2TLSnoDomain_Checked" VerticalAlignment="Center" HorizontalAlignment="Left" />
<TextBlock Text="{DynamicResource TextBlockV2RayTcpTlsSelfSignedExplain}" TextWrapping="Wrap" Grid.Column="1" Grid.Row="4" Grid.ColumnSpan="3" VerticalAlignment="Center" HorizontalAlignment="Left"></TextBlock>
<TextBlock Text="{DynamicResource TextBlockV2RaySelfSignedShadowrocketExplain}" TextWrapping="Wrap" Grid.Column="4" Grid.Row="4" HorizontalAlignment="Left" VerticalAlignment="Center" ></TextBlock>
<RadioButton x:Name="RadioButtonVlessTcpTlsWeb" Content="VLESS+TCP+TLS+Web" GroupName="TemplateGroup" Grid.Column="0" Grid.Row="5" Checked="RadioButtonTCP2TLS_Checked" VerticalAlignment="Center" HorizontalAlignment="Left" ></RadioButton>
<TextBlock Text="{DynamicResource TextBlockV2RayVlessTcpTlsWebExplain}" TextWrapping="Wrap" Grid.Column="1" Grid.Row="5" Grid.ColumnSpan="3" VerticalAlignment="Center" HorizontalAlignment="Left"></TextBlock>
</Grid>
</TabItem>-->
<TabItem Header="{DynamicResource TabItemHeaderV2RayPluginSS}" Width="110" Height="30">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="1.5*"></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition Height="1.3*"></RowDefinition>
<RowDefinition Height="1.3*"></RowDefinition>
<RowDefinition></RowDefinition>
</Grid.RowDefinitions>
<TextBlock Text="{DynamicResource TextBlockV2rayPluginPointSS}" Foreground="Red" TextWrapping="Wrap" Grid.Column="0" Grid.Row="0" Grid.ColumnSpan="5" HorizontalAlignment="Left" VerticalAlignment="Center"></TextBlock>
<RadioButton x:Name="RadioButtonWebSocketSS" Content="SS+WebSocket" GroupName="TemplateGroup" Grid.Column="0" Grid.Row="1" Checked="RadioButtonNonePluginSS_Checked" HorizontalAlignment="Left" VerticalAlignment="Center"/>
<TextBlock Text="{DynamicResource TextBlockV2RayWebSocketExplain}" TextWrapping="Wrap" Grid.Column="1" Grid.Row="1" Grid.ColumnSpan="3" HorizontalAlignment="Left" VerticalAlignment="Center"></TextBlock>
<!--<RadioButton x:Name="RadioButtonWebSocketTLSWebSS" Content="{DynamicResource RadioButtonWebSocketTLSWebSS}" GroupName="TemplateGroup" Grid.Column="0" Grid.Row="2" Checked="RadioButtonHTTP2_Checked" HorizontalAlignment="Left" VerticalAlignment="Center"/>
<TextBlock Text="{DynamicResource TextBlockV2RayWebSocketTlsExplain}" TextWrapping="Wrap" Grid.Column="1" Grid.Row="2" Grid.ColumnSpan="3" HorizontalAlignment="Left" VerticalAlignment="Center"></TextBlock>-->
<RadioButton x:Name="RadioButtonWebSocketTLSWebFrontSS" Content="{DynamicResource RadioButtonWebSocketTLSWebFrontSS}" GroupName="TemplateGroup" Grid.Column="0" Grid.Row="3" Checked="RadioButtonUseDomainWebsocketTls_Checked" HorizontalAlignment="Left" VerticalAlignment="Center"></RadioButton>
<TextBlock Text="{DynamicResource TextBlockV2RayWebSocketTlsWebExplain}" TextWrapping="Wrap" Grid.Column="1" Grid.Row="3" Grid.ColumnSpan="3" HorizontalAlignment="Left" VerticalAlignment="Center"></TextBlock>
<RadioButton x:Name="RadioButtonQuicSS" Content="{DynamicResource RadioButtonQuicSS}" GroupName="TemplateGroup" Grid.Column="0" Grid.Row="4" Checked="RadioButtonUseDomainTls_Checked" HorizontalAlignment="Left" VerticalAlignment="Center"></RadioButton>
<TextBlock Text="{DynamicResource TextBlockQuicExplainSS}" TextWrapping="Wrap" Grid.Column="1" Grid.Row="4" Grid.ColumnSpan="3" HorizontalAlignment="Left" VerticalAlignment="Center"></TextBlock>
<!--<TextBlock Text="{DynamicResource TextBlockV2RaySelfSignedShadowrocketExplain}" TextWrapping="Wrap" Grid.Column="4" Grid.Row="4" HorizontalAlignment="Left" VerticalAlignment="Center" ></TextBlock>-->
<!--<TextBlock Text="{DynamicResource TextBlockV2RayPluginPointSS}" TextWrapping="Wrap" Margin="10,0,10,0" Grid.Column="0" Grid.Row="5" Grid.ColumnSpan="5" HorizontalAlignment="Left" VerticalAlignment="Center"></TextBlock>-->
</Grid>
</TabItem>
<TabItem Header="{DynamicResource TabItemHeaderOtherPluginsSS}" Width="100" Height="30">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="0.5*"></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition></RowDefinition>
<RowDefinition Height="1.5*"></RowDefinition>
<RowDefinition Height="1.2*"></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition Height="0*"></RowDefinition>
</Grid.RowDefinitions>
<TextBlock Text="{DynamicResource TextBlockGoQuietPluginPointSS}" Foreground="Red" TextWrapping="Wrap" Grid.Column="0" Grid.Row="0" Grid.ColumnSpan="5" HorizontalAlignment="Left" VerticalAlignment="Center" Visibility="Collapsed"></TextBlock>
<RadioButton x:Name="RadioButtonKcptunPluginSS" Content="kcptun-plugin" GroupName="TemplateGroup" Grid.Column="0" Grid.Row="1" Checked="RadioButtonNonePluginSS_Checked" HorizontalAlignment="Left" VerticalAlignment="Center"></RadioButton>
<TextBlock Text="{DynamicResource TextBlockKcptunPluginExplainSS}" TextWrapping="Wrap" Grid.Column="1" Grid.Row="1" Grid.ColumnSpan="3" HorizontalAlignment="Left" VerticalAlignment="Center"></TextBlock>
<RadioButton x:Name="RadioButtonGoQuietPluginSS" Content="GoQuiet-plugin" GroupName="TemplateGroup" Grid.Column="0" Grid.Row="2" Checked="RadioButtonUseDomainTls_Checked" HorizontalAlignment="Left" VerticalAlignment="Center" Visibility="Collapsed"></RadioButton>
<TextBlock Text="{DynamicResource TextBlockGoQuietPluginExplainSS}" TextWrapping="Wrap" Grid.Column="1" Grid.Row="2" Grid.ColumnSpan="3" HorizontalAlignment="Left" VerticalAlignment="Center" Visibility="Collapsed"></TextBlock>
<RadioButton x:Name="RadioButtonCloakPluginSS" Content="Cloak-plugin" GroupName="TemplateGroup" Grid.Column="0" Grid.Row="3" Checked="RadioButtonUseDomainTls_Checked" HorizontalAlignment="Left" VerticalAlignment="Center" Visibility="Collapsed"></RadioButton>
<TextBlock Text="{DynamicResource TextBlockCloakPluginExplainSS}" TextWrapping="Wrap" Grid.Column="1" Grid.Row="3" Grid.ColumnSpan="3" HorizontalAlignment="Left" VerticalAlignment="Center" Visibility="Collapsed"></TextBlock>
<!--<TextBlock Text="{DynamicResource TextBlockV2RaySelfSignedShadowrocketExplain}" TextWrapping="Wrap" Grid.Column="4" Grid.Row="3" ></TextBlock>-->
</Grid>
</TabItem>
<TabItem Header="{DynamicResource TabItemHeaderObfsPluginSS}" Width="110" Height="30">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
</Grid.RowDefinitions>
<TextBlock Text="{DynamicResource TextBlockObfsPluginPointSS}" Foreground="Red" TextWrapping="Wrap" Grid.Column="0" Grid.Row="0" Grid.ColumnSpan="5" HorizontalAlignment="Left" VerticalAlignment="Center"></TextBlock>
<RadioButton x:Name="RadioButtonObfsPluginHttpWebSS" Content="{DynamicResource RadioButtonObfsPluginHttpWebSS}" GroupName="TemplateGroup" Grid.Column="0" Grid.Row="1" Checked="RadioButtonNonePluginSS_Checked" HorizontalAlignment="Left" VerticalAlignment="Center"></RadioButton>
<TextBlock Text="{DynamicResource TextBlockObfsPluginHttpWebExplainSS}" TextWrapping="Wrap" Grid.Column="1" Grid.Row="1" Grid.ColumnSpan="3" HorizontalAlignment="Left" VerticalAlignment="Center"></TextBlock>
<RadioButton x:Name="RadioButtonObfsPluginHttpsWebSS" Content="{DynamicResource RadioButtonObfsPluginHttpsWebSS}" GroupName="TemplateGroup" Grid.Column="0" Grid.Row="2" Checked="RadioButtonUseDomainTls_Checked" HorizontalAlignment="Left" VerticalAlignment="Center"></RadioButton>
<TextBlock Text="{DynamicResource TextBlockObfsPluginTLShttpsWebExplainSS}" TextWrapping="Wrap" Grid.Column="1" Grid.Row="2" Grid.ColumnSpan="3" HorizontalAlignment="Left" VerticalAlignment="Center"></TextBlock>
</Grid>
</TabItem>
<TabItem Header="{DynamicResource TabItemHeaderNonePluginSS}" Width="110" Height="30">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
</Grid.RowDefinitions>
<TextBlock Text="{DynamicResource TextBlockNonePluginPointSS}" Foreground="Red" Grid.Column="0" Grid.Row="0" Grid.ColumnSpan="5" HorizontalAlignment="Left" VerticalAlignment="Center"></TextBlock>
<RadioButton x:Name="RadioButtonNonePluginSS" Content="{DynamicResource RadioButtonNonePluginSS}" GroupName="TemplateGroup" Grid.Column="0" Grid.Row="1" Checked="RadioButtonNonePluginSS_Checked" HorizontalAlignment="Left" VerticalAlignment="Center"></RadioButton>
<TextBlock Text="{DynamicResource TextBlockNonePluginExplainSS}" TextWrapping="Wrap" Grid.Column="1" Grid.Row="1" Grid.ColumnSpan="3" HorizontalAlignment="Left" VerticalAlignment="Center"></TextBlock>
<!--<RadioButton x:Name="RadioButtonQuicSRTP" Content="QUIC+SRTP" GroupName="TemplateGroup" Grid.Column="0" Grid.Row="2" Checked="RadioButtonQuicNone_Checked" HorizontalAlignment="Left" VerticalAlignment="Center"></RadioButton>
<TextBlock Text="{DynamicResource TextBlockV2RayQuicSRTPExplain}" TextWrapping="Wrap" Grid.Column="1" Grid.Row="2" Grid.ColumnSpan="3" HorizontalAlignment="Left" VerticalAlignment="Center"></TextBlock>
<RadioButton x:Name="RadioButtonQuic2uTP" Content="QUIC+uTP" GroupName="TemplateGroup" Grid.Column="0" Grid.Row="3" Checked="RadioButtonQuicNone_Checked" HorizontalAlignment="Left" VerticalAlignment="Center"></RadioButton>
<TextBlock Text="{DynamicResource TextBlockV2RayQuicuTPExplain}" TextWrapping="Wrap" Grid.Column="1" Grid.Row="3" Grid.ColumnSpan="3" HorizontalAlignment="Left" VerticalAlignment="Center"></TextBlock>
<RadioButton x:Name="RadioButtonQuicWechatVideo" Content="QUIC+WechatVideo" GroupName="TemplateGroup" Grid.Column="0" Grid.Row="4" Checked="RadioButtonQuicNone_Checked" HorizontalAlignment="Left" VerticalAlignment="Center"></RadioButton>
<TextBlock Text="{DynamicResource TextBlockV2RayQuicWeChatExplain}" TextWrapping="Wrap" Grid.Column="1" Grid.Row="4" Grid.ColumnSpan="3" HorizontalAlignment="Left" VerticalAlignment="Center"></TextBlock>
<RadioButton x:Name="RadioButtonQuicDTLS" Content="QUIC+DTLS 1.2" GroupName="TemplateGroup" Grid.Column="0" Grid.Row="5" Checked="RadioButtonQuicNone_Checked" HorizontalAlignment="Left" VerticalAlignment="Center"></RadioButton>
<TextBlock Text="{DynamicResource TextBlockV2RayQuicDTLSExplain}" TextWrapping="Wrap" Grid.Column="1" Grid.Row="5" Grid.ColumnSpan="3" HorizontalAlignment="Left" VerticalAlignment="Center"></TextBlock>
<RadioButton x:Name="RadioButtonQuicWireGuard" Content="QUIC+WireGuard" GroupName="TemplateGroup" Grid.Column="0" Grid.Row="6" Checked="RadioButtonQuicNone_Checked" HorizontalAlignment="Left" VerticalAlignment="Center"></RadioButton>
<TextBlock Text="{DynamicResource TextBlockV2RayQuicWireGuardExplain}" TextWrapping="Wrap" Grid.Column="1" Grid.Row="6" Grid.ColumnSpan="3" HorizontalAlignment="Left" VerticalAlignment="Center"></TextBlock>-->
</Grid>
</TabItem>
</TabControl>
</Grid>
</GroupBox>
<GroupBox Header="{DynamicResource GroupBoxHeaderParameterV2Ray}" Grid.Row="3" Grid.RowSpan="2">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
</Grid.RowDefinitions>
<TextBlock x:Name="TextBlockServerListenPortSS" Text="{DynamicResource TextBlockV2RayServerPort}" Grid.Column="0" Grid.Row="0" Grid.ColumnSpan="1" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
<TextBox x:Name="TextBoxServerListenPortSS" Grid.Column="1" Grid.Row="0" Grid.ColumnSpan="3" Margin="3"></TextBox>
<Button x:Name="ButtonServerListenPortSS" Content="{DynamicResource ButtonV2RayServerPortChange}" Grid.Column="4" Grid.Row="0" Margin="2" Click="ButtonServerListenPort_Click"></Button>
<TextBlock Text="{DynamicResource TextBlockV2RayServerPortExplain}" Grid.Column="5" Grid.ColumnSpan="2" Grid.Row="0" Margin="3"></TextBlock>
<TextBlock x:Name="TextBlockNewUUIDSS" Text="{DynamicResource TextBlockTrojanHostPassword}" Grid.Column="0" Grid.Row="1" Grid.ColumnSpan="1" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
<TextBox x:Name="TextBoxNewUUIDSS" Grid.Column="1" Grid.Row="1" Grid.ColumnSpan="3" Margin="3"></TextBox>
<Button x:Name="ButtonNewUUIDSS" Content="{DynamicResource ButtonTrojanChangePassword}" Grid.Column="4" Grid.Row="1" Margin="2" Click="ButtonNewUUID_Click"></Button>
<TextBlock Text="{DynamicResource TextBlockV2RayUUIDExplain}" TextWrapping="Wrap" Grid.Column="5" Grid.Row="1" Grid.ColumnSpan="2" Margin="0"></TextBlock>
<TextBlock x:Name="TextBlockMethodSS" Text="{DynamicResource TextBlockEncryption}" Grid.Column="0" Grid.Row="2" Grid.ColumnSpan="1" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
<ComboBox x:Name="ComboBoxEncryptionMethodInfo" Grid.Column="1" Grid.Row="2" Grid.ColumnSpan="2" Height="25" Margin="3,0,0,0" SelectionChanged="ComboBoxEncryptionMethodInfo_SelectionChanged"></ComboBox>
<!--<TextBox x:Name="TextBoxMethodSS" Grid.Column="1" Grid.Row="2" Grid.ColumnSpan="3" Margin="3"></TextBox>-->
<!--<Button x:Name="ButtonMethodSS" Content="{DynamicResource ButtonTrojanChangePassword}" Grid.Column="4" Grid.Row="2" Margin="2" Click="ButtonQuicUUID_Click"></Button>-->
<!--<TextBlock x:Name="TextBlockMkcpUUID" Text="{DynamicResource TextBlockV2RayMkcpExplain}" TextWrapping="Wrap" Grid.Column="5" Grid.Row="2" Grid.ColumnSpan="2"></TextBlock>-->
<TextBlock x:Name="TextBlockWebSocketPathSS" Text="{DynamicResource TextBlockTrojanGoWebSocketPath}" Grid.Column="0" Grid.Row="3" Grid.ColumnSpan="1" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
<TextBox x:Name="TextBoxWebSocketPathSS" Grid.Column="1" Grid.Row="3" Grid.ColumnSpan="3" Margin="3"></TextBox>
<Button x:Name="ButtonWebSocketPathSS" Content="{DynamicResource ButtonNaiveProxyChangeUser}" Grid.Column="4" Grid.Row="3" Margin="2" Click="ButtonPath_Click"></Button>
<TextBlock x:Name="TextBlockDomainSS" Text="{DynamicResource TextBlockV2RayDomain}" Grid.Column="0" Grid.Row="4" Grid.ColumnSpan="1" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
<TextBox x:Name="TextBoxDomainSS" Style="{StaticResource TitleText}" Tag="{DynamicResource TextBoxDomainPrompt}" Grid.Column="1" Grid.Row="4" Grid.ColumnSpan="3" Margin="3"></TextBox>
<Button x:Name="ButtonDomain" Content="检测" Visibility="Collapsed" Grid.Column="4" Grid.Row="4" Margin="2" ></Button>
<TextBlock x:Name="TextBlockMaskSites" Text="{DynamicResource TextBlockV2RayMaskSites}" Grid.Column="0" Grid.Row="5" Grid.ColumnSpan="1" VerticalAlignment="Center" HorizontalAlignment="Right"></TextBlock>
<TextBox x:Name="TextBoxMaskSites" Style="{StaticResource TitleText}" Tag="{DynamicResource TextBoxV2RayMaskSitesTag}" ToolTip="{DynamicResource TextBoxV2RayMaskSitesToolTip}" Grid.Column="1" Grid.Row="5" Grid.ColumnSpan="3" Margin="3"></TextBox>
<Button x:Name="ButtondDecide" Content="{DynamicResource ButtonTrojanGoTemplateOK}" Grid.Column="1" Grid.Row="6" Margin="0" Click="ButtondDecide_Click"></Button>
<Button x:Name="ButtondCancel" Content="{DynamicResource ButtonTrojanGoTemplateCancel}" Grid.Column="3" Grid.Row="6" Margin="0" Click="ButtondCancel_Click"></Button>
<!--<Button x:Name="ButtonTestChecked" Content="测试选中状态" Grid.Column="5" Grid.Row="6" Click="ButtonTestChecked_Click"></Button>-->
</Grid>
</GroupBox>
</Grid>
</Window>

View File

@ -1,394 +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;
namespace ProxySU
{
/// <summary>
/// SSpluginWindow.xaml 的交互逻辑
/// </summary>
public partial class SSpluginWindow : Window
{
//SS加密方法设定
public class EncryptionMethodInfo
{
public string Name { get; set; }
public string Value { get; set; }
}
public SSpluginWindow()
{
InitializeComponent();
#region chacha20-ietf-poly1305
List<EncryptionMethodInfo> methodList = new List<EncryptionMethodInfo>();
methodList.Add(new EncryptionMethodInfo { Name = "chacha20-ietf-poly1305", Value = "chacha20-ietf-poly1305" });
methodList.Add(new EncryptionMethodInfo { Name = "xchacha20-ietf-poly1305", Value = "xchacha20-ietf-poly1305" });
methodList.Add(new EncryptionMethodInfo { Name = "aes-256-gcm", Value = "aes-256-gcm" });
methodList.Add(new EncryptionMethodInfo { Name = "aes-192-gcm", Value = "aes-192-gcm" });
methodList.Add(new EncryptionMethodInfo { Name = "aes-128-gcm", Value = "aes-128-gcm" });
ComboBoxEncryptionMethodInfo.ItemsSource = methodList;
ComboBoxEncryptionMethodInfo.DisplayMemberPath = "Name";//显示出来的值
ComboBoxEncryptionMethodInfo.SelectedValuePath = "Value";//实际选中后获取的结果的值
ComboBoxEncryptionMethodInfo.SelectedIndex = 0;
DataContext = this;
#endregion
}
//取消不在当前活动选项卡中的其他所有选项卡中的所有RadioBuuton的选中状态
//代码参考网址https://blog.csdn.net/weixin_42583999/article/details/103468857
//调用UncheckLayouts((TabItem)TabControlTemplate.SelectedItem);
private void UncheckLayouts(TabItem activePage)
{
foreach (TabItem tabPage in TabControlTemplate.Items)
{
if (tabPage == activePage) continue;
Grid grid = (Grid)tabPage.Content;
foreach (UIElement element in grid.Children)
{
if (element is RadioButton)
{
RadioButton radiobutton = (element as RadioButton);
radiobutton.IsChecked = false;
}
}
}
}
//伪装网站处理
//private string DisguiseURLprocessing(string fakeUrl)
//{
//var uri = new Uri(fakeUrl);
//return uri.Host;
//处理伪装网站域名中的前缀
//if (fakeUrl.Length >= 7)
//{
// string testDomainMask = fakeUrl.Substring(0, 7);
// if (String.Equals(testDomainMask, "https:/") || String.Equals(testDomainMask, "http://"))
// {
// string[] tmpUrl = fakeUrl.Split('/');
// fakeUrl = tmpUrl[2];
// }
//}
//return fakeUrl;
// }
private void ButtondDecide_Click(object sender, RoutedEventArgs e)
{
bool preDomainMask = ClassModel.PreDomainMask(TextBoxMaskSites.Text);
bool domainNotEmpty = true;
//UncheckLayouts(TabControlTemplate);
//SS 经典模式被选中
if (RadioButtonNonePluginSS.IsChecked == true)
{
//传递模板类型
MainWindow.ReceiveConfigurationParameters[0] = "NonePluginSS";
//传递方案名称
MainWindow.ReceiveConfigurationParameters[8] = RadioButtonNonePluginSS.Content.ToString();
}
//SS+obfs+http+web伪装模式被选中
else if (RadioButtonObfsPluginHttpWebSS.IsChecked == true)
{
//传递模板类型
MainWindow.ReceiveConfigurationParameters[0] = "ObfsPluginHttpWebSS";
//传递方案名称
MainWindow.ReceiveConfigurationParameters[8] = RadioButtonObfsPluginHttpWebSS.Content.ToString();
}
//SS+obfs+TLS+web模式被选中
else if (RadioButtonObfsPluginHttpsWebSS.IsChecked == true)
{
domainNotEmpty = ClassModel.TestDomainIsEmpty(TextBoxDomainSS.Text);
//传递模板类型
MainWindow.ReceiveConfigurationParameters[0] = "ObfsPluginHttpsWebSS";
//传递方案名称
MainWindow.ReceiveConfigurationParameters[8] = RadioButtonObfsPluginHttpsWebSS.Content.ToString();
//传递域名
MainWindow.ReceiveConfigurationParameters[4] = PreTrim(TextBoxDomainSS.Text);
//传递伪装网站
MainWindow.ReceiveConfigurationParameters[7] = ClassModel.DisguiseURLprocessing(PreTrim(TextBoxMaskSites.Text));
}
//V2Ray-Plugin SS+WebSocket 无TLS模式被选中
else if (RadioButtonWebSocketSS.IsChecked == true)
{
//传递模板类型
MainWindow.ReceiveConfigurationParameters[0] = "WebSocketSS";
//传递方案名称
MainWindow.ReceiveConfigurationParameters[8] = RadioButtonWebSocketSS.Content.ToString();
//传递路径
MainWindow.ReceiveConfigurationParameters[6] = PreTrim(TextBoxWebSocketPathSS.Text);
}
//V2Ray-Plugin SS+WebSocket+TLS+Web模式被选中
else if (RadioButtonWebSocketTLSWebFrontSS.IsChecked == true || RadioButtonWebSocketTLSWebFrontSSHot.IsChecked == true)
{
domainNotEmpty = ClassModel.TestDomainIsEmpty(TextBoxDomainSS.Text);
//传递模板类型
MainWindow.ReceiveConfigurationParameters[0] = "WebSocketTLSWebFrontSS";
//传递方案名称
MainWindow.ReceiveConfigurationParameters[8] = RadioButtonWebSocketTLSWebFrontSS.Content.ToString();
//传递路径
MainWindow.ReceiveConfigurationParameters[6] = PreTrim(TextBoxWebSocketPathSS.Text);
//传递域名
MainWindow.ReceiveConfigurationParameters[4] = PreTrim(TextBoxDomainSS.Text);
//传递伪装网站
MainWindow.ReceiveConfigurationParameters[7] = ClassModel.DisguiseURLprocessing(PreTrim(TextBoxMaskSites.Text));
}
//V2Ray-Plugin SS+QUIC模式被选中
else if (RadioButtonQuicSS.IsChecked == true)
{
domainNotEmpty = ClassModel.TestDomainIsEmpty(TextBoxDomainSS.Text);
//传递模板类型
MainWindow.ReceiveConfigurationParameters[0] = "QuicSS";
//传递方案名称
MainWindow.ReceiveConfigurationParameters[8] = RadioButtonQuicSS.Content.ToString();
//传递域名
MainWindow.ReceiveConfigurationParameters[4] = PreTrim(TextBoxDomainSS.Text);
}
//SS+kcptun-plugin模式被选中
else if (RadioButtonKcptunPluginSS.IsChecked == true)
{
//传递模板类型
MainWindow.ReceiveConfigurationParameters[0] = "KcptunPluginSS";
//传递方案名称
MainWindow.ReceiveConfigurationParameters[8] = RadioButtonKcptunPluginSS.Content.ToString();
}
//SS+GoQuiet-Plugin模式被选中
else if (RadioButtonGoQuietPluginSS.IsChecked == true)
{
domainNotEmpty = ClassModel.TestDomainIsEmpty(TextBoxDomainSS.Text);
//传递模板类型
MainWindow.ReceiveConfigurationParameters[0] = "GoQuietPluginSS";
//传递方案名称
MainWindow.ReceiveConfigurationParameters[8] = RadioButtonGoQuietPluginSS.Content.ToString();
//传递域名
MainWindow.ReceiveConfigurationParameters[4] = PreTrim(TextBoxDomainSS.Text);
}
//SS+Cloak-Plugin模式被选中
else if (RadioButtonCloakPluginSS.IsChecked == true)
{
domainNotEmpty = ClassModel.TestDomainIsEmpty(TextBoxDomainSS.Text);
//传递模板类型
MainWindow.ReceiveConfigurationParameters[0] = "CloakPluginSS";
//传递方案名称
MainWindow.ReceiveConfigurationParameters[8] = RadioButtonCloakPluginSS.Content.ToString();
//传递域名
MainWindow.ReceiveConfigurationParameters[4] = PreTrim(TextBoxDomainSS.Text);
}
//传递服务端口
MainWindow.ReceiveConfigurationParameters[1] = PreTrim(TextBoxServerListenPortSS.Text);
//传递uuid密码
MainWindow.ReceiveConfigurationParameters[2] = PreTrim(TextBoxNewUUIDSS.Text);
//传递加密方式
MainWindow.ReceiveConfigurationParameters[3] = GetEncryptionMethodSS();
if (domainNotEmpty == true && preDomainMask == true)
{
this.Close();
}
}
private void ButtondCancel_Click(object sender, RoutedEventArgs e) => Close();
#region
//无插件的界面
private void RadioButtonNonePluginSS_Checked(object sender, RoutedEventArgs e)
{
//隐藏Websocket Path
TextBlockWebSocketPathSS.Visibility = Visibility.Collapsed;
TextBoxWebSocketPathSS.Visibility = Visibility.Collapsed;
ButtonWebSocketPathSS.Visibility = Visibility.Collapsed;
//隐藏域名
TextBlockDomainSS.Visibility = Visibility.Collapsed;
TextBoxDomainSS.Visibility = Visibility.Collapsed;
//检测域名按钮
ButtonDomain.Visibility = Visibility.Collapsed;
//隐藏伪装网站
TextBlockMaskSites.Visibility = Visibility.Collapsed;
TextBoxMaskSites.Visibility = Visibility.Collapsed;
//初始化密码
TextBoxNewUUIDSS.Text = GenerateRandomUUID();
//初始化端口
TextBoxServerListenPortSS.Text = GenerateRandomPort().ToString();
//清除其他选项卡中的选项
UncheckLayouts((TabItem)TabControlTemplate.SelectedItem);
}
//使用域名启用TLS 无Websocket的界面
private void RadioButtonUseDomainTls_Checked(object sender, RoutedEventArgs e)
{
TextBoxServerListenPortSS.Text = "443";
//隐藏Websocket Path
TextBlockWebSocketPathSS.Visibility = Visibility.Collapsed;
TextBoxWebSocketPathSS.Visibility = Visibility.Collapsed;
ButtonWebSocketPathSS.Visibility = Visibility.Collapsed;
//显示域名
TextBlockDomainSS.Visibility = Visibility.Visible;
TextBoxDomainSS.Visibility = Visibility.Visible;
//检测域名按钮
ButtonDomain.Visibility = Visibility.Collapsed;
//显示伪装网站
TextBlockMaskSites.Visibility = Visibility.Visible;
TextBoxMaskSites.Visibility = Visibility.Visible;
//初始化密码
TextBoxNewUUIDSS.Text = GenerateRandomUUID();
//初始化端口
//TextBoxServerListenPortSS.Text = GenerateRandomPort().ToString();
//清除其他选项卡中的选项
UncheckLayouts((TabItem)TabControlTemplate.SelectedItem);
}
//使用V2ray-plugin 的Websocket over https (TLS)
private void RadioButtonUseDomainWebsocketTls_Checked(object sender, RoutedEventArgs e)
{
TextBoxServerListenPortSS.Text = "443";
//显示Websocket Path
TextBlockWebSocketPathSS.Visibility = Visibility.Visible;
TextBoxWebSocketPathSS.Visibility = Visibility.Visible;
ButtonWebSocketPathSS.Visibility = Visibility.Visible;
//显示域名
TextBlockDomainSS.Visibility = Visibility.Visible;
TextBoxDomainSS.Visibility = Visibility.Visible;
//检测域名按钮
ButtonDomain.Visibility = Visibility.Collapsed;
//显示伪装网站
TextBlockMaskSites.Visibility = Visibility.Visible;
TextBoxMaskSites.Visibility = Visibility.Visible;
//初始化密码
TextBoxNewUUIDSS.Text = GenerateRandomUUID();
//初始化端口
//TextBoxServerListenPortSS.Text = GenerateRandomPort().ToString();
//初始化Websocket Path
TextBoxWebSocketPathSS.Text = GenerateRandomPath();
//清除其他选项卡中的选项
UncheckLayouts((TabItem)TabControlTemplate.SelectedItem);
}
#endregion
//加密方法更改后的动作
private void ComboBoxEncryptionMethodInfo_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
//传递加密方式
MainWindow.ReceiveConfigurationParameters[3] = GetEncryptionMethodSS();
}
//产生随机的uuid
private void ButtonNewUUID_Click(object sender, RoutedEventArgs e)
{
TextBoxNewUUIDSS.Text = GenerateRandomUUID();
}
//产生随机服务端口
private void ButtonServerListenPort_Click(object sender, RoutedEventArgs e)
{
TextBoxServerListenPortSS.Text = GenerateRandomPort().ToString();
}
//产生随机的Path
private void ButtonPath_Click(object sender, RoutedEventArgs e)
{
TextBoxWebSocketPathSS.Text = GenerateRandomPath();
}
#region
//产生随机的UUID
private string GenerateRandomUUID()
{
Guid uuid = Guid.NewGuid();
return uuid.ToString();
}
//产生随机端口
private int GenerateRandomPort()
{
Random random = new Random();
return random.Next(30001, 50000);
}
//读取加密方式
private string GetEncryptionMethodSS()
{
//string methodName;
//object methodSelected;
//methodSelected = ComboBoxEncryptionMethodInfo.SelectedValue;
//methodName = methodSelected.ToString();
//return methodName;
return ComboBoxEncryptionMethodInfo.SelectedValue.ToString();
}
//产生随机的Path
private string GenerateRandomPath()
{
Random random = new Random();
int randomSerialNum = random.Next(0, 4);
Guid uuid = Guid.NewGuid();
string[] pathArray = uuid.ToString().Split('-');
string path = pathArray[randomSerialNum];
return $"/{path}";
}
#endregion
//TextBox输入内容做预处理
private string PreTrim(string preString)
{
return preString.Trim();
}
//域名检测是否为空
//private bool TestDomainIsEmpty()
//{
// if (string.IsNullOrEmpty(PreTrim(TextBoxDomainSS.Text)) == true)
// {
// //****** "域名不能为空,请检查相关参数设置!" ******
// MessageBox.Show(Application.Current.FindResource("MessageBoxShow_DomainNotEmpty").ToString());
// return false;
// }
// else
// {
// return true;
// }
//}
}
}

View File

@ -1,619 +0,0 @@
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:ProxySU.Translations"
xmlns:sys="clr-namespace:System;assembly=mscorlib">
<!-- Main program interface -->
<sys:String x:Key="TextBlockNewVersionReminder">The new version has been released!</sys:String>
<sys:String x:Key="TextBlockNewVersionDown">Downloading...Wait Prompt...</sys:String>
<sys:String x:Key="MessageBoxShow_ErrorDownProxyFail">The download of the latest version failed, please try again later!</sys:String>
<sys:String x:Key="MessageBoxShow_ErrorDownProxySuccess">Download the latest version successfully, the file has been saved in the same directory of the current ProxySU.exe</sys:String>
<sys:String x:Key="ButtonUpgradeProxySU">Update</sys:String>
<sys:String x:Key="MainWindowsLanguage">界面語言:</sys:String>
<sys:String x:Key="TabItemHeaderAppDeployment">Deployment</sys:String>
<sys:String x:Key="TabItemHeaderResourceTools">Resources</sys:String>
<sys:String x:Key="TabItemHeaderFreeWallURL">Free Wall URL</sys:String>
<sys:String x:Key="TabItemHeaderCommonError">Common Error</sys:String>
<sys:String x:Key="TextBlockHostName">Host:</sys:String>
<sys:String x:Key="TextBoxHostNamePrompt">IP or Domain (Not empty)</sys:String>
<sys:String x:Key="TextBlockHostPart">Port:</sys:String>
<sys:String x:Key="TextBlockHostUser">User:</sys:String>
<sys:String x:Key="TextBlockHostPassword">Password:</sys:String>
<sys:String x:Key="TextBlockHostCert">Key:</sys:String>
<sys:String x:Key="TextBoxKeyNotEmptyPrompt">Key file Path (Not Empty)</sys:String>
<sys:String x:Key="ButtonOpenFileDialog">Open...</sys:String>
<sys:String x:Key="RadioButtonPasswordLogin">Password Login</sys:String>
<sys:String x:Key="RadioButtonCertLogin">Key Login</sys:String>
<sys:String x:Key="RadioButtonNoProxy">No Proxy</sys:String>
<sys:String x:Key="RadioButtonProxyNoLogin">Not Login</sys:String>
<sys:String x:Key="RadiobuttonProxyYesLogin">Requires Login</sys:String>
<sys:String x:Key="TextBlockProxyHost">Proxy Addr:</sys:String>
<sys:String x:Key="AcmeEmail">Email</sys:String>
<sys:String x:Key="AcmeEmailDesc">Acme.sh SSL must an available email address.</sys:String>
<sys:String x:Key="ButtonSaveInstalledLog">Save Installation Log...</sys:String>
<sys:String x:Key="TextBlockSetUpProcessing">Waiting for installation and deployment</sys:String>
<sys:String x:Key="TabItemHeaderSysTools">System Tools</sys:String>
<sys:String x:Key="ButtonTemplateConfigurationXray">Xray template library</sys:String>
<sys:String x:Key="Button_LoginXray">Xray one-click installation</sys:String>
<sys:String x:Key="ButtonUpdateXray">Upgrade Xay</sys:String>
<sys:String x:Key="ButtonV2RayTemplateConfiguration">V2Ray Templates</sys:String>
<sys:String x:Key="ButtonV2RayOneKeyInstall">V2ray install</sys:String>
<sys:String x:Key="ButtonUpdateV2ray">Upgrade V2Ray</sys:String>
<sys:String x:Key="Button_canel">Cancel</sys:String>
<sys:String x:Key="ButtonTrojanGoTemplate">Trojan-Go Templates</sys:String>
<sys:String x:Key="ButtonTrojanGoSetUp">Trojan-Go install</sys:String>
<sys:String x:Key="ButtonUpdateTrojanGo">Upgrade Trojan-Go</sys:String>
<sys:String x:Key="ButtonTrojanGoCancel">Cancel</sys:String>
<sys:String x:Key="TextBlockCurrentlySelectedPlan">Currently selected plan:</sys:String>
<sys:String x:Key="TextBlockCurrentlySelectedPlanNo">No plan selected</sys:String>
<!-- The following Trojan settings parameter tab interface -->
<sys:String x:Key="GroupBoxHeaderParameterTrojan">Parameter settings</sys:String>
<sys:String x:Key="TextBlockTrojanTemplateExplanation">Mode: Trojan+TLS+Caddy</sys:String>
<sys:String x:Key="TextBlockTrojanServerDomain">Domain:</sys:String>
<sys:String x:Key="TextBlockTrojanPort">Port: 443</sys:String>
<sys:String x:Key="TextBoxDomainPrompt">Domain Not Empty</sys:String>
<sys:String x:Key="TextBlockTrojanHostPassword">Password:</sys:String>
<sys:String x:Key="ButtonTrojanChangePassword">Change</sys:String>
<sys:String x:Key="ButtonTrojanSetUp">Trojan install</sys:String>
<sys:String x:Key="ButtonUpdateTrojan">Upgrade Trojan</sys:String>
<sys:String x:Key="ButtonTrojanCancel">Cancel</sys:String>
<!-- The following NaiveProxy settings parameter tab interface -->
<sys:String x:Key="TextBlockNaiveProxyTemplateExplanation">Mode: NaiveProxy+TLS+Caddy</sys:String>
<sys:String x:Key="ButtonNaiveProxyChangeUser">Random</sys:String>
<sys:String x:Key="ButtonNavieSetUp">NaiveProxy install</sys:String>
<sys:String x:Key="ButtonNaiveCancel">Cancel</sys:String>
<!-- 以下SSR设置参数标签页界面 -->
<sys:String x:Key="TextBlockSSRTemplateExplanation">Mode: SSR+TLS+Caddy</sys:String>
<sys:String x:Key="ButtonSSRSetUp">SSR install</sys:String>
<!-- 以下MTProto设置参数标签页界面 -->
<sys:String x:Key="TextBlockMtgTemplateExplanation">Mode: MTProto+TLS</sys:String>
<sys:String x:Key="ButtonMtgSetUp">MTProto install</sys:String>
<sys:String x:Key="TextBlockMtgFakeDomainExplanation">Making domain name:</sys:String>
<sys:String x:Key="TextBlockMtgPortExplanation">Recommended https ports 443, 2053, 2083, 2087, 2096, 8443</sys:String>
<sys:String x:Key="TextBlockMtgSecretExplanation">The secret key will be randomly generated by the server.</sys:String>
<!-- 以下SS设置参数标签页界面 -->
<sys:String x:Key="ButtonSetUpSS">SS install</sys:String>
<sys:String x:Key="ButtonTemplateConfigurationSS">SS plug-in library</sys:String>
<sys:String x:Key="TabItemHeaderNonePluginSS">Classic mode</sys:String>
<sys:String x:Key="TextBlockNonePluginPointSS">Tip: This mode, long time, large traffic use, easy to be blocked and interfered, is not recommended!</sys:String>
<sys:String x:Key="RadioButtonNonePluginSS">SS Classic</sys:String>
<sys:String x:Key="TextBlockNonePluginExplainSS">SS classic use mode, no domain name is required, data is encrypted with high strength, and the data is recognized as unknown data. At present, the traffic is easy to be identified, and it is easy to be interfered and blocked. Use it with caution! Putting here is just a feeling and tribute!</sys:String>
<sys:String x:Key="TabItemHeaderObfsPluginSS">Simple-obfs plug-in</sys:String>
<sys:String x:Key="TextBlockObfsPluginPointSS">Tip: This is a traffic obfuscation scheme used in the early days of SS. The plug-in has not been updated for a long time and is not recommended!</sys:String>
<sys:String x:Key="RadioButtonObfsPluginHttpWebSS">SS+obfs+http+Web</sys:String>
<sys:String x:Key="TextBlockObfsPluginHttpWebExplainSS">Does not require a domain name, the data is highly encrypted, the traffic is confused as http (not the real http), and the use of Web site camouflage can enhance the anti-recognition to a certain extent! CDN is not supported.</sys:String>
<sys:String x:Key="RadioButtonObfsPluginHttpsWebSS">SS+obfs+TLS(https)+Web</sys:String>
<sys:String x:Key="TextBlockObfsPluginTLShttpsWebExplainSS">requires a domain name, the use of a domain name will greatly enhance the anti-identification, high-strength data encryption, traffic confusion as https (not real https), the use of Web site camouflage, further enhance the anti-identification! CDN is not supported.</sys:String>
<sys:String x:Key="TabItemHeaderV2RayPluginSS">V2Ray plug-in</sys:String>
<sys:String x:Key="TextBlockV2rayPluginPointSS">Reminder: ShadowRocket(ios) does not support SS+Quic mode</sys:String>
<sys:String x:Key="RadioButtonWebSocketTLSWebSS">SS+WebSocket+TLS+Caddy (Web post)</sys:String>
<sys:String x:Key="RadioButtonWebSocketTLSWebFrontSS">SS+WebSocket+TLS+Caddy (Web front)</sys:String>
<sys:String x:Key="TextBlockV2RayPluginPointSS">Tip: In the above scheme, there is no difference in the use effect between Web front and Web post. In the Web post scheme, the TLS certificate is applied for by acme.sh. After the certificate expires, acme.sh will automatically renew, but you need to manually restart SS to load the new certificate. The certificate in the web front-end solution is automatically applied for and loaded by Caddy without restarting SS.</sys:String>
<sys:String x:Key="RadioButtonQuicSS">SS+QUIC</sys:String>
<sys:String x:Key="TextBlockQuicExplainSS">V2Ray-Plugin uses QUIC protocol for transmission, and TLS encryption is mandatory. Encrypted data transmission, identified as udp traffic, was originally initiated by Google, advantages: reduced delay, multiplexing, connection migration, domain name is required,</sys:String>
<!--<sys:String x:Key="TabItemHeaderOtherPluginsSS">kcptun/GoQuiet/Cloak plugin</sys:String>-->
<sys:String x:Key="TabItemHeaderOtherPluginsSS">kcptun Plugin</sys:String>
<sys:String x:Key="TextBlockGoQuietPluginPointSS">Reminder: Shadowrocket(ios) does not support GoQuiet-plugin. shadowsocks (Android) does not support GoQuiet-plugin and Cloak-plugin plug-ins</sys:String>
<sys:String x:Key="TextBlockKcptunPluginExplainSS">KCP is a fast and reliable protocol. It can waste 10%-20% of bandwidth than TCP in exchange for a 30%-40% reduction in average latency and a three-fold reduction in maximum latency The transmission effect. Use UDP protocol for transmission, high-strength data encryption, transmission of the same content, kcp generally consumes more traffic than TCP, and will greatly increase the network speed under lines with high packet loss rates, and may be restricted by QOS at individual operators .</sys:String>
<sys:String x:Key="TextBlockGoQuietPluginExplainSS">The basic principle is to simulate TLS traffic while disguising the server as a normal web server. This confusion is not the first: simple-obfs and ShadowsocksRs tls1.2_ticket_auth mode proves this. It works. This plug-in improves the existing methods, and its goal is to make large-scale blockade of HTTPS servers (even IP segments) the only effective way to block SS</sys:String>
<sys:String x:Key="TextBlockCloakPluginExplainSS">Use encryption to confuse proxy traffic into legitimate HTTPS traffic, and disguise the proxy server as a normal Web server to avoid Internet censorship. It can be seen as an upgraded version of GoQuiet above, optimizing the network connection speed, and not confusing https but real https traffic.</sys:String>
<sys:String x:Key="TextBlockPluginNameExplainSS">Plugin program:</sys:String>
<sys:String x:Key="TextBlockPluginOptionExplainSS">Plugin options:</sys:String>
<sys:String x:Key="DisplayInstallInfo_ExplainBuildSS">Use the compilation method, it will take a little longer, please be patient...</sys:String>
<!-- The following system tool tab interface -->
<sys:String x:Key="ButtonProofreadTime">Proofreading Time</sys:String>
<sys:String x:Key="ButtonClearOccupiedPorts">Release 80/443</sys:String>
<sys:String x:Key="ButtonTestAndEnableBBR">Enable BBR</sys:String>
<sys:String x:Key="ButtonRemoveAllSoft">Uninstall Proxy</sys:String>
<sys:String x:Key="ButtonEnableRootPassWord">Enable root password login</sys:String>
<sys:String x:Key="ButtonRootProhibitsPasswordLogin">root prohibits password login</sys:String>
<sys:String x:Key="ButtonEnableRootCert">Enable root certificate key login</sys:String>
<sys:String x:Key="MessageBoxShow_RemoveAllSoft">Only the proxy software installed by ProxySU and related configurations are supported. Please make sure that important configurations have been backed up. Uninstalling agents installed using other methods or scripts is not supported. Are you sure you want to uninstall the agent software on the remote host?</sys:String>
<sys:String x:Key="MessageBoxShow_EnableRootPassword">This function requires that the currently logged-in account has sudo permissions. Is the root account enabled and password set for the remote host?</sys:String>
<sys:String x:Key="MessageBoxShow_ButtonEnableRootCert">This function requires that the currently logged-in account has root or sudo authority. Is root certificate key login enabled for the remote host?</sys:String>
<sys:String x:Key="MessageBoxShow_ButtonRootProhibitsPasswordLogin">This function requires that the remote host has enabled other login methods, such as key mode, etc., otherwise the remote host may not be able to connect. Is the root account password login method of the remote host prohibited?</sys:String>
<sys:String x:Key="DisplayInstallInfo_SetRootProhibitsPasswordLogin">is closing the root account password login method.....</sys:String>
<sys:String x:Key="MessageBoxShow_RootProhibitsPasswordLoginOK">The remote host root account password login method is closed!</sys:String>
<sys:String x:Key="MessageBoxShow_ButtonEnableRootCertSuccess">The root account certificate key login of the remote host has been enabled, and the key file rootuser.key is saved in the subsequent opened folder!</sys:String>
<sys:String x:Key="MessageBoxShow_AlreadyRoot">The current account already has root privileges, no need to set it up!</sys:String>
<sys:String x:Key="MessageBoxShow_NoSudoToAccount">The current account cannot obtain sudo permission, the setting failed!</sys:String>
<sys:String x:Key="DisplayInstallInfo_GenerateRandomPassword">Generate a 20-digit random password!</sys:String>
<sys:String x:Key="DisplayInstallInfo_EnableRootPasswordSavePasswordInfo">Save password information!</sys:String>
<sys:String x:Key="DisplayInstallInfo_EnableRootCertGenerateCert">Generating a key...</sys:String>
<sys:String x:Key="DisplayInstallInfo_EnableRootCertDownloadCert">The key is being downloaded...</sys:String>
<sys:String x:Key="DisplayInstallInfo_EnableRootCertSetCertEnable">The remote host enables key login.......</sys:String>
<sys:String x:Key="DisplayInstallInfo_EnableRootPasswordSuccess">The remote host Root account password login is enabled, and the password is saved in the folder opened afterwards!</sys:String>
<sys:String x:Key="DisplayInstallInfo_StartRemoveProxy">Start uninstall......</sys:String>
<sys:String x:Key="DisplayInstallInfo_DiscoverProxySoft">Detected installed</sys:String>
<sys:String x:Key="DisplayInstallInfo_RemoveProxySoftFailed">Uninstallation failed! Please ask the developer!</sys:String>
<sys:String x:Key="DisplayInstallInfo_RemoveProxySoftSuccess">Uninstall successfully!</sys:String>
<!-- The following resource tool tab interface -->
<sys:String x:Key="ButtonWebBrowserHomePage">Home</sys:String>
<sys:String x:Key="ButtonWebBrowserForward">Forward</sys:String>
<sys:String x:Key="ButtonWebBrowserBack">Back</sys:String>
<sys:String x:Key="TextBlockWebExplain">Due to well-known reasons, loading is slow at certain times, please be patient</sys:String>
<!-- The following Trojan-go template library interface -->
<sys:String x:Key="GroupBoxHeaderTrojanGoTemplates">Trojan-go template library</sys:String>
<sys:String x:Key="TextBlockTrojanGoTLSwebPlan">http/2 transmission, Caddy2 camouflage website, anti-recognition, CDN of CloudFlare is not currently supported</sys:String>
<sys:String x:Key="TextBlockTrojanGoWebSocketTLSwebPlan">Use WebSocket transmission, Caddy2 camouflage website, anti-identification, support CloudFlare CDN</sys:String>
<sys:String x:Key="GroupBoxHeaderParameterTrojanGo">Parameter settings</sys:String>
<sys:String x:Key="TextBlockTrojanGoDomain">Domain name:</sys:String>
<sys:String x:Key="TextBlockTrojanGoPort">Port: 443</sys:String>
<sys:String x:Key="TextBlockTrojanGoPassword">Password:</sys:String>
<sys:String x:Key="TextBlockTrojanGoPasswordExplain">Use the existing password and paste it directly into the box</sys:String>
<sys:String x:Key="TextBlockTrojanGoWebSocketPath">WebSocket Path:</sys:String>
<sys:String x:Key="CheckBoxMuxSelect">Mux multiplexing</sys:String>
<sys:String x:Key="TextBlockExplainCheckBoxMuxSelect">The settings here are only valid for the official client configuration file config.json, other clients need to be set manually, and the server automatically adapts.</sys:String>
<sys:String x:Key="TextBlockExplainCheckBoxMuxSelectResult">This field does not appear in the QR code and sharing URL. The client needs to set it by itself, and the server enables automatic adaptation by default.</sys:String>
<sys:String x:Key="ButtonTrojanGoTemplateOK">OK</sys:String>
<sys:String x:Key="ButtonTrojanGoTemplateCancel">Cancel</sys:String>
<!-- The following V2Ray template library interface -->
<sys:String x:Key="GroupBoxHeaderV2RayTemplates">V2Ray Templates</sys:String>
<sys:String x:Key="TabItemHeaderV2RayHotPlan">Recommend</sys:String>
<sys:String x:Key="TabItemHeaderV2RayEarlyPlan">EarlyPlan</sys:String>
<sys:String x:Key="TabItemHeaderV2RayVlessProtocol">VLESS</sys:String>
<sys:String x:Key="TextBlockVlessExplain">VLESS is a lightweight transmission protocol. Unlike VMess, VLESS don't depend on the system time. The authentication method is also UUID, but alterId is not required. Currently VLESS does not have its own encryption, please use it for reliable channels, such as TLS. Advantages: It can effectively reduce host resource consumption. Currently VLESS does not support sharing. Please ensure that both the client and server v2ray-core are the latest version.</sys:String>
<sys:String x:Key="TextBlockVlessXtlsTcpExplain">XTLS works well on devices with low performance or without AES hard-decoding. For example, XTLS is used on hard routers, and the network speed can be doubled when the CPU is full, or the same The CPU occupancy rate is halved at Internet speed, and for mobile devices, the reduction in the amount of calculation means power saving.Version requires 4.29+ (Domain required) Not support CDN.</sys:String>
<sys:String x:Key="TextBlockV2RayVlessTcpTlsWebExplain">Lightweight protocol VLESS, occupies less host resources, data TLS encrypted transmission, and Caddy2 is used as a disguised website on the node. Suitable for VPS with low configuration, or shared nodes by multiple people, the server client version requires 4.27+ (Domain required) Notsupport CDN.</sys:String>
<sys:String x:Key="TextBlockVlessWebSocketTlsWebExplain">VLESS protocol, this type of solution with VMESS is more lightweight. Stability is strong, Caddy2 is front-facing, hidden proxy features, it is recognized as https traffic visiting the website, the strongest anti-blocking recognition, (Domain required) CDN is supported</sys:String>
<sys:String x:Key="TextBlockVlessHttp2WebExplain">VLESS protocol, this type of solution with VMESS is more lightweight. Based on HTTP/2 transmission. Completely implemented in accordance with the HTTP/2 standard, with Caddy2 as the front, hidden proxy features, H2C protocol forwarding to V2Ray, (Domain required) CloudFlare CDN is not supported</sys:String>
<sys:String x:Key="TabItemHeaderV2RayTcpProtocol">TCP</sys:String>
<sys:String x:Key="TabItemHeaderV2RayWebSocketProtocol">WebSocket</sys:String>
<sys:String x:Key="TabItemHeaderV2RayHttp2Protocol">Http/2</sys:String>
<sys:String x:Key="TabItemHeaderV2RayMkcpProtocol">mKCP</sys:String>
<sys:String x:Key="TabItemHeaderV2RayQuicProtocol">QUIC</sys:String>
<sys:String x:Key="GroupBoxHeaderParameterV2Ray">Parameter settings</sys:String>
<sys:String x:Key="TextBlockV2RayServerPort">Server port:</sys:String>
<sys:String x:Key="ButtonV2RayServerPortChange">Random</sys:String>
<sys:String x:Key="TextBlockV2RayServerPortExplain">If TLS encryption is used, please keep the default port 443</sys:String>
<sys:String x:Key="TextBlockV2RayUUIDExplain">Use the existing UUID and paste it directly into the box</sys:String>
<sys:String x:Key="TextBlockV2RayQuicUUID">QUIC Key:</sys:String>
<sys:String x:Key="TextBlockV2RayMkcpSeedUUID">mKCP Seed:</sys:String>
<sys:String x:Key="TextBlockV2RayMkcpExplain">Enable the mKCP Seed key to enhance anti-recognition, leave it blank to disable it. Version 4.24.2+</sys:String>
<sys:String x:Key="TextBlockV2RayPath">Path:</sys:String>
<sys:String x:Key="TextBlockV2RayVlessWsPath">VLESS ws path:</sys:String>
<sys:String x:Key="TextBlockV2RayVmessTcpPath">VMESS tcp path:</sys:String>
<sys:String x:Key="TextBlockV2RayVmessWsPath">VMESS ws path:</sys:String>
<sys:String x:Key="TextBlockQuicEncryption">QUIC Encryption:</sys:String>
<sys:String x:Key="TextBlockV2RayDomain">Domain name:</sys:String>
<sys:String x:Key="TextBlockTrojanPassword">Trojan password is the same as V2ray UUID.</sys:String>
<sys:String x:Key="TextBlockV2RayMaskSites">Mask a website:</sys:String>
<sys:String x:Key="TextBoxV2RayMaskSitesTag">Set this option to increase proxy concealment (can be empty)</sys:String>
<sys:String x:Key="TextBoxV2RayMaskSitesToolTip">Enter only the domain name, excluding "http" and "/" etc.</sys:String>
<sys:String x:Key="ButtonRootProhibitsPasswordLoginToolTip">Only forbid root account to log in with password, please make sure that other login methods of root account have taken effect</sys:String>
<sys:String x:Key="ButtonEnableRootPassWordToolTip">The root account will be enabled and set to password login</sys:String>
<sys:String x:Key="ButtonEnableRootCertToolTip">will enable or set the root account as the key certificate login</sys:String>
<sys:String x:Key="MessageBoxShow_MaskSitesToolTip">The input format of the fake URL is wrong! please enter again!</sys:String>
<sys:String x:Key="TextBlockV2RayWebSocketTlsWebExplain">Strong stability, Caddy2 as the front, hidden proxy feature, recognized as https traffic to the website, the strongest anti-blocking recognition, domain name is required, CDN support</sys:String >
<sys:String x:Key="TextBlockV2RayHttp2TlsWebExplain">based on HTTP/2 transmission. Completely implemented in accordance with the HTTP/2 standard, with Caddy2 as the front, hidden proxy features, H2C protocol forwarding to V2Ray, domain name is required, and CloudFlare CDN is not currently supported</sys:String>
<sys:String x:Key="TextBlockXrayExplain">Currently Xray is a superset of V2Ray, and it will have a different development direction from V2Ray in the future.</sys:String>
<sys:String x:Key="TextBlockVlessVmessXtlsTcpWebSocketExplainHot">VLESS over TCP with XTLS + fallback and shunt to WHATEVER (ultimate configuration), configured and recommended by rprx boss (author of xtls), configure the following six solutions at the same time on the server side, sharing the same domain name and port 443, WS can pass through CDN.</sys:String>
<sys:String x:Key="TextBlockVlessVmessXtlsTcpWebSocketExplainHot5">VLESS over TCP with XTLS + fallback and shunt to WHATEVER (ultimate configuration), configured and recommended by rprx boss (author of xtls), configure the following five solutions at the same time on the server side, sharing the same domain name and port 443, WS can pass through CDN.(If you want to add XTLS scheme, please use Xray configuration)</sys:String>
<sys:String x:Key="TextBlockV2RayTcpExplain">Encrypted data transmission will be recognized as unknown tcp traffic</sys:String>
<sys:String x:Key="RadioButtonV2RayTcpHttp">TCP+Http camouflage</sys:String>
<sys:String x:Key="TextBlockV2RayTcpHttpExplain">Encrypted data transmission and HTTP disguise will be recognized as http traffic, but not real http access</sys:String>
<sys:String x:Key="TextBlockV2RayTcpTlsExplain">Data encrypted transmission, the transmission protocol uses TLS, it will be recognized as TLS traffic, not equivalent to https traffic characteristics (domain name required)</sys:String>
<sys:String x:Key="RadioButtonV2RayTcpTlsSelfSigned">TCP+TLS (self-signed certificate)</sys:String>
<sys:String x:Key="TextBlockV2RayTcpTlsSelfSignedExplain">Data encrypted transmission, the transmission protocol uses TLS, it will be recognized as TLS traffic, not equivalent to https traffic characteristics (no domain name required)</sys:String>
<sys:String x:Key="TextBlockV2RaySelfSignedShadowrocketExplain">Shadowrocket (ios) needs to manually open the "Allow Unsafe" option</sys:String>
<sys:String x:Key="TextBlockV2RayWebSocketExplain">Data encrypted transmission, the transmission protocol uses WebSocket, if TLS is not enabled, it will be recognized as WebSocket traffic.</sys:String>
<sys:String x:Key="TextBlockV2RayWebSocketTlsExplain">Data encrypted transmission, the transmission protocol uses WebSocket, and TLS is enabled, it will be recognized as TLS traffic. (Domain name required)Support CDN.</sys:String>
<sys:String x:Key="RadioButtonV2RayWebSocketTlsSelfSigned">WebSocket+TLS (self-signed certificate)</sys:String>
<sys:String x:Key="TextBlockV2RayWebSocketTlsSelfSignedExplain">Data encrypted transmission, the transmission protocol uses WebSocket, and TLS is enabled, and it will be recognized as TLS traffic. (No domain name required)</sys:String>
<sys:String x:Key="TextBlockV2RayHttp2Explain">The transmission method based on HTTP/2. It is fully implemented in accordance with the HTTP/2 standard and requires a domain name</sys:String>
<sys:String x:Key="RadioButtonV2RayHttp2SelfSigned">HTTP2 (self-signed certificate)</sys:String>
<sys:String x:Key="TextBlockV2RayHttp2SelfSignedExplain">The transmission method based on HTTP/2. It is fully implemented in accordance with the HTTP/2 standard, uses a self-signed certificate, and does not require a domain name</sys:String>
<sys:String x:Key="RadioButtonV2RayMkcpNone">mKCP (no camouflage)</sys:String>
<sys:String x:Key="TextBlockV2RayMkcpNoneExplain">Encrypted data transmission to increase bandwidth usage and reduce delay, udp protocol, no camouflage, will be recognized as udp traffic</sys:String>
<sys:String x:Key="TextBlockV2RayMkcpSRTPExplain">Same as mKCP (without camouflage), add disguised as SRTP packet, it will be recognized as video call data (such as FaceTime)</sys:String>
<sys:String x:Key="TextBlockV2RayMkcpuTPExplain">Same as mKCP (without camouflage), adding a uTP packet disguised as a uTP data packet will be recognized as BT download data</sys:String>
<sys:String x:Key="TextBlockV2RayMkcpWeChatExplain">Same as mKCP (no camouflage), adding data packets disguised as WeChat video calls</sys:String>
<sys:String x:Key="TextBlockV2RayMkcpDTLSExplain">Same as mKCP (without camouflage), add disguised as DTLS 1.2 data packet</sys:String>
<sys:String x:Key="TextBlockV2RayMkcpWireGuardExplain">Same as mKCP (without camouflage), with the addition of disguised as WireGuard packets. (Not the real WireGuard protocol)</sys:String>
<sys:String x:Key="TextBlockV2RayQuicShadowrocketExplain">Reminder: Shadowrocket currently does not support QUIC transmission mode.</sys:String>
<sys:String x:Key="RadioButtonV2RayQuicNone">QUIC (no camouflage)</sys:String>
<sys:String x:Key="TextBlockV2RayQuicNoneExplain">Encrypted data transmission, no pretense will be recognized as udp traffic, originally created by Google, advantages: reduced delay, multiplexing, connection migration</sys:String>
<sys:String x:Key="TextBlockV2RayQuicSRTPExplain">Same as QUIC (no camouflage), adding a packet disguised as SRTP, it will be recognized as video call data (such as FaceTime)</sys:String>
<sys:String x:Key="TextBlockV2RayQuicuTPExplain">Same as QUIC (without camouflage), add disguised as uTP data packet, it will be recognized as BT download data</sys:String>
<sys:String x:Key="TextBlockV2RayQuicWeChatExplain">Same as QUIC (no camouflage), adding data packets disguised as WeChat video calls</sys:String>
<sys:String x:Key="TextBlockV2RayQuicDTLSExplain">Same as QUIC (without camouflage), add disguised as DTLS 1.2 packet</sys:String>
<sys:String x:Key="TextBlockV2RayQuicWireGuardExplain">Same as QUIC (without camouflage), adding a pretend to be a WireGuard packet. (Not the real WireGuard protocol)</sys:String>
<!--The following is the time proofreading window-->
<sys:String x:Key="RadioButtonNetworkTime">Sync Network Time</sys:String>
<sys:String x:Key="TextBlockNetworkTime">Correct the remote host time to the network time. Note: The time of the local computer must also be synchronized with the network time, otherwise the local computer V2ray may have a connection error&#x0a;&#x0a;Recommendation: First use this method to proofread time</sys:String>
<sys:String x:Key="RadioButtonLocalTime">Sync local time</sys:String>
<sys:String x:Key="TextBlockLocalTime">Synchronize the remote hosts time to the local time. Note: The local computers time must be accurate and synchronized with the network time, otherwise there may be connection errors in other clients&#x0a;&#x0a;Use this method when you cant check the time when using the network</sys:String>
<sys:String x:Key="RadioButtonUpDateLocalTime">Update the local time</sys:String>
<sys:String x:Key="TextBlockUpDateLocalTime">Synchronize the local computer time with the network time.&#x0a;&#x0a;Note: To use this function, you must run this program as an administrator</sys:String>
<sys:String x:Key="ButtonTestTime">Detection Time</sys:String>
<sys:String x:Key="ButtonProofreading">Proofread</sys:String>
<!--The following is the client parameter display window-->
<sys:String x:Key="GroupBoxHeaderClientParameter">Client configuration parameters</sys:String>
<sys:String x:Key="TextBlockServerAddress">Server address:</sys:String>
<sys:String x:Key="TextBlockServerPort">Port:</sys:String>
<sys:String x:Key="TextBlockUserUUID">User ID(uuid)/Password:</sys:String>
<sys:String x:Key="ButtonCopyV2RayUUIDtoClip">Copy</sys:String>
<sys:String x:Key="MessageBoxShow_V2RayUUIDcopyedToClip">Copied to the clipboard!</sys:String>
<sys:String x:Key="MessageBoxShow_V2RayEmptyToClip">Empty content!</sys:String>
<sys:String x:Key="TextBlockV2RayAlterId">alterId:</sys:String>
<sys:String x:Key="TextBlockV2RayAlterIdExplain">The default is 16, and you can fill in a value not exceeding 64. If the client does not have this option, leave it blank</sys:String>
<sys:String x:Key="TextBlockEncryption">Encryption method:</sys:String>
<sys:String x:Key="TextBlockTransferProtocol">Transfer Protocol:</sys:String>
<sys:String x:Key="TextBlockCamouflageType">Camouflage type(Confuse):</sys:String>
<sys:String x:Key="TextBlockIsOrNotTLS">TLS Set:</sys:String>
<sys:String x:Key="TextBlockCopyToClipExplain">Tip: Double-click the above content window to copy it to the clipboard.</sys:String>
<sys:String x:Key="TextBlockClientPath">Path:</sys:String>
<sys:String x:Key="TextBlockClientMkcpQuicKey">mKCP Seed/QUIC key:</sys:String>
<sys:String x:Key="TextBlockEncryptionIsAuto">default auto</sys:String>
<sys:String x:Key="GrouBoxHeaderUrlOrQR">QR/URL</sys:String>
<sys:String x:Key="TextBlockUsedParameter">The above parameters can be entered into the client manually or by scanning. The configuration and related files used for the official client have been stored in the directory. Click the OK button to open</sys:String>
<sys:String x:Key="TextBlockQrURLexplainV2Ray">QR code and URL link can be used&#x0a;v2rayN(windows)&#x0a;Qv2ray(windows)&#x0a;Qv2ray(windows)&#x0a;Shadowrocket(ios)&#x0a;v2rayNG(Android)&#x0a;Import v2ray node&#x0a;&#x0a;Note: The Vless protocol requires manual input of configuration parameters, and the QR code and URL are invalid</sys:String>
<sys:String x:Key="TextBlockQrURLexplainTrojan-go">" can be used for ShadowRocket (ios), ignore (Android), Qv2ray (windows) to scan codes and import URLs. Note: some clients may not support WebSocket mode ."</sys:String>
<sys:String x:Key="TextBlockQrURLexplainTrojan">"Can be used for ShadowRocket (ios), ignore (Android), Qv2ray (windows) to scan codes and import URLs. Note: Some clients may not support WebSocket mode."</sys:String>
<sys:String x:Key="TextBlockQrURLexplainNaiveProxy">URL import link for NaiveSharp (windows)</sys:String>
<sys:String x:Key="TextBlockQrURLexplainSSR">Used to scan codes and import URL import links for ShadowsocksR (windows), SSRR (android), Shadowrocket (ios)</sys:String>
<sys:String x:Key="TextBlockQrURLexplainSSmobile">For mobile phone client shadowsocks(android), Shadowrocket(ios) scan code and URL import link</sys:String>
<sys:String x:Key="TextBlockQrURLexplainSSpc">For the computer client Shadowsocks (windows) scan code and URL import link</sys:String>
<sys:String x:Key="TextBlockQrURLexplainSS">Scan code and URL import link for Shadowsocks (windows), shadowsocks(android), Shadowrocket(ios)</sys:String>
<sys:String x:Key="TextBlockClientPromptSS">Reminder: The import format of the computer client Shadowsocks (windows) and the mobile client shadowsocks (android) and Shadowrocket (ios) are not compatible. Please select the corresponding format.</sys:String>
<sys:String x:Key="RadioButtonMobileSS">Mobile phone</sys:String>
<sys:String x:Key="RadioButtonPCSS">Computer side</sys:String>
<sys:String x:Key="TextBlockShareQRcodeMtgTgIpv4">TG format QR</sys:String>
<sys:String x:Key="TextBlockURLMtgTgIpv4">TG format URL (double-click to copy to the clipboard)</sys:String>
<sys:String x:Key="TextBlockShareQRcodeMtgTmeIpv4">T.ME format QR</sys:String>
<sys:String x:Key="TextBlockURLMtgTmeIpv4">T.ME format URL (double-click to copy to the clipboard)</sys:String>
<!--The following is in the program-->
<sys:String x:Key="MessageBoxShow_ErrorHostPortUserNotEmpty">Host address, host port, and user name are required and cannot be empty!!</sys:String>
<sys:String x:Key="MessageBoxShow_ErrorHostPortErr">The connection port contains non-numeric characters!</sys:String>
<sys:String x:Key="MessageBoxShow_ErrorHostPasswordNotEmpty">The login password is required and cannot be empty!!</sys:String>
<sys:String x:Key="MessageBoxShow_ErrorHostKeyNotEmpty">The key file is required and cannot be empty!!</sys:String>
<sys:String x:Key="MessageBoxShow_ErrorProxyAddressPortNotEmpty">If a proxy is selected, the proxy address and port cannot be empty!</sys:String>
<sys:String x:Key="MessageBoxShow_ErrorProxyUserPasswordNotEmpty">If the proxy needs to log in, the user name and password for proxy login cannot be empty!</sys:String>
<sys:String x:Key="MessageBoxShow_ErrorHostConnection">The remote host connection information is wrong, please check!</sys:String>
<sys:String x:Key="MessageBoxShow_ChooseTemplate">Please select a configuration template first!</sys:String>
<sys:String x:Key="DisplayInstallInfo_FunctionResultErr">An error occurred, the installation was interrupted...</sys:String>
<sys:String x:Key="DisplayInstallInfo_Login">Logging in to the remote host...</sys:String>
<sys:String x:Key="DisplayInstallInfo_LoginSuccessful">The host login is successful!</sys:String>
<sys:String x:Key="DisplayInstallInfo_DetectionRootPermission">Detect whether it is running under root permissions...</sys:String>
<sys:String x:Key="MessageBoxShow_ErrorRootPermission">Please use an account with root permissions to log in to the host! !</sys:String>
<sys:String x:Key="DisplayInstallInfo_DetectionRootOK">Detection result: OK!</sys:String>
<sys:String x:Key="DisplayInstallInfo_TestExistSoft">Check whether the system has been installed</sys:String>
<sys:String x:Key="MessageBoxShow_ExistedSoft">The remote host has been installed</sys:String>
<sys:String x:Key="MessageBoxShow_ForceInstallSoft">, it is recommended to uninstall first, or reinstall the system, if the forced installation may fail. Do you force a reinstallation?</sys:String>
<sys:String x:Key="DisplayInstallInfo_InstallationCanceledExit">installation canceled, exit</sys:String>
<sys:String x:Key="DisplayInstallInfo_ForceInstallSoft">Selected mandatory installation</sys:String>
<sys:String x:Key="DisplayInstallInfo_NoInstalledSoft">Test result: not installed</sys:String>
<sys:String x:Key="DisplayInstallInfo_CheckSystemRequirements">Check whether the system meets the installation requirements...</sys:String>
<sys:String x:Key="MessageBoxShow_CurrentKernelVersion">The current system kernel version is</sys:String>
<sys:String x:Key="MessageBoxShow_RequiredKernelVersionExplain">, V2ray requires the kernel to be 2.6.23 and above. Please upgrade the kernel and install again!</sys:String>
<sys:String x:Key="DisplayInstallInfo_KernelVersionNotMatch">The system kernel version does not meet the requirements, and the installation failed! !</sys:String>
<sys:String x:Key="MessageBoxShow_MissingSystemComponents">The system lacks necessary installation components such as: apt||dnf||yum||zypper||Syetemd, the host system is recommended to use: CentOS 7/8, Debian 8/9/10 ,Ubuntu 16.04 and above</sys:String>
<sys:String x:Key="DisplayInstallInfo_MissingSystemComponents">The system environment does not meet the requirements, and the installation fails! !</sys:String>
<sys:String x:Key="DisplayInstallInfo_SystemRequirementsOK">Test result: OK!</sys:String>
<sys:String x:Key="DisplayInstallInfo_EnableSELinux">It is detected that the system has SELinux enabled and it is working in strict mode. It needs to be changed to relaxed mode! Modifying...</sys:String>
<sys:String x:Key="DisplayInstallInfo_SELinuxModifyOK">The modification is complete!</sys:String>
<sys:String x:Key="DisplayInstallInfo_ProofreadingTime">Proofreading time...</sys:String>
<sys:String x:Key="MessageBoxShow_TimeError">The difference between the local time and the remote hosts time exceeds the limit (90 seconds), please use'System Tools-->Time Correction' to verify the time before setting</sys:String>
<sys:String x:Key="DisplayInstallInfo_TimeError">Time comparison failed...</sys:String>
<sys:String x:Key="DisplayInstallInfo_TimeOK">The time difference meets the requirements, OK!</sys:String>
<sys:String x:Key="DisplayInstallInfo_TestDomainResolve">is checking whether the domain name is resolved to the IP of the current VPS...</sys:String>
<sys:String x:Key="DisplayInstallInfo_OnlyIpv6HostDetect">is detecting whether it is a pure ipv6 host...</sys:String>
<sys:String x:Key="DisplayInstallInfo_NoIpDetect">A valid IP address was not detected...</sys:String>
<sys:String x:Key="DisplayInstallInfo_FindFastestSetUpNat64">Finding the fastest Nat64 gateway...</sys:String>
<sys:String x:Key="DisplayInstallInfo_FindFastestSetUpNat64Failed">Failed to find a valid Nat64 gateway...</sys:String>
<sys:String x:Key="DisplayInstallInfo_FindFastestNat64AsIs">The fastest Nat64 gateway of the current host is:</sys:String>
<sys:String x:Key="DisplayInstallInfo_SetUpNat64">Nat64 gateway is being set up......</sys:String>
<sys:String x:Key="DisplayInstallInfo_DeleteSetUpNat64">Nat64 gateway is being deleted...</sys:String>
<sys:String x:Key="DisplayInstallInfo_DomainResolveOK">The resolution is correct! OK!</sys:String>
<sys:String x:Key="DisplayInstallInfo_OnlyIpv6">detects that the current host is a pure ipv6 host, it is not currently supported!</sys:String>
<sys:String x:Key="DisplayInstallInfo_ErrorDomainResolve">The domain name could not be correctly resolved to the IP of the current VPS! Installation failed!</sys:String>
<sys:String x:Key="MessageBoxShow_ErrorDomainResolve">The domain name cannot be correctly resolved to the IP of the current VPS, please check! If the resolution setting is correct, please wait for it to take effect before retrying the installation. If the domain name uses CDN, please close it first!</sys:String>
<sys:String x:Key="DisplayInstallInfo_TestPortUsed">Detect port occupancy...</sys:String>
<sys:String x:Key="MessageBoxShow_ErrorPortUsed">If one or all of the 80/443 ports are occupied, will the program occupying 80/443 ports be forcibly stopped?</sys:String>
<sys:String x:Key="DisplayInstallInfo_ErrorPortUsedFail">The port is occupied and the installation failed...</sys:String>
<sys:String x:Key="DisplayInstallInfo_ReleasePort">is releasing port 80/443...</sys:String>
<sys:String x:Key="DisplayInstallInfo_ReleasePortOK">The release of port 80/443 is complete!</sys:String>
<sys:String x:Key="MessageBoxShow_ErrorPortUsedOther">The port is occupied, will the program occupying this port be forcibly stopped?</sys:String>
<sys:String x:Key="DisplayInstallInfo_ReleasePortOther">Release the port...</sys:String>
<sys:String x:Key="DisplayInstallInfo_ReleasePortOKOther">The port is released!</sys:String>
<sys:String x:Key="DisplayInstallInfo_PortNotUsed">Test result: Not occupied!</sys:String>
<sys:String x:Key="DisplayInstallInfo_StartInstalling">The system environment has been tested and the installation requirements are met, and the deployment begins...</sys:String>
<sys:String x:Key="DisplayInstallInfo_OpenFireWallPort">Open the corresponding port of the firewall...</sys:String>
<sys:String x:Key="DisplayInstallInfo_StartInstallSoft">Installing</sys:String>
<sys:String x:Key="DisplayInstallInfo_DownloadScriptFailed">File download failed!</sys:String>
<sys:String x:Key="DisplayInstallInfo_CompilingSS">Compiling, please wait patiently.............</sys:String>
<sys:String x:Key="MessageBoxShow_ErrorInstallSoftFail">The installation failed, the script runs incorrectly!</sys:String>
<sys:String x:Key="DisplayInstallInfo_SoftInstallSuccess">The installation is successful!</sys:String>
<sys:String x:Key="DisplayInstallInfo_UploadSoftConfig">After installation, upload the configuration file......</sys:String>
<sys:String x:Key="DisplayInstallInfo_StartInstallAcmeSh">Installing acme.sh......</sys:String>
<sys:String x:Key="DisplayInstallInfo_AcmeShInstallSuccess">acme.sh is installed successfully!</sys:String>
<sys:String x:Key="DisplayInstallInfo_ErrorAcmeShInstallFail">acme.sh installation failed! The reason is unknown, please ask the developer!</sys:String>
<sys:String x:Key="DisplayInstallInfo_StartApplyCert">Apply for domain name certificate...</sys:String>
<sys:String x:Key="DisplayInstallInfo_ApplyCertSuccess">The certificate application is successful!</sys:String>
<sys:String x:Key="DisplayInstallInfo_ApplyCertFail">Certificate application failed! The reason is unknown, please ask the developer!</sys:String>
<sys:String x:Key="DisplayInstallInfo_IntallCertToSoft">Install the certificate to</sys:String>
<sys:String x:Key="DisplayInstallInfo_IntallCertToSoftOK">The certificate is successfully installed to</sys:String>
<sys:String x:Key="DisplayInstallInfo_IntallCertToSoftFail">The certificate is installed to</sys:String>
<sys:String x:Key="DisplayInstallInfo_InstallCertFailAsk">failed, the reason is unknown, you can ask the developer!</sys:String>
<sys:String x:Key="DisplayInstallInfo_StartInstallCaddy">Install Caddy...</sys:String>
<sys:String x:Key="DisplayInstallInfo_NotInstalledCaddy">Test result: Caddy is not installed!</sys:String>
<sys:String x:Key="DisplayInstallInfo_ErrorInstallCaddyFail">The installation of Caddy failed!</sys:String>
<sys:String x:Key="DisplayInstallInfo_InstalledCaddyOK">Caddy installed successfully!</sys:String>
<sys:String x:Key="DisplayInstallInfo_UpgradeCaddy">is upgrading the Caddy v2.2.0 beta version for Http2Web mode!</sys:String>
<sys:String x:Key="DisplayInstallInfo_UploadCaddyConfig">Upload Caddy configuration file...</sys:String>
<sys:String x:Key="DisplayInstallInfo_UploadCaddyConfigFailed">Caddy configuration file upload failed!</sys:String>
<sys:String x:Key="DisplayInstallInfo_UploadCaddyConfigOK">The Caddy configuration file is uploaded successfully, OK!</sys:String>
<sys:String x:Key="DisplayInstallInfo_StartCaddyService">Starting Caddy...</sys:String>
<sys:String x:Key="DisplayInstallInfo_StartCaddyServiceOK">Caddy started successfully!</sys:String>
<sys:String x:Key="DisplayInstallInfo_StartCaddyServiceFail">Caddy failed to start!</sys:String>
<sys:String x:Key="DisplayInstallInfo_StartCaddyServiceSecond">Starting Caddy (second attempt)!</sys:String>
<sys:String x:Key="DisplayInstallInfo_StartCaddyServiceSecondFail">Caddy failed to start (second time)! Exit the installation!</sys:String>
<sys:String x:Key="DisplayInstallInfo_CaddyServiceFailedExit">Caddy failed to start, the reason is unknown! Please ask the developer!</sys:String>
<sys:String x:Key="DisplayInstallInfo_StartSoft">Starting</sys:String>
<sys:String x:Key="DisplayInstallInfo_StartSoftOK">Startup is successful!</sys:String>
<sys:String x:Key="DisplayInstallInfo_StartSoftFail">Startup failed!</sys:String>
<sys:String x:Key="DisplayInstallInfo_StartSoftSecond">is trying to start the second time</sys:String>
<sys:String x:Key="DisplayInstallInfo_StartSoftSecondFail">failed to start (second time)! Exit the installation!</sys:String>
<sys:String x:Key="DisplayInstallInfo_StartSoftFailedExit">Startup failed, the reason is as above! Please troubleshoot the reason!</sys:String>
<sys:String x:Key="DisplayInstallInfo_TestBBR">BBR test...</sys:String>
<sys:String x:Key="DisplayInstallInfo_EnableBBR">Enable BBR...</sys:String>
<sys:String x:Key="DisplayInstallInfo_BBRisEnabled">BBR has been enabled!</sys:String>
<sys:String x:Key="DisplayInstallInfo_BBRFailed">The system does not meet the conditions for enabling BBR, and the enabling failed!</sys:String>
<sys:String x:Key="DisplayInstallInfo_BBREnabledSuccess">BBR is successfully activated!</sys:String>
<sys:String x:Key="DisplayInstallInfo_GenerateClientConfig">Generate client configuration...</sys:String>
<sys:String x:Key="DisplayInstallInfo_GetClientConfigFailed">Failed to obtain client configuration!</sys:String>
<sys:String x:Key="DisplayInstallInfo_ProxyInstalledOK">The installation is successful, Enjoy it!!</sys:String>
<sys:String x:Key="DisplayInstallInfo_LoginFailed">Installation Failed!</sys:String>
<sys:String x:Key="MessageBoxShow_ErrorLoginOccurred">An error occurred!</sys:String>
<sys:String x:Key="MessageBoxShow_ErrorLoginUserOrPassword">Wrong password or wrong username!</sys:String>
<sys:String x:Key="MessageBoxShow_ErrorLoginHostOrPort">Please check whether the host address and port are correct, if it passes the proxy, please check whether the proxy is working properly</sys:String>
<sys:String x:Key="MessageBoxShow_ErrorLoginKey">The selected key file is wrong or the format is wrong!</sys:String>
<sys:String x:Key="MessageBoxShow_ErrorLoginKeyOrUser">Login using the key, the key file is wrong or the user name is wrong!</sys:String>
<sys:String x:Key="MessageBoxShow_ErrorLoginHostOrProxyPort">The host address is wrong. If a proxy is used, it may also be the wrong port to connect to the proxy!</sys:String>
<sys:String x:Key="MessageBoxShow_ErrorUpgradeSoftNotInstall">Exit! Reason: The remote host is not installed</sys:String>
<sys:String x:Key="DisplayInstallInfo_OldScriptInstalledV2Ray">V2Ray using the old installation script is detected...</sys:String>
<sys:String x:Key="MessageBoxShow_OldScriptInstalledV2Ray">The V2Ray using the old installation script is detected. Do you want to uninstall the old version and reinstall it with the new installation script?</sys:String>
<sys:String x:Key="DisplayInstallInfo_RemoveOldScriptInstalledV2Ray">Uninstalling the old version...</sys:String>
<sys:String x:Key="DisplayInstallInfo_RemoveOldVersionOK">Uninstall the old version, OK!</sys:String>
<sys:String x:Key="DisplayInstallInfo_InstallNewVersion">Install the new version...</sys:String>
<sys:String x:Key="DisplayInstallInfo_MoveOriginalConfig">Migrate the original configuration file.</sys:String>
<sys:String x:Key="DisplayInstallInfo_UpgradedNewVersion">has been updated to the latest version.</sys:String>
<sys:String x:Key="DisplayInstallInfo_CurrentVersion">The current version of the remote host is: v</sys:String>
<sys:String x:Key="DisplayInstallInfo_NewVersion">The latest version is:</sys:String>
<sys:String x:Key="DisplayInstallInfo_IsOrNoUpgradeNewVersion">Is it upgraded to the latest version?</sys:String>
<sys:String x:Key="DisplayInstallInfo_StartUpgradeNewVersion">Upgrading to the latest version</sys:String>
<sys:String x:Key="DisplayInstallInfo_UpgradeNewVersionOK">The upgrade is successful! It is currently the latest version!</sys:String>
<sys:String x:Key="DisplayInstallInfo_UpgradeNewVersionFail">The upgrade failed. The reason is unknown. Please ask the developer!</sys:String>
<sys:String x:Key="DisplayInstallInfo_UpgradeVersionCancel">Upgrade is cancelled, exit!</sys:String>
<sys:String x:Key="DisplayInstallInfo_IsNewVersion">The remote host is currently the latest version:</sys:String>
<sys:String x:Key="DisplayInstallInfo_NotUpgradeVersion">No need to upgrade! drop out!</sys:String>
<sys:String x:Key="MessageBoxShow_DomainNotEmpty">The domain name cannot be empty, please check the relevant parameter settings!</sys:String>
<sys:String x:Key="MessageBoxShow_PleaseInstallSoftAtX64">Please install in x86_64 system</sys:String>
<sys:String x:Key="DisplayInstallInfo_BackTrojanConfig">Back up the Trojan configuration file...</sys:String>
<sys:String x:Key="DisplayInstallInfo_RestoreTrojanConfig">Restore the Trojan configuration file...</sys:String>
<sys:String x:Key="DisplayInstallInfo_ExistedCaddy">"Caddy has been installed on the remote host, but Im not sure whether it supports forward proxy. Do I force a reinstallation?"</sys:String>
<sys:String x:Key="DisplayInstallInfo_RemoveCaddyOrRebuiled">Please uninstall Caddy or reinstall the VPS system first!</sys:String>
<sys:String x:Key="DisplayInstallInfo_InstallRelySoft">Installing dependent software......</sys:String>
<sys:String x:Key="DisplayInstallInfo_SoftInstalledOK">The installation is complete! OK!</sys:String>
<sys:String x:Key="DisplayInstallInfo_StartCaddy">Installing Caddy.....</sys:String>
<sys:String x:Key="DisplayInstallInfo_UpgradeNaiveProxy">The server is being upgraded for NaiveProxy</sys:String>
<sys:String x:Key="DisplayInstallInfo_UpgradeNaiveProxyOK">The upgrade is complete, OK!</sys:String>
<sys:String x:Key="DisplayInstallInfo_OptimizeNetwork">Optimizing network parameters...</sys:String>
<sys:String x:Key="DisplayInstallInfo_OptimizeNetworkOK">Optimize network parameters, OK!</sys:String>
<!--The following is the Xray client documentation-->
<sys:String x:Key="readmeTxtXrayExplainLine01">This file is the client configuration file used by the official Xay program. It is configured in global mode, socks5 address: 127.0.0.1:1080, http proxy address: 127.0.0.1:1081</sys:String>
<sys:String x:Key="readmeTxtXrayExplainLine02">Xray official website: https://github.com/XTLS/Xray-core</sys:String>
<sys:String x:Key="readmeTxtXrayExplainLine03">Xray official program download address: https://github.com/XTLS/Xray-core/releases</sys:String>
<sys:String x:Key="readmeTxtXrayExplainLine04">Download the corresponding version, select xray-windows-64.zip or xray-windows-32.zip for Windows, extract xray.exe after decompression. Put it in the same directory as config.json, just run xray.exe.</sys:String>
<!--The following is the V2Ray client description file-->
<sys:String x:Key="readmeTxtV2RayExplainLine01">This file is the client configuration file used by the official V2Ray program. It is configured in global mode, socks5 address: 127.0.0.1:1080, http proxy address: 127.0.0.1:1081</sys:String>
<sys:String x:Key="readmeTxtV2RayExplainLine02">v2ray official website: https://www.v2ray.com/</sys:String>
<sys:String x:Key="readmeTxtV2RayExplainLine03">v2ray official program download address: https://github.com/v2ray/v2ray-core/releases</sys:String>
<sys:String x:Key="readmeTxtV2RayExplainLine04">download the corresponding version, Windows select v2ray-windows-64.zip or v2ray-windows-32.zip, extract v2ctl.exe and v2ray.exe after decompression. Put it in the same directory as config.json, just run v2ray.exe.</sys:String>
<sys:String x:Key="readmeTxtV2RayExplainLine05">This file is v2rayN, Qv2ray, v2rayNG(Android), Shadowrocket(ios) scan code import node</sys:String>
<sys:String x:Key="readmeTxtV2RayExplainLine06">v2rayN download URL: https://github.com/2dust/v2rayN/releases</sys:String>
<sys:String x:Key="readmeTxtV2RayExplainLine07">Qv2ray download URL: https://github.com/Qv2ray/Qv2ray/releases</sys:String>
<sys:String x:Key="readmeTxtV2RayExplainLine08">v2rayNG(Android) download URL: https://github.com/2dust/v2rayNG/releases</sys:String>
<sys:String x:Key="readmeTxtV2RayExplainLine09">v2rayNG (Android) download URL on Google Play: https://play.google.com/store/apps/details?id=com.v2ray.ang</sys:String >
<sys:String x:Key="readmeTxtV2RayExplainLine10">Shadowrocket(ios) download, you need to use the AppleID of the foreign region. Please Google method yourself.</sys:String>
<sys:String x:Key="readmeTxtV2RayExplainLine11">This file is v2rayN, Qv2ray, v2rayNG(Android), Shadowrocket(ios) copy and paste the vmess URL of the imported node</sys:String>
<sys:String x:Key="readmeTxtV2RayExplainLine12">Server general connection configuration parameters</sys:String>
<!--The following is the Trojan-go client description file-->
<sys:String x:Key="readmeTxtTrojan-goExplainLine01">This file is the client configuration file used by the official Trojan-go program, configured in global mode, http and socks5 address: 127.0.0.1:1080</sys:String >
<sys:String x:Key="readmeTxtTrojan-goExplainLine02">Trojan-go official website: https://github.com/p4gefau1t/trojan-go</sys:String>
<sys:String x:Key="readmeTxtTrojan-goExplainLine03">Trojan-go official program download address: https://github.com/p4gefau1t/trojan-go/releases</sys:String>
<sys:String x:Key="readmeTxtTrojan-goExplainLine04">Download the corresponding version, select Trojan-go-x.xx-win.zip for Windows, extract trojan-go.exe after decompression. Put it in the same directory as config.json, just run trojan-go.exe.</sys:String>
<sys:String x:Key="readmeTxtTrojan-goExplainLine05">This file is for Qv2ray (windows), ignore (Android) scan code import node</sys:String>
<sys:String x:Key="readmeTxtTrojan-goExplainLine06">Qv2ray (windows) download URL: https://github.com/Qv2ray/Qv2ray/releases</sys:String>
<sys:String x:Key="readmeTxtTrojan-goExplainLine07">igniter (Android) download URL: https://github.com/trojan-gfw/igniter/releases</sys:String>
<sys:String x:Key="readmeTxtTrojan-goExplainLine08">Shadowrocket(ios) download, you need to use the AppleID of the foreign region. Please Google method yourself.</sys:String>
<sys:String x:Key="readmeTxtTrojan-goExplainLine09">This file is Qv2ray (windows), ignore (Android)copy and paste the URL of the imported node</sys:String>
<sys:String x:Key="readmeTxtTrojan-goExplainLine10">Server general connection configuration parameters</sys:String>
<!--The following is the documentation for the Trojan client-->
<sys:String x:Key="readmeTxtTrojanExplainLine01">This file is the client configuration file used by the official Trojan program. It is configured in global mode, http and socks5 address: 127.0.0.1:1080</sys:String>
<sys:String x:Key="readmeTxtTrojanExplainLine02">Trojan official website: https://trojan-gfw.github.io/trojan/</sys:String>
<sys:String x:Key="readmeTxtTrojanExplainLine03">Trojan official program download address: https://github.com/trojan-gfw/trojan/releases</sys:String>
<sys:String x:Key="readmeTxtTrojanExplainLine04">Download the corresponding version, select Trojan-x.xx-win.zip for Windows, extract trojan.exe after decompression. Put it in the same directory as config.json, just run trojan.exe.</sys:String>
<sys:String x:Key="readmeTxtTrojanExplainLine05">This file is Qv2ray (windows), ignore (Android), Shadowrocket (ios) scan code import node</sys:String>
<sys:String x:Key="readmeTxtTrojanExplainLine06">Qv2ray (windows) download URL: https://github.com/Qv2ray/Qv2ray/releases</sys:String>
<sys:String x:Key="readmeTxtTrojanExplainLine07">igniter (Android) download URL: https://github.com/trojan-gfw/igniter/releases</sys:String>
<sys:String x:Key="readmeTxtTrojanExplainLine08">Shadowrocket(ios) download, you need to use the AppleID of the foreign region. Please Google method yourself.</sys:String>
<sys:String x:Key="readmeTxtTrojanExplainLine09">This file is Qv2ray (windows), ignore (Android), Shadowrocket (ios) copy and paste the URL of the imported node</sys:String>
<sys:String x:Key="readmeTxtTrojanExplainLine10">Server general connection configuration parameters</sys:String>
<!--The following is the NaiveProxy client documentation-->
<sys:String x:Key="readmeTxtNaiveProxyExplainLine01">This file is the client configuration file used by the official NaiveProxy program, configured in global mode, socks5 address: 127.0.0.1:1080</sys:String>
<sys:String x:Key="readmeTxtNaiveProxyExplainLine02">NaiveProxy official website: https://github.com/klzgrad/naiveproxy</sys:String>
<sys:String x:Key="readmeTxtNaiveProxyExplainLine03">NaiveProxy official program download address: https://github.com/klzgrad/naiveproxy/releases</sys:String>
<sys:String x:Key="readmeTxtNaiveProxyExplainLine04">download the corresponding version, select naiveproxy-x.xx-win.zip for Windows, extract naive.exe after decompression. Put it in the same directory as config.json, just run naive.exe.</sys:String>
<sys:String x:Key="readmeTxtNaiveProxyExplainLine05">This file is NaiveSharp (windows) copy and paste the URL of the imported node</sys:String>
<sys:String x:Key="readmeTxtNaiveProxyExplainLine06">NaiveSharp(windows) download URL: https://github.com/KevinZonda/NaiveSharp/releases</sys:String>
<sys:String x:Key="readmeTxtNaiveProxyExplainLine07">Server general connection configuration parameters</sys:String>
<!--The following is the SSR+TLS+Caddy client documentation-->
<sys:String x:Key="readmeTxtSSRExplainLine05">This file is for ShadowsocksR (windows), SSRR (Android), Shadowrocket (ios) scan code import node</sys:String>
<sys:String x:Key="readmeTxtSSRExplainLine06">ShadowsocksR (windows) download URL: https://github.com/shadowsocksrr/shadowsocksr-csharp/releases</sys:String>
<sys:String x:Key="readmeTxtSSRExplainLine07">SSRR (Android) download URL: https://github.com/shadowsocksrr/shadowsocksr-android/releases</sys:String>
<sys:String x:Key="readmeTxtSSRExplainLine08">Shadowrocket(ios) download, you need to use the AppleID of the foreign region. Please Google method yourself.</sys:String>
<sys:String x:Key="readmeTxtSSRExplainLine09">This file is ShadowsocksR (windows), SSRR (Android), Shadowrocket (ios) copy and paste the URL of the imported node</sys:String>
<sys:String x:Key="readmeTxtSSRExplainLine10">Server general connection configuration parameters</sys:String>
<!--The following is the SS client description file-->
<sys:String x:Key="readmeTxtExplainLineSS01">This file is a Shadowsocks (windows) scan code import node</sys:String>
<sys:String x:Key="readmeTxtExplainLineSS02">This file is Shadowsocks (windows) copy and paste the URL of the imported node</sys:String>
<sys:String x:Key="readmeTxtExplainLineSS05">This file is for shadowsocks (Android), Shadowrocket (ios) scan code to import nodes</sys:String>
<sys:String x:Key="readmeTxtExplainLineSS06">Shadowsocks (windows) download URL: https://github.com/shadowsocks/shadowsocks-windows/releases</sys:String>
<sys:String x:Key="readmeTxtExplainLineSS07">shadowsocks (Android) download URL: https://github.com/shadowsocks/shadowsocks-android/releases</sys:String>
<sys:String x:Key="readmeTxtExplainLineSS08">Shadowrocket(ios) download, you need to use the AppleID of the foreign region. Please Google method yourself.</sys:String>
<sys:String x:Key="readmeTxtExplainLineSS09">This file is shadowsocks (Android), Shadowrocket (ios) copy and paste the URL of the imported node</sys:String>
<sys:String x:Key="readmeTxtExplainLineSS10">Server general connection configuration parameters</sys:String>
<sys:String x:Key="readmeTxtPluginExplainSS">plug-in instructions</sys:String>
<sys:String x:Key="readmeTxtPluginExplainSS01">ProxySU defaults all plug-ins, under the subfolder plugins of the folder where the Shadowsocks (windows) run file is located.</sys:String>
<sys:String x:Key="readmeTxtPluginExplainSS02">Instructions for manually installing the plug-in on the computer</sys:String>
<sys:String x:Key="readmeTxtPluginExplainSS03">First download the plug-in, the download address of each plug-in Windows client is:</sys:String>
<sys:String x:Key="readmeTxtPluginExplainSS04">Simple-obfs: https://github.com/shadowsocks/simple-obfs/releases only download obfs-local.zip</sys:String>
<sys:String x:Key="readmeTxtPluginExplainSS05">V2ray-plugin: https://github.com/shadowsocks/v2ray-plugin/releases 64-bit system selection: v2ray-plugin-windows-amd64-vx.xxtar.gz , 32-bit system selection: v2ray-plugin-windows-386-vx.xxtar.gz (x is a number, is the version number)</sys:String>
<sys:String x:Key="readmeTxtPluginExplainSS06">Kcptun-plugin: https://github.com/shadowsocks/kcptun/releases 64-bit system selection: kcptun-windows-amd64-xxxxxx.tar.gz, 32-bit system selection Kcptun-plugin-windows-386-xxxxxx.tar.gz (x is a number, is the version number)</sys:String>
<sys:String x:Key="readmeTxtPluginExplainSS07">GoQuiet-plugin: https://github.com/cbeuw/GoQuiet/releases 64-bit system selection: gq-client-windows-amd64-xxxexe, 32-bit system selection: gq-client-windows-386-xxxexe (x is a number, is the version number)</sys:String>
<sys:String x:Key="readmeTxtPluginExplainSS08">Cloak-plugin: https://github.com/cbeuw/Cloak/releases 64-bit system selection: ck-client-windows-amd64-xxxexe, 32-bit system selection: ck-client-windows-386-xxxexe (x is a number, is the version number)</sys:String>
<sys:String x:Key="readmeTxtPluginExplainSS09">In the folder where the Shadowsocks (windows) run file is located, create a new folder plugins, and copy all the files (two) extracted from obfs-local.zip to plugins, v2ray -plugin download the file, unzip the file, copy it to plugins, and rename it to: v2ray-plugin.exe. Kcptun-plugin downloads the file, unzip the two files, copy the file starting with client_windows into the plugins, and rename it to: kcptun-client.exe. The file downloaded by GoQuiet-plugin is directly copied to the plugin and renamed to: goquiet-client.exe. The file downloaded by Cloak-plugin is directly copied to the plugin and renamed to: cloak-client.exe</sys:String>
<sys:String x:Key="readmeTxtPluginExplainSS10">installation completed</sys:String>
<sys:String x:Key="readmeTxtPluginExplainSSandroid02">Mobile Android client plug-in installation instructions</sys:String>
<sys:String x:Key="readmeTxtPluginExplainSSandroid03">first download the plug-in, the download address of each plug-in Android client is:</sys:String>
<sys:String x:Key="readmeTxtPluginExplainSSandroid04">Simple-obfs: https://github.com/shadowsocks/simple-obfs-android/releases only download obfs-local-nightly-xxxapk (x is a number, is the version Number)</sys:String>
<sys:String x:Key="readmeTxtPluginExplainSSandroid05">V2ray-plugin: https://github.com/shadowsocks/v2ray-plugin-android/releases Generally choose v2ray--universal-xxxapk (x is a number, is the version number )</sys:String>
<sys:String x:Key="readmeTxtPluginExplainSSandroid06">Kcptun-plugin: https://github.com/shadowsocks/kcptun-android/releases Generally choose kcptun--universal-xxxapk (x is a number, is the version number)</sys:String>
<sys:String x:Key="readmeTxtPluginExplainSSandroid07">Transfer the above apk file to the phone and install it!</sys:String>
<!--<sys:String x:Key="TabItemHeaderAppDeployment">Deployment</sys:String>
<sys:String x:Key="TabItemHeaderResourceTools">Resource Tools</sys:String>
<sys:String x:Key="TextBlockHostName">Host:</sys:String>
<sys:String x:Key="TextBoxHostNamePrompt">IP or Domain (Not empty)</sys:String>
<sys:String x:Key="TextBlockHostPart">Port:</sys:String>
<sys:String x:Key="TextBlockHostUser">User:</sys:String>
<sys:String x:Key="TextBlockHostPassword">Password:</sys:String>
<sys:String x:Key="TextBlockSetUpProcessing">Waiting for Deployment</sys:String>
<sys:String x:Key="TabItemHeaderSysTools">Tools</sys:String>
<sys:String x:Key="ButtonV2RayTemplateConfiguration">V2Ray Templates</sys:String>
<sys:String x:Key="ButtonV2RayOneKeyInstall">Install V2ray</sys:String>
<sys:String x:Key="ButtonUpdateV2ray">Upgrade V2Ray</sys:String>
<sys:String x:Key="Button_canel">Canel</sys:String>
<sys:String x:Key="ButtonTrojanGoTemplate">Trojan-Go Templates</sys:String>
<sys:String x:Key="ButtonTrojanGoSetUp">Install Trojan-Go</sys:String>
<sys:String x:Key="ButtonUpdateTrojanGo">Upgrade Trojan-Go</sys:String>
<sys:String x:Key="ButtonTrojanGoCancel">Canel</sys:String>
<sys:String x:Key="GroupBoxHeaderParameterTrojan">Parameter</sys:String>
<sys:String x:Key="TextBlockTrojanTemplateExplanation">Plan: Trojan+TLS+Caddy</sys:String>
<sys:String x:Key="TextBlockTrojanServerDomain">Server Domain:</sys:String>
<sys:String x:Key="TextBlockTrojanPort">Port: 443</sys:String>
<sys:String x:Key="TextBoxDomainPrompt">Domain name cannot be empty</sys:String>
<sys:String x:Key="TextBlockTrojanHostPassword">Password:</sys:String>
<sys:String x:Key="ButtonTrojanChangePassword">Change</sys:String>
<sys:String x:Key="ButtonTrojanSetUp">Install Trojan</sys:String>
<sys:String x:Key="ButtonUpdateTrojan">Upgrade Trojan</sys:String>
<sys:String x:Key="ButtonTrojanCancel">Cancel</sys:String>
<sys:String x:Key="TextBlockNaiveProxyTemplateExplanation">Plan: NaiveProxy+TLS+Caddy</sys:String>
<sys:String x:Key="ButtonNaiveProxyChangeUser">Change</sys:String>
<sys:String x:Key="ButtonNavieSetUp">Install NaiveProxy</sys:String>
<sys:String x:Key="ButtonNaiveCancel">Cancel</sys:String>
<sys:String x:Key="ButtonProofreadTime">Proofread Time</sys:String>
<sys:String x:Key="ButtonClearOccupiedPorts">Release Port 80/443</sys:String>
<sys:String x:Key="ButtonTestAndEnableBBR">Turn on BBR</sys:String>
<sys:String x:Key="ButtonWebBrowserHomePage">Home</sys:String>
<sys:String x:Key="ButtonWebBrowserForward">Forward</sys:String>
<sys:String x:Key="ButtonWebBrowserBack">Back</sys:String>
<sys:String x:Key="TextBlockWebExplain">Due to well-known reasons, loading is slow at certain times, please be patient</sys:String>
<sys:String x:Key="GroupBoxHeaderTrojanGoTemplates">Trojan-go Templates</sys:String>
<sys:String x:Key="TextBlockTrojanGoTLSwebPlan">HTTP/2 transmission, Caddy2 camouflage website, anti-identification, does not support CloudFlare CDN temporarily</sys:String>
<sys:String x:Key="TextBlockTrojanGoWebSocketTLSwebPlan">Use WebSocket transmission, Caddy2 camouflage website, anti-identification, support CloudFlare CDN</sys:String>
<sys:String x:Key="GroupBoxHeaderParameterTrojanGo">Parameter</sys:String>
<sys:String x:Key="TextBlockTrojanGoDomain">Domain:</sys:String>
<sys:String x:Key="TextBlockTrojanGoPort">Port: 443</sys:String>
<sys:String x:Key="TextBlockTrojanGoPassword">Password: </sys:String>
<sys:String x:Key="TextBlockTrojanGoPasswordExplain">Use the existing password and paste it directly into the box</sys:String>
<sys:String x:Key="TextBlockTrojanGoWebSocketPath">WebSocket Path: </sys:String>
<sys:String x:Key="ButtonTrojanGoTemplateOK">OK</sys:String>
<sys:String x:Key="ButtonTrojanGoTemplateCancel">Cancel</sys:String>
<sys:String x:Key="GroupBoxHeaderV2RayTemplates">V2Ray Templates</sys:String>
<sys:String x:Key="TabItemHeaderV2RayHotPlan">Recommend</sys:String>
<sys:String x:Key="TabItemHeaderV2RayTcpProtocol">TCP</sys:String>
<sys:String x:Key="TabItemHeaderV2RayWebSocketProtocol">WebSocket</sys:String>
<sys:String x:Key="TabItemHeaderV2RayHttp2Protocol">Http/2</sys:String>
<sys:String x:Key="TabItemHeaderV2RayMkcpProtocol">mKCP</sys:String>
<sys:String x:Key="TabItemHeaderV2RayQuicProtocol">QUIC</sys:String>
<sys:String x:Key="GroupBoxHeaderParameterV2Ray">Parameter</sys:String>
<sys:String x:Key="TextBlockV2RayServerPort">Port: </sys:String>
<sys:String x:Key="ButtonV2RayServerPortChange">Change</sys:String>
<sys:String x:Key="TextBlockV2RayServerPortExplain">TLS encryption, keep port 443</sys:String>
<sys:String x:Key="TextBlockV2RayUUIDExplain">Use the existing UUID and paste it directly into the box</sys:String>
<sys:String x:Key="TextBlockV2RayQuicUUID">mKCP/QUIC Key</sys:String>
<sys:String x:Key="TextBlockV2RayMkcpExplain">Enable mKCP key to enhance anti-recognition, Blank to disabled, 4.24.2+ required, V2rayN not support</sys:String>
<sys:String x:Key="TextBlockV2RayPath">Path: </sys:String>
<sys:String x:Key="TextBlockV2RayDomain">Domain: </sys:String>
<sys:String x:Key="TextBlockV2RayMaskSites">Shield Websites: </sys:String>
<sys:String x:Key="TextBoxV2RayMaskSitesTag">Increase the concealment of the agent (can be empty)</sys:String>
<sys:String x:Key="TextBlockV2RayWebSocketTlsWebExplain">Strong stability, Caddy2 is front-facing, hidden proxy features, it is recognized as https traffic visiting the website, the strongest anti-blocking recognition, domain name is required, CDN support</sys:String>
<sys:String x:Key="TextBlockV2RayHttp2TlsWebExplain">Based on HTTP/2 transmission. Completely implemented in accordance with the HTTP/2 standard, with Caddy2 as the front end, hidden proxy features, H2C protocol forwarding to V2Ray, domain name is required, and CloudFlare CDN is not supported temporarily</sys:String>
<sys:String x:Key="TextBlockV2RayTcpExplain">Encrypted data transmission will be recognized as unknown tcp traffic</sys:String>
<sys:String x:Key="RadioButtonV2RayTcpHttp">TCP+Http(Disguise)</sys:String>
<sys:String x:Key="TextBlockV2RayTcpHttpExplain">Encrypted transmission of data and http disguise will be recognized as http traffic, but not real http access</sys:String>
<sys:String x:Key="TextBlockV2RayTcpTlsExplain">Encrypted data transmission, the transmission protocol uses TLS, it will be recognized as TLS traffic, not equivalent to https traffic characteristics (domain name required)</sys:String>
<sys:String x:Key="RadioButtonV2RayTcpTlsSelfSigned">TCP+TLS(Self-signed)</sys:String>
<sys:String x:Key="TextBlockV2RayTcpTlsSelfSignedExplain">Encrypted data transmission, the transmission protocol uses TLS, it will be recognized as TLS traffic, not equivalent to https traffic characteristics (no domain name required)</sys:String>
<sys:String x:Key="TextBlockV2RaySelfSignedShadowrocketExplain">Shadowrocket (ios) needs to manually turn on the "Allow Insecure" option</sys:String>
<sys:String x:Key="TextBlockV2RayVlessTcpTlsWebExplain">Lightweight protocol VLESS, occupies less host resources, data TLS encrypted transmission, and Caddy2 is used as a disguised website on the node. Suitable for low-configuration VPS, or multiple people sharing nodes, the server client version requires 4.27+ (domain name required)</sys:String>
<sys:String x:Key="TextBlockV2RayWebSocketExplain">Data is encrypted for transmission. The transmission protocol uses WebSocket. If TLS is not enabled, it will be recognized as WebSocket traffic.</sys:String>
<sys:String x:Key="TextBlockV2RayWebSocketTlsExplain">Data is encrypted for transmission, the transmission protocol uses WebSocket, and TLS is enabled, it will be recognized as TLS traffic. (Domain name required)</sys:String>
<sys:String x:Key="RadioButtonV2RayWebSocketTlsSelfSigned">WebSocket+TLS (Self-signed)</sys:String>
<sys:String x:Key="TextBlockV2RayWebSocketTlsSelfSignedExplain">Data is encrypted for transmission, the transmission protocol uses WebSocket, and TLS is enabled, it will be recognized as TLS traffic. (No domain name required)</sys:String>
<sys:String x:Key="TextBlockV2RayHttp2Explain">Transmission method based on HTTP/2. It is fully implemented in accordance with the HTTP/2 standard and requires a domain name</sys:String>
<sys:String x:Key="RadioButtonV2RayHttp2SelfSigned">HTTP2 (Self-signed)</sys:String>
<sys:String x:Key="TextBlockV2RayHttp2SelfSignedExplain">Transmission method based on HTTP/2. It is fully implemented in accordance with the HTTP/2 standard, uses a self-signed certificate, and does not require a domain name</sys:String>
<sys:String x:Key="RadioButtonV2RayMkcpNone">mKCP(No disguise)</sys:String>
<sys:String x:Key="TextBlockV2RayMkcpNoneExplain">Data encrypted transmission to increase bandwidth usage and reduce delay, udp protocol, no camouflage, will be recognized as udp traffic</sys:String>
<sys:String x:Key="TextBlockV2RayMkcpSRTPExplain">Same as mKCP (no camouflage), adding a packet disguised as SRTP will be recognized as video call data (such as FaceTime)</sys:String>
<sys:String x:Key="TextBlockV2RayMkcpuTPExplain">Same as mKCP (without camouflage), add disguised as uTP data packet, it will be recognized as BT download data</sys:String>
<sys:String x:Key="TextBlockV2RayMkcpWeChatExplain">Same as mKCP (no camouflage), adding data packets disguised as WeChat video calls</sys:String>
<sys:String x:Key="TextBlockV2RayMkcpDTLSExplain">Same as mKCP (no masquerading), adding masquerading as DTLS 1.2 packets</sys:String>
<sys:String x:Key="TextBlockV2RayMkcpWireGuardExplain">Same as mKCP (without camouflage), adding a pretend to be a WireGuard packet. (Not a real WireGuard protocol)</sys:String>
<sys:String x:Key="TextBlockV2RayQuicShadowrocketExplain">Reminder: Shadowrocket currently does not support QUIC transmission mode.</sys:String>
<sys:String x:Key="RadioButtonV2RayQuicNone">QUIC(No disguise)</sys:String>
<sys:String x:Key="TextBlockV2RayQuicNoneExplain">Encrypted data transmission, no pretense will be recognized as udp traffic, produced by Google, advantages: reduced delay, multiplexing, connection migration</sys:String>
<sys:String x:Key="TextBlockV2RayQuicSRTPExplain">Same as QUIC (no camouflage), adding a packet disguised as SRTP will be recognized as video call data (such as FaceTime)</sys:String>
<sys:String x:Key="TextBlockV2RayQuicuTPExplain">Same as QUIC (no camouflage), adding a packet disguised as uTP, it will be recognized as BT download data</sys:String>
<sys:String x:Key="TextBlockV2RayQuicWeChatExplain">Same as QUIC (no camouflage), adding data packets disguised as WeChat video calls</sys:String>
<sys:String x:Key="TextBlockV2RayQuicDTLSExplain">Same as QUIC (no masquerading), adding masquerading as DTLS 1.2 packets</sys:String>
<sys:String x:Key="TextBlockV2RayQuicWireGuardExplain">Same as QUIC (without camouflage), adding a packet disguised as WireGuard. (Not a real WireGuard protocol)</sys:String>
--><!--以下为程序内的--><!--
<sys:String x:Key="MessageBoxShow_ErrorHostConnection">The remote host connection information is wrong, please check</sys:String>
<sys:String x:Key="MessageBoxShow_ChooseTemplate">Please select a configuration template first!</sys:String>
<sys:String x:Key="DisplayInstallInfo_Login">Logging in to the remote host......</sys:String>
<sys:String x:Key="DisplayInstallInfo_LoginSuccessful">Host login is successful!</sys:String>
<sys:String x:Key="DisplayInstallInfo_DetectionRootPermission">Check whether it is running under root privileges...</sys:String>
<sys:String x:Key="MessageBoxShow_ErrorRootPermission">Please log in to the host with an account with root privileges!</sys:String>
<sys:String x:Key="DisplayInstallInfo_DetectionRootOK">Test result: OK!</sys:String>
<sys:String x:Key="DisplayInstallInfo_TestExistV2Ray">Check whether the system has installed V2ray....</sys:String>
<sys:String x:Key="MessageBoxShow_ExistedV2Ray">V2ray has been installed on the remote host, do you force it to reinstall?</sys:String>
<sys:String x:Key="DisplayInstallInfo_InstallationCanceledExit">Installation canceled, exit</sys:String>
<sys:String x:Key="DisplayInstallInfo_ForceInstallV2Ray">You have chosen to install V2Ray forcefully!</sys:String>
<sys:String x:Key="DisplayInstallInfo_NoInstalledV2Ray">Test result: V2Ray is not installed!</sys:String>-->
<!--<sys:String x:Key="BtnOK">OK</sys:String>
<sys:String x:Key="HdNo">No.</sys:String>
<sys:String x:Key="HdName">Name</sys:String>
<sys:String x:Key="HdGender">Gender</sys:String>
<sys:String x:Key="HdDept">Dept</sys:String>
<sys:String x:Key="HdEmail">Email</sys:String>
<sys:String x:Key="HdTel">Tel</sys:String>
<sys:String x:Key="MsgShowTime">Now</sys:String>
<sys:String x:Key="BtnOK1">OK</sys:String>
<sys:String x:Key="HdNo1">No.</sys:String>
<sys:String x:Key="HdName1">Name</sys:String>
<sys:String x:Key="HdGender1">Gender</sys:String>
<sys:String x:Key="HdDept1">Dept</sys:String>
<sys:String x:Key="HdEmail1">Email</sys:String>
<sys:String x:Key="HdTel1">Tel</sys:String>
<sys:String x:Key="MsgShowTime1">Now</sys:String>-->
</ResourceDictionary>

View File

@ -1,507 +0,0 @@
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:ProxySU.Translations"
xmlns:sys="clr-namespace:System;assembly=mscorlib">
<!-- 主程序界面 -->
<sys:String x:Key="TextBlockNewVersionReminder">最新版本已发布了,快去更新一下吧!</sys:String>
<sys:String x:Key="TextBlockNewVersionDown">正在下载最新版,请等待完成提示....</sys:String>
<sys:String x:Key="MessageBoxShow_ErrorDownProxyFail">最新版下载失败,请稍后重试!</sys:String>
<sys:String x:Key="MessageBoxShow_ErrorDownProxySuccess">下载最新版成功文件已存入当前ProxySU.exe同一目录</sys:String>
<sys:String x:Key="ButtonUpgradeProxySU">下载更新</sys:String>
<sys:String x:Key="MainWindowsLanguage">Languages:</sys:String>
<sys:String x:Key="TabItemHeaderAppDeployment">应用布署</sys:String>
<sys:String x:Key="TabItemHeaderResourceTools">资源工具</sys:String>
<sys:String x:Key="TabItemHeaderFreeWallURL">免翻网址资源</sys:String>
<sys:String x:Key="TabItemHeaderCommonError">常见问题</sys:String>
<sys:String x:Key="TextBlockHostName">主机:</sys:String>
<sys:String x:Key="TextBoxHostNamePrompt">IP或域名(不可为空)</sys:String>
<sys:String x:Key="TextBlockHostPart">端口:</sys:String>
<sys:String x:Key="TextBlockHostUser">用户:</sys:String>
<sys:String x:Key="TextBlockHostPassword">密码:</sys:String>
<sys:String x:Key="TextBlockHostCert">密钥:</sys:String>
<sys:String x:Key="TextBoxKeyNotEmptyPrompt">密钥文件存放路径(不可为空)</sys:String>
<sys:String x:Key="ButtonOpenFileDialog">浏览...</sys:String>
<sys:String x:Key="RadioButtonPasswordLogin">密码登录</sys:String>
<sys:String x:Key="RadioButtonCertLogin">密钥登录</sys:String>
<sys:String x:Key="RadioButtonNoProxy">无代理</sys:String>
<sys:String x:Key="RadioButtonProxyNoLogin">不需登录</sys:String>
<sys:String x:Key="RadiobuttonProxyYesLogin">需要登录</sys:String>
<sys:String x:Key="TextBlockProxyHost">代理地址:</sys:String>
<sys:String x:Key="AcmeEmail">Email</sys:String>
<sys:String x:Key="AcmeEmailDesc">申请SSL证书需要一个可用的Email地址</sys:String>
<sys:String x:Key="ButtonSaveInstalledLog">安装日志另存为...</sys:String>
<sys:String x:Key="TextBlockSetUpProcessing">等待安装布署</sys:String>
<sys:String x:Key="TabItemHeaderSysTools">系统工具</sys:String>
<sys:String x:Key="ButtonTemplateConfigurationXray">Xray模板库</sys:String>
<sys:String x:Key="Button_LoginXray">Xray一键安装</sys:String>
<sys:String x:Key="ButtonUpdateXray">升级Xay</sys:String>
<sys:String x:Key="ButtonV2RayTemplateConfiguration">V2Ray模板库</sys:String>
<sys:String x:Key="ButtonV2RayOneKeyInstall">V2ray一键安装</sys:String>
<sys:String x:Key="ButtonUpdateV2ray">升级V2ray</sys:String>
<sys:String x:Key="Button_canel">取消</sys:String>
<sys:String x:Key="ButtonTrojanGoTemplate">Trojan-Go参数设置</sys:String>
<sys:String x:Key="ButtonTrojanGoSetUp">Trojan-Go一键安装</sys:String>
<sys:String x:Key="ButtonUpdateTrojanGo">升级Trojan-Go</sys:String>
<sys:String x:Key="ButtonTrojanGoCancel">取消</sys:String>
<sys:String x:Key="TextBlockCurrentlySelectedPlan">当前所选方案:</sys:String>
<sys:String x:Key="TextBlockCurrentlySelectedPlanNo">未选择方案</sys:String>
<!-- 以下Trojan设置参数标签页界面 -->
<sys:String x:Key="GroupBoxHeaderParameterTrojan">参数设置</sys:String>
<sys:String x:Key="TextBlockTrojanTemplateExplanation">模式Trojan+TLS+Caddy</sys:String>
<sys:String x:Key="TextBlockTrojanServerDomain">服务器地址(域名):</sys:String>
<sys:String x:Key="TextBlockTrojanPort">端口443</sys:String>
<sys:String x:Key="TextBoxDomainPrompt">域名不可为空</sys:String>
<sys:String x:Key="TextBlockTrojanHostPassword">密码:</sys:String>
<sys:String x:Key="ButtonTrojanChangePassword">更新</sys:String>
<sys:String x:Key="ButtonTrojanSetUp">Trojan一键安装</sys:String>
<sys:String x:Key="ButtonUpdateTrojan">升级Trojan</sys:String>
<sys:String x:Key="ButtonTrojanCancel">取消</sys:String>
<!-- 以下NaiveProxy设置参数标签页界面 -->
<sys:String x:Key="TextBlockNaiveProxyTemplateExplanation">模式NaiveProxy+TLS+Caddy</sys:String>
<sys:String x:Key="ButtonNaiveProxyChangeUser">随机</sys:String>
<sys:String x:Key="ButtonNavieSetUp">NaiveProxy一键安装</sys:String>
<sys:String x:Key="ButtonNaiveCancel">取消</sys:String>
<!-- 以下SSR设置参数标签页界面 -->
<sys:String x:Key="TextBlockSSRTemplateExplanation">模式SSR+TLS+Caddy</sys:String>
<sys:String x:Key="ButtonSSRSetUp">SSR一键安装</sys:String>
<!-- 以下MTProto设置参数标签页界面 -->
<sys:String x:Key="TextBlockMtgTemplateExplanation">模式MTProto+TLS</sys:String>
<sys:String x:Key="ButtonMtgSetUp">MTProto一键安装</sys:String>
<sys:String x:Key="TextBlockMtgFakeDomainExplanation">伪装域名:</sys:String>
<sys:String x:Key="TextBlockMtgPortExplanation">推荐用常见https端口443、2053、2083、2087、2096、8443</sys:String>
<sys:String x:Key="TextBlockMtgSecretExplanation">密钥将由服务端随机生成,这里无需设置。</sys:String>
<!-- 以下SS设置参数标签页界面 -->
<sys:String x:Key="ButtonSetUpSS">SS 一键安装</sys:String>
<sys:String x:Key="ButtonTemplateConfigurationSS">SS 插件库</sys:String>
<sys:String x:Key="TabItemHeaderNonePluginSS">经典模式</sys:String>
<sys:String x:Key="TextBlockNonePluginPointSS">提示:这种模式,长时间,大流量使用,容易被阻断和干扰,不推荐使用!</sys:String>
<sys:String x:Key="RadioButtonNonePluginSS">SS 经典</sys:String>
<sys:String x:Key="TextBlockNonePluginExplainSS">SS经典使用模式无需域名数据高强度加密数据被识别为未知数据。目前流量容易被识别极易被干扰与阻断慎重使用放在这里仅仅只是一种情怀与致敬</sys:String>
<sys:String x:Key="TabItemHeaderObfsPluginSS">Simple-obfs 插件</sys:String>
<sys:String x:Key="TextBlockObfsPluginPointSS">提示这是SS早期使用的流量混淆方案插件已经长时间不再更新不推荐使用</sys:String>
<sys:String x:Key="RadioButtonObfsPluginHttpWebSS">SS+obfs+http+Web</sys:String>
<sys:String x:Key="TextBlockObfsPluginHttpWebExplainSS">无需域名数据高强度加密流量混淆为http(并非真正的http)使用Web网站伪装可在一定程度上增强抗识别不支持CDN。</sys:String>
<sys:String x:Key="RadioButtonObfsPluginHttpsWebSS">SS+obfs+TLS(https)+Web</sys:String>
<sys:String x:Key="TextBlockObfsPluginTLShttpsWebExplainSS">需要域名使用域名将很大增强抗识别数据高强度加密流量混淆为https(并非真正的https)使用Web网站伪装进一步增强抗识别不支持CDN。</sys:String>
<sys:String x:Key="TabItemHeaderV2RayPluginSS">V2Ray 插件</sys:String>
<sys:String x:Key="TextBlockV2rayPluginPointSS">提醒ShadowRocket(ios)不支持SS+Quic模式</sys:String>
<sys:String x:Key="RadioButtonWebSocketTLSWebSS">SS+WebSocket+TLS+Caddy(Web后置)</sys:String>
<sys:String x:Key="RadioButtonWebSocketTLSWebFrontSS">SS+WebSocket+TLS+Caddy(Web前置)</sys:String>
<sys:String x:Key="TextBlockV2RayPluginPointSS">提示上面方案中的Web前置与Web后置使用效果上没有差别Web后置方案TLS证书由acme.sh申请证书到期后acme.sh会自动续期但是需要手动重启SS加载新证书。而Web前置方案中的证书由Caddy自动申请并加载不需要重启SS。</sys:String>
<sys:String x:Key="RadioButtonQuicSS">SS+QUIC</sys:String>
<sys:String x:Key="TextBlockQuicExplainSS">通过V2Ray-Plugin使用QUIC协议传输强制使用TLS加密。数据加密传输被识别为udp流量最初由谷歌创始优点:减少延迟、多路复用、连接迁移,需要域名,</sys:String>
<!--<sys:String x:Key="TabItemHeaderOtherPluginsSS">kcptun/GoQuiet/Cloak 插件</sys:String>-->
<sys:String x:Key="TabItemHeaderOtherPluginsSS">kcptun 插件</sys:String>
<sys:String x:Key="TextBlockGoQuietPluginPointSS">提醒Shadowrocket(ios)不支持GoQuiet-plugin插件。shadowsocks(Android)不支持GoQuiet-plugin与Cloak-plugin插件</sys:String>
<sys:String x:Key="TextBlockKcptunPluginExplainSS">KCP是一个快速可靠协议能以比 TCP浪费10%-20%的带宽的代价,换取平均延迟降低 30%-40%且最大延迟降低三倍的传输效果。使用UDP协议传输数据高强度加密传输同样的内容kcp 一般比 TCP 消耗更多的流量,在丢包率高的线路下将极大提高网速在个别运营商处可能会被QOS限制。</sys:String>
<sys:String x:Key="TextBlockGoQuietPluginExplainSS">基本原理为模拟TLS的流量同时将服务器伪装成一个正常的网站服务器这个混淆思路并非首创simple-obfs和ShadowsocksR的tls1.2_ticket_auth模式证明这条道是行得通的。此插件对现有的方法进行了改善其目标为让大规模封锁HTTPS服务器甚至IP段成为封锁SS的唯一有效手段</sys:String>
<sys:String x:Key="TextBlockCloakPluginExplainSS">通过加密方式将代理流量混淆为合法的HTTPS流量并将代理服务器伪装成普通的Web服务器以规避互联网审查。可以看成是上面GoQuiet升级版优化网络连接速度并且不是混淆https而是真正的https流量。</sys:String>
<sys:String x:Key="TextBlockPluginNameExplainSS">插件程序:</sys:String>
<sys:String x:Key="TextBlockPluginOptionExplainSS">插件选项:</sys:String>
<sys:String x:Key="DisplayInstallInfo_ExplainBuildSS">使用编译方式,时间稍长,请耐心等待......</sys:String>
<!-- 以下系统工具标签页界面 -->
<sys:String x:Key="ButtonProofreadTime">校对时间</sys:String>
<sys:String x:Key="ButtonClearOccupiedPorts">释放80/443端口</sys:String>
<sys:String x:Key="ButtonTestAndEnableBBR">启用BBR</sys:String>
<sys:String x:Key="ButtonRemoveAllSoft">卸载代理</sys:String>
<sys:String x:Key="ButtonEnableRootPassWord">启用root密码登录</sys:String>
<sys:String x:Key="ButtonEnableRootCert">启用root证书密钥登录</sys:String>
<sys:String x:Key="ButtonRootProhibitsPasswordLogin">root禁止密码登录</sys:String>
<sys:String x:Key="MessageBoxShow_RemoveAllSoft">仅支持卸载由ProxySU安装的代理软件及相关配置请确保重要配置已备份。不支持卸载使用其他方法或脚本安装的代理。确定要卸载远程主机上的代理软件吗</sys:String>
<sys:String x:Key="MessageBoxShow_EnableRootPassword">本功能需要当前登录的账户具有sudo权限是否为远程主机启用root账户并设置密码</sys:String>
<sys:String x:Key="MessageBoxShow_ButtonEnableRootCert">本功能需要当前登录的账户具有root或者sudo权限是否为远程主机启用root证书密钥登录</sys:String>
<sys:String x:Key="MessageBoxShow_ButtonRootProhibitsPasswordLogin">本功能需要远程主机已经开启了其他登录方式如密钥方式等否则将可能造成远程主机无法连接是否禁止远程主机的root账户密码登录方式</sys:String>
<sys:String x:Key="DisplayInstallInfo_SetRootProhibitsPasswordLogin">正在关闭root账户密码登录方式.....</sys:String>
<sys:String x:Key="MessageBoxShow_RootProhibitsPasswordLoginOK">远程主机root账户密码登录方式已关闭</sys:String>
<sys:String x:Key="MessageBoxShow_ButtonEnableRootCertSuccess">远程主机root账户证书密钥登录已启用密钥文件rootuser.key保存在随后打开的文件夹中</sys:String>
<sys:String x:Key="MessageBoxShow_AlreadyRoot">当前账户已经具有root权限无需再设置</sys:String>
<sys:String x:Key="MessageBoxShow_NoSudoToAccount">当前账户无法获取sudo权限设置失败</sys:String>
<sys:String x:Key="DisplayInstallInfo_GenerateRandomPassword">生成20位随机密码</sys:String>
<sys:String x:Key="DisplayInstallInfo_EnableRootPasswordSavePasswordInfo">保存密码信息!</sys:String>
<sys:String x:Key="DisplayInstallInfo_EnableRootCertGenerateCert">正在生成密钥......</sys:String>
<sys:String x:Key="DisplayInstallInfo_EnableRootCertDownloadCert">正在下载密钥......</sys:String>
<sys:String x:Key="DisplayInstallInfo_EnableRootCertSetCertEnable">远程主机启用密钥登录.......</sys:String>
<sys:String x:Key="DisplayInstallInfo_EnableRootPasswordSuccess">远程主机Root账户密码登录已启用密码保存在随后打开的文件夹中</sys:String>
<sys:String x:Key="DisplayInstallInfo_StartRemoveProxy">开始卸载</sys:String>
<sys:String x:Key="DisplayInstallInfo_DiscoverProxySoft">检测到已安装</sys:String>
<sys:String x:Key="DisplayInstallInfo_RemoveProxySoftFailed">卸载失败!请向开发者问询!</sys:String>
<sys:String x:Key="DisplayInstallInfo_RemoveProxySoftSuccess">卸载成功!</sys:String>
<!-- 以下资源工具标签页界面 -->
<sys:String x:Key="ButtonWebBrowserHomePage">主页</sys:String>
<sys:String x:Key="ButtonWebBrowserForward">前进</sys:String>
<sys:String x:Key="ButtonWebBrowserBack">后退</sys:String>
<sys:String x:Key="TextBlockWebExplain">由于众所周知的原因,在某些时候,加载缓慢,请耐心等待一下</sys:String>
<!-- 以下Trojan-go模板库界面 -->
<sys:String x:Key="GroupBoxHeaderTrojanGoTemplates">Trojan-go 模板库</sys:String>
<sys:String x:Key="TextBlockTrojanGoTLSwebPlan">http/2传输Caddy2伪装网站抗识别暂不支持CloudFlare的CDN</sys:String>
<sys:String x:Key="TextBlockTrojanGoWebSocketTLSwebPlan">使用WebSocket传输Caddy2伪装网站抗识别支持CloudFlare的CDN</sys:String>
<sys:String x:Key="GroupBoxHeaderParameterTrojanGo">参数设置</sys:String>
<sys:String x:Key="TextBlockTrojanGoDomain">域名:</sys:String>
<sys:String x:Key="TextBlockTrojanGoPort">端口: 443</sys:String>
<sys:String x:Key="TextBlockTrojanGoPassword">密码:</sys:String>
<sys:String x:Key="TextBlockTrojanGoPasswordExplain">使用已有密码,直接粘贴到框中</sys:String>
<sys:String x:Key="TextBlockTrojanGoWebSocketPath">WebSocket路径:</sys:String>
<sys:String x:Key="CheckBoxMuxSelect">Mux多路复用</sys:String>
<sys:String x:Key="TextBlockExplainCheckBoxMuxSelect">此处设置只对官方客户端配置文件config.json有效其他客户端需手动设置服务端自动适配。</sys:String>
<sys:String x:Key="TextBlockExplainCheckBoxMuxSelectResult">此字段不出现在QR码及分享URL中客户端需自行设置服务端默认启用自动适配。</sys:String>
<sys:String x:Key="ButtonTrojanGoTemplateOK">确定</sys:String>
<sys:String x:Key="ButtonTrojanGoTemplateCancel">取消</sys:String>
<!-- 以下V2Ray模板库界面 -->
<sys:String x:Key="GroupBoxHeaderV2RayTemplates">V2Ray 模板库</sys:String>
<sys:String x:Key="TabItemHeaderV2RayHotPlan">推荐方案</sys:String>
<sys:String x:Key="TabItemHeaderV2RayEarlyPlan">尝鲜方案</sys:String>
<sys:String x:Key="TabItemHeaderV2RayVlessProtocol">VLESS协议</sys:String>
<sys:String x:Key="TextBlockVlessExplain">VLESS 是一个无状态的轻量传输协议,与 VMess 不同VLESS 不依赖于系统时间,认证方式同样为 UUID但不需要 alterId。目前 VLESS 没有自带加密,请用于可靠信道,如 TLS。优点可以有效的降低主机资源消耗。目前 VLESS 不支持分享。VLESS 处于公测阶段,测试期间请确保客户端与服务端的 v2ray-core 均为最新版本。</sys:String>
<sys:String x:Key="TextBlockVlessXtlsTcpExplain">XTLS 在低性能或没有 AES 硬解的设备上效果出众,如在硬路由上换用 XTLS同样跑满 CPU 时实现网速 翻倍,或是相同网速时 CPU 占用率减半,而对于移动设备计算量减少意味着省电。服务端客户端版本要求4.29+ (需域名)不支持CDN。</sys:String>
<sys:String x:Key="TextBlockV2RayVlessTcpTlsWebExplain">轻量协议VLESS,占用更少主机资源数据TLS加密传输用Caddy2在节点上做伪装网站。适合配置低的VPS,或多人共用节点服务端客户端版本要求4.27+ (需域名)不支持CDN。</sys:String>
<sys:String x:Key="TextBlockVlessWebSocketTlsWebExplain">使用VLESS协议与VMESS的此类型方案更轻量。稳定性强Caddy2做前置隐藏代理特征被识别为访问网站的https流量抗封锁识别最强,需要域名,支持CDN</sys:String>
<sys:String x:Key="TextBlockVlessHttp2WebExplain">使用VLESS协议与VMESS的此类型方案更轻量。基于 HTTP/2 传输。完整按 HTTP/2 标准实现Caddy2做前置隐藏代理特征H2C协议转发到V2Ray需要域名暂不支持CloudFlare的CDN</sys:String>
<sys:String x:Key="TabItemHeaderV2RayTcpProtocol">TCP传输协议</sys:String>
<sys:String x:Key="TabItemHeaderV2RayWebSocketProtocol">WebSocket传输协议</sys:String>
<sys:String x:Key="TabItemHeaderV2RayHttp2Protocol">Http/2传输协议</sys:String>
<sys:String x:Key="TabItemHeaderV2RayMkcpProtocol">mKCP传输协议</sys:String>
<sys:String x:Key="TabItemHeaderV2RayQuicProtocol">QUIC传输协议</sys:String>
<sys:String x:Key="GroupBoxHeaderParameterV2Ray">参数设置</sys:String>
<sys:String x:Key="TextBlockV2RayServerPort">服务器端口:</sys:String>
<sys:String x:Key="ButtonV2RayServerPortChange">随机选择</sys:String>
<sys:String x:Key="TextBlockV2RayServerPortExplain">若使用TLS加密请保持默认的443端口</sys:String>
<sys:String x:Key="TextBlockV2RayUUIDExplain">使用已有UUID直接粘贴到框中</sys:String>
<sys:String x:Key="TextBlockV2RayQuicUUID">QUIC密钥:</sys:String>
<sys:String x:Key="TextBlockV2RayMkcpSeedUUID">mKCP Seed:</sys:String>
<sys:String x:Key="TextBlockV2RayMkcpExplain">启用mKCP Seed密钥可增强抗识别留空则禁用,要求版本4.24.2+</sys:String>
<sys:String x:Key="TextBlockV2RayPath">路径:</sys:String>
<sys:String x:Key="TextBlockV2RayVlessWsPath">VLESS ws路径</sys:String>
<sys:String x:Key="TextBlockV2RayVmessTcpPath">VMESS tcp路径</sys:String>
<sys:String x:Key="TextBlockV2RayVmessWsPath">VMESS ws路径</sys:String>
<sys:String x:Key="TextBlockQuicEncryption">QUIC加密方式:</sys:String>
<sys:String x:Key="TextBlockV2RayDomain">域名:</sys:String>
<sys:String x:Key="TextBlockTrojanPassword">Trojan密码与UUID相同。</sys:String>
<sys:String x:Key="TextBlockV2RayMaskSites">伪装网站:</sys:String>
<sys:String x:Key="TextBoxV2RayMaskSitesTag">设置此项可增加代理的隐蔽(可为空)</sys:String>
<sys:String x:Key="TextBoxV2RayMaskSitesToolTip">仅仅输入域名,不包括"http"及"/"等</sys:String>
<sys:String x:Key="ButtonRootProhibitsPasswordLoginToolTip">仅仅禁止root账户使用密码登录请确保root账户其他登录方式已生效</sys:String>
<sys:String x:Key="ButtonEnableRootPassWordToolTip">将启用root账户并设置为密码登录</sys:String>
<sys:String x:Key="ButtonEnableRootCertToolTip">将启用或设置root账户为密钥证书登录</sys:String>
<sys:String x:Key="MessageBoxShow_MaskSitesToolTip">伪装网址输入格式错误!请重新输入!</sys:String>
<sys:String x:Key="TextBlockV2RayWebSocketTlsWebExplain">稳定性强Caddy2做前置隐藏代理特征被识别为访问网站的https流量抗封锁识别最强,需要域名,支持CDN</sys:String>
<sys:String x:Key="TextBlockV2RayHttp2TlsWebExplain">基于 HTTP/2 传输。完整按 HTTP/2 标准实现Caddy2做前置隐藏代理特征H2C协议转发到V2Ray需要域名暂不支持CloudFlare的CDN</sys:String>
<sys:String x:Key="TextBlockXrayExplain">当前Xray是V2Ray的超集未来与V2Ray会有不同的发展方向。</sys:String>
<sys:String x:Key="TextBlockVlessVmessXtlsTcpWebSocketExplainHot">VLESS over TCP with XTLS + 回落 and 分流 to WHATEVER终极配置由rprx大佬 (xtls作者) 配置并推荐在服务端同时配置以下六种方案共用同一域名与443端口其中 WS 都可以通过 CDN。</sys:String>
<sys:String x:Key="TextBlockVlessVmessXtlsTcpWebSocketExplainHot5">VLESS over TCP with XTLS + 回落 and 分流 to WHATEVER终极配置由rprx大佬 (xtls作者) 配置并推荐在服务端同时配置以下五种方案共用同一域名与443端口其中 WS 都可以通过 CDN。(想增加XTLS方案请使用Xray配置)</sys:String>
<sys:String x:Key="RadioButtonV2RayTcpHttp">TCP+Http伪装</sys:String>
<sys:String x:Key="TextBlockV2RayTcpExplain">数据加密传输会被识别为未知的tcp流量</sys:String>
<sys:String x:Key="TextBlockV2RayTcpHttpExplain">数据加密传输并做http伪装会被识别为http流量但并不是真正的http访问</sys:String>
<sys:String x:Key="TextBlockV2RayTcpTlsExplain">数据加密传输传输协议使用TLS会被识别为TLS流量不等同于https流量特征 (需域名)</sys:String>
<sys:String x:Key="RadioButtonV2RayTcpTlsSelfSigned">TCP+TLS(自签证书)</sys:String>
<sys:String x:Key="TextBlockV2RayTcpTlsSelfSignedExplain">数据加密传输传输协议使用TLS会被识别为TLS流量不等同于https流量特征 (无需域名)</sys:String>
<sys:String x:Key="TextBlockV2RaySelfSignedShadowrocketExplain">Shadowrocket (ios)需要手动打开“允许不安全”选项</sys:String>
<sys:String x:Key="TextBlockV2RayWebSocketExplain">数据加密传输传输协议使用WebSocket未启用TLS,将被识别为WebSocket流量。</sys:String>
<sys:String x:Key="TextBlockV2RayWebSocketTlsExplain">数据加密传输传输协议使用WebSocket启用TLS,将被识别为TLS流量。(需要域名)支持CDN。</sys:String>
<sys:String x:Key="RadioButtonV2RayWebSocketTlsSelfSigned">WebSocket+TLS(自签证书)</sys:String>
<sys:String x:Key="TextBlockV2RayWebSocketTlsSelfSignedExplain">数据加密传输传输协议使用WebSocket启用TLS,将被识别为TLS流量。(无需域名)</sys:String>
<sys:String x:Key="TextBlockV2RayHttp2Explain">基于 HTTP/2 的传输方式。它完整按照 HTTP/2 标准实现,需要域名</sys:String>
<sys:String x:Key="RadioButtonV2RayHttp2SelfSigned">HTTP2(自签证书)</sys:String>
<sys:String x:Key="TextBlockV2RayHttp2SelfSignedExplain">基于 HTTP/2 的传输方式。它完整按照 HTTP/2 标准实现,使用自签名证书,不需要域名</sys:String>
<sys:String x:Key="RadioButtonV2RayMkcpNone">mKCP(无伪装)</sys:String>
<sys:String x:Key="TextBlockV2RayMkcpNoneExplain">数据加密传输以增加带宽占用减少延迟udp协议,无伪装会被识别为udp流量</sys:String>
<sys:String x:Key="TextBlockV2RayMkcpSRTPExplain">同mKCP(无伪装),增加伪装成 SRTP 数据包,会被识别为视频通话数据(如 FaceTime</sys:String>
<sys:String x:Key="TextBlockV2RayMkcpuTPExplain">同mKCP(无伪装),增加伪装成 uTP 数据包,会被识别为 BT 下载数据</sys:String>
<sys:String x:Key="TextBlockV2RayMkcpWeChatExplain">同mKCP(无伪装),增加伪装成微信视频通话的数据包</sys:String>
<sys:String x:Key="TextBlockV2RayMkcpDTLSExplain">同mKCP(无伪装),增加伪装成 DTLS 1.2 数据包</sys:String>
<sys:String x:Key="TextBlockV2RayMkcpWireGuardExplain">同mKCP(无伪装),增加伪装成 WireGuard 数据包。(并不是真正的 WireGuard 协议)</sys:String>
<sys:String x:Key="TextBlockV2RayQuicShadowrocketExplain">提醒Shadowrocket目前暂不支持QUIC的传输模式。</sys:String>
<sys:String x:Key="RadioButtonV2RayQuicNone">QUIC(无伪装)</sys:String>
<sys:String x:Key="TextBlockV2RayQuicNoneExplain">数据加密传输无伪装会被识别为udp流量最初由谷歌创始优点:减少延迟、多路复用、连接迁移</sys:String>
<sys:String x:Key="TextBlockV2RayQuicSRTPExplain">同QUIC(无伪装),增加伪装成 SRTP 数据包,会被识别为视频通话数据(如 FaceTime</sys:String>
<sys:String x:Key="TextBlockV2RayQuicuTPExplain">同QUIC(无伪装),增加伪装成 uTP 数据包,会被识别为 BT 下载数据</sys:String>
<sys:String x:Key="TextBlockV2RayQuicWeChatExplain">同QUIC(无伪装),增加伪装成微信视频通话的数据包</sys:String>
<sys:String x:Key="TextBlockV2RayQuicDTLSExplain">同QUIC(无伪装),增加伪装成 DTLS 1.2 数据包</sys:String>
<sys:String x:Key="TextBlockV2RayQuicWireGuardExplain">同QUIC(无伪装),增加伪装成 WireGuard 数据包。(并不是真正的 WireGuard 协议)</sys:String>
<!--以下为时间校对窗口-->
<sys:String x:Key="RadioButtonNetworkTime">同步网络时间</sys:String>
<sys:String x:Key="TextBlockNetworkTime">将远程主机时间校正为网络时间注意本机电脑的时间必须也是与网络时间同步的否则本机电脑V2ray有可能连接出错&#x0a;&#x0a;推荐:优先使用此方法校对时间</sys:String>
<sys:String x:Key="RadioButtonLocalTime">同步本机时间</sys:String>
<sys:String x:Key="TextBlockLocalTime">将远程主机时间同步为本地时间,注意:本机电脑的时间必须是准确的,与网络时间同步的,否则其他客户端中,有可能连接出错&#x0a;&#x0a;使用网络校时无法校对时间时,使用此种方法</sys:String>
<sys:String x:Key="RadioButtonUpDateLocalTime">更新本机时间</sys:String>
<sys:String x:Key="TextBlockUpDateLocalTime">将本机电脑时间与网络时间同步。&#x0a;&#x0a;注意:使用此项功能,必须以管理员身份运行本程序</sys:String>
<sys:String x:Key="ButtonTestTime">检测时间误差</sys:String>
<sys:String x:Key="ButtonProofreading">校对时间</sys:String>
<!--以下为客户端参数显示窗口-->
<sys:String x:Key="GroupBoxHeaderClientParameter">客户端配置参数</sys:String>
<sys:String x:Key="TextBlockServerAddress">服务器地址(address):</sys:String>
<sys:String x:Key="TextBlockServerPort">端口(port):</sys:String>
<sys:String x:Key="TextBlockUserUUID">用户ID(uuid)/密码:</sys:String>
<sys:String x:Key="ButtonCopyV2RayUUIDtoClip">复制</sys:String>
<sys:String x:Key="MessageBoxShow_V2RayUUIDcopyedToClip">已复制到剪贴板中!</sys:String>
<sys:String x:Key="MessageBoxShow_V2RayEmptyToClip">空内容!</sys:String>
<sys:String x:Key="TextBlockV2RayAlterId">额外ID:</sys:String>
<sys:String x:Key="TextBlockV2RayAlterIdExplain">不超过64客户端没此项可不填</sys:String>
<sys:String x:Key="TextBlockEncryption">加密方式:</sys:String>
<sys:String x:Key="TextBlockTransferProtocol">传输协议:</sys:String>
<sys:String x:Key="TextBlockCamouflageType">伪装类型(混淆):</sys:String>
<sys:String x:Key="TextBlockIsOrNotTLS">TLS设置:</sys:String>
<sys:String x:Key="TextBlockCopyToClipExplain">提示:双击以上内容窗,即可复制到剪贴板中。</sys:String>
<sys:String x:Key="TextBlockClientPath">路径(Path):</sys:String>
<sys:String x:Key="TextBlockClientQuicKey">QUIC密钥:</sys:String>
<sys:String x:Key="TextBlockClientMkcpSeed">mKCP Seed:</sys:String>
<sys:String x:Key="TextBlockEncryptionIsAuto">默认auto</sys:String>
<sys:String x:Key="GrouBoxHeaderUrlOrQR">二维码/URL</sys:String>
<sys:String x:Key="TextBlockUsedParameter">以上参数可以手动或扫描输入客户端,用于官方客户端的配置和相关文件已经存放入目录下,点击 确定 按扭可打开</sys:String>
<sys:String x:Key="TextBlockQrURLexplainV2Ray">二维码和URL链接可用于&#x0a;v2rayN(windows)&#x0a;Qv2ray(windows)&#x0a;Qv2ray(windows)&#x0a;Shadowrocket(ios)&#x0a;v2rayNG(Android)&#x0a;导入v2ray节点&#x0a;&#x0a;注意:Vless协议需要手动输入配置参数二维码和URL无效</sys:String>
<sys:String x:Key="TextBlockQrURLexplainTrojan-go">"可用于ShadowRocket (ios)、igniterAndroid、Qv2ray (windows) 扫码和导入url。注意有的客户端可能不支持WebSocket模式。"</sys:String>
<sys:String x:Key="TextBlockQrURLexplainTrojan">"可用于ShadowRocket (ios)、igniterAndroid、Qv2ray (windows) 扫码和导入url。注意有的客户端可能不支持WebSocket模式。"</sys:String>
<sys:String x:Key="TextBlockQrURLexplainNaiveProxy">用于NaiveSharp(windows)的URL导入链接</sys:String>
<sys:String x:Key="TextBlockQrURLexplainSSR">用于ShadowsocksR(windows)、SSRR(android)、Shadowrocket(ios)的扫码和URL导入链接</sys:String>
<sys:String x:Key="TextBlockQrURLexplainSSmobile">用于手机客户端shadowsocks(android)、Shadowrocket(ios)的扫码和URL导入链接</sys:String>
<sys:String x:Key="TextBlockQrURLexplainSSpc">用于电脑客户端Shadowsocks (windows)的扫码和URL导入链接</sys:String>
<sys:String x:Key="TextBlockQrURLexplainSS">用于Shadowsocks (windows)、shadowsocks(android)、Shadowrocket(ios)的扫码和URL导入链接</sys:String>
<sys:String x:Key="TextBlockClientPromptSS">提醒: 电脑客户端Shadowsocks (windows)与手机客户端shadowsocks(android)、Shadowrocket(ios)的导入格式不兼容,请选择相应格式。</sys:String>
<sys:String x:Key="RadioButtonMobileSS">手机端</sys:String>
<sys:String x:Key="RadioButtonPCSS">电脑端</sys:String>
<sys:String x:Key="TextBlockShareQRcodeMtgTgIpv4">TG格式QR</sys:String>
<sys:String x:Key="TextBlockURLMtgTgIpv4">TG格式URL(双击复制到剪切板中)</sys:String>
<sys:String x:Key="TextBlockShareQRcodeMtgTmeIpv4">T.ME格式QR</sys:String>
<sys:String x:Key="TextBlockURLMtgTmeIpv4">T.ME格式URL(双击复制到剪切板中)</sys:String>
<!--以下为程序内的-->
<sys:String x:Key="MessageBoxShow_ErrorHostPortUserNotEmpty">主机地址、主机端口、用户名为必填项,不能为空!!</sys:String>
<sys:String x:Key="MessageBoxShow_ErrorHostPortErr">连接端口含有非数字字符!</sys:String>
<sys:String x:Key="MessageBoxShow_ErrorHostPasswordNotEmpty">登录密码为必填项,不能为空!!</sys:String>
<sys:String x:Key="MessageBoxShow_ErrorHostKeyNotEmpty">密钥文件为必填项,不能为空!!</sys:String>
<sys:String x:Key="MessageBoxShow_ErrorProxyAddressPortNotEmpty">如果选择了代理,则代理地址与端口不能为空!</sys:String>
<sys:String x:Key="MessageBoxShow_ErrorProxyUserPasswordNotEmpty">如果代理需要登录,则代理登录的用户名与密码不能为空!</sys:String>
<sys:String x:Key="MessageBoxShow_ErrorHostConnection">远程主机连接信息有误,请检查!</sys:String>
<sys:String x:Key="MessageBoxShow_ChooseTemplate">请先选择配置模板!</sys:String>
<sys:String x:Key="DisplayInstallInfo_FunctionResultErr">发生错误,安装中断......</sys:String>
<sys:String x:Key="DisplayInstallInfo_Login">正在登录远程主机......</sys:String>
<sys:String x:Key="DisplayInstallInfo_LoginSuccessful">主机登录成功!</sys:String>
<sys:String x:Key="DisplayInstallInfo_DetectionRootPermission">检测是否运行在root权限下...</sys:String>
<sys:String x:Key="MessageBoxShow_ErrorRootPermission">请使用具有root权限的账户登录主机</sys:String>
<sys:String x:Key="DisplayInstallInfo_DetectionRootOK">检测结果OK</sys:String>
<sys:String x:Key="DisplayInstallInfo_TestExistSoft">检测系统是否已经安装</sys:String>
<sys:String x:Key="MessageBoxShow_ExistedSoft">远程主机已安装</sys:String>
<sys:String x:Key="MessageBoxShow_ForceInstallSoft">,建议先执行卸载,或者重装系统,若强制安装有一定机率失败。是否强制重新安装?</sys:String>
<sys:String x:Key="DisplayInstallInfo_InstallationCanceledExit">安装取消,退出</sys:String>
<sys:String x:Key="DisplayInstallInfo_ForceInstallSoft">已选择强制安装</sys:String>
<sys:String x:Key="DisplayInstallInfo_NoInstalledSoft">检测结果:未安装</sys:String>
<sys:String x:Key="DisplayInstallInfo_CheckSystemRequirements">检测系统是否符合安装要求......</sys:String>
<sys:String x:Key="MessageBoxShow_CurrentKernelVersion">当前系统内核版本为</sys:String>
<sys:String x:Key="MessageBoxShow_RequiredKernelVersionExplain">V2ray要求内核为2.6.23及以上。请升级内核再安装!</sys:String>
<sys:String x:Key="DisplayInstallInfo_KernelVersionNotMatch">系统内核版本不符合要求,安装失败!!</sys:String>
<sys:String x:Key="MessageBoxShow_MissingSystemComponents">系统缺乏必要的安装组件如:apt||dnf||yum||zypper||Syetemd主机系统推荐使用CentOS 7/8,Debian 8/9/10,Ubuntu 16.04及以上版本</sys:String>
<sys:String x:Key="DisplayInstallInfo_MissingSystemComponents">系统环境不满足要求,安装失败!!</sys:String>
<sys:String x:Key="DisplayInstallInfo_SystemRequirementsOK">检测结果OK!</sys:String>
<sys:String x:Key="DisplayInstallInfo_EnableSELinux">检测到系统启用SELinux且工作在严格模式下需改为宽松模式修改中......</sys:String>
<sys:String x:Key="DisplayInstallInfo_SELinuxModifyOK">修改完毕!</sys:String>
<sys:String x:Key="DisplayInstallInfo_ProofreadingTime">校对时间......</sys:String>
<sys:String x:Key="MessageBoxShow_TimeError">本地时间与远程主机时间相差超过限制(90秒),请先用 '系统工具-->时间校对' 校对时间后再设置</sys:String>
<sys:String x:Key="DisplayInstallInfo_TimeError">时间较对失败......</sys:String>
<sys:String x:Key="DisplayInstallInfo_TimeOK">时间差符合要求OK!</sys:String>
<sys:String x:Key="DisplayInstallInfo_TestDomainResolve">正在检测域名是否解析到当前VPS的IP上......</sys:String>
<sys:String x:Key="DisplayInstallInfo_OnlyIpv6HostDetect">正在检测是否为纯ipv6主机......</sys:String>
<sys:String x:Key="DisplayInstallInfo_NoIpDetect">未检测到有效的IP地址......</sys:String>
<sys:String x:Key="DisplayInstallInfo_FindFastestSetUpNat64">正在查找最快的Nat64网关......</sys:String>
<sys:String x:Key="DisplayInstallInfo_FindFastestSetUpNat64Failed">未能找到有效的Nat64网关......</sys:String>
<sys:String x:Key="DisplayInstallInfo_FindFastestNat64AsIs">当前主机最快的Nat64网关为:</sys:String>
<sys:String x:Key="DisplayInstallInfo_SetUpNat64">正在设置Nat64网关......</sys:String>
<sys:String x:Key="DisplayInstallInfo_DeleteSetUpNat64">正在删除Nat64网关......</sys:String>
<sys:String x:Key="DisplayInstallInfo_DomainResolveOK">解析正确OK!</sys:String>
<sys:String x:Key="DisplayInstallInfo_OnlyIpv6">检测当前主机为纯ipv6主机目前暂不支持</sys:String>
<sys:String x:Key="DisplayInstallInfo_ErrorDomainResolve">域名未能正确解析到当前VPS的IP上!安装失败!</sys:String>
<sys:String x:Key="MessageBoxShow_ErrorDomainResolve">域名未能正确解析到当前VPS的IP上请检查若解析设置正确请等待生效后再重试安装。如果域名使用了CDN请先关闭</sys:String>
<sys:String x:Key="DisplayInstallInfo_TestPortUsed">检测端口占用情况......</sys:String>
<sys:String x:Key="MessageBoxShow_ErrorPortUsed">80/443端口之一或全部被占用将强制停止占用80/443端口的程序?</sys:String>
<sys:String x:Key="DisplayInstallInfo_ErrorPortUsedFail">端口被占用,安装失败......</sys:String>
<sys:String x:Key="DisplayInstallInfo_ReleasePort">正在释放80/443端口......</sys:String>
<sys:String x:Key="DisplayInstallInfo_ReleasePortOK">80/443端口释放完毕</sys:String>
<sys:String x:Key="MessageBoxShow_ErrorPortUsedOther">端口被占用,将强制停止占用此端口的程序?</sys:String>
<sys:String x:Key="DisplayInstallInfo_ReleasePortOther">正在释放端口......</sys:String>
<sys:String x:Key="DisplayInstallInfo_ReleasePortOKOther">端口释放完毕!</sys:String>
<sys:String x:Key="DisplayInstallInfo_PortNotUsed">检测结果:未被占用!</sys:String>
<sys:String x:Key="DisplayInstallInfo_StartInstalling">系统环境检测完毕,符合安装要求,开始布署......</sys:String>
<sys:String x:Key="DisplayInstallInfo_OpenFireWallPort">开启防火墙相应端口......</sys:String>
<sys:String x:Key="DisplayInstallInfo_StartInstallSoft">正在安装</sys:String>
<sys:String x:Key="DisplayInstallInfo_DownloadScriptFailed">文件下载失败!</sys:String>
<sys:String x:Key="DisplayInstallInfo_CompilingSS">编译中,请耐心等待.............</sys:String>
<sys:String x:Key="MessageBoxShow_ErrorInstallSoftFail">安装失败,脚本运行出错!</sys:String>
<sys:String x:Key="DisplayInstallInfo_SoftInstallSuccess">安装成功!</sys:String>
<sys:String x:Key="DisplayInstallInfo_UploadSoftConfig">安装完毕,上传配置文件......</sys:String>
<sys:String x:Key="DisplayInstallInfo_StartInstallAcmeSh">正在安装acme.sh......</sys:String>
<sys:String x:Key="DisplayInstallInfo_AcmeShInstallSuccess">acme.sh安装成功</sys:String>
<sys:String x:Key="DisplayInstallInfo_ErrorAcmeShInstallFail">acme.sh安装失败原因未知请向开发者提问</sys:String>
<sys:String x:Key="DisplayInstallInfo_StartApplyCert">申请域名证书......</sys:String>
<sys:String x:Key="DisplayInstallInfo_ApplyCertSuccess">证书申请成功!</sys:String>
<sys:String x:Key="DisplayInstallInfo_ApplyCertFail">证书申请失败!原因未知,请向开发者提问!</sys:String>
<sys:String x:Key="DisplayInstallInfo_IntallCertToSoft">安装证书到</sys:String>
<sys:String x:Key="DisplayInstallInfo_IntallCertToSoftOK">证书成功安装到</sys:String>
<sys:String x:Key="DisplayInstallInfo_IntallCertToSoftFail">证书安装到</sys:String>
<sys:String x:Key="DisplayInstallInfo_InstallCertFailAsk">失败,原因未知,可以向开发者提问!</sys:String>
<sys:String x:Key="DisplayInstallInfo_StartInstallCaddy">安装Caddy......</sys:String>
<sys:String x:Key="DisplayInstallInfo_NotInstalledCaddy">检测结果未安装Caddy</sys:String>
<sys:String x:Key="DisplayInstallInfo_ErrorInstallCaddyFail">安装Caddy失败</sys:String>
<sys:String x:Key="DisplayInstallInfo_InstalledCaddyOK">Caddy安装成功</sys:String>
<sys:String x:Key="DisplayInstallInfo_UpgradeCaddy">正在为Http2Web模式升级Caddy v2.2.0测试版!</sys:String>
<sys:String x:Key="DisplayInstallInfo_UploadCaddyConfig">上传Caddy配置文件......</sys:String>
<sys:String x:Key="DisplayInstallInfo_UploadCaddyConfigFailed">Caddy配置文件上传失败!</sys:String>
<sys:String x:Key="DisplayInstallInfo_UploadCaddyConfigOK">Caddy配置文件上传成功,OK!</sys:String>
<sys:String x:Key="DisplayInstallInfo_StartCaddyService">正在启动Caddy......</sys:String>
<sys:String x:Key="DisplayInstallInfo_StartCaddyServiceOK">Caddy启动成功</sys:String>
<sys:String x:Key="DisplayInstallInfo_StartCaddyServiceFail">Caddy启动失败</sys:String>
<sys:String x:Key="DisplayInstallInfo_StartCaddyServiceSecond">正在启动Caddy第二次尝试</sys:String>
<sys:String x:Key="DisplayInstallInfo_StartCaddyServiceSecondFail">Caddy启动失败(第二次)!退出安装!</sys:String>
<sys:String x:Key="DisplayInstallInfo_CaddyServiceFailedExit">Caddy启动失败原因未知请向开发者问询</sys:String>
<sys:String x:Key="DisplayInstallInfo_StartSoft">正在启动</sys:String>
<sys:String x:Key="DisplayInstallInfo_StartSoftOK">启动成功!</sys:String>
<sys:String x:Key="DisplayInstallInfo_StartSoftFail">启动失败!</sys:String>
<sys:String x:Key="DisplayInstallInfo_StartSoftSecond">正在第二次尝试启动</sys:String>
<sys:String x:Key="DisplayInstallInfo_StartSoftSecondFail">启动失败(第二次)!退出安装!</sys:String>
<sys:String x:Key="DisplayInstallInfo_StartSoftFailedExit">启动失败,原因如上!请排查原因!</sys:String>
<sys:String x:Key="DisplayInstallInfo_TestBBR">BBR测试......</sys:String>
<sys:String x:Key="DisplayInstallInfo_EnableBBR">正在启用BBR......</sys:String>
<sys:String x:Key="DisplayInstallInfo_BBRisEnabled">BBR已经启用了</sys:String>
<sys:String x:Key="DisplayInstallInfo_BBRFailed">系统不满足启用BBR的条件启用失败</sys:String>
<sys:String x:Key="DisplayInstallInfo_BBREnabledSuccess">BBR 启用成功!</sys:String>
<sys:String x:Key="DisplayInstallInfo_GenerateClientConfig">生成客户端配置......</sys:String>
<sys:String x:Key="DisplayInstallInfo_GetClientConfigFailed">客户端配置获取失败!</sys:String>
<sys:String x:Key="DisplayInstallInfo_ProxyInstalledOK">安装成功,祝你玩的愉快!!</sys:String>
<sys:String x:Key="DisplayInstallInfo_LoginFailed">安装失败!</sys:String>
<sys:String x:Key="MessageBoxShow_ErrorLoginOccurred">发生错误!</sys:String>
<sys:String x:Key="MessageBoxShow_ErrorLoginUserOrPassword">密码错误或用户名错误!</sys:String>
<sys:String x:Key="MessageBoxShow_ErrorLoginHostOrPort">请检查主机地址及端口是否正确,如果通过代理,请检查代理是否正常工作</sys:String>
<sys:String x:Key="MessageBoxShow_ErrorLoginKey">所选密钥文件错误或者格式不对!</sys:String>
<sys:String x:Key="MessageBoxShow_ErrorLoginKeyOrUser">使用密钥登录,密钥文件错误或用户名错误!</sys:String>
<sys:String x:Key="MessageBoxShow_ErrorLoginHostOrProxyPort">主机地址错误,如果使用了代理,也可能是连接代理的端口错误!</sys:String>
<sys:String x:Key="MessageBoxShow_ErrorUpgradeSoftNotInstall">退出!原因:远程主机未安装</sys:String>
<sys:String x:Key="DisplayInstallInfo_OldScriptInstalledV2Ray">检测到使用旧安装脚本的V2Ray......</sys:String>
<sys:String x:Key="MessageBoxShow_OldScriptInstalledV2Ray">检测到使用旧安装脚本的V2Ray,是否卸载旧版本并使用新安装脚本重新安装?</sys:String>
<sys:String x:Key="DisplayInstallInfo_RemoveOldScriptInstalledV2Ray">正在卸载旧版本......</sys:String>
<sys:String x:Key="DisplayInstallInfo_RemoveOldVersionOK">卸载旧版本OK!</sys:String>
<sys:String x:Key="DisplayInstallInfo_InstallNewVersion">安装新版本......</sys:String>
<sys:String x:Key="DisplayInstallInfo_MoveOriginalConfig">迁移原配置文件。</sys:String>
<sys:String x:Key="DisplayInstallInfo_UpgradedNewVersion">已更新到最新版本。</sys:String>
<sys:String x:Key="DisplayInstallInfo_CurrentVersion">远程主机当前版本为v</sys:String>
<sys:String x:Key="DisplayInstallInfo_NewVersion">最新版本为:</sys:String>
<sys:String x:Key="DisplayInstallInfo_IsOrNoUpgradeNewVersion">是否升级为最新版本?</sys:String>
<sys:String x:Key="DisplayInstallInfo_StartUpgradeNewVersion">正在升级到最新版本</sys:String>
<sys:String x:Key="DisplayInstallInfo_UpgradeNewVersionOK">升级成功!当前已是最新版本!</sys:String>
<sys:String x:Key="DisplayInstallInfo_UpgradeNewVersionFail">升级失败,原因未知,请向开发者提问!</sys:String>
<sys:String x:Key="DisplayInstallInfo_UpgradeVersionCancel">升级取消,退出!</sys:String>
<sys:String x:Key="DisplayInstallInfo_IsNewVersion">远程主机当前已是最新版本:</sys:String>
<sys:String x:Key="DisplayInstallInfo_NotUpgradeVersion">无需升级!退出!</sys:String>
<sys:String x:Key="MessageBoxShow_DomainNotEmpty">域名不能为空,请检查相关参数设置!</sys:String>
<sys:String x:Key="MessageBoxShow_PleaseInstallSoftAtX64">请在x86_64系统中安装</sys:String>
<sys:String x:Key="DisplayInstallInfo_BackTrojanConfig">备份Trojan配置文件......</sys:String>
<sys:String x:Key="DisplayInstallInfo_RestoreTrojanConfig">恢复Trojan配置文件......</sys:String>
<sys:String x:Key="DisplayInstallInfo_ExistedCaddy">"远程主机已安装Caddy,但不确定是否支持forward proxy是否强制重新安装"</sys:String>
<sys:String x:Key="DisplayInstallInfo_RemoveCaddyOrRebuiled">请先行卸载Caddy或重装VPS系统</sys:String>
<sys:String x:Key="DisplayInstallInfo_InstallRelySoft">正在安装依赖的软件......</sys:String>
<sys:String x:Key="DisplayInstallInfo_SoftInstalledOK">安装完毕OK</sys:String>
<sys:String x:Key="DisplayInstallInfo_StartCaddy">正在安装Caddy.....</sys:String>
<sys:String x:Key="DisplayInstallInfo_UpgradeNaiveProxy">正在为NaiveProxy升级服务端</sys:String>
<sys:String x:Key="DisplayInstallInfo_UpgradeNaiveProxyOK">升级完毕OK</sys:String>
<sys:String x:Key="DisplayInstallInfo_OptimizeNetwork">正在优化网络参数......</sys:String>
<sys:String x:Key="DisplayInstallInfo_OptimizeNetworkOK">优化网络参数,OK!</sys:String>
<!--以下为Xray客户端说明文件-->
<sys:String x:Key="readmeTxtXrayExplainLine01">此文件为Xay官方程序所使用的客户端配置文件配置为全局模式socks5地址127.0.0.1:1080http代理地址127.0.0.1:1081</sys:String>
<sys:String x:Key="readmeTxtXrayExplainLine02">Xray官方网站https://github.com/XTLS/Xray-core</sys:String>
<sys:String x:Key="readmeTxtXrayExplainLine03">Xray官方程序下载地址https://github.com/XTLS/Xray-core/releases</sys:String>
<sys:String x:Key="readmeTxtXrayExplainLine04">下载相应版本Windows选择xray-windows-64.zip或者xray-windows-32.zip解压后提取xray.exe。与config.json放在同一目录运行xray.exe即可。</sys:String>
<!--以下为V2Ray客户端说明文件-->
<sys:String x:Key="readmeTxtV2RayExplainLine01">此文件为V2Ray官方程序所使用的客户端配置文件配置为全局模式socks5地址127.0.0.1:1080http代理地址127.0.0.1:1081</sys:String>
<sys:String x:Key="readmeTxtV2RayExplainLine02">v2ray官方网站https://www.v2ray.com/</sys:String>
<sys:String x:Key="readmeTxtV2RayExplainLine03">v2ray官方程序下载地址https://github.com/v2ray/v2ray-core/releases</sys:String>
<sys:String x:Key="readmeTxtV2RayExplainLine04">下载相应版本Windows选择v2ray-windows-64.zip或者v2ray-windows-32.zip解压后提取v2ctl.exe和v2ray.exe。与config.json放在同一目录运行v2ray.exe即可。</sys:String>
<sys:String x:Key="readmeTxtV2RayExplainLine05">此文件为v2rayN(windows)、Qv2ray(windows)、v2rayNG(Android)、Shadowrocket(ios)扫码导入节点</sys:String>
<sys:String x:Key="readmeTxtV2RayExplainLine06">v2rayN下载网址https://github.com/2dust/v2rayN/releases</sys:String>
<sys:String x:Key="readmeTxtV2RayExplainLine07">Qv2ray下载网址https://github.com/Qv2ray/Qv2ray/releases</sys:String>
<sys:String x:Key="readmeTxtV2RayExplainLine08">v2rayNG(Android)下载网址https://github.com/2dust/v2rayNG/releases</sys:String>
<sys:String x:Key="readmeTxtV2RayExplainLine09">v2rayNG(Android)在Google Play下载网址https://play.google.com/store/apps/details?id=com.v2ray.ang</sys:String>
<sys:String x:Key="readmeTxtV2RayExplainLine10">Shadowrocket(ios)下载,需要使用国外区的AppleID。请自行谷歌方法。</sys:String>
<sys:String x:Key="readmeTxtV2RayExplainLine11">此文件为v2rayN、Qv2ray、v2rayNG(Android)、Shadowrocket(ios)复制粘贴导入节点的vmess网址</sys:String>
<sys:String x:Key="readmeTxtV2RayExplainLine12">服务器通用连接配置参数:</sys:String>
<!--以下为Trojan-go客户端说明文件-->
<sys:String x:Key="readmeTxtTrojan-goExplainLine01">此文件为Trojan-go官方程序所使用的客户端配置文件配置为全局模式http与socks5地址127.0.0.1:1080</sys:String>
<sys:String x:Key="readmeTxtTrojan-goExplainLine02">Trojan-go官方网站https://github.com/p4gefau1t/trojan-go</sys:String>
<sys:String x:Key="readmeTxtTrojan-goExplainLine03">Trojan-go官方程序下载地址https://github.com/p4gefau1t/trojan-go/releases</sys:String>
<sys:String x:Key="readmeTxtTrojan-goExplainLine04">下载相应版本Windows选择Trojan-go-x.xx-win.zip,解压后提取trojan-go.exe。与config.json放在同一目录运行trojan-go.exe即可。</sys:String>
<sys:String x:Key="readmeTxtTrojan-goExplainLine05">此文件为Qv2ray (windows)、igniterAndroid扫码导入节点</sys:String>
<sys:String x:Key="readmeTxtTrojan-goExplainLine06">Qv2ray (windows)下载网址https://github.com/Qv2ray/Qv2ray/releases</sys:String>
<sys:String x:Key="readmeTxtTrojan-goExplainLine07">igniterAndroid下载网址https://github.com/trojan-gfw/igniter/releases</sys:String>
<sys:String x:Key="readmeTxtTrojan-goExplainLine08">Shadowrocket(ios)下载,需要使用国外区的AppleID。请自行谷歌方法。</sys:String>
<sys:String x:Key="readmeTxtTrojan-goExplainLine09">此文件为Qv2ray (windows)、igniterAndroid复制粘贴导入节点的网址</sys:String>
<sys:String x:Key="readmeTxtTrojan-goExplainLine10">服务器通用连接配置参数</sys:String>
<!--以下为Trojan客户端说明文件-->
<sys:String x:Key="readmeTxtTrojanExplainLine01">此文件为Trojan官方程序所使用的客户端配置文件配置为全局模式http与socks5地址127.0.0.1:1080</sys:String>
<sys:String x:Key="readmeTxtTrojanExplainLine02">Trojan官方网站https://trojan-gfw.github.io/trojan/</sys:String>
<sys:String x:Key="readmeTxtTrojanExplainLine03">Trojan官方程序下载地址https://github.com/trojan-gfw/trojan/releases</sys:String>
<sys:String x:Key="readmeTxtTrojanExplainLine04">下载相应版本Windows选择Trojan-x.xx-win.zip,解压后提取trojan.exe。与config.json放在同一目录运行trojan.exe即可。</sys:String>
<sys:String x:Key="readmeTxtTrojanExplainLine05">此文件为Qv2ray (windows)、igniterAndroid、Shadowrocket(ios)扫码导入节点</sys:String>
<sys:String x:Key="readmeTxtTrojanExplainLine06">Qv2ray (windows)下载网址https://github.com/Qv2ray/Qv2ray/releases</sys:String>
<sys:String x:Key="readmeTxtTrojanExplainLine07">igniterAndroid下载网址https://github.com/trojan-gfw/igniter/releases</sys:String>
<sys:String x:Key="readmeTxtTrojanExplainLine08">Shadowrocket(ios)下载,需要使用国外区的AppleID。请自行谷歌方法。</sys:String>
<sys:String x:Key="readmeTxtTrojanExplainLine09">此文件为Qv2ray (windows)、igniterAndroid、Shadowrocket(ios)复制粘贴导入节点的网址</sys:String>
<sys:String x:Key="readmeTxtTrojanExplainLine10">服务器通用连接配置参数</sys:String>
<!--以下为NaiveProxy客户端说明文件-->
<sys:String x:Key="readmeTxtNaiveProxyExplainLine01">此文件为NaiveProxy官方程序所使用的客户端配置文件配置为全局模式socks5地址127.0.0.1:1080</sys:String>
<sys:String x:Key="readmeTxtNaiveProxyExplainLine02">NaiveProxy官方网站https://github.com/klzgrad/naiveproxy</sys:String>
<sys:String x:Key="readmeTxtNaiveProxyExplainLine03">NaiveProxy官方程序下载地址https://github.com/klzgrad/naiveproxy/releases</sys:String>
<sys:String x:Key="readmeTxtNaiveProxyExplainLine04">下载相应版本Windows选择naiveproxy-x.xx-win.zip,解压后提取naive.exe。与config.json放在同一目录运行naive.exe即可。</sys:String>
<sys:String x:Key="readmeTxtNaiveProxyExplainLine05">此文件为NaiveSharp(windows)复制粘贴导入节点的网址</sys:String>
<sys:String x:Key="readmeTxtNaiveProxyExplainLine06">NaiveSharp(windows)下载网址https://github.com/KevinZonda/NaiveSharp/releases</sys:String>
<sys:String x:Key="readmeTxtNaiveProxyExplainLine07">服务器通用连接配置参数</sys:String>
<!--以下为SSR+TLS+Caddy客户端说明文件-->
<sys:String x:Key="readmeTxtSSRExplainLine05">此文件为ShadowsocksR (windows)、SSRRAndroid、Shadowrocket(ios)扫码导入节点</sys:String>
<sys:String x:Key="readmeTxtSSRExplainLine06">ShadowsocksR (windows)下载网址https://github.com/shadowsocksrr/shadowsocksr-csharp/releases</sys:String>
<sys:String x:Key="readmeTxtSSRExplainLine07">SSRRAndroid下载网址https://github.com/shadowsocksrr/shadowsocksr-android/releases</sys:String>
<sys:String x:Key="readmeTxtSSRExplainLine08">Shadowrocket(ios)下载,需要使用国外区的AppleID。请自行谷歌方法。</sys:String>
<sys:String x:Key="readmeTxtSSRExplainLine09">此文件为ShadowsocksR (windows)、SSRRAndroid、Shadowrocket(ios)复制粘贴导入节点的网址</sys:String>
<sys:String x:Key="readmeTxtSSRExplainLine10">服务器通用连接配置参数</sys:String>
<!--以下为SS客户端说明文件-->
<sys:String x:Key="readmeTxtExplainLineSS01">此文件为Shadowsocks (windows)扫码导入节点</sys:String>
<sys:String x:Key="readmeTxtExplainLineSS02">此文件为Shadowsocks (windows)复制粘贴导入节点的网址</sys:String>
<sys:String x:Key="readmeTxtExplainLineSS05">此文件为shadowsocksAndroid、Shadowrocket(ios)扫码导入节点</sys:String>
<sys:String x:Key="readmeTxtExplainLineSS06">Shadowsocks (windows)下载网址https://github.com/shadowsocks/shadowsocks-windows/releases</sys:String>
<sys:String x:Key="readmeTxtExplainLineSS07">shadowsocksAndroid下载网址https://github.com/shadowsocks/shadowsocks-android/releases</sys:String>
<sys:String x:Key="readmeTxtExplainLineSS08">Shadowrocket(ios)下载,需要使用国外区的AppleID。请自行谷歌方法。</sys:String>
<sys:String x:Key="readmeTxtExplainLineSS09">此文件为shadowsocksAndroid、Shadowrocket(ios)复制粘贴导入节点的网址</sys:String>
<sys:String x:Key="readmeTxtExplainLineSS10">服务器通用连接配置参数</sys:String>
<sys:String x:Key="readmeTxtPluginExplainSS">插件使用说明</sys:String>
<sys:String x:Key="readmeTxtPluginExplainSS01">ProxySU默认所有插件在Shadowsocks (windows)运行文件所在文件夹的子文件夹plugins下。</sys:String>
<sys:String x:Key="readmeTxtPluginExplainSS02">电脑端手动安装插件说明</sys:String>
<sys:String x:Key="readmeTxtPluginExplainSS03">先下载插件各个插件Windows客户端下载地址为</sys:String>
<sys:String x:Key="readmeTxtPluginExplainSS04">Simple-obfs: https://github.com/shadowsocks/simple-obfs/releases 只下载 obfs-local.zip</sys:String>
<sys:String x:Key="readmeTxtPluginExplainSS05">V2ray-plugin: https://github.com/shadowsocks/v2ray-plugin/releases 64位系统选择v2ray-plugin-windows-amd64-vx.x.x.tar.gz,32位系统选择v2ray-plugin-windows-386-vx.x.x.tar.gz (x为数字是版本号)</sys:String>
<sys:String x:Key="readmeTxtPluginExplainSS06">Kcptun-plugin: https://github.com/shadowsocks/kcptun/releases 64位系统选择kcptun-windows-amd64-xxxxxx.tar.gz,32位系统选择kcptun-plugin-windows-386-xxxxxx.tar.gz (x为数字是版本号)</sys:String>
<sys:String x:Key="readmeTxtPluginExplainSS07">GoQuiet-plugin: https://github.com/cbeuw/GoQuiet/releases 64位系统选择gq-client-windows-amd64-x.x.x.exe,32位系统选择gq-client-windows-386-x.x.x.exe(x为数字是版本号)</sys:String>
<sys:String x:Key="readmeTxtPluginExplainSS08">Cloak-plugin: https://github.com/cbeuw/Cloak/releases 64位系统选择ck-client-windows-amd64-x.x.x.exe,32位系统选择ck-client-windows-386-x.x.x.exe(x为数字是版本号)</sys:String>
<sys:String x:Key="readmeTxtPluginExplainSS09">在Shadowsocks (windows)运行文件所在文件夹中新建文件夹plugins将obfs-local.zip解压出的文件两个全部复制到plugins中v2ray -plugin下载得到的文件解压出的文件复制到plugins中并重命名为v2ray-plugin.exe。Kcptun -plugin下载得到的文件解压出两个文件将其中的client_windows开头的文件复制到plugins中并重命名为kcptun-client.exe。GoQuiet-plugin下载得到的文件直接复制到plugin中并重命名为goquiet-client.exe。Cloak-plugin下载得到的文件直接复制到plugin中并重命名为cloak-client.exe</sys:String>
<sys:String x:Key="readmeTxtPluginExplainSS10">安装完毕</sys:String>
<sys:String x:Key="readmeTxtPluginExplainSSandroid02">手机安卓客户端插件安装说明</sys:String>
<sys:String x:Key="readmeTxtPluginExplainSSandroid03">先下载插件,各个插件安卓客户端下载地址为:</sys:String>
<sys:String x:Key="readmeTxtPluginExplainSSandroid04">Simple-obfs: https://github.com/shadowsocks/simple-obfs-android/releases 只下载 obfs-local-nightly-x.x.x.apk(x为数字是版本号)</sys:String>
<sys:String x:Key="readmeTxtPluginExplainSSandroid05">V2ray-plugin: https://github.com/shadowsocks/v2ray-plugin-android/releases 一般选择v2ray--universal-x.x.x.apk(x为数字是版本号)</sys:String>
<sys:String x:Key="readmeTxtPluginExplainSSandroid06">Kcptun-plugin: https://github.com/shadowsocks/kcptun-android/releases 一般选择kcptun--universal-x.x.x.apk(x为数字是版本号)</sys:String>
<sys:String x:Key="readmeTxtPluginExplainSSandroid07">将上述apk文件传到手机安装即可</sys:String>
<!--<sys:String x:Key="MsgShowTime">Now</sys:String>
<sys:String x:Key="BtnOK1">OK</sys:String>
<sys:String x:Key="HdNo1">No.</sys:String>
<sys:String x:Key="HdName1">Name</sys:String>
<sys:String x:Key="HdGender1">Gender</sys:String>
<sys:String x:Key="HdDept1">Dept</sys:String>
<sys:String x:Key="HdEmail1">Email</sys:String>
<sys:String x:Key="HdTel1">Tel</sys:String>
<sys:String x:Key="MsgShowTime1">Now</sys:String>-->
</ResourceDictionary>

View File

@ -1,488 +0,0 @@
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:ProxySU.Translations"
xmlns:sys="clr-namespace:System;assembly=mscorlib">
<!-- 主程序界面 -->
<sys:String x:Key="TextBlockNewVersionReminder">最新版本已發布了,快去更新一下吧!</sys:String>
<sys:String x:Key="TextBlockNewVersionDown">正在下載最新版,請等待完成提示....</sys:String>
<sys:String x:Key="MessageBoxShow_ErrorDownProxyFail">最新版下載失敗,請稍後重試!</sys:String>
<sys:String x:Key="MessageBoxShow_ErrorDownProxySuccess">下載最新版成功文件已存入當前ProxySU.exe同一目錄</sys:String>
<sys:String x:Key="ButtonUpgradeProxySU">下載更新</sys:String>
<sys:String x:Key="MainWindowsLanguage">Languages:</sys:String>
<sys:String x:Key="TabItemHeaderAppDeployment">應用佈署</sys:String>
<sys:String x:Key="TabItemHeaderResourceTools">資源工具</sys:String>
<sys:String x:Key="TabItemHeaderFreeWallURL">免翻網址資源</sys:String>
<sys:String x:Key="TabItemHeaderCommonError">常見問題</sys:String>
<sys:String x:Key="TextBlockHostName">主機:</sys:String>
<sys:String x:Key="TextBoxHostNamePrompt">IP或域名(不可為空)</sys:String>
<sys:String x:Key="TextBlockHostPart">端口:</sys:String>
<sys:String x:Key="TextBlockHostUser">用戶:</sys:String>
<sys:String x:Key="TextBlockHostPassword">密碼:</sys:String>
<sys:String x:Key="TextBlockHostCert">密鑰::</sys:String>
<sys:String x:Key="TextBoxKeyNotEmptyPrompt">密鑰文件存放路徑(不可為空)</sys:String>
<sys:String x:Key="ButtonOpenFileDialog">瀏覽...</sys:String>
<sys:String x:Key="RadioButtonPasswordLogin">密碼登錄</sys:String>
<sys:String x:Key="RadioButtonCertLogin">密鑰登錄</sys:String>
<sys:String x:Key="RadioButtonNoProxy">無代理</sys:String>
<sys:String x:Key="RadioButtonProxyNoLogin">不需登錄</sys:String>
<sys:String x:Key="RadiobuttonProxyYesLogin">需要登錄</sys:String>
<sys:String x:Key="TextBlockProxyHost">代理地址:</sys:String>
<sys:String x:Key="AcmeEmail">Email</sys:String>
<sys:String x:Key="AcmeEmailDesc">申請SSL證書需要一個可用的Email地址</sys:String>
<sys:String x:Key="ButtonSaveInstalledLog">安裝日誌另存為...</sys:String>
<sys:String x:Key="TextBlockSetUpProcessing">等待安裝佈署</sys:String>
<sys:String x:Key="TabItemHeaderSysTools">系統工具</sys:String>
<sys:String x:Key="ButtonTemplateConfigurationXray">Xray模板庫</sys:String>
<sys:String x:Key="Button_LoginXray">Xray一鍵安裝</sys:String>
<sys:String x:Key="ButtonUpdateXray">升級Xay</sys:String>
<sys:String x:Key="ButtonV2RayTemplateConfiguration">V2Ray模板庫</sys:String>
<sys:String x:Key="ButtonV2RayOneKeyInstall">V2ray一鍵安裝</sys:String>
<sys:String x:Key="ButtonUpdateV2ray">升級V2Ray</sys:String>
<sys:String x:Key="Button_canel">取消</sys:String>
<sys:String x:Key="ButtonTrojanGoTemplate">Trojan-Go參數設置</sys:String>
<sys:String x:Key="ButtonTrojanGoSetUp">Trojan-Go一鍵安裝</sys:String>
<sys:String x:Key="ButtonUpdateTrojanGo">升級Trojan-Go</sys:String>
<sys:String x:Key="ButtonTrojanGoCancel">取消</sys:String>
<sys:String x:Key="TextBlockCurrentlySelectedPlan">當前所選方案:</sys:String>
<sys:String x:Key="TextBlockCurrentlySelectedPlanNo">未選擇方案</sys:String>
<!-- 以下Trojan設置參數標籤頁界面 -->
<sys:String x:Key="GroupBoxHeaderParameterTrojan">參數設置</sys:String>
<sys:String x:Key="TextBlockTrojanTemplateExplanation">模式Trojan+TLS+Caddy</sys:String>
<sys:String x:Key="TextBlockTrojanServerDomain">服務器地址(域名):</sys:String>
<sys:String x:Key="TextBlockTrojanPort">端口443</sys:String>
<sys:String x:Key="TextBoxDomainPrompt">域名不可為空</sys:String>
<sys:String x:Key="TextBlockTrojanHostPassword">密碼:</sys:String>
<sys:String x:Key="ButtonTrojanChangePassword">更新</sys:String>
<sys:String x:Key="ButtonTrojanSetUp">Trojan一鍵安裝</sys:String>
<sys:String x:Key="ButtonUpdateTrojan">升級Trojan</sys:String>
<sys:String x:Key="ButtonTrojanCancel">取消</sys:String>
<!-- 以下NaiveProxy設置參數標籤頁界面 -->
<sys:String x:Key="TextBlockNaiveProxyTemplateExplanation">模式NaiveProxy+TLS+Caddy</sys:String>
<sys:String x:Key="ButtonNaiveProxyChangeUser">隨機</sys:String>
<sys:String x:Key="ButtonNavieSetUp">NaiveProxy一鍵安裝</sys:String>
<sys:String x:Key="ButtonNaiveCancel">取消</sys:String>
<!-- 以下SSR设置参数标签页界面 -->
<sys:String x:Key="TextBlockSSRTemplateExplanation">模式SSR+TLS+Caddy</sys:String>
<sys:String x:Key="ButtonSSRSetUp">SSR一鍵安裝</sys:String>
<!-- 以下MTProto设置参数标签页界面 -->
<sys:String x:Key="TextBlockMtgTemplateExplanation">模式MTProto+TLS</sys:String>
<sys:String x:Key="ButtonMtgSetUp">MTProto一鍵安裝</sys:String>
<sys:String x:Key="TextBlockMtgFakeDomainExplanation">偽裝域名:</sys:String>
<sys:String x:Key="TextBlockMtgPortExplanation">推薦用常見https端口443、2053、2083、2087、2096、8443</sys:String>
<sys:String x:Key="TextBlockMtgSecretExplanation">密鑰將由服務端隨機生成,這裡無需設置。</sys:String>
<!-- 以下SS设置参数标签页界面 -->
<sys:String x:Key="ButtonSetUpSS">SS 一鍵安裝</sys:String>
<sys:String x:Key="ButtonTemplateConfigurationSS">SS 插件庫</sys:String>
<sys:String x:Key="TabItemHeaderNonePluginSS">經典模式</sys:String>
<sys:String x:Key="TextBlockNonePluginPointSS">提示:這種模式,長時間,大流量使用,容易被阻斷和乾擾,不推薦使用!</sys:String>
<sys:String x:Key="RadioButtonNonePluginSS">SS 經典</sys:String>
<sys:String x:Key="TextBlockNonePluginExplainSS">SS經典使用模式無需域名數據高強度加密數據被識別為未知數據。目前流量容易被識別極易被干擾與阻斷慎重使用放在這裡僅僅只是一種情懷與致敬</sys:String>
<sys:String x:Key="TabItemHeaderObfsPluginSS">Simple-obfs 插件</sys:String>
<sys:String x:Key="TextBlockObfsPluginPointSS">提示這是SS早期使用的流量混淆方案插件已經長時間不再更新不推薦使用</sys:String>
<sys:String x:Key="RadioButtonObfsPluginHttpWebSS">SS+obfs+http+Web</sys:String>
<sys:String x:Key="TextBlockObfsPluginHttpWebExplainSS">無需域名數據高強度加密流量混淆為http(並非真正的http)使用Web網站偽裝可在一定程度上增強抗識別不支持CDN。</sys:String>
<sys:String x:Key="RadioButtonObfsPluginHttpsWebSS">SS+obfs+TLS(https)+Web</sys:String>
<sys:String x:Key="TextBlockObfsPluginTLShttpsWebExplainSS">需要域名使用域名將很大增強抗識別數據高強度加密流量混淆為https(並非真正的https)使用Web網站偽裝進一步增強抗識別不支持CDN。</sys:String>
<sys:String x:Key="TabItemHeaderV2RayPluginSS">V2Ray 插件</sys:String>
<sys:String x:Key="TextBlockV2rayPluginPointSS">提醒ShadowRocket(ios)不支持SS+Quic模式</sys:String>
<sys:String x:Key="RadioButtonWebSocketTLSWebSS">SS+WebSocket+TLS+Caddy(Web後置)</sys:String>
<sys:String x:Key="RadioButtonWebSocketTLSWebFrontSS">SS+WebSocket+TLS+Caddy(Web前置)</sys:String>
<sys:String x:Key="TextBlockV2RayPluginPointSS">提示上面方案中的Web前置與Web後置使用效果上沒有差別Web後置方案TLS證書由acme.sh申請證書到期後 acme.sh會自動續期但是需要手動重啟SS加載新證書。而Web前置方案中的證書由Caddy自動申請並加載不需要重啟SS。</sys:String>
<sys:String x:Key="RadioButtonQuicSS">SS+QUIC</sys:String>
<sys:String x:Key="TextBlockQuicExplainSS">通過V2Ray-Plugin使用QUIC協議傳輸強制使用TLS加密。數據加密傳輸被識別為udp流量最初由谷歌創始優點:減少延遲、多路復用、連接遷移,需要域名,</sys:String>
<!--<sys:String x:Key="TabItemHeaderOtherPluginsSS">kcptun/GoQuiet/Cloak 插件</sys:String>-->
<sys:String x:Key="TabItemHeaderOtherPluginsSS">kcptun 插件</sys:String>
<sys:String x:Key="TextBlockGoQuietPluginPointSS">提醒Shadowrocket(ios)不支持GoQuiet-plugin插件。 shadowsocks(Android)不支持GoQuiet-plugin與Cloak-plugin插件</sys:String>
<sys:String x:Key="TextBlockKcptunPluginExplainSS">KCP是一個快速可靠協議能以比TCP浪費10%-20%的帶寬的代價換取平均延遲降低30%-40%且最大延遲降低三倍的傳輸效果。使用UDP協議傳輸數據高強度加密傳輸同樣的內容kcp 一般比TCP 消耗更多的流量,在丟包率高的線路下將極大提高網速在個別運營商處可能會被QOS限制。</sys:String>
<sys:String x:Key="TextBlockGoQuietPluginExplainSS">基本原理為模擬TLS的流量同時將服務器偽裝成一個正常的網站服務器這個混淆思路並非首創simple-obfs和ShadowsocksR的tls1.2_ticket_auth模式證明這條道是行得通的。此插件對現有的方法進行了改善其目標為讓大規模封鎖HTTPS服務器甚至IP段成為封鎖SS的唯一有效手段</sys:String>
<sys:String x:Key="TextBlockCloakPluginExplainSS">通過加密方式將代理流量混淆為合法的HTTPS流量並將代理服務器偽裝成普通的Web服務器以規避互聯網審查。可以看成是上面GoQuiet升級版優化網絡連接速度並且不是混淆https而是真正的https流量。</sys:String>
<sys:String x:Key="TextBlockPluginNameExplainSS">插件程序:</sys:String>
<sys:String x:Key="TextBlockPluginOptionExplainSS">插件選項:</sys:String>
<sys:String x:Key="DisplayInstallInfo_ExplainBuildSS">使用編譯方式,時間稍長,請耐心等待......</sys:String>
<!-- 以下系統工具標籤頁界面 -->
<sys:String x:Key="ButtonProofreadTime">校對時間</sys:String>
<sys:String x:Key="ButtonClearOccupiedPorts">釋放80/443端口</sys:String>
<sys:String x:Key="ButtonTestAndEnableBBR">啟用BBR</sys:String>
<sys:String x:Key="ButtonRemoveAllSoft">卸載代理</sys:String>
<sys:String x:Key="ButtonEnableRootPassWord">啟用root密碼登錄</sys:String>
<sys:String x:Key="ButtonRootProhibitsPasswordLogin">root禁止密碼登錄</sys:String>
<sys:String x:Key="ButtonEnableRootCert">啟用root證書密鑰登錄</sys:String>
<sys:String x:Key="MessageBoxShow_RemoveAllSoft">僅支持卸載由ProxySU安裝的代理軟件及相關配置請確保重要配置已備份。不支持卸載使用其他方法或腳本安裝的代理。確定要卸載遠程主機上的代理軟件嗎</sys:String>
<sys:String x:Key="MessageBoxShow_EnableRootPassword">本功能需要當前登錄的賬戶具有sudo權限是否為遠程主機啟用root賬戶並設置密碼</sys:String>
<sys:String x:Key="MessageBoxShow_ButtonEnableRootCert">本功能需要當前登錄的賬戶具有root或者sudo權限是否為遠程主機啟用root證書密鑰登錄</sys:String>
<sys:String x:Key="MessageBoxShow_ButtonRootProhibitsPasswordLogin">本功能需要遠程主機已經開啟了其他登錄方式如密鑰方式等否則將可能造成遠程主機無法連接是否禁止遠程主機的root賬戶密碼登錄方式</sys:String>
<sys:String x:Key="DisplayInstallInfo_SetRootProhibitsPasswordLogin">正在關閉root賬戶密碼登錄方式.....</sys:String>
<sys:String x:Key="MessageBoxShow_RootProhibitsPasswordLoginOK">遠程主機root賬戶密碼登錄方式已關閉</sys:String>
<sys:String x:Key="MessageBoxShow_ButtonEnableRootCertSuccess">遠程主機root賬戶證書密鑰登錄已啟用密鑰文件rootuser.key保存在隨後打開的文件夾中</sys:String>
<sys:String x:Key="MessageBoxShow_AlreadyRoot">當前賬戶已經具有root權限無需再設置</sys:String>
<sys:String x:Key="MessageBoxShow_NoSudoToAccount">當前賬戶無法獲取sudo權限設置失敗</sys:String>
<sys:String x:Key="DisplayInstallInfo_GenerateRandomPassword">生成20位隨機密碼</sys:String>
<sys:String x:Key="DisplayInstallInfo_EnableRootPasswordSavePasswordInfo">保存密碼信息!</sys:String>
<sys:String x:Key="DisplayInstallInfo_EnableRootCertGenerateCert">正在生成密鑰......</sys:String>
<sys:String x:Key="DisplayInstallInfo_EnableRootCertDownloadCert">正在下載密鑰......</sys:String>
<sys:String x:Key="DisplayInstallInfo_EnableRootCertSetCertEnable">遠程主機啟用密鑰登錄.......</sys:String>
<sys:String x:Key="DisplayInstallInfo_EnableRootPasswordSuccess">遠程主機Root賬戶密碼登錄已啟用密碼保存在隨後打開的文件夾中</sys:String>
<sys:String x:Key="DisplayInstallInfo_StartRemoveProxy">開始卸載......</sys:String>
<sys:String x:Key="DisplayInstallInfo_DiscoverProxySoft">檢測到已安裝</sys:String>
<sys:String x:Key="DisplayInstallInfo_RemoveProxySoftFailed">卸載失敗!請向開發者問詢!</sys:String>
<sys:String x:Key="DisplayInstallInfo_RemoveProxySoftSuccess">卸載成功!</sys:String>
<!-- 以下資源工具標籤頁界面 -->
<sys:String x:Key="ButtonWebBrowserHomePage">主頁</sys:String>
<sys:String x:Key="ButtonWebBrowserForward">前進</sys:String>
<sys:String x:Key="ButtonWebBrowserBack">後退</sys:String>
<sys:String x:Key="TextBlockWebExplain">由於眾所周知的原因,在某些時候,加載緩慢,請耐心等待一下</sys:String>
<!-- 以下Trojan-go模板庫界面 -->
<sys:String x:Key="GroupBoxHeaderTrojanGoTemplates">Trojan-go 模板庫</sys:String>
<sys:String x:Key="TextBlockTrojanGoTLSwebPlan">http/2傳輸Caddy2偽裝網站抗識別暫不支持CloudFlare的CDN</sys:String>
<sys:String x:Key="TextBlockTrojanGoWebSocketTLSwebPlan">使用WebSocket傳輸Caddy2偽裝網站抗識別支持CloudFlare的CDN</sys:String>
<sys:String x:Key="GroupBoxHeaderParameterTrojanGo">參數設置</sys:String>
<sys:String x:Key="TextBlockTrojanGoDomain">域名:</sys:String>
<sys:String x:Key="TextBlockTrojanGoPort">端口: 443</sys:String>
<sys:String x:Key="TextBlockTrojanGoPassword">密碼:</sys:String>
<sys:String x:Key="TextBlockTrojanGoPasswordExplain">使用已有密碼,直接粘貼到框中</sys:String>
<sys:String x:Key="TextBlockTrojanGoWebSocketPath">WebSocket路徑:</sys:String>
<sys:String x:Key="CheckBoxMuxSelect">Mux多路復用</sys:String>
<sys:String x:Key="TextBlockExplainCheckBoxMuxSelect">此處設置只對官方客戶端配置文件config.json有效其他客戶端需手動設置服務端自動適配。</sys:String>
<sys:String x:Key="TextBlockExplainCheckBoxMuxSelectResult">此字段不出現在QR碼及分享URL中客戶端需自行設置服務端默認啟用自動適配。</sys:String>
<sys:String x:Key="ButtonTrojanGoTemplateOK">確定</sys:String>
<sys:String x:Key="ButtonTrojanGoTemplateCancel">取消</sys:String>
<!-- 以下V2Ray模板庫界面 -->
<sys:String x:Key="GroupBoxHeaderV2RayTemplates">V2Ray 模板庫</sys:String>
<sys:String x:Key="TabItemHeaderV2RayHotPlan">推薦方案</sys:String>
<sys:String x:Key="TabItemHeaderV2RayEarlyPlan">嚐鮮方案</sys:String>
<sys:String x:Key="TabItemHeaderV2RayVlessProtocol">VLESS協議</sys:String>
<sys:String x:Key="TextBlockVlessExplain">VLESS 是一個無狀態的輕量傳輸協議,與 VMess 不同VLESS 不依賴於系統時間,認證方式同樣為 UUID但不需要 alterId。目前 VLESS 沒有自帶加密,請用於可靠信道,如 TLS。優點可以有效的降低主機資源消耗。目前 VLESS 不支持分享。 VLESS 處於公測階段,測試期間請確保客戶端與服務端的 v2ray-core 均為最新版本。</sys:String>
<sys:String x:Key="TextBlockVlessXtlsTcpExplain">XTLS 在低性能或沒有AES 硬解的設備上效果出眾如在硬路由上換用XTLS同樣跑滿CPU 時實現網速翻倍或是相同網速時CPU 佔用率減半,而對於移動設備計算量減少意味著省電。服務端客戶端版本要求4.29+ (需域名)不支持CDN。</sys:String>
<sys:String x:Key="TextBlockV2RayVlessTcpTlsWebExplain">輕量協議VLESS,佔用更少主機資源數據TLS加密傳輸用Caddy2在節點上做偽裝網站。適合配置低的VPS,或多人共用節點服務端客戶端版本要求4.27+ (需域名)不支持CDN。</sys:String>
<sys:String x:Key="TextBlockVlessWebSocketTlsWebExplain">使用VLESS協議與VMESS的此類型方案更輕量。穩定性強Caddy2做前置隱藏代理特徵被識別為訪問網站的https流量抗封鎖識別最強,需要域名,支持CDN</sys:String>
<sys:String x:Key="TextBlockVlessHttp2WebExplain">使用VLESS協議與VMESS的此類型方案更輕量。基於 HTTP/2 傳輸。完整按 HTTP/2 標準實現Caddy2做前置隱藏代理特徵H2C協議轉發到V2Ray需要域名暫不支持CloudFlare的CDN</sys:String>
<sys:String x:Key="TabItemHeaderV2RayTcpProtocol">TCP傳輸協議</sys:String>
<sys:String x:Key="TabItemHeaderV2RayWebSocketProtocol">WebSocket傳輸協議</sys:String>
<sys:String x:Key="TabItemHeaderV2RayHttp2Protocol">Http/2傳輸協議</sys:String>
<sys:String x:Key="TabItemHeaderV2RayMkcpProtocol">mKCP傳輸協議</sys:String>
<sys:String x:Key="TabItemHeaderV2RayQuicProtocol">QUIC傳輸協議</sys:String>
<sys:String x:Key="GroupBoxHeaderParameterV2Ray">參數設置</sys:String>
<sys:String x:Key="TextBlockV2RayServerPort">服務器端口:</sys:String>
<sys:String x:Key="ButtonV2RayServerPortChange">隨機選擇</sys:String>
<sys:String x:Key="TextBlockV2RayServerPortExplain">若使用TLS加密請保持默認的443端口</sys:String>
<sys:String x:Key="TextBlockV2RayUUIDExplain">使用已有UUID直接粘貼到框中</sys:String>
<sys:String x:Key="TextBlockV2RayQuicUUID">QUIC密鑰:</sys:String>
<sys:String x:Key="TextBlockV2RayMkcpSeedUUID">mKCP Seed:</sys:String>
<sys:String x:Key="TextBlockV2RayMkcpExplain">啟用mKCP Seed密鑰可增強抗識別留空則禁用,要求版本4.24.2+</sys:String>
<sys:String x:Key="TextBlockV2RayPath">路徑:</sys:String>
<sys:String x:Key="TextBlockV2RayVlessWsPath">VLESS ws路徑</sys:String>
<sys:String x:Key="TextBlockV2RayVmessTcpPath">VMESS tcp路徑</sys:String>
<sys:String x:Key="TextBlockV2RayVmessWsPath">VMESS ws路徑</sys:String>
<sys:String x:Key="TextBlockQuicEncryption">QUIC加密方式:</sys:String>
<sys:String x:Key="TextBlockV2RayDomain">域名:</sys:String>
<sys:String x:Key="TextBlockTrojanPassword">Trojan密碼與V2ray的UUID相同。</sys:String>
<sys:String x:Key="TextBlockV2RayMaskSites">偽裝網站:</sys:String>
<sys:String x:Key="TextBoxV2RayMaskSitesTag">設置此項可增加代理的隱蔽(可為空)</sys:String>
<sys:String x:Key="TextBoxV2RayMaskSitesToolTip">僅僅輸入域名,不包括"http"及"/"等</sys:String>
<sys:String x:Key="ButtonRootProhibitsPasswordLoginToolTip">僅僅禁止root賬戶使用密碼登錄請確保root賬戶其他登錄方式已生效</sys:String>
<sys:String x:Key="ButtonEnableRootPassWordToolTip">將啟用root賬戶並設置為密碼登錄</sys:String>
<sys:String x:Key="ButtonEnableRootCertToolTip">將啟用或設置root賬戶為密鑰證書登錄</sys:String>
<sys:String x:Key="MessageBoxShow_MaskSitesToolTip">偽裝網址輸入格式錯誤!請重新輸入!</sys:String>
<sys:String x:Key="TextBlockV2RayWebSocketTlsWebExplain">穩定性強Caddy2做前置隱藏代理特徵被識別為訪問網站的https流量抗封鎖識別最強,需要域名,支持CDN</sys:String >
<sys:String x:Key="TextBlockV2RayHttp2TlsWebExplain">基於 HTTP/2 傳輸。完整按 HTTP/2 標準實現Caddy2做前置隱藏代理特徵H2C協議轉發到V2Ray需要域名暫不支持CloudFlare的CDN</sys:String>
<sys:String x:Key="TextBlockXrayExplain">當前Xray是V2Ray的超集未來與V2Ray會有不同的發展方向。</sys:String>
<sys:String x:Key="TextBlockVlessVmessXtlsTcpWebSocketExplainHot">VLESS over TCP with XTLS + 回落and 分流to WHATEVER終極配置由rprx大佬(xtls作者)配置並推薦在服務端同時配置以下六種方案共用同一域名與443端口其中 WS 都可以通過 CDN。</sys:String>
<sys:String x:Key="TextBlockVlessVmessXtlsTcpWebSocketExplainHot5">VLESS over TCP with XTLS + 回落and 分流to WHATEVER終極配置由rprx大佬(xtls作者)配置並推薦在服務端同時配置以下五種方案共用同一域名與443端口其中 WS 都可以通過 CDN。(想增加XTLS方案請使用Xray配置)</sys:String>
<sys:String x:Key="TextBlockV2RayTcpExplain">數據加密傳輸會被識別為未知的tcp流量</sys:String>
<sys:String x:Key="RadioButtonV2RayTcpHttp">TCP+Http偽裝</sys:String>
<sys:String x:Key="TextBlockV2RayTcpHttpExplain">數據加密傳輸並做http偽裝會被識別為http流量但並不是真正的http訪問</sys:String>
<sys:String x:Key="TextBlockV2RayTcpTlsExplain">數據加密傳輸傳輸協議使用TLS會被識別為TLS流量不等同於https流量特徵 (需域名)</sys:String>
<sys:String x:Key="RadioButtonV2RayTcpTlsSelfSigned">TCP+TLS(自簽證書)</sys:String>
<sys:String x:Key="TextBlockV2RayTcpTlsSelfSignedExplain">數據加密傳輸傳輸協議使用TLS會被識別為TLS流量不等同於https流量特徵 (無需域名)</sys:String>
<sys:String x:Key="TextBlockV2RaySelfSignedShadowrocketExplain">Shadowrocket (ios)需要手動打開“允許不安全”選項</sys:String>
<sys:String x:Key="TextBlockV2RayWebSocketExplain">數據加密傳輸傳輸協議使用WebSocket未啟用TLS,將被識別為WebSocket流量。</sys:String>
<sys:String x:Key="TextBlockV2RayWebSocketTlsExplain">數據加密傳輸傳輸協議使用WebSocket啟用TLS,將被識別為TLS流量。 (需要域名)支持CDN。</sys:String>
<sys:String x:Key="RadioButtonV2RayWebSocketTlsSelfSigned">WebSocket+TLS(自簽證書)</sys:String>
<sys:String x:Key="TextBlockV2RayWebSocketTlsSelfSignedExplain">數據加密傳輸傳輸協議使用WebSocket啟用TLS,將被識別為TLS流量。 (無需域名)</sys:String>
<sys:String x:Key="TextBlockV2RayHttp2Explain">基於 HTTP/2 的傳輸方式。它完整​​按照 HTTP/2 標準實現,需要域名</sys:String>
<sys:String x:Key="RadioButtonV2RayHttp2SelfSigned">HTTP2(自簽證書)</sys:String>
<sys:String x:Key="TextBlockV2RayHttp2SelfSignedExplain">基於 HTTP/2 的傳輸方式。它完整​​按照 HTTP/2 標準實現,使用自簽名證書,不需要域名</sys:String>
<sys:String x:Key="RadioButtonV2RayMkcpNone">mKCP(無偽裝)</sys:String>
<sys:String x:Key="TextBlockV2RayMkcpNoneExplain">數據加密傳輸以增加帶寬佔用減少延遲udp協議,無偽裝會被識別為udp流量</sys:String>
<sys:String x:Key="TextBlockV2RayMkcpSRTPExplain">同mKCP(無偽裝),增加偽裝成 SRTP 數據包,會被識別為視頻通話數據(如 FaceTime</sys:String>
<sys:String x:Key="TextBlockV2RayMkcpuTPExplain">同mKCP(無偽裝),增加偽裝成 uTP 數據包,會被識別為 BT 下載數據</sys:String>
<sys:String x:Key="TextBlockV2RayMkcpWeChatExplain">同mKCP(無偽裝),增加偽裝成微信視頻通話的數據包</sys:String>
<sys:String x:Key="TextBlockV2RayMkcpDTLSExplain">同mKCP(無偽裝),增加偽裝成 DTLS 1.2 數據包</sys:String>
<sys:String x:Key="TextBlockV2RayMkcpWireGuardExplain">同mKCP(無偽裝),增加偽裝成 WireGuard 數據包。 (並不是真正的 WireGuard 協議)</sys:String>
<sys:String x:Key="TextBlockV2RayQuicShadowrocketExplain">提醒Shadowrocket目前暫不支持QUIC的傳輸模式。</sys:String>
<sys:String x:Key="RadioButtonV2RayQuicNone">QUIC(無偽裝)</sys:String>
<sys:String x:Key="TextBlockV2RayQuicNoneExplain">數據加密傳輸無偽裝會被識別為udp流量最初由谷歌創始優點:減少延遲、多路復用、連接遷移</sys:String>
<sys:String x:Key="TextBlockV2RayQuicSRTPExplain">同QUIC(無偽裝),增加偽裝成 SRTP 數據包,會被識別為視頻通話數據(如 FaceTime</sys:String>
<sys:String x:Key="TextBlockV2RayQuicuTPExplain">同QUIC(無偽裝),增加偽裝成 uTP 數據包,會被識別為 BT 下載數據</sys:String>
<sys:String x:Key="TextBlockV2RayQuicWeChatExplain">同QUIC(無偽裝),增加偽裝成微信視頻通話的數據包</sys:String>
<sys:String x:Key="TextBlockV2RayQuicDTLSExplain">同QUIC(無偽裝),增加偽裝成 DTLS 1.2 數據包</sys:String>
<sys:String x:Key="TextBlockV2RayQuicWireGuardExplain">同QUIC(無偽裝),增加偽裝成 WireGuard 數據包。 (並不是真正的 WireGuard 協議)</sys:String>
<!--以下為時間校對窗口-->
<sys:String x:Key="RadioButtonNetworkTime">同步網絡時間</sys:String>
<sys:String x:Key="TextBlockNetworkTime">將遠程主機時間校正為網絡時間注意本機電腦的時間必須也是與網絡時間同步的否則本機電腦V2ray有可能連接出錯&#x0a;&#x0a;推薦:優先使用此方法校對時間</sys:String>
<sys:String x:Key="RadioButtonLocalTime">同步本機時間</sys:String>
<sys:String x:Key="TextBlockLocalTime">將遠程主機時間同步為本地時間,注意:本機電腦的時間必須是準確的,與網絡時間同步的,否則其他客戶端中,有可能連接出錯&#x0a;&#x0a;使用網絡校時無法校對時間時,使用此種方法</sys:String>
<sys:String x:Key="RadioButtonUpDateLocalTime">更新本機時間</sys:String>
<sys:String x:Key="TextBlockUpDateLocalTime">將本機電腦時間與網絡時間同步。&#x0a;&#x0a;注意:使用此項功能,必須以管理員身份運行本程序</sys:String>
<sys:String x:Key="ButtonTestTime">檢測時間誤差</sys:String>
<sys:String x:Key="ButtonProofreading">校對時間</sys:String>
<!--以下為客戶端參數顯示窗口-->
<sys:String x:Key="GroupBoxHeaderClientParameter">客戶端配置參數</sys:String>
<sys:String x:Key="TextBlockServerAddress">服務器地址(address):</sys:String>
<sys:String x:Key="TextBlockServerPort">端口(port):</sys:String>
<sys:String x:Key="TextBlockUserUUID">用戶ID(uuid)/密碼:</sys:String>
<sys:String x:Key="ButtonCopyV2RayUUIDtoClip">複製</sys:String>
<sys:String x:Key="MessageBoxShow_V2RayUUIDcopyedToClip">已復製到剪貼板中!</sys:String>
<sys:String x:Key="MessageBoxShow_V2RayEmptyToClip">空內容!</sys:String>
<sys:String x:Key="TextBlockV2RayAlterId">額外ID:</sys:String>
<sys:String x:Key="TextBlockV2RayAlterIdExplain">不超過64客戶端沒此項可不填</sys:String>
<sys:String x:Key="TextBlockEncryption">加密方式:</sys:String>
<sys:String x:Key="TextBlockTransferProtocol">傳輸協議:</sys:String>
<sys:String x:Key="TextBlockCamouflageType">偽裝類型(混淆):</sys:String>
<sys:String x:Key="TextBlockIsOrNotTLS">TLS設置:</sys:String>
<sys:String x:Key="TextBlockCopyToClipExplain">提示:雙擊以上內容窗,即可複製到剪貼板中。</sys:String>
<sys:String x:Key="TextBlockClientPath">路徑(Path):</sys:String>
<sys:String x:Key="TextBlockClientMkcpQuicKey">mKCP Seed/QUIC密鑰:</sys:String>
<sys:String x:Key="TextBlockEncryptionIsAuto">默認auto</sys:String>
<sys:String x:Key="GrouBoxHeaderUrlOrQR">二維碼/URL</sys:String>
<sys:String x:Key="TextBlockUsedParameter">以上參數可以手動或掃描輸入客戶端,用於官方客戶端的配置和相關文件已經存放入目錄下,點擊 確定 按扭可打開</sys:String>
<sys:String x:Key="TextBlockQrURLexplainV2Ray">二維碼和URL鏈接可用於&#x0a;v2rayN(windows)&#x0a;Qv2ray(windows)&#x0a;Qv2ray(windows)&#x0a;Shadowrocket(ios)&#x0a;v2rayNG(Android)&#x0a;導入v2ray節點&#x0a;&#x0a;注意:Vless協議需要手動輸入配置參數二維碼和URL無效</sys:String>
<sys:String x:Key="TextBlockQrURLexplainTrojan-go">"可用於ShadowRocket (ios)、igniterAndroid、Qv2ray (windows) 掃碼和導入url。注意有的客戶端可能不支持WebSocket模式。"</sys:String>
<sys:String x:Key="TextBlockQrURLexplainTrojan">"可用於ShadowRocket (ios)、igniterAndroid、Qv2ray (windows) 掃碼和導入url。注意有的客戶端可能不支持WebSocket模式。"</sys:String>
<sys:String x:Key="TextBlockQrURLexplainNaiveProxy">用於NaiveSharp(windows)的URL導入鏈接</sys:String>
<sys:String x:Key="TextBlockQrURLexplainSSR">用於ShadowsocksR(windows)、SSRR(android)、Shadowrocket(ios)的掃碼和導入URL導入鏈接</sys:String>
<sys:String x:Key="TextBlockQrURLexplainSSmobile">用於手機客戶端shadowsocks(android)、Shadowrocket(ios)的掃碼和URL導入鏈接</sys:String>
<sys:String x:Key="TextBlockQrURLexplainSSpc">用於電腦客戶端Shadowsocks (windows)的掃碼和URL導入鏈接</sys:String>
<sys:String x:Key="TextBlockQrURLexplainSS">用於Shadowsocks (windows)、shadowsocks(android)、Shadowrocket(ios)的掃碼和URL導入鏈接</sys:String>
<sys:String x:Key="TextBlockClientPromptSS">提醒: 電腦客戶端Shadowsocks (windows)與手機客戶端shadowsocks(android)、Shadowrocket(ios)的導入格式不兼容,請選擇相應格式。</sys:String>
<sys:String x:Key="RadioButtonMobileSS">手機端</sys:String>
<sys:String x:Key="RadioButtonPCSS">電腦端</sys:String>
<sys:String x:Key="TextBlockShareQRcodeMtgTgIpv4">TG格式QR</sys:String>
<sys:String x:Key="TextBlockURLMtgTgIpv4">TG格式URL(雙擊複製到剪切板中)</sys:String>
<sys:String x:Key="TextBlockShareQRcodeMtgTmeIpv4">T.ME格式QR</sys:String>
<sys:String x:Key="TextBlockURLMtgTmeIpv4">T.ME格式URL(雙擊複製到剪切板中)</sys:String>
<!--以下為程序內的-->
<sys:String x:Key="MessageBoxShow_ErrorHostPortUserNotEmpty">主機地址、主機端口、用戶名為必填項,不能為空!!</sys:String>
<sys:String x:Key="MessageBoxShow_ErrorHostPortErr">連接端口含有非數字字符!</sys:String>
<sys:String x:Key="MessageBoxShow_ErrorHostPasswordNotEmpty">登錄密碼為必填項,不能為空!!</sys:String>
<sys:String x:Key="MessageBoxShow_ErrorHostKeyNotEmpty">密鑰文件為必填項,不能為空!!</sys:String>
<sys:String x:Key="MessageBoxShow_ErrorProxyAddressPortNotEmpty">如果選擇了代理,則代理地址與端口不能為空!</sys:String>
<sys:String x:Key="MessageBoxShow_ErrorProxyUserPasswordNotEmpty">如果代理需要登錄,則代理登錄的用戶名與密碼不能為空!</sys:String>
<sys:String x:Key="MessageBoxShow_ErrorHostConnection">遠程主機連接信息有誤,請檢查!</sys:String>
<sys:String x:Key="MessageBoxShow_ChooseTemplate">請先選擇配置模板!</sys:String>
<sys:String x:Key="DisplayInstallInfo_FunctionResultErr">發生錯誤,安裝中斷......</sys:String>
<sys:String x:Key="DisplayInstallInfo_Login">正在登錄遠程主機......</sys:String>
<sys:String x:Key="DisplayInstallInfo_LoginSuccessful">主機登錄成功!</sys:String>
<sys:String x:Key="DisplayInstallInfo_DetectionRootPermission">檢測是否運行在root權限下...</sys:String>
<sys:String x:Key="MessageBoxShow_ErrorRootPermission">請使用具有root權限的賬戶登錄主機 </sys:String>
<sys:String x:Key="DisplayInstallInfo_DetectionRootOK">檢測結果OK</sys:String>
<sys:String x:Key="DisplayInstallInfo_TestExistSoft">檢測系統是否已經安裝</sys:String>
<sys:String x:Key="MessageBoxShow_ExistedSoft">遠程主機已安裝</sys:String>
<sys:String x:Key="MessageBoxShow_ForceInstallSoft">,建議先執行卸載,或者重裝系統,若強制安裝有一定機率失敗。是否強制重新安裝?</sys:String>
<sys:String x:Key="DisplayInstallInfo_InstallationCanceledExit">安裝取消,退出</sys:String>
<sys:String x:Key="DisplayInstallInfo_ForceInstallSoft">已選擇強制安裝</sys:String>
<sys:String x:Key="DisplayInstallInfo_NoInstalledSoft">檢測結果:未安裝</sys:String>
<sys:String x:Key="DisplayInstallInfo_CheckSystemRequirements">檢測系統是否符合安裝要求......</sys:String>
<sys:String x:Key="MessageBoxShow_CurrentKernelVersion">當前系統內核版本為</sys:String>
<sys:String x:Key="MessageBoxShow_RequiredKernelVersionExplain">V2ray要求內核為2.6.23及以上。請升級內核再安裝!</sys:String>
<sys:String x:Key="DisplayInstallInfo_KernelVersionNotMatch">系統內核版本不符合要求,安裝失敗! </sys:String>
<sys:String x:Key="MessageBoxShow_MissingSystemComponents">系統缺乏必要的安裝組件如:apt||dnf||yum||zypper||Syetemd主機系統推薦使用CentOS 7/8,Debian 8/9/10 ,Ubuntu 16.04及以上版本</sys:String>
<sys:String x:Key="DisplayInstallInfo_MissingSystemComponents">系統環境不滿足要求,安裝失敗! </sys:String>
<sys:String x:Key="DisplayInstallInfo_SystemRequirementsOK">檢測結果OK!</sys:String>
<sys:String x:Key="DisplayInstallInfo_EnableSELinux">檢測到系統啟用SELinux且工作在嚴格模式下需改為寬鬆模式修改中......</sys:String>
<sys:String x:Key="DisplayInstallInfo_SELinuxModifyOK">修改完畢!</sys:String>
<sys:String x:Key="DisplayInstallInfo_ProofreadingTime">校對時間......</sys:String>
<sys:String x:Key="MessageBoxShow_TimeError">本地時間與遠程主機時間相差超過限制(90秒),請先用 '系統工具-->時間校對' 校對時間後再設置</sys:String>
<sys:String x:Key="DisplayInstallInfo_TimeError">時間較對失敗......</sys:String>
<sys:String x:Key="DisplayInstallInfo_TimeOK">時間差符合要求OK!</sys:String>
<sys:String x:Key="DisplayInstallInfo_TestDomainResolve">正在檢測域名是否解析到當前VPS的IP上......</sys:String>
<sys:String x:Key="DisplayInstallInfo_OnlyIpv6HostDetect">正在檢測是否為純ipv6主機......</sys:String>
<sys:String x:Key="DisplayInstallInfo_NoIpDetect">未檢測到有效的IP地址......</sys:String>
<sys:String x:Key="DisplayInstallInfo_FindFastestSetUpNat64">正在查找最快的Nat64網關......</sys:String>
<sys:String x:Key="DisplayInstallInfo_FindFastestSetUpNat64Failed">未能找到有效的Nat64網關......</sys:String>
<sys:String x:Key="DisplayInstallInfo_FindFastestNat64AsIs">當前主機最快的Nat64網關為:</sys:String>
<sys:String x:Key="DisplayInstallInfo_SetUpNat64">正在設置Nat64網關......</sys:String>
<sys:String x:Key="DisplayInstallInfo_DeleteSetUpNat64">正在刪除Nat64網關......</sys:String>
<sys:String x:Key="DisplayInstallInfo_DomainResolveOK">解析正確! OK!</sys:String>
<sys:String x:Key="DisplayInstallInfo_OnlyIpv6">檢測當前主機為純ipv6主機目前暫不支持</sys:String>
<sys:String x:Key="DisplayInstallInfo_ErrorDomainResolve">域名未能正確解析到當前VPS的IP上!安裝失敗!</sys:String>
<sys:String x:Key="MessageBoxShow_ErrorDomainResolve">域名未能正確解析到當前VPS的IP上請檢查若解析設置正確請等待生效後再重試安裝。如果域名使用了CDN請先關閉</sys:String>
<sys:String x:Key="DisplayInstallInfo_TestPortUsed">檢測端口占用情況......</sys:String>
<sys:String x:Key="MessageBoxShow_ErrorPortUsed">80/443端口之一或全部被佔用將強制停止佔用80/443端口的程序?</sys:String>
<sys:String x:Key="DisplayInstallInfo_ErrorPortUsedFail">端口被佔用,安裝失敗......</sys:String>
<sys:String x:Key="DisplayInstallInfo_ReleasePort">正在釋放80/443端口......</sys:String>
<sys:String x:Key="DisplayInstallInfo_ReleasePortOK">80/443端口釋放完畢</sys:String>
<sys:String x:Key="MessageBoxShow_ErrorPortUsedOther">端口被佔用,將強制停止佔用此端口的程序?</sys:String>
<sys:String x:Key="DisplayInstallInfo_ReleasePortOther">正在釋放端口......</sys:String>
<sys:String x:Key="DisplayInstallInfo_ReleasePortOKOther">端口釋放完畢!</sys:String>
<sys:String x:Key="DisplayInstallInfo_PortNotUsed">檢測結果:未被佔用!</sys:String>
<sys:String x:Key="DisplayInstallInfo_StartInstalling">系統環境檢測完畢,符合安裝要求,開始佈署......</sys:String>
<sys:String x:Key="DisplayInstallInfo_OpenFireWallPort">開啟防火牆相應端口......</sys:String>
<sys:String x:Key="DisplayInstallInfo_StartInstallSoft">正在安裝</sys:String>
<sys:String x:Key="DisplayInstallInfo_DownloadScriptFailed">文件下載失敗!</sys:String>
<sys:String x:Key="DisplayInstallInfo_CompilingSS">編譯中,請耐心等待.............</sys:String>
<sys:String x:Key="MessageBoxShow_ErrorInstallSoftFail">安裝失敗,腳本運行出錯!</sys:String>
<sys:String x:Key="DisplayInstallInfo_SoftInstallSuccess">安裝成功!</sys:String>
<sys:String x:Key="DisplayInstallInfo_UploadSoftConfig">安裝完畢,上傳配置文件......</sys:String>
<sys:String x:Key="DisplayInstallInfo_StartInstallAcmeSh">正在安裝acme.sh......</sys:String>
<sys:String x:Key="DisplayInstallInfo_AcmeShInstallSuccess">acme.sh安裝成功</sys:String>
<sys:String x:Key="DisplayInstallInfo_ErrorAcmeShInstallFail">acme.sh安裝失敗原因未知請向開發者提問</sys:String>
<sys:String x:Key="DisplayInstallInfo_StartApplyCert">申請域名證書......</sys:String>
<sys:String x:Key="DisplayInstallInfo_ApplyCertSuccess">證書申請成功!</sys:String>
<sys:String x:Key="DisplayInstallInfo_ApplyCertFail">證書申請失敗!原因未知,請向開發者提問!</sys:String>
<sys:String x:Key="DisplayInstallInfo_IntallCertToSoft">安裝證書到</sys:String>
<sys:String x:Key="DisplayInstallInfo_IntallCertToSoftOK">證書成功安裝到</sys:String>
<sys:String x:Key="DisplayInstallInfo_IntallCertToSoftFail">證書安裝到</sys:String>
<sys:String x:Key="DisplayInstallInfo_InstallCertFailAsk">失敗,原因未知,可以向開發者提問!</sys:String>
<sys:String x:Key="DisplayInstallInfo_StartInstallCaddy">安裝Caddy......</sys:String>
<sys:String x:Key="DisplayInstallInfo_NotInstalledCaddy">檢測結果未安裝Caddy</sys:String>
<sys:String x:Key="DisplayInstallInfo_ErrorInstallCaddyFail">安裝Caddy失敗</sys:String>
<sys:String x:Key="DisplayInstallInfo_InstalledCaddyOK">Caddy安裝成功</sys:String>
<sys:String x:Key="DisplayInstallInfo_UpgradeCaddy">正在為Http2Web模式升級Caddy v2.2.0測試版!</sys:String>
<sys:String x:Key="DisplayInstallInfo_UploadCaddyConfig">上傳Caddy配置文件......</sys:String>
<sys:String x:Key="DisplayInstallInfo_UploadCaddyConfigFailed">Caddy配置文件上傳失敗!</sys:String>
<sys:String x:Key="DisplayInstallInfo_UploadCaddyConfigOK">Caddy配置文件上傳成功,OK!</sys:String>
<sys:String x:Key="DisplayInstallInfo_StartCaddyService">正在啟動Caddy......</sys:String>
<sys:String x:Key="DisplayInstallInfo_StartCaddyServiceOK">Caddy啟動成功</sys:String>
<sys:String x:Key="DisplayInstallInfo_StartCaddyServiceFail">Caddy啟動失敗</sys:String>
<sys:String x:Key="DisplayInstallInfo_StartCaddyServiceSecond">正在啟動Caddy第二次嘗試</sys:String>
<sys:String x:Key="DisplayInstallInfo_StartCaddyServiceSecondFail">Caddy啟動失敗(第二次)!退出安裝!</sys:String>
<sys:String x:Key="DisplayInstallInfo_CaddyServiceFailedExit">Caddy啟動失敗原因未知請向開發者問詢</sys:String>
<sys:String x:Key="DisplayInstallInfo_StartSoft">正在啟動</sys:String>
<sys:String x:Key="DisplayInstallInfo_StartSoftOK">啟動成功!</sys:String>
<sys:String x:Key="DisplayInstallInfo_StartSoftFail">啟動失敗!</sys:String>
<sys:String x:Key="DisplayInstallInfo_StartSoftSecond">正在第二次嘗試啟動</sys:String>
<sys:String x:Key="DisplayInstallInfo_StartSoftSecondFail">啟動失敗(第二次)!退出安裝!</sys:String>
<sys:String x:Key="DisplayInstallInfo_StartSoftFailedExit">啟動失敗,原因如上!請排查原因!</sys:String>
<sys:String x:Key="DisplayInstallInfo_TestBBR">BBR測試......</sys:String>
<sys:String x:Key="DisplayInstallInfo_EnableBBR">正在啟用BBR......</sys:String>
<sys:String x:Key="DisplayInstallInfo_BBRisEnabled">BBR已經啟用了</sys:String>
<sys:String x:Key="DisplayInstallInfo_BBRFailed">系統不滿足啟用BBR的條件啟用失敗</sys:String>
<sys:String x:Key="DisplayInstallInfo_BBREnabledSuccess">BBR 啟用成功!</sys:String>
<sys:String x:Key="DisplayInstallInfo_GenerateClientConfig">生成客戶端配置......</sys:String>
<sys:String x:Key="DisplayInstallInfo_GetClientConfigFailed">客戶端配置獲取失敗!</sys:String>
<sys:String x:Key="DisplayInstallInfo_ProxyInstalledOK">安裝成功,祝你玩的愉快! </sys:String>
<sys:String x:Key="DisplayInstallInfo_LoginFailed">安裝失敗!</sys:String>
<sys:String x:Key="MessageBoxShow_ErrorLoginOccurred">發生錯誤!</sys:String>
<sys:String x:Key="MessageBoxShow_ErrorLoginUserOrPassword">密碼錯誤或用戶名錯誤!</sys:String>
<sys:String x:Key="MessageBoxShow_ErrorLoginHostOrPort">請檢查主機地址及端口是否正確,如果通過代理,請檢查代理是否正常工作</sys:String>
<sys:String x:Key="MessageBoxShow_ErrorLoginKey">所選密鑰文件錯誤或者格式不對!</sys:String>
<sys:String x:Key="MessageBoxShow_ErrorLoginKeyOrUser">使用密鑰登錄,密鑰文件錯誤或用戶名錯誤!</sys:String>
<sys:String x:Key="MessageBoxShow_ErrorLoginHostOrProxyPort">主機地址錯誤,如果使用了代理,也可能是連接代理的端口錯誤!</sys:String>
<sys:String x:Key="MessageBoxShow_ErrorUpgradeSoftNotInstall">退出!原因:遠程主機未安裝</sys:String>
<sys:String x:Key="DisplayInstallInfo_OldScriptInstalledV2Ray">檢測到使用舊安裝腳本的V2Ray......</sys:String>
<sys:String x:Key="MessageBoxShow_OldScriptInstalledV2Ray">檢測到使用舊安裝腳本的V2Ray,是否卸載舊版本並使用新安裝腳本重新安裝?</sys:String>
<sys:String x:Key="DisplayInstallInfo_RemoveOldScriptInstalledV2Ray">正在卸載舊版本......</sys:String>
<sys:String x:Key="DisplayInstallInfo_RemoveOldVersionOK">卸載舊版本OK!</sys:String>
<sys:String x:Key="DisplayInstallInfo_InstallNewVersion">安裝新版本......</sys:String>
<sys:String x:Key="DisplayInstallInfo_MoveOriginalConfig">遷移原配置文件。</sys:String>
<sys:String x:Key="DisplayInstallInfo_UpgradedNewVersion">已更新到最新版本。</sys:String>
<sys:String x:Key="DisplayInstallInfo_CurrentVersion">遠程主機當前版本為v</sys:String>
<sys:String x:Key="DisplayInstallInfo_NewVersion">最新版本為:</sys:String>
<sys:String x:Key="DisplayInstallInfo_IsOrNoUpgradeNewVersion">是否升級為最新版本?</sys:String>
<sys:String x:Key="DisplayInstallInfo_StartUpgradeNewVersion">正在升級到最新版本</sys:String>
<sys:String x:Key="DisplayInstallInfo_UpgradeNewVersionOK">升級成功!當前已是最新版本!</sys:String>
<sys:String x:Key="DisplayInstallInfo_UpgradeNewVersionFail">升級失敗,原因未知,請向開發者提問!</sys:String>
<sys:String x:Key="DisplayInstallInfo_UpgradeVersionCancel">升級取消,退出!</sys:String>
<sys:String x:Key="DisplayInstallInfo_IsNewVersion">遠程主機當前已是最新版本:</sys:String>
<sys:String x:Key="DisplayInstallInfo_NotUpgradeVersion">無需升級!退出!</sys:String>
<sys:String x:Key="MessageBoxShow_DomainNotEmpty">域名不能為空,請檢查相關參數設置!</sys:String>
<sys:String x:Key="MessageBoxShow_PleaseInstallSoftAtX64">請在x86_64系統中安裝</sys:String>
<sys:String x:Key="DisplayInstallInfo_BackTrojanConfig">備份Trojan配置文件......</sys:String>
<sys:String x:Key="DisplayInstallInfo_RestoreTrojanConfig">恢復Trojan配置文件......</sys:String>
<sys:String x:Key="DisplayInstallInfo_ExistedCaddy">"遠程主機已安裝Caddy,但不確定是否支持forward proxy是否強制重新安裝"</sys:String>
<sys:String x:Key="DisplayInstallInfo_RemoveCaddyOrRebuiled">請先行卸載Caddy或重裝VPS系統</sys:String>
<sys:String x:Key="DisplayInstallInfo_InstallRelySoft">正在安裝依賴的軟件......</sys:String>
<sys:String x:Key="DisplayInstallInfo_SoftInstalledOK">安裝完畢! OK</sys:String>
<sys:String x:Key="DisplayInstallInfo_StartCaddy">正在安裝Caddy.....</sys:String>
<sys:String x:Key="DisplayInstallInfo_UpgradeNaiveProxy">正在為NaiveProxy升級服務端</sys:String>
<sys:String x:Key="DisplayInstallInfo_UpgradeNaiveProxyOK">升級完畢OK</sys:String>
<sys:String x:Key="DisplayInstallInfo_OptimizeNetwork">正在優化網絡參數......</sys:String>
<sys:String x:Key="DisplayInstallInfo_OptimizeNetworkOK">優化網絡參數,OK!</sys:String>
<!--以下為Xray客戶端說明文件-->
<sys:String x:Key="readmeTxtXrayExplainLine01">此文件為Xay官方程序所使用的客戶端配置文件配置為全局模式socks5地址127.0.0.1:1080http代理地址127.0.0.1:1081</sys:String>
<sys:String x:Key="readmeTxtXrayExplainLine02">Xray官方網站https://github.com/XTLS/Xray-core</sys:String>
<sys:String x:Key="readmeTxtXrayExplainLine03">Xray官方程序下載地址https://github.com/XTLS/Xray-core/releases</sys:String>
<sys:String x:Key="readmeTxtXrayExplainLine04">下載相應版本Windows選擇xray-windows-64.zip或者xray-windows-32.zip解壓後提取xray.exe。與config.json放在同一目錄運行xray.exe即可。</sys:String>
<!--以下為V2Ray客戶端說明文件-->
<sys:String x:Key="readmeTxtV2RayExplainLine01">此文件為V2Ray官方程序所使用的客戶端配置文件配置為全局模式socks5地址127.0.0.1:1080http代理地址127.0.0.1:1081</sys:String>
<sys:String x:Key="readmeTxtV2RayExplainLine02">v2ray官方網站https://www.v2ray.com/</sys:String>
<sys:String x:Key="readmeTxtV2RayExplainLine03">v2ray官方程序下載地址https://github.com/v2ray/v2ray-core/releases</sys:String>
<sys:String x:Key="readmeTxtV2RayExplainLine04">下載相應版本Windows選擇v2ray-windows-64.zip或者v2ray-windows-32.zip解壓後提取v2ctl.exe和v2ray.exe。與config.json放在同一目錄運行v2ray.exe即可。</sys:String>
<sys:String x:Key="readmeTxtV2RayExplainLine05">此文件為v2rayN、Qv2ray、v2rayNG(Android)、Shadowrocket(ios)掃碼導入節點</sys:String>
<sys:String x:Key="readmeTxtV2RayExplainLine06">v2rayN下載網址https://github.com/2dust/v2rayN/releases</sys:String>
<sys:String x:Key="readmeTxtV2RayExplainLine07">Qv2ray下載網址https://github.com/Qv2ray/Qv2ray/releases</sys:String>
<sys:String x:Key="readmeTxtV2RayExplainLine08">v2rayNG(Android)下載網址https://github.com/2dust/v2rayNG/releases</sys:String>
<sys:String x:Key="readmeTxtV2RayExplainLine09">v2rayNG(Android)在Google Play下載網址https://play.google.com/store/apps/details?id=com.v2ray.ang</sys:String >
<sys:String x:Key="readmeTxtV2RayExplainLine10">Shadowrocket(ios)下載,需要使用國外區的AppleID。請自行谷歌方法。</sys:String>
<sys:String x:Key="readmeTxtV2RayExplainLine11">此文件為v2rayN、Qv2ray、v2rayNG(Android)、Shadowrocket(ios)複製粘貼導入節點的vmess網址</sys:String>
<sys:String x:Key="readmeTxtV2RayExplainLine12">服務器通用連接配置參數</sys:String>
<!--以下為Trojan-go客戶端說明文件-->
<sys:String x:Key="readmeTxtTrojan-goExplainLine01">此文件為Trojan-go官方程序所使用的客戶端配置文件配置為全局模式http與socks5地址127.0.0.1:1080</sys:String >
<sys:String x:Key="readmeTxtTrojan-goExplainLine02">Trojan-go官方網站https://github.com/p4gefau1t/trojan-go</sys:String>
<sys:String x:Key="readmeTxtTrojan-goExplainLine03">Trojan-go官方程序下載地址https://github.com/p4gefau1t/trojan-go/releases</sys:String>
<sys:String x:Key="readmeTxtTrojan-goExplainLine04">下載相應版本Windows選擇Trojan-go-x.xx-win.zip,解壓後提取trojan-go.exe。與config.json放在同一目錄運行trojan-go.exe即可。</sys:String>
<sys:String x:Key="readmeTxtTrojan-goExplainLine05">此文件為Qv2ray (windows)、igniterAndroid掃碼導入節點</sys:String>
<sys:String x:Key="readmeTxtTrojan-goExplainLine06">Qv2ray (windows)下載網址https://github.com/Qv2ray/Qv2ray/releases</sys:String>
<sys:String x:Key="readmeTxtTrojan-goExplainLine07">igniterAndroid下載網址https://github.com/trojan-gfw/igniter/releases</sys:String>
<sys:String x:Key="readmeTxtTrojan-goExplainLine08">Shadowrocket(ios)下載,需要使用國外區的AppleID。請自行谷歌方法。</sys:String>
<sys:String x:Key="readmeTxtTrojan-goExplainLine09">此文件為Qv2ray (windows)、igniterAndroid複製粘貼導入節點的網址</sys:String>
<sys:String x:Key="readmeTxtTrojan-goExplainLine10">服務器通用連接配置參數</sys:String>
<!--以下為Trojan客戶端說明文件-->
<sys:String x:Key="readmeTxtTrojanExplainLine01">此文件為Trojan官方程序所使用的客戶端配置文件配置為全局模式http與socks5地址127.0.0.1:1080</sys:String>
<sys:String x:Key="readmeTxtTrojanExplainLine02">Trojan官方網站https://trojan-gfw.github.io/trojan/</sys:String>
<sys:String x:Key="readmeTxtTrojanExplainLine03">Trojan官方程序下載地址https://github.com/trojan-gfw/trojan/releases</sys:String>
<sys:String x:Key="readmeTxtTrojanExplainLine04">下載相應版本Windows選擇Trojan-x.xx-win.zip,解壓後提取trojan.exe。與config.json放在同一目錄運行trojan.exe即可。</sys:String>
<sys:String x:Key="readmeTxtTrojanExplainLine05">此文件為Qv2ray (windows)、igniterAndroid、Shadowrocket(ios)掃碼導入節點</sys:String>
<sys:String x:Key="readmeTxtTrojanExplainLine06">Qv2ray (windows)下載網址https://github.com/Qv2ray/Qv2ray/releases</sys:String>
<sys:String x:Key="readmeTxtTrojanExplainLine07">igniterAndroid下載網址https://github.com/trojan-gfw/igniter/releases</sys:String>
<sys:String x:Key="readmeTxtTrojanExplainLine08">Shadowrocket(ios)下載,需要使用國外區的AppleID。請自行谷歌方法。</sys:String>
<sys:String x:Key="readmeTxtTrojanExplainLine09">此文件為Qv2ray (windows)、igniterAndroid、Shadowrocket(ios)複製粘貼導入節點的網址</sys:String>
<sys:String x:Key="readmeTxtTrojanExplainLine10">服務器通用連接配置參數</sys:String>
<!--以下為NaiveProxy客戶端說明文件-->
<sys:String x:Key="readmeTxtNaiveProxyExplainLine01">此文件為NaiveProxy官方程序所使用的客戶端配置文件配置為全局模式socks5地址127.0.0.1:1080</sys:String>
<sys:String x:Key="readmeTxtNaiveProxyExplainLine02">NaiveProxy官方網站https://github.com/klzgrad/naiveproxy</sys:String>
<sys:String x:Key="readmeTxtNaiveProxyExplainLine03">NaiveProxy官方程序下載地址https://github.com/klzgrad/naiveproxy/releases</sys:String>
<sys:String x:Key="readmeTxtNaiveProxyExplainLine04">下載相應版本Windows選擇naiveproxy-x.xx-win.zip,解壓後提取naive.exe。與config.json放在同一目錄運行naive.exe即可。</sys:String>
<sys:String x:Key="readmeTxtNaiveProxyExplainLine05">此文件為NaiveSharp(windows)複製粘貼導入節點的網址</sys:String>
<sys:String x:Key="readmeTxtNaiveProxyExplainLine06">NaiveSharp(windows)下載網址https://github.com/KevinZonda/NaiveSharp/releases</sys:String>
<sys:String x:Key="readmeTxtNaiveProxyExplainLine07">服務器通用連接配置參數</sys:String>
<!--以下為SSR+TLS+Caddy客戶端說明文件-->
<sys:String x:Key="readmeTxtSSRExplainLine05">此文件為ShadowsocksR (windows)、SSRRAndroid、Shadowrocket(ios)掃碼導入節點</sys:String>
<sys:String x:Key="readmeTxtSSRExplainLine06">ShadowsocksR (windows)下載網址https://github.com/shadowsocksrr/shadowsocksr-csharp/releases</sys:String>
<sys:String x:Key="readmeTxtSSRExplainLine07">SSRRAndroid下載網址https://github.com/shadowsocksrr/shadowsocksr-android/releases</sys:String>
<sys:String x:Key="readmeTxtSSRExplainLine08">Shadowrocket(ios)下載,需要使用國外區的AppleID。請自行谷歌方法。</sys:String>
<sys:String x:Key="readmeTxtSSRExplainLine09">此文件為ShadowsocksR (windows)、SSRRAndroid、Shadowrocket(ios)複製粘貼導入節點的網址</sys:String>
<sys:String x:Key="readmeTxtSSRExplainLine10">服務器通用連接配置參數</sys:String>
<!--以下為SS客戶端說明文件-->
<sys:String x:Key="readmeTxtExplainLineSS01">此文件為Shadowsocks (windows)掃碼導入節點</sys:String>
<sys:String x:Key="readmeTxtExplainLineSS02">此文件為Shadowsocks (windows)複製粘貼導入節點的網址</sys:String>
<sys:String x:Key="readmeTxtExplainLineSS05">此文件為shadowsocksAndroid、Shadowrocket(ios)掃碼導入節點</sys:String>
<sys:String x:Key="readmeTxtExplainLineSS06">Shadowsocks (windows)下載網址https://github.com/shadowsocks/shadowsocks-windows/releases</sys:String>
<sys:String x:Key="readmeTxtExplainLineSS07">shadowsocksAndroid下載網址https://github.com/shadowsocks/shadowsocks-android/releases</sys:String>
<sys:String x:Key="readmeTxtExplainLineSS08">Shadowrocket(ios)下載,需要使用國外區的AppleID。請自行谷歌方法。</sys:String>
<sys:String x:Key="readmeTxtExplainLineSS09">此文件為shadowsocksAndroid、Shadowrocket(ios)複製粘貼導入節點的網址</sys:String>
<sys:String x:Key="readmeTxtExplainLineSS10">服務器通用連接配置參數</sys:String>
<sys:String x:Key="readmeTxtPluginExplainSS">插件使用說明</sys:String>
<sys:String x:Key="readmeTxtPluginExplainSS01">ProxySU默認所有插件在Shadowsocks (windows)運行文件所在文件夾的子文件夾plugins下。</sys:String>
<sys:String x:Key="readmeTxtPluginExplainSS02">電腦端手動安裝插件說明</sys:String>
<sys:String x:Key="readmeTxtPluginExplainSS03">先下載插件各個插件Windows客戶端下載地址為</sys:String>
<sys:String x:Key="readmeTxtPluginExplainSS04">Simple-obfs: https://github.com/shadowsocks/simple-obfs/releases 只下載 obfs-local.zip</sys:String>
<sys:String x:Key="readmeTxtPluginExplainSS05">V2ray-plugin: https://github.com/shadowsocks/v2ray-plugin/releases 64位系統選擇v2ray-plugin-windows-amd64-vx.xxtar.gz ,32位系統選擇v2ray-plugin-windows-386-vx.xxtar.gz (x為數字是版本號)</sys:String>
<sys:String x:Key="readmeTxtPluginExplainSS06">Kcptun-plugin: https://github.com/shadowsocks/kcptun/releases 64位系統選擇kcptun-windows-amd64-xxxxxx.tar.gz,32位系統選擇kcptun-plugin-windows-386-xxxxxx.tar.gz (x為數字是版本號)</sys:String>
<sys:String x:Key="readmeTxtPluginExplainSS07">GoQuiet-plugin: https://github.com/cbeuw/GoQuiet/releases 64位系統選擇gq-client-windows-amd64-xxxexe,32位系統選擇 gq-client-windows-386-xxxexe(x為數字是版本號)</sys:String>
<sys:String x:Key="readmeTxtPluginExplainSS08">Cloak-plugin: https://github.com/cbeuw/Cloak/releases 64位系統選擇ck-client-windows-amd64-xxxexe,32位系統選擇 ck-client-windows-386-xxxexe(x為數字是版本號)</sys:String>
<sys:String x:Key="readmeTxtPluginExplainSS09">在Shadowsocks (windows)運行文件所在文件夾中新建文件夾plugins將obfs-local.zip解壓出的文件兩個全部複製到plugins中v2ray -plugin下載得到的文件解壓出的文件複製到plugins中並重命名為v2ray-plugin.exe。 Kcptun -plugin下載得到的文件解壓出兩個文件將其中的client_windows開頭的文件複製到plugins中並重命名為kcptun-client.exe。 GoQuiet-plugin下載得到的文件直接複製到plugin中並重命名為goquiet-client.exe。 Cloak-plugin下載得到的文件直接複製到plugin中並重命名為cloak-client.exe</sys:String>
<sys:String x:Key="readmeTxtPluginExplainSS10">安裝完畢</sys:String>
<sys:String x:Key="readmeTxtPluginExplainSSandroid02">手機安卓客戶端插件安裝說明</sys:String>
<sys:String x:Key="readmeTxtPluginExplainSSandroid03">先下載插件,各個插件安卓客戶端下載地址為:</sys:String>
<sys:String x:Key="readmeTxtPluginExplainSSandroid04">Simple-obfs: https://github.com/shadowsocks/simple-obfs-android/releases 只下載obfs-local-nightly-xxxapk(x為數字是版本號)</sys:String>
<sys:String x:Key="readmeTxtPluginExplainSSandroid05">V2ray-plugin: https://github.com/shadowsocks/v2ray-plugin-android/releases 一般選擇v2ray--universal-xxxapk(x為數字是版本號)</sys:String>
<sys:String x:Key="readmeTxtPluginExplainSSandroid06">Kcptun-plugin: https://github.com/shadowsocks/kcptun-android/releases 一般選擇kcptun--universal-xxxapk(x為數字是版本號)</sys:String>
<sys:String x:Key="readmeTxtPluginExplainSSandroid07">將上述apk文件傳到手機安裝即可</sys:String>
</ResourceDictionary>

View File

@ -1,131 +0,0 @@
<Window x:Class="ProxySU.TrojanGoTemplateWindow"
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="TrojanGoTemplateWindow" Height="450" Width="800">
<Window.Resources>
<Style BasedOn="{StaticResource {x:Type TextBox}}"
TargetType="TextBox"
x:Key="TitleText">
<Style.Triggers>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="Text" Value=""/>
<Condition Property="TextBox.IsFocused" Value="false"/>
</MultiTrigger.Conditions>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate>
<Border BorderThickness="1" BorderBrush="Gray" Margin="0">
<TextBlock x:Name="MainTextBlock" Text="{TemplateBinding TextBox.Tag}" Width="{TemplateBinding TextBox.ActualWidth}" Foreground="Gray" VerticalAlignment="Center" HorizontalAlignment="Left"/>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</MultiTrigger>
</Style.Triggers>
</Style>
</Window.Resources>
<Grid>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition></ColumnDefinition>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="0.7*"></RowDefinition>
<RowDefinition></RowDefinition>
</Grid.RowDefinitions>
<GroupBox Header="{DynamicResource GroupBoxHeaderTrojanGoTemplates}" Grid.Row="0">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="0.6*"></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition Width="0.5*"></ColumnDefinition>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
</Grid.RowDefinitions>
<RadioButton x:Name="RadioButtonTrojanGoTLS2Web" Content="Trojan-Go+TLS+Web" Grid.Column="0" Grid.Row="1" Checked="RadioButtonTrojanTLS2Web_Checked"></RadioButton>
<TextBlock Text="{DynamicResource TextBlockTrojanGoTLSwebPlan}" TextWrapping="Wrap" 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>
<TextBlock Text="{DynamicResource TextBlockTrojanGoWebSocketTLSwebPlan}" TextWrapping="Wrap" Grid.Column="1" Grid.ColumnSpan="2" Grid.Row="2"></TextBlock>
</Grid>
</GroupBox>
<GroupBox Header="{DynamicResource GroupBoxHeaderParameterTrojanGo}" Grid.Row="1">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="0.3*"></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition Width="0.3*"></ColumnDefinition>
<ColumnDefinition Width="0.5*"></ColumnDefinition>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
</Grid.RowDefinitions>
<TextBlock x:Name="TextBlockDomain" Text="{DynamicResource TextBlockTrojanGoDomain}" Grid.Column="0" Grid.Row="0" Margin="5" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
<TextBox x:Name="TextBoxDomain" Style="{StaticResource TitleText}" Tag="{DynamicResource TextBoxDomainPrompt}" Grid.Column="1" Grid.Row="0" Margin="5"></TextBox>
<TextBlock Text="{DynamicResource TextBlockTrojanGoPort}" Grid.Column="2" Grid.Row="0" Margin="5" HorizontalAlignment="Center" VerticalAlignment="Center"></TextBlock>
<!--<Button x:Name="ButtonDomain" Content="检测" Visibility="Collapsed" Grid.Column="2" Grid.Row="0" Margin="2" Click="ButtonDomain_Click"></Button>-->
<!--<TextBlock x:Name="TextBlockServerListenPort" Text="服务端口:" Grid.Column="0" Grid.Row="1"></TextBlock>
<TextBox x:Name="TextBoxServerListenPort" Grid.Column="1" Grid.Row="1" Margin="3"></TextBox>
<Button x:Name="ButtonServerListenPort" Content="随机选择" Grid.Column="2" Grid.Row="1" Margin="2" Click="ButtonServerListenPort_Click"></Button>-->
<TextBlock x:Name="TextBlockNewUUID" Text="{DynamicResource TextBlockTrojanGoPassword}" Grid.Column="0" Grid.Row="1" HorizontalAlignment="Right" VerticalAlignment="Center" ></TextBlock>
<TextBox x:Name="TextBoxNewUUID" Grid.Column="1" Grid.Row="1" Margin="5"></TextBox>
<Button x:Name="ButtonNewUUID" Content="{DynamicResource ButtonTrojanChangePassword}" Grid.Column="2" Grid.Row="1" Margin="3" Click="ButtonNewUUID_Click"></Button>
<TextBlock Text="{DynamicResource TextBlockTrojanGoPasswordExplain}" TextWrapping="Wrap" Grid.Column="3" Grid.Row="1" VerticalAlignment="Center" HorizontalAlignment="Center"></TextBlock>
<TextBlock x:Name="TextBlockPath" Text="{DynamicResource TextBlockTrojanGoWebSocketPath}" Grid.Column="0" Grid.Row="2" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
<TextBox x:Name="TextBoxPath" Grid.Column="1" Grid.Row="2" Grid.ColumnSpan="1" Margin="5"></TextBox>
<Button x:Name="ButtonPath" Content="{DynamicResource ButtonNaiveProxyChangeUser}" Grid.Column="2" Grid.Row="2" Margin="2" Click="ButtonPath_Click"></Button>
<CheckBox x:Name="CheckBoxMuxSelect" Content="{DynamicResource CheckBoxMuxSelect}" Grid.Column="0" Grid.Row="3" HorizontalAlignment="Center" VerticalAlignment="Center" Checked="CheckBoxMuxSelect_Checked" Unchecked="CheckBoxMuxSelect_Unchecked"></CheckBox>
<Grid x:Name="GridTrojanGoMuxSelected" Grid.Column="1" Grid.Row="3">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="90"></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition Width="90"></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
</Grid.ColumnDefinitions>
<TextBlock Text="concurrency:" Grid.Column="0" Margin="5" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
<TextBox x:Name="TextBoxConcurrency" Text="8" Grid.Column="1" Margin="5"/>
<TextBlock Text="idle_timeout:" Grid.Column="2" Margin="5" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
<TextBox x:Name="TextBoxIdle_timeout" Text="60" Grid.Column="3" Margin="5"/>
<TextBlock Grid.Column="4" Text="s" HorizontalAlignment="Left" VerticalAlignment="Center"></TextBlock>
</Grid>
<TextBlock x:Name="TextBlockExplainCheckBoxMuxSelect" Text="{DynamicResource TextBlockExplainCheckBoxMuxSelect}" TextWrapping="Wrap" Grid.Column="2" Grid.Row="3" Grid.ColumnSpan="2" Grid.RowSpan="2"></TextBlock>
<TextBlock x:Name="TextBlockMaskSites" Text="{DynamicResource TextBlockV2RayMaskSites}" Grid.Column="0" Grid.Row="4" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
<TextBox x:Name="TextBoxMaskSites" Style="{StaticResource TitleText}" Tag="{DynamicResource TextBoxV2RayMaskSitesTag}" ToolTip="{DynamicResource TextBoxV2RayMaskSitesToolTip}" Grid.Column="1" Grid.Row="4" Margin="5"></TextBox>
<Grid Grid.Column="0" Grid.Row="6" Grid.ColumnSpan="4">
<Grid.ColumnDefinitions>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
</Grid.ColumnDefinitions>
<Button x:Name="ButtondDecide" Content="{DynamicResource ButtonTrojanGoTemplateOK}" Grid.Column="1" Margin="3" Click="ButtondDecide_Click"></Button>
<Button x:Name="ButtondCancel" Content="{DynamicResource ButtonTrojanGoTemplateCancel}" Grid.Column="3" Margin="3" Click="ButtondCancel_Click"></Button>
</Grid>
</Grid>
</GroupBox>
</Grid>
</Grid>
</Window>

View File

@ -1,194 +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;
namespace ProxySU
{
/// <summary>
/// TrojanGoTemplateWindow.xaml 的交互逻辑
/// </summary>
public partial class TrojanGoTemplateWindow : Window
{
public TrojanGoTemplateWindow()
{
InitializeComponent();
RadioButtonTrojanGoTLS2Web.IsChecked = true;
CheckBoxMuxSelect.IsChecked = false;
GridTrojanGoMuxSelected.Visibility = Visibility.Collapsed;
TextBlockExplainCheckBoxMuxSelect.Visibility = Visibility.Collapsed;
}
private void ButtondDecide_Click(object sender, RoutedEventArgs e)
{
bool preDomainMask = ClassModel.PreDomainMask(TextBoxMaskSites.Text);
bool domainNotEmpty = ClassModel.TestDomainIsEmpty(TextBoxDomain.Text);
//if (string.IsNullOrEmpty(PreTrim(TextBoxDomain.Text)) == true)
//{
// //****** "域名不能为空,请检查相关参数设置!" ******
// MessageBox.Show(Application.Current.FindResource("MessageBoxShow_DomainNotEmpty").ToString());
// return;
//}
//传递域名
MainWindow.ReceiveConfigurationParameters[4] = PreTrim(TextBoxDomain.Text);
//传递伪装网站
MainWindow.ReceiveConfigurationParameters[7] = ClassModel.DisguiseURLprocessing(PreTrim(TextBoxMaskSites.Text));
//传递服务端口
MainWindow.ReceiveConfigurationParameters[1] = "443";
//传递密码(uuid)
MainWindow.ReceiveConfigurationParameters[2] = PreTrim(TextBoxNewUUID.Text);
if (RadioButtonTrojanGoTLS2Web.IsChecked == true)
{
//传递模板类型
MainWindow.ReceiveConfigurationParameters[0] = "TrojanGoTLS2Web";
//传递方案名称
MainWindow.ReceiveConfigurationParameters[8] = RadioButtonTrojanGoTLS2Web.Content.ToString();
}
else if (RadioButtonTrojanGoWebSocketTLS2Web.IsChecked == true)
{
//传递模板类型
MainWindow.ReceiveConfigurationParameters[0] = "TrojanGoWebSocketTLS2Web";
//传递方案名称
MainWindow.ReceiveConfigurationParameters[8] = RadioButtonTrojanGoWebSocketTLS2Web.Content.ToString();
//传递路径
MainWindow.ReceiveConfigurationParameters[6] = PreTrim(TextBoxPath.Text);
}
//传递Mux的concurrency与idle_timeout
if (CheckBoxMuxSelect.IsChecked == true)
{
MainWindow.ReceiveConfigurationParameters[9] = "true";
MainWindow.ReceiveConfigurationParameters[3] = PreTrim(TextBoxConcurrency.Text);
MainWindow.ReceiveConfigurationParameters[5] = PreTrim(TextBoxIdle_timeout.Text);
}
if (domainNotEmpty == true && preDomainMask == true)
{
this.Close();
}
}
//更新密码
private void ButtonNewUUID_Click(object sender, RoutedEventArgs e)
{
//Guid uuid = Guid.NewGuid();
TextBoxNewUUID.Text = GenerateRandomUUID();
}
//更新路径
private void ButtonPath_Click(object sender, RoutedEventArgs e)
{
string path = GenerateRandomPath();
TextBoxPath.Text = $"/{path}";
//MessageBox.Show(path);
}
//private void ButtonServerListenPort_Click(object sender, RoutedEventArgs e)
//{
// TextBoxServerListenPort.Text = GetRandomPort();
//}
private void ButtondCancel_Click(object sender, RoutedEventArgs e) => Close();
private void RadioButtonTrojanTLS2Web_Checked(object sender, RoutedEventArgs e)
{
Guid uuid = Guid.NewGuid();
TextBoxNewUUID.Text = uuid.ToString();
TextBlockPath.Visibility = Visibility.Collapsed;
TextBoxPath.Visibility = Visibility.Collapsed;
ButtonPath.Visibility = Visibility.Collapsed;
//Random random = new Random();
//int randomServerPort = random.Next(10000, 50000);
//TextBoxServerListenPort.Text = "443";
}
private void RadioButtonTrojanGoWebSocketTLS2Web_Checked(object sender, RoutedEventArgs e)
{
Guid uuid = Guid.NewGuid();
TextBoxNewUUID.Text = uuid.ToString();
TextBlockPath.Visibility = Visibility.Visible;
TextBoxPath.Visibility = Visibility.Visible;
ButtonPath.Visibility = Visibility.Visible;
TextBoxPath.Text = "/trojan";
}
//生成随机UUID
private string GenerateRandomUUID()
{
Guid uuid = Guid.NewGuid();
return uuid.ToString();
}
//生成随机端口
private int GetRandomPort()
{
Random random = new Random();
return random.Next(10001, 60000);
}
//生成随机Path
private string GenerateRandomPath()
{
Random random = new Random();
int randomSerialNum = random.Next(0, 4);
//Guid uuid = Guid.NewGuid();
string uuid = GenerateRandomUUID();
string[] pathArray = uuid.Split('-');
string path = pathArray[randomSerialNum];
return path;
}
//域名检测是否为空
//private bool TestDomainIsEmpty()
//{
// if (string.IsNullOrEmpty(PreTrim(TextBoxDomain.Text)) == true)
// {
// //****** "域名不能为空,请检查相关参数设置!" ******
// MessageBox.Show(Application.Current.FindResource("MessageBoxShow_DomainNotEmpty").ToString());
// return false;
// }
// else
// {
// return true;
// }
//}
private void CheckBoxMuxSelect_Checked(object sender, RoutedEventArgs e)
{
GridTrojanGoMuxSelected.Visibility = Visibility.Visible;
TextBlockExplainCheckBoxMuxSelect.Visibility = Visibility.Visible;
}
private void CheckBoxMuxSelect_Unchecked(object sender, RoutedEventArgs e)
{
GridTrojanGoMuxSelected.Visibility = Visibility.Collapsed;
TextBlockExplainCheckBoxMuxSelect.Visibility = Visibility.Collapsed;
}
//TextBox输入内容做预处理
private string PreTrim(string preString)
{
return preString.Trim();
}
//处理伪装网站域名中的前缀
//private string DisguiseURLprocessing(string fakeUrl)
//{
//var uri = new Uri(fakeUrl);
//return uri.Host;
//if (fakeUrl.Length >= 7)
//{
// string testDomainMask = fakeUrl.Substring(0, 7);
// if (String.Equals(testDomainMask, "https:/") || String.Equals(testDomainMask, "http://"))
// {
// string[] tmpUrl = fakeUrl.Split('/');
// fakeUrl = tmpUrl[2];
// }
//}
//return fakeUrl;
// }
}
}

View File

@ -1,390 +0,0 @@
<Window x:Name="TemplateConfiguration" x:Class="ProxySU.WindowTemplateConfiguration"
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="V2RayTemplateConfiguration" Height="600" Width="950">
<Window.Resources>
<Style BasedOn="{StaticResource {x:Type TextBox}}"
TargetType="TextBox"
x:Key="TitleText">
<Style.Triggers>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="Text" Value=""/>
<Condition Property="TextBox.IsFocused" Value="false"/>
</MultiTrigger.Conditions>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate>
<Border BorderThickness="1" BorderBrush="Gray" Margin="0">
<TextBlock x:Name="MainTextBlock" Text="{TemplateBinding TextBox.Tag}" Width="{TemplateBinding TextBox.ActualWidth}" Foreground="Gray" VerticalAlignment="Center" HorizontalAlignment="Left"/>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</MultiTrigger>
</Style.Triggers>
</Style>
</Window.Resources>
<Grid>
<Grid.RowDefinitions>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
</Grid.RowDefinitions>
<GroupBox Header="{DynamicResource GroupBoxHeaderV2RayTemplates}" Grid.Row="0" Grid.RowSpan="3">
<Grid>
<TabControl x:Name="TabControlTemplate">
<TabItem Header="{DynamicResource TabItemHeaderV2RayHotPlan}" Width="100" Height="30">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="0.8*"></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition Width="0.3*"></ColumnDefinition>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="0.2*"></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
</Grid.RowDefinitions>
<RadioButton x:Name="RadioButtonWebSocketTLS2WebHot" Content="WebSocket+TLS+Web" GroupName="TemplateGroup" Grid.Column="0" Grid.Row="1" Checked="RadioButtonWebSocketTLS2Web_Checked" HorizontalAlignment="Left" VerticalAlignment="Center"></RadioButton>
<TextBlock Text="{DynamicResource TextBlockV2RayWebSocketTlsWebExplain}" TextWrapping="Wrap" Grid.Column="1" Grid.Row="1" Grid.ColumnSpan="3" VerticalAlignment="Center" HorizontalAlignment="Left"></TextBlock>
<RadioButton x:Name="RadioButtonHTTP2WebHot" Content="HTTP2+TLS+Web" GroupName="TemplateGroup" Grid.Column="0" Grid.Row="2" Checked="RadioButtonWebSocketTLS2Web_Checked" HorizontalAlignment="Left" VerticalAlignment="Center"></RadioButton>
<TextBlock Text="{DynamicResource TextBlockV2RayHttp2TlsWebExplain}" TextWrapping="Wrap" Grid.Column="1" Grid.Row="2" Grid.ColumnSpan="3" VerticalAlignment="Center" HorizontalAlignment="Left"></TextBlock>
</Grid>
</TabItem>
<TabItem Header="{DynamicResource TabItemHeaderV2RayEarlyPlan}" Width="100" Height="30">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="10"></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition Width="10"></ColumnDefinition>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="10"></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition Height="0.4*"></RowDefinition>
<RowDefinition Height="10"></RowDefinition>
</Grid.RowDefinitions>
<Grid Grid.Column="1" Grid.Row="1">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="0.2*"></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
</Grid.RowDefinitions>
<TextBlock Text="{DynamicResource TextBlockVlessVmessXtlsTcpWebSocketExplainHot5}" TextWrapping="Wrap" Grid.Column="0" Grid.Row="0" Grid.ColumnSpan="2" VerticalAlignment="Center" HorizontalAlignment="Left"></TextBlock>
<TextBlock Text="1. VLESS over TCP with XTLS(direct)" Grid.Column="1" Grid.Row="1" VerticalAlignment="Bottom" Visibility="Collapsed"></TextBlock>
<TextBlock Text="1. VLESS over TCP with TLS" Grid.Column="1" Grid.Row="2" VerticalAlignment="Bottom"></TextBlock>
<TextBlock Text="2. VLESS over WS with TLS" Grid.Column="1" Grid.Row="3" VerticalAlignment="Bottom"></TextBlock>
<TextBlock Text="3. VMess over TCP with TLS (Not Recommended)" Grid.Column="1" Grid.Row="4" VerticalAlignment="Bottom"></TextBlock>
<TextBlock Text="4. VMess over WS with TLS" Grid.Column="1" Grid.Row="5" VerticalAlignment="Bottom"></TextBlock>
<TextBlock Text="5. Trojan over TCP with TLS" Grid.Column="1" Grid.Row="6" VerticalAlignment="Bottom"></TextBlock>
</Grid>
<RadioButton x:Name="RadioButtonVlessVmessXtlsTcpWebSocketHot" Content="VLESS+VMESS+Trojan+TCP+WebSocket+Web" GroupName="TemplateGroup" Grid.Column="1" Grid.Row="2" Grid.ColumnSpan="2" Checked="RadioButtonVlessVmessXtlsTcpWebSocketHot_Checked" HorizontalAlignment="Left" VerticalAlignment="Center"></RadioButton>
<!--<Grid Grid.Column="0" Grid.Row="2">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="0.15*"></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
</Grid.ColumnDefinitions>
<TextBlock x:Name="TextBlockVlessVmessXtlsTcpWebSocket" Text="VLESS+VMESS+XTLS+TCP+WebSocket+Web" TextWrapping="Wrap" Margin="0,0,8,0" Grid.Column="1" VerticalAlignment="Center" HorizontalAlignment="Left" MouseDown="TextBlockVlessVmessXtlsTcpWebSocket_MouseDown"></TextBlock>
</Grid>-->
</Grid>
</TabItem>
<TabItem Header="{DynamicResource TabItemHeaderV2RayVlessProtocol}" Width="100" Height="30">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="1.2*"></RowDefinition>
<RowDefinition Height="1.2*"></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition Height="3"></RowDefinition>
</Grid.RowDefinitions>
<TextBlock Text="{DynamicResource TextBlockVlessExplain}" TextWrapping="Wrap" Grid.Column="0" Grid.Row="0" Grid.ColumnSpan="4" Margin="5,3,5,0"></TextBlock>
<RadioButton x:Name="RadioButtonVlessXtlsTcp" Content="VLESS+TCP+XTLS(direct)+Web" GroupName="TemplateGroup" Grid.Column="0" Grid.Row="1" Checked="RadioButtonVlessTcpTlsWeb_Checked" VerticalAlignment="Center" HorizontalAlignment="Left" Visibility="Collapsed"></RadioButton>
<TextBlock Text="{DynamicResource TextBlockVlessXtlsTcpExplain}" TextWrapping="Wrap" Grid.Column="1" Grid.Row="1" Grid.ColumnSpan="3" Margin="0,0,5,0" VerticalAlignment="Center" HorizontalAlignment="Left" Visibility="Collapsed"></TextBlock>
<RadioButton x:Name="RadioButtonVlessTcpTlsWeb" Content="VLESS+TCP+TLS+Web" GroupName="TemplateGroup" Grid.Column="0" Grid.Row="2" VerticalAlignment="Center" HorizontalAlignment="Left" Checked="RadioButtonVlessTcpTlsWeb_Checked" ></RadioButton>
<TextBlock Text="{DynamicResource TextBlockV2RayVlessTcpTlsWebExplain}" TextWrapping="Wrap" Grid.Column="1" Grid.Row="2" Grid.ColumnSpan="3" Margin="0,0,5,0" VerticalAlignment="Center" HorizontalAlignment="Left"></TextBlock>
<RadioButton x:Name="RadioButtonVlessWebSocketTlsWeb" Content="VLESS+WebSocket+TLS+Web" GroupName="TemplateGroup" Grid.Column="0" Grid.Row="3" Checked="RadioButtonWebSocketTLS2Web_Checked" VerticalAlignment="Center" HorizontalAlignment="Left" />
<TextBlock Text="{DynamicResource TextBlockVlessWebSocketTlsWebExplain}" TextWrapping="Wrap" Grid.Column="1" Grid.Row="3" Margin="0,0,8,0" Grid.ColumnSpan="3" VerticalAlignment="Center" HorizontalAlignment="Left"></TextBlock>
<RadioButton x:Name="RadioButtonVlessHttp2Web" Content="VLESS+http2+TLS+Web" GroupName="TemplateGroup" Grid.Column="0" Grid.Row="4" Checked="RadioButtonWebSocketTLS2Web_Checked" VerticalAlignment="Center" HorizontalAlignment="Left"></RadioButton>
<TextBlock Text="{DynamicResource TextBlockVlessHttp2WebExplain}" TextWrapping="Wrap" Grid.Column="1" Grid.Row="4" Grid.ColumnSpan="3" Margin="0,0,5,0" HorizontalAlignment="Left" VerticalAlignment="Center"></TextBlock>
</Grid>
</TabItem>
<TabItem Header="{DynamicResource TabItemHeaderV2RayTcpProtocol}" Width="110" Height="30">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition Height="1.3*"></RowDefinition>
<RowDefinition Height="1.7*"></RowDefinition>
<RowDefinition></RowDefinition>
</Grid.RowDefinitions>
<RadioButton x:Name="RadioButtonTCP" Content="TCP" GroupName="TemplateGroup" Grid.Column="0" Grid.Row="1" Checked="RadioButtonTCP_Checked" VerticalAlignment="Center" HorizontalAlignment="Left"></RadioButton>
<TextBlock Text="{DynamicResource TextBlockV2RayTcpExplain}" Grid.Column="1" Grid.Row="1" Grid.ColumnSpan="3" HorizontalAlignment="Left" VerticalAlignment="Center"></TextBlock>
<RadioButton x:Name="RadioButtonTCPhttp" Content="{DynamicResource RadioButtonV2RayTcpHttp}" GroupName="TemplateGroup" Grid.Column="0" Grid.Row="2" Checked="RadioButtonTCPhttp_Checked" VerticalAlignment="Center" HorizontalAlignment="Left" ></RadioButton>
<TextBlock Text="{DynamicResource TextBlockV2RayTcpHttpExplain}" TextWrapping="Wrap" Grid.Column="1" Grid.Row="2" Grid.ColumnSpan="3" VerticalAlignment="Center" HorizontalAlignment="Left"></TextBlock>
<RadioButton x:Name="RadioButtonTCP2TLS" Content="TCP+TLS" GroupName="TemplateGroup" Grid.Column="0" Grid.Row="3" Checked="RadioButtonTCP2TLS_Checked" VerticalAlignment="Center" HorizontalAlignment="Left" />
<TextBlock Text="{DynamicResource TextBlockV2RayTcpTlsExplain}" TextWrapping="Wrap" Grid.Column="1" Grid.Row="3" Grid.ColumnSpan="3" VerticalAlignment="Center" HorizontalAlignment="Left"></TextBlock>
<RadioButton x:Name="RadioButtonTcpTLS2SelfSigned" Content="{DynamicResource RadioButtonV2RayTcpTlsSelfSigned}" GroupName="TemplateGroup" Grid.Column="0" Grid.Row="4" Checked="RadioButtonTCP2TLSnoDomain_Checked" VerticalAlignment="Center" HorizontalAlignment="Left" />
<TextBlock Text="{DynamicResource TextBlockV2RayTcpTlsSelfSignedExplain}" TextWrapping="Wrap" Grid.Column="1" Grid.Row="4" Grid.ColumnSpan="3" VerticalAlignment="Center" HorizontalAlignment="Left"></TextBlock>
<TextBlock Text="{DynamicResource TextBlockV2RaySelfSignedShadowrocketExplain}" TextWrapping="Wrap" Grid.Column="4" Grid.Row="4" HorizontalAlignment="Left" VerticalAlignment="Center" ></TextBlock>
</Grid>
</TabItem>
<TabItem Header="{DynamicResource TabItemHeaderV2RayWebSocketProtocol}" Width="150" Height="30">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="1.5*"></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition Height="1.3*"></RowDefinition>
<RowDefinition Height="1.3*"></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
</Grid.RowDefinitions>
<RadioButton x:Name="RadioButtonWebSocket" Content="WebSocket" GroupName="TemplateGroup" Grid.Column="0" Grid.Row="1" Checked="RadioButtonTCP_Checked" HorizontalAlignment="Left" VerticalAlignment="Center"/>
<TextBlock Text="{DynamicResource TextBlockV2RayWebSocketExplain}" TextWrapping="Wrap" Grid.Column="1" Grid.Row="1" Grid.ColumnSpan="3" HorizontalAlignment="Left" VerticalAlignment="Center"></TextBlock>
<RadioButton x:Name="RadioButtonWebSocketTLS" Content="WebSocket+TLS" GroupName="TemplateGroup" Grid.Column="0" Grid.Row="2" Checked="RadioButtonHTTP2_Checked" HorizontalAlignment="Left" VerticalAlignment="Center"/>
<TextBlock Text="{DynamicResource TextBlockV2RayWebSocketTlsExplain}" TextWrapping="Wrap" Grid.Column="1" Grid.Row="2" Grid.ColumnSpan="3" HorizontalAlignment="Left" VerticalAlignment="Center"></TextBlock>
<RadioButton x:Name="RadioButtonWebSocketTLS2Web" Content="WebSocket+TLS+Web" GroupName="TemplateGroup" Grid.Column="0" Grid.Row="3" Checked="RadioButtonWebSocketTLS2Web_Checked" HorizontalAlignment="Left" VerticalAlignment="Center"></RadioButton>
<TextBlock Text="{DynamicResource TextBlockV2RayWebSocketTlsWebExplain}" TextWrapping="Wrap" Grid.Column="1" Grid.Row="3" Grid.ColumnSpan="3" HorizontalAlignment="Left" VerticalAlignment="Center"></TextBlock>
<RadioButton x:Name="RadioButtonWebSocketTLSselfSigned" Content="{DynamicResource RadioButtonV2RayWebSocketTlsSelfSigned}" GroupName="TemplateGroup" Grid.Column="0" Grid.Row="4" Checked="RadioButtonWebSocketTLSselfSigned_Checked" HorizontalAlignment="Left" VerticalAlignment="Center"></RadioButton>
<TextBlock Text="{DynamicResource TextBlockV2RayWebSocketTlsSelfSignedExplain}" TextWrapping="Wrap" Grid.Column="1" Grid.Row="4" Grid.ColumnSpan="3" HorizontalAlignment="Left" VerticalAlignment="Center"></TextBlock>
<TextBlock Text="{DynamicResource TextBlockV2RaySelfSignedShadowrocketExplain}" TextWrapping="Wrap" Grid.Column="4" Grid.Row="4" HorizontalAlignment="Left" VerticalAlignment="Center" ></TextBlock>
</Grid>
</TabItem>
<TabItem Header="{DynamicResource TabItemHeaderV2RayHttp2Protocol}" Width="110" Height="30">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="1*"></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition Height="1.8*"></RowDefinition>
<RowDefinition Height="1.5*"></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
</Grid.RowDefinitions>
<RadioButton x:Name="RadioButtonHTTP2" Content="HTTP2" GroupName="TemplateGroup" Grid.Column="0" Grid.Row="1" Checked="RadioButtonHTTP2_Checked" HorizontalAlignment="Left" VerticalAlignment="Center"></RadioButton>
<TextBlock Text="{DynamicResource TextBlockV2RayHttp2Explain}" TextWrapping="Wrap" Grid.Column="1" Grid.Row="1" Grid.ColumnSpan="3" HorizontalAlignment="Left" VerticalAlignment="Center"></TextBlock>
<RadioButton x:Name="RadioButtonHTTP2Web" Content="HTTP2+TLS+Web" GroupName="TemplateGroup" Grid.Column="0" Grid.Row="2" Checked="RadioButtonWebSocketTLS2Web_Checked" HorizontalAlignment="Left" VerticalAlignment="Center"></RadioButton>
<TextBlock Text="{DynamicResource TextBlockV2RayHttp2TlsWebExplain}" TextWrapping="Wrap" Grid.Column="1" Grid.Row="2" Grid.ColumnSpan="3" HorizontalAlignment="Left" VerticalAlignment="Center"></TextBlock>
<RadioButton x:Name="RadioButtonHTTP2selfSigned" Content="{DynamicResource RadioButtonV2RayHttp2SelfSigned}" GroupName="TemplateGroup" Grid.Column="0" Grid.Row="3" Checked="RadioButtonWebSocketTLSselfSigned_Checked" HorizontalAlignment="Left" VerticalAlignment="Center"></RadioButton>
<TextBlock Text="{DynamicResource TextBlockV2RayHttp2SelfSignedExplain}" TextWrapping="Wrap" Grid.Column="1" Grid.Row="3" Grid.ColumnSpan="3" HorizontalAlignment="Left" VerticalAlignment="Center"></TextBlock>
<TextBlock Text="{DynamicResource TextBlockV2RaySelfSignedShadowrocketExplain}" TextWrapping="Wrap" Grid.Column="4" Grid.Row="3" ></TextBlock>
</Grid>
</TabItem>
<TabItem Header="{DynamicResource TabItemHeaderV2RayMkcpProtocol}" Width="110" Height="30">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<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>
</Grid.RowDefinitions>
<Grid Grid.Column="1" Grid.ColumnSpan="2">
<Grid.ColumnDefinitions>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
</Grid.ColumnDefinitions>
<RadioButton x:Name="RadioButtonVMESSmKCP" Content="VMESS" Grid.Column="0" HorizontalAlignment="Center" VerticalAlignment="Center"></RadioButton>
<RadioButton x:Name="RadioButtonVLESSmKCP" Content="VLESS" Grid.Column="1" HorizontalAlignment="Center" VerticalAlignment="Center"></RadioButton>
</Grid>
<RadioButton x:Name="RadioButtonMkcpNone" Content="{DynamicResource RadioButtonV2RayMkcpNone}" GroupName="TemplateGroup" Grid.Column="0" Grid.Row="1" Checked="RadioButtonMkcp_Checked" HorizontalAlignment="Left" VerticalAlignment="Center"></RadioButton>
<TextBlock Text="{DynamicResource TextBlockV2RayMkcpNoneExplain}" TextWrapping="Wrap" Grid.Column="1" Grid.Row="1" Grid.ColumnSpan="3" HorizontalAlignment="Left" VerticalAlignment="Center"></TextBlock>
<RadioButton x:Name="RadioButton2mKCP2SRTP" Content="mKCP+SRTP" GroupName="TemplateGroup" Grid.Column="0" Grid.Row="2" Checked="RadioButtonMkcp_Checked" HorizontalAlignment="Left" VerticalAlignment="Center"></RadioButton>
<TextBlock Text="{DynamicResource TextBlockV2RayMkcpSRTPExplain}" TextWrapping="Wrap" Grid.Column="1" Grid.Row="2" Grid.ColumnSpan="3" HorizontalAlignment="Left" VerticalAlignment="Center"></TextBlock>
<RadioButton x:Name="RadioButton2mKCPuTP" Content="mKCP+uTP" GroupName="TemplateGroup" Grid.Column="0" Grid.Row="3" Checked="RadioButtonMkcp_Checked" HorizontalAlignment="Left" VerticalAlignment="Center"></RadioButton>
<TextBlock Text="{DynamicResource TextBlockV2RayMkcpuTPExplain}" TextWrapping="Wrap" Grid.Column="1" Grid.Row="3" Grid.ColumnSpan="3" HorizontalAlignment="Left" VerticalAlignment="Center"></TextBlock>
<RadioButton x:Name="RadioButton2mKCP2WechatVideo" Content="mKCP+WechatVideo" GroupName="TemplateGroup" Grid.Column="0" Grid.Row="4" Checked="RadioButtonMkcp_Checked" HorizontalAlignment="Left" VerticalAlignment="Center"></RadioButton>
<TextBlock Text="{DynamicResource TextBlockV2RayMkcpWeChatExplain}" TextWrapping="Wrap" Grid.Column="1" Grid.Row="4" Grid.ColumnSpan="3" HorizontalAlignment="Left" VerticalAlignment="Center"></TextBlock>
<RadioButton x:Name="RadioButton2mKCP2DTLS" Content="mKCP+DTLS 1.2" GroupName="TemplateGroup" Grid.Column="0" Grid.Row="5" Checked="RadioButtonMkcp_Checked" HorizontalAlignment="Left" VerticalAlignment="Center"></RadioButton>
<TextBlock Text="{DynamicResource TextBlockV2RayMkcpDTLSExplain}" TextWrapping="Wrap" Grid.Column="1" Grid.Row="5" Grid.ColumnSpan="3" HorizontalAlignment="Left" VerticalAlignment="Center"></TextBlock>
<RadioButton x:Name="RadioButton2mKCP2WireGuard" Content="mKCP+WireGuard" GroupName="TemplateGroup" Grid.Column="0" Grid.Row="6" Checked="RadioButtonMkcp_Checked" HorizontalAlignment="Left" VerticalAlignment="Center"></RadioButton>
<TextBlock Text="{DynamicResource TextBlockV2RayMkcpWireGuardExplain}" TextWrapping="Wrap" Grid.Column="1" Grid.Row="6" Grid.ColumnSpan="3" HorizontalAlignment="Left" VerticalAlignment="Center"></TextBlock>
</Grid>
</TabItem>
<TabItem Header="{DynamicResource TabItemHeaderV2RayQuicProtocol}" Width="110" Height="30">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<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>
</Grid.RowDefinitions>
<TextBlock Text="{DynamicResource TextBlockV2RayQuicShadowrocketExplain}" Foreground="Red" Grid.Column="0" Grid.Row="0" Grid.ColumnSpan="5" HorizontalAlignment="Left" VerticalAlignment="Center"></TextBlock>
<RadioButton x:Name="RadioButtonQuicNone" Content="{DynamicResource RadioButtonV2RayQuicNone}" GroupName="TemplateGroup" Grid.Column="0" Grid.Row="1" Checked="RadioButtonQuicNone_Checked" HorizontalAlignment="Left" VerticalAlignment="Center"></RadioButton>
<TextBlock Text="{DynamicResource TextBlockV2RayQuicNoneExplain}" TextWrapping="Wrap" Grid.Column="1" Grid.Row="1" Grid.ColumnSpan="3" HorizontalAlignment="Left" VerticalAlignment="Center"></TextBlock>
<RadioButton x:Name="RadioButtonQuicSRTP" Content="QUIC+SRTP" GroupName="TemplateGroup" Grid.Column="0" Grid.Row="2" Checked="RadioButtonQuicNone_Checked" HorizontalAlignment="Left" VerticalAlignment="Center"></RadioButton>
<TextBlock Text="{DynamicResource TextBlockV2RayQuicSRTPExplain}" TextWrapping="Wrap" Grid.Column="1" Grid.Row="2" Grid.ColumnSpan="3" HorizontalAlignment="Left" VerticalAlignment="Center"></TextBlock>
<RadioButton x:Name="RadioButtonQuic2uTP" Content="QUIC+uTP" GroupName="TemplateGroup" Grid.Column="0" Grid.Row="3" Checked="RadioButtonQuicNone_Checked" HorizontalAlignment="Left" VerticalAlignment="Center"></RadioButton>
<TextBlock Text="{DynamicResource TextBlockV2RayQuicuTPExplain}" TextWrapping="Wrap" Grid.Column="1" Grid.Row="3" Grid.ColumnSpan="3" HorizontalAlignment="Left" VerticalAlignment="Center"></TextBlock>
<RadioButton x:Name="RadioButtonQuicWechatVideo" Content="QUIC+WechatVideo" GroupName="TemplateGroup" Grid.Column="0" Grid.Row="4" Checked="RadioButtonQuicNone_Checked" HorizontalAlignment="Left" VerticalAlignment="Center"></RadioButton>
<TextBlock Text="{DynamicResource TextBlockV2RayQuicWeChatExplain}" TextWrapping="Wrap" Grid.Column="1" Grid.Row="4" Grid.ColumnSpan="3" HorizontalAlignment="Left" VerticalAlignment="Center"></TextBlock>
<RadioButton x:Name="RadioButtonQuicDTLS" Content="QUIC+DTLS 1.2" GroupName="TemplateGroup" Grid.Column="0" Grid.Row="5" Checked="RadioButtonQuicNone_Checked" HorizontalAlignment="Left" VerticalAlignment="Center"></RadioButton>
<TextBlock Text="{DynamicResource TextBlockV2RayQuicDTLSExplain}" TextWrapping="Wrap" Grid.Column="1" Grid.Row="5" Grid.ColumnSpan="3" HorizontalAlignment="Left" VerticalAlignment="Center"></TextBlock>
<RadioButton x:Name="RadioButtonQuicWireGuard" Content="QUIC+WireGuard" GroupName="TemplateGroup" Grid.Column="0" Grid.Row="6" Checked="RadioButtonQuicNone_Checked" HorizontalAlignment="Left" VerticalAlignment="Center"></RadioButton>
<TextBlock Text="{DynamicResource TextBlockV2RayQuicWireGuardExplain}" TextWrapping="Wrap" Grid.Column="1" Grid.Row="6" Grid.ColumnSpan="3" HorizontalAlignment="Left" VerticalAlignment="Center"></TextBlock>
</Grid>
</TabItem>
</TabControl>
</Grid>
</GroupBox>
<GroupBox Header="{DynamicResource GroupBoxHeaderParameterV2Ray}" Grid.Row="3" Grid.RowSpan="2">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="1.1*"></ColumnDefinition>
<ColumnDefinition ></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
</Grid.RowDefinitions>
<TextBlock x:Name="TextBlockServerListenPort" Text="{DynamicResource TextBlockV2RayServerPort}" Grid.Column="0" Grid.Row="0" Grid.ColumnSpan="1" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
<TextBox x:Name="TextBoxServerListenPort" Grid.Column="1" Grid.Row="0" Grid.ColumnSpan="3" Margin="3"></TextBox>
<Button x:Name="ButtonServerListenPort" Content="{DynamicResource ButtonV2RayServerPortChange}" Grid.Column="4" Grid.Row="0" Margin="2" Click="ButtonServerListenPort_Click"></Button>
<TextBlock Text="{DynamicResource TextBlockV2RayServerPortExplain}" 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" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
<TextBox x:Name="TextBoxNewUUID" Grid.Column="1" Grid.Row="1" Grid.ColumnSpan="3" Margin="3"></TextBox>
<Button x:Name="ButtonNewUUID" Content="{DynamicResource ButtonTrojanChangePassword}" Grid.Column="4" Grid.Row="1" Margin="2" Click="ButtonNewUUID_Click"></Button>
<TextBlock Text="{DynamicResource TextBlockV2RayUUIDExplain}" TextWrapping="Wrap" Grid.Column="5" Grid.Row="1" Grid.ColumnSpan="2" Margin="0"></TextBlock>
<TextBlock x:Name="TextBlockQuicUUID" Text="{DynamicResource TextBlockV2RayQuicUUID}" Visibility="Collapsed" Grid.Column="0" Grid.Row="2" Grid.ColumnSpan="1" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
<TextBlock x:Name="TextBlockMkcpSeedUUID" Text="{DynamicResource TextBlockV2RayMkcpSeedUUID}" Grid.Column="0" Grid.Row="2" Grid.ColumnSpan="1" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
<TextBox x:Name="TextBoxQuicAndMkcpSeedUUID" Grid.Column="1" Grid.Row="2" Grid.ColumnSpan="3" Margin="3"></TextBox>
<Button x:Name="ButtonQuicAndmKcpSeedUUID" Content="{DynamicResource ButtonTrojanChangePassword}" Grid.Column="4" Grid.Row="2" Margin="2" Click="ButtonQuicAndMkcpSeedUUID_Click"></Button>
<TextBlock x:Name="TextBlockMkcpUUID" Text="{DynamicResource TextBlockV2RayMkcpExplain}" TextWrapping="Wrap" Grid.Column="5" Grid.Row="2" Grid.ColumnSpan="2"></TextBlock>
<TextBlock x:Name="TextBlockPath" Text="{DynamicResource TextBlockV2RayPath}" Visibility="Collapsed" Grid.Column="0" Grid.Row="3" Grid.ColumnSpan="1" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
<TextBox x:Name="TextBoxPath" Visibility="Collapsed" Grid.Column="1" Grid.Row="3" Grid.ColumnSpan="3" Margin="3"></TextBox>
<Button x:Name="ButtonPath" Content="{DynamicResource ButtonNaiveProxyChangeUser}" Visibility="Collapsed" Grid.Column="4" Grid.Row="3" Margin="2" Click="ButtonPath_Click"></Button>
<TextBlock x:Name="TextBlockPathVlessWs" Text="{DynamicResource TextBlockV2RayVlessWsPath}" Grid.Column="0" Grid.Row="3" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
<TextBox x:Name="TextBoxPathVlessWS" Grid.Column="1" Grid.Row="3" Margin="3"></TextBox>
<TextBlock x:Name="TextBlockPathVmessTcp" Text="{DynamicResource TextBlockV2RayVmessTcpPath}" Grid.Column="2" Grid.Row="3" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
<TextBox x:Name="TextBoxPathVmessTcp" Grid.Column="3" Grid.Row="3" Margin="3"></TextBox>
<TextBlock x:Name="TextBlockPathVmessWs" Text="{DynamicResource TextBlockV2RayVmessWsPath}" Grid.Column="4" Grid.Row="3" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
<TextBox x:Name="TextBoxPathVmessWS" Grid.Column="5" Grid.Row="3" Margin="3"></TextBox>
<Button x:Name="ButtonVlessVmessPath" Content="{DynamicResource ButtonNaiveProxyChangeUser}" Grid.Column="6" Grid.Row="3" Margin="2" Click="ButtonVlessVmessPath_Click"></Button>
<TextBlock x:Name="TextBlockQuicEncryption" Text="{DynamicResource TextBlockQuicEncryption}" Visibility="Collapsed" Grid.Column="0" Grid.Row="3" Grid.ColumnSpan="1" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
<ComboBox x:Name="ComboBoxEncryptionMethodInfo" Visibility="Collapsed" Grid.Column="1" Grid.Row="3" Grid.ColumnSpan="2" Height="25" Margin="3,0,0,0" SelectionChanged="ComboBoxEncryptionMethodInfo_SelectionChanged"></ComboBox>
<TextBlock x:Name="TextBlockDomain" Text="{DynamicResource TextBlockV2RayDomain}" Grid.Column="0" Grid.Row="4" Grid.ColumnSpan="1" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
<TextBox x:Name="TextBoxDomain" Style="{StaticResource TitleText}" Tag="{DynamicResource TextBoxDomainPrompt}" Grid.Column="1" Grid.Row="4" Grid.ColumnSpan="3" Margin="3"></TextBox>
<Button x:Name="ButtonDomain" Content="检测" Visibility="Collapsed" Grid.Column="4" Grid.Row="4" Margin="2" Click="ButtonDomain_Click"></Button>
<TextBlock x:Name="TextBlockTrojanPassword" Text="{DynamicResource TextBlockTrojanPassword}" Grid.Column="5" Grid.Row="4" Grid.ColumnSpan="2" HorizontalAlignment="Left" VerticalAlignment="Center"></TextBlock>
<TextBlock x:Name="TextBlockMaskSites" Text="{DynamicResource TextBlockV2RayMaskSites}" Grid.Column="0" Grid.Row="5" Grid.ColumnSpan="1" HorizontalAlignment="Right" VerticalAlignment="Center" ></TextBlock>
<TextBox x:Name="TextBoxMaskSites" Style="{StaticResource TitleText}" Tag="{DynamicResource TextBoxV2RayMaskSitesTag}" ToolTip="{DynamicResource TextBoxV2RayMaskSitesToolTip}" Grid.Column="1" Grid.Row="5" Grid.ColumnSpan="3" Margin="3" ></TextBox>
<Button x:Name="ButtondDecide" Content="{DynamicResource ButtonTrojanGoTemplateOK}" Grid.Column="1" Grid.Row="6" Margin="0" Click="ButtondDecide_Click"></Button>
<Button x:Name="ButtondCancel" Content="{DynamicResource ButtonTrojanGoTemplateCancel}" Grid.Column="3" Grid.Row="6" Margin="0" Click="ButtondCancel_Click"></Button>
<!--<Button x:Name="ButtonTestChecked" Content="测试选中状态" Grid.Column="5" Grid.Row="6" Click="ButtonTestChecked_Click"></Button>-->
</Grid>
</GroupBox>
</Grid>
</Window>

File diff suppressed because it is too large Load Diff

View File

@ -1,390 +0,0 @@
<Window x:Name="XrayTemplateConfiguration" x:Class="ProxySU.XrayWindowTemplateConfiguration"
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="XayTemplateConfiguration" Height="600" Width="950">
<Window.Resources>
<Style BasedOn="{StaticResource {x:Type TextBox}}"
TargetType="TextBox"
x:Key="TitleText">
<Style.Triggers>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="Text" Value=""/>
<Condition Property="TextBox.IsFocused" Value="false"/>
</MultiTrigger.Conditions>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate>
<Border BorderThickness="1" BorderBrush="Gray" Margin="0">
<TextBlock x:Name="MainTextBlock" Text="{TemplateBinding TextBox.Tag}" Width="{TemplateBinding TextBox.ActualWidth}" Foreground="Gray" VerticalAlignment="Center" HorizontalAlignment="Left"/>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</MultiTrigger>
</Style.Triggers>
</Style>
</Window.Resources>
<Grid>
<Grid.RowDefinitions>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
</Grid.RowDefinitions>
<GroupBox Header="{DynamicResource ButtonTemplateConfigurationXray}" Grid.Row="0" Grid.RowSpan="3">
<Grid>
<TabControl x:Name="TabControlTemplate">
<TabItem Header="{DynamicResource TabItemHeaderV2RayHotPlan}" Width="100" Height="30">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="0.8*"></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition Width="0.3*"></ColumnDefinition>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="0.2*"></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
</Grid.RowDefinitions>
<RadioButton x:Name="RadioButtonWebSocketTLS2WebHot" Content="WebSocket+TLS+Web" GroupName="TemplateGroup" Grid.Column="0" Grid.Row="1" Checked="RadioButtonWebSocketTLS2Web_Checked" HorizontalAlignment="Left" VerticalAlignment="Center"></RadioButton>
<TextBlock Text="{DynamicResource TextBlockV2RayWebSocketTlsWebExplain}" TextWrapping="Wrap" Grid.Column="1" Grid.Row="1" Grid.ColumnSpan="3" VerticalAlignment="Center" HorizontalAlignment="Left"></TextBlock>
<RadioButton x:Name="RadioButtonHTTP2WebHot" Content="HTTP2+TLS+Web" GroupName="TemplateGroup" Grid.Column="0" Grid.Row="2" Checked="RadioButtonWebSocketTLS2Web_Checked" HorizontalAlignment="Left" VerticalAlignment="Center"></RadioButton>
<TextBlock Text="{DynamicResource TextBlockV2RayHttp2TlsWebExplain}" TextWrapping="Wrap" Grid.Column="1" Grid.Row="2" Grid.ColumnSpan="3" VerticalAlignment="Center" HorizontalAlignment="Left"></TextBlock>
<TextBlock Text="{DynamicResource TextBlockXrayExplain}" Grid.Column="0" Grid.Row="3" Grid.ColumnSpan="2" VerticalAlignment="Bottom"></TextBlock>
</Grid>
</TabItem>
<TabItem Header="{DynamicResource TabItemHeaderV2RayEarlyPlan}" Width="100" Height="30">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="10"></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition Width="10"></ColumnDefinition>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="10"></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition Height="0.4*"></RowDefinition>
<RowDefinition Height="10"></RowDefinition>
</Grid.RowDefinitions>
<Grid Grid.Column="1" Grid.Row="1">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="0.2*"></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
</Grid.RowDefinitions>
<TextBlock Text="{DynamicResource TextBlockVlessVmessXtlsTcpWebSocketExplainHot}" TextWrapping="Wrap" Grid.Column="0" Grid.Row="0" Grid.ColumnSpan="2" VerticalAlignment="Center" HorizontalAlignment="Left"></TextBlock>
<TextBlock Text="1. VLESS over TCP with XTLS(direct)" Grid.Column="1" Grid.Row="1" VerticalAlignment="Bottom"></TextBlock>
<TextBlock Text="2. VLESS over TCP with TLS" Grid.Column="1" Grid.Row="2" VerticalAlignment="Bottom"></TextBlock>
<TextBlock Text="3. VLESS over WS with TLS" Grid.Column="1" Grid.Row="3" VerticalAlignment="Bottom"></TextBlock>
<TextBlock Text="4. VMess over TCP with TLS (Not Recommended)" Grid.Column="1" Grid.Row="4" VerticalAlignment="Bottom"></TextBlock>
<TextBlock Text="5. VMess over WS with TLS" Grid.Column="1" Grid.Row="5" VerticalAlignment="Bottom"></TextBlock>
<TextBlock Text="6. Trojan over TCP with TLS" Grid.Column="1" Grid.Row="6" VerticalAlignment="Bottom"></TextBlock>
</Grid>
<RadioButton x:Name="RadioButtonVlessVmessXtlsTcpWebSocketHot" Content="VLESS+VMESS+Trojan+XTLS(direct)+TCP+WebSocket+Web" GroupName="TemplateGroup" Grid.Column="1" Grid.Row="2" Grid.ColumnSpan="2" Checked="RadioButtonVlessVmessXtlsTcpWebSocketHot_Checked" HorizontalAlignment="Left" VerticalAlignment="Center"></RadioButton>
<!--<Grid Grid.Column="0" Grid.Row="2">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="0.15*"></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
</Grid.ColumnDefinitions>
<TextBlock x:Name="TextBlockVlessVmessXtlsTcpWebSocket" Text="VLESS+VMESS+XTLS+TCP+WebSocket+Web" TextWrapping="Wrap" Margin="0,0,8,0" Grid.Column="1" VerticalAlignment="Center" HorizontalAlignment="Left" MouseDown="TextBlockVlessVmessXtlsTcpWebSocket_MouseDown"></TextBlock>
</Grid>-->
</Grid>
</TabItem>
<TabItem Header="{DynamicResource TabItemHeaderV2RayVlessProtocol}" Width="100" Height="30">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="1.2*"></RowDefinition>
<RowDefinition Height="1.2*"></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition Height="3"></RowDefinition>
</Grid.RowDefinitions>
<TextBlock Text="{DynamicResource TextBlockVlessExplain}" TextWrapping="Wrap" Grid.Column="0" Grid.Row="0" Grid.ColumnSpan="4" Margin="5,3,5,0"></TextBlock>
<RadioButton x:Name="RadioButtonVlessXtlsTcp" Content="VLESS+TCP+XTLS(direct)+Web" GroupName="TemplateGroup" Grid.Column="0" Grid.Row="1" Checked="RadioButtonVlessTcpTlsWeb_Checked" VerticalAlignment="Center" HorizontalAlignment="Left" ></RadioButton>
<TextBlock Text="{DynamicResource TextBlockVlessXtlsTcpExplain}" TextWrapping="Wrap" Grid.Column="1" Grid.Row="1" Grid.ColumnSpan="3" Margin="0,0,5,0" VerticalAlignment="Center" HorizontalAlignment="Left"></TextBlock>
<RadioButton x:Name="RadioButtonVlessTcpTlsWeb" Content="VLESS+TCP+TLS+Web" GroupName="TemplateGroup" Grid.Column="0" Grid.Row="2" VerticalAlignment="Center" HorizontalAlignment="Left" Checked="RadioButtonVlessTcpTlsWeb_Checked" ></RadioButton>
<TextBlock Text="{DynamicResource TextBlockV2RayVlessTcpTlsWebExplain}" TextWrapping="Wrap" Grid.Column="1" Grid.Row="2" Grid.ColumnSpan="3" Margin="0,0,5,0" VerticalAlignment="Center" HorizontalAlignment="Left"></TextBlock>
<RadioButton x:Name="RadioButtonVlessWebSocketTlsWeb" Content="VLESS+WebSocket+TLS+Web" GroupName="TemplateGroup" Grid.Column="0" Grid.Row="3" Checked="RadioButtonWebSocketTLS2Web_Checked" VerticalAlignment="Center" HorizontalAlignment="Left" />
<TextBlock Text="{DynamicResource TextBlockVlessWebSocketTlsWebExplain}" TextWrapping="Wrap" Grid.Column="1" Grid.Row="3" Margin="0,0,8,0" Grid.ColumnSpan="3" VerticalAlignment="Center" HorizontalAlignment="Left"></TextBlock>
<RadioButton x:Name="RadioButtonVlessHttp2Web" Content="VLESS+http2+TLS+Web" GroupName="TemplateGroup" Grid.Column="0" Grid.Row="4" Checked="RadioButtonWebSocketTLS2Web_Checked" VerticalAlignment="Center" HorizontalAlignment="Left"></RadioButton>
<TextBlock Text="{DynamicResource TextBlockVlessHttp2WebExplain}" TextWrapping="Wrap" Grid.Column="1" Grid.Row="4" Grid.ColumnSpan="3" Margin="0,0,5,0" HorizontalAlignment="Left" VerticalAlignment="Center"></TextBlock>
</Grid>
</TabItem>
<TabItem Header="{DynamicResource TabItemHeaderV2RayTcpProtocol}" Width="110" Height="30">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition Height="1.3*"></RowDefinition>
<RowDefinition Height="1.7*"></RowDefinition>
<RowDefinition></RowDefinition>
</Grid.RowDefinitions>
<RadioButton x:Name="RadioButtonTCP" Content="TCP" GroupName="TemplateGroup" Grid.Column="0" Grid.Row="1" Checked="RadioButtonTCP_Checked" VerticalAlignment="Center" HorizontalAlignment="Left"></RadioButton>
<TextBlock Text="{DynamicResource TextBlockV2RayTcpExplain}" Grid.Column="1" Grid.Row="1" Grid.ColumnSpan="3" HorizontalAlignment="Left" VerticalAlignment="Center"></TextBlock>
<RadioButton x:Name="RadioButtonTCPhttp" Content="{DynamicResource RadioButtonV2RayTcpHttp}" GroupName="TemplateGroup" Grid.Column="0" Grid.Row="2" Checked="RadioButtonTCPhttp_Checked" VerticalAlignment="Center" HorizontalAlignment="Left" ></RadioButton>
<TextBlock Text="{DynamicResource TextBlockV2RayTcpHttpExplain}" TextWrapping="Wrap" Grid.Column="1" Grid.Row="2" Grid.ColumnSpan="3" VerticalAlignment="Center" HorizontalAlignment="Left"></TextBlock>
<RadioButton x:Name="RadioButtonTCP2TLS" Content="TCP+TLS" GroupName="TemplateGroup" Grid.Column="0" Grid.Row="3" Checked="RadioButtonTCP2TLS_Checked" VerticalAlignment="Center" HorizontalAlignment="Left" />
<TextBlock Text="{DynamicResource TextBlockV2RayTcpTlsExplain}" TextWrapping="Wrap" Grid.Column="1" Grid.Row="3" Grid.ColumnSpan="3" VerticalAlignment="Center" HorizontalAlignment="Left"></TextBlock>
<RadioButton x:Name="RadioButtonTcpTLS2SelfSigned" Content="{DynamicResource RadioButtonV2RayTcpTlsSelfSigned}" GroupName="TemplateGroup" Grid.Column="0" Grid.Row="4" Checked="RadioButtonTCP2TLSnoDomain_Checked" VerticalAlignment="Center" HorizontalAlignment="Left" />
<TextBlock Text="{DynamicResource TextBlockV2RayTcpTlsSelfSignedExplain}" TextWrapping="Wrap" Grid.Column="1" Grid.Row="4" Grid.ColumnSpan="3" VerticalAlignment="Center" HorizontalAlignment="Left"></TextBlock>
<TextBlock Text="{DynamicResource TextBlockV2RaySelfSignedShadowrocketExplain}" TextWrapping="Wrap" Grid.Column="4" Grid.Row="4" HorizontalAlignment="Left" VerticalAlignment="Center" ></TextBlock>
</Grid>
</TabItem>
<TabItem Header="{DynamicResource TabItemHeaderV2RayWebSocketProtocol}" Width="150" Height="30">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="1.5*"></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition Height="1.3*"></RowDefinition>
<RowDefinition Height="1.3*"></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
</Grid.RowDefinitions>
<RadioButton x:Name="RadioButtonWebSocket" Content="WebSocket" GroupName="TemplateGroup" Grid.Column="0" Grid.Row="1" Checked="RadioButtonTCP_Checked" HorizontalAlignment="Left" VerticalAlignment="Center"/>
<TextBlock Text="{DynamicResource TextBlockV2RayWebSocketExplain}" TextWrapping="Wrap" Grid.Column="1" Grid.Row="1" Grid.ColumnSpan="3" HorizontalAlignment="Left" VerticalAlignment="Center"></TextBlock>
<RadioButton x:Name="RadioButtonWebSocketTLS" Content="WebSocket+TLS" GroupName="TemplateGroup" Grid.Column="0" Grid.Row="2" Checked="RadioButtonHTTP2_Checked" HorizontalAlignment="Left" VerticalAlignment="Center"/>
<TextBlock Text="{DynamicResource TextBlockV2RayWebSocketTlsExplain}" TextWrapping="Wrap" Grid.Column="1" Grid.Row="2" Grid.ColumnSpan="3" HorizontalAlignment="Left" VerticalAlignment="Center"></TextBlock>
<RadioButton x:Name="RadioButtonWebSocketTLS2Web" Content="WebSocket+TLS+Web" GroupName="TemplateGroup" Grid.Column="0" Grid.Row="3" Checked="RadioButtonWebSocketTLS2Web_Checked" HorizontalAlignment="Left" VerticalAlignment="Center"></RadioButton>
<TextBlock Text="{DynamicResource TextBlockV2RayWebSocketTlsWebExplain}" TextWrapping="Wrap" Grid.Column="1" Grid.Row="3" Grid.ColumnSpan="3" HorizontalAlignment="Left" VerticalAlignment="Center"></TextBlock>
<RadioButton x:Name="RadioButtonWebSocketTLSselfSigned" Content="{DynamicResource RadioButtonV2RayWebSocketTlsSelfSigned}" GroupName="TemplateGroup" Grid.Column="0" Grid.Row="4" Checked="RadioButtonWebSocketTLSselfSigned_Checked" HorizontalAlignment="Left" VerticalAlignment="Center"></RadioButton>
<TextBlock Text="{DynamicResource TextBlockV2RayWebSocketTlsSelfSignedExplain}" TextWrapping="Wrap" Grid.Column="1" Grid.Row="4" Grid.ColumnSpan="3" HorizontalAlignment="Left" VerticalAlignment="Center"></TextBlock>
<TextBlock Text="{DynamicResource TextBlockV2RaySelfSignedShadowrocketExplain}" TextWrapping="Wrap" Grid.Column="4" Grid.Row="4" HorizontalAlignment="Left" VerticalAlignment="Center" ></TextBlock>
</Grid>
</TabItem>
<TabItem Header="{DynamicResource TabItemHeaderV2RayHttp2Protocol}" Width="110" Height="30">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="1*"></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition Height="1.8*"></RowDefinition>
<RowDefinition Height="1.5*"></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
</Grid.RowDefinitions>
<RadioButton x:Name="RadioButtonHTTP2" Content="HTTP2" GroupName="TemplateGroup" Grid.Column="0" Grid.Row="1" Checked="RadioButtonHTTP2_Checked" HorizontalAlignment="Left" VerticalAlignment="Center"></RadioButton>
<TextBlock Text="{DynamicResource TextBlockV2RayHttp2Explain}" TextWrapping="Wrap" Grid.Column="1" Grid.Row="1" Grid.ColumnSpan="3" HorizontalAlignment="Left" VerticalAlignment="Center"></TextBlock>
<RadioButton x:Name="RadioButtonHTTP2Web" Content="HTTP2+TLS+Web" GroupName="TemplateGroup" Grid.Column="0" Grid.Row="2" Checked="RadioButtonWebSocketTLS2Web_Checked" HorizontalAlignment="Left" VerticalAlignment="Center"></RadioButton>
<TextBlock Text="{DynamicResource TextBlockV2RayHttp2TlsWebExplain}" TextWrapping="Wrap" Grid.Column="1" Grid.Row="2" Grid.ColumnSpan="3" HorizontalAlignment="Left" VerticalAlignment="Center"></TextBlock>
<RadioButton x:Name="RadioButtonHTTP2selfSigned" Content="{DynamicResource RadioButtonV2RayHttp2SelfSigned}" GroupName="TemplateGroup" Grid.Column="0" Grid.Row="3" Checked="RadioButtonWebSocketTLSselfSigned_Checked" HorizontalAlignment="Left" VerticalAlignment="Center"></RadioButton>
<TextBlock Text="{DynamicResource TextBlockV2RayHttp2SelfSignedExplain}" TextWrapping="Wrap" Grid.Column="1" Grid.Row="3" Grid.ColumnSpan="3" HorizontalAlignment="Left" VerticalAlignment="Center"></TextBlock>
<TextBlock Text="{DynamicResource TextBlockV2RaySelfSignedShadowrocketExplain}" TextWrapping="Wrap" Grid.Column="4" Grid.Row="3" ></TextBlock>
</Grid>
</TabItem>
<TabItem Header="{DynamicResource TabItemHeaderV2RayMkcpProtocol}" Width="110" Height="30">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<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>
</Grid.RowDefinitions>
<Grid Grid.Column="1" Grid.ColumnSpan="2">
<Grid.ColumnDefinitions>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
</Grid.ColumnDefinitions>
<RadioButton x:Name="RadioButtonVMESSmKCP" Content="VMESS" Grid.Column="0" HorizontalAlignment="Center" VerticalAlignment="Center"></RadioButton>
<RadioButton x:Name="RadioButtonVLESSmKCP" Content="VLESS" Grid.Column="1" HorizontalAlignment="Center" VerticalAlignment="Center"></RadioButton>
</Grid>
<RadioButton x:Name="RadioButtonMkcpNone" Content="{DynamicResource RadioButtonV2RayMkcpNone}" GroupName="TemplateGroup" Grid.Column="0" Grid.Row="1" Checked="RadioButtonMkcp_Checked" HorizontalAlignment="Left" VerticalAlignment="Center"></RadioButton>
<TextBlock Text="{DynamicResource TextBlockV2RayMkcpNoneExplain}" TextWrapping="Wrap" Grid.Column="1" Grid.Row="1" Grid.ColumnSpan="3" HorizontalAlignment="Left" VerticalAlignment="Center"></TextBlock>
<RadioButton x:Name="RadioButton2mKCP2SRTP" Content="mKCP+SRTP" GroupName="TemplateGroup" Grid.Column="0" Grid.Row="2" Checked="RadioButtonMkcp_Checked" HorizontalAlignment="Left" VerticalAlignment="Center"></RadioButton>
<TextBlock Text="{DynamicResource TextBlockV2RayMkcpSRTPExplain}" TextWrapping="Wrap" Grid.Column="1" Grid.Row="2" Grid.ColumnSpan="3" HorizontalAlignment="Left" VerticalAlignment="Center"></TextBlock>
<RadioButton x:Name="RadioButton2mKCPuTP" Content="mKCP+uTP" GroupName="TemplateGroup" Grid.Column="0" Grid.Row="3" Checked="RadioButtonMkcp_Checked" HorizontalAlignment="Left" VerticalAlignment="Center"></RadioButton>
<TextBlock Text="{DynamicResource TextBlockV2RayMkcpuTPExplain}" TextWrapping="Wrap" Grid.Column="1" Grid.Row="3" Grid.ColumnSpan="3" HorizontalAlignment="Left" VerticalAlignment="Center"></TextBlock>
<RadioButton x:Name="RadioButton2mKCP2WechatVideo" Content="mKCP+WechatVideo" GroupName="TemplateGroup" Grid.Column="0" Grid.Row="4" Checked="RadioButtonMkcp_Checked" HorizontalAlignment="Left" VerticalAlignment="Center"></RadioButton>
<TextBlock Text="{DynamicResource TextBlockV2RayMkcpWeChatExplain}" TextWrapping="Wrap" Grid.Column="1" Grid.Row="4" Grid.ColumnSpan="3" HorizontalAlignment="Left" VerticalAlignment="Center"></TextBlock>
<RadioButton x:Name="RadioButton2mKCP2DTLS" Content="mKCP+DTLS 1.2" GroupName="TemplateGroup" Grid.Column="0" Grid.Row="5" Checked="RadioButtonMkcp_Checked" HorizontalAlignment="Left" VerticalAlignment="Center"></RadioButton>
<TextBlock Text="{DynamicResource TextBlockV2RayMkcpDTLSExplain}" TextWrapping="Wrap" Grid.Column="1" Grid.Row="5" Grid.ColumnSpan="3" HorizontalAlignment="Left" VerticalAlignment="Center"></TextBlock>
<RadioButton x:Name="RadioButton2mKCP2WireGuard" Content="mKCP+WireGuard" GroupName="TemplateGroup" Grid.Column="0" Grid.Row="6" Checked="RadioButtonMkcp_Checked" HorizontalAlignment="Left" VerticalAlignment="Center"></RadioButton>
<TextBlock Text="{DynamicResource TextBlockV2RayMkcpWireGuardExplain}" TextWrapping="Wrap" Grid.Column="1" Grid.Row="6" Grid.ColumnSpan="3" HorizontalAlignment="Left" VerticalAlignment="Center"></TextBlock>
</Grid>
</TabItem>
<TabItem Header="{DynamicResource TabItemHeaderV2RayQuicProtocol}" Width="110" Height="30">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<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>
</Grid.RowDefinitions>
<TextBlock Text="{DynamicResource TextBlockV2RayQuicShadowrocketExplain}" Foreground="Red" Grid.Column="0" Grid.Row="0" Grid.ColumnSpan="5" HorizontalAlignment="Left" VerticalAlignment="Center"></TextBlock>
<RadioButton x:Name="RadioButtonQuicNone" Content="{DynamicResource RadioButtonV2RayQuicNone}" GroupName="TemplateGroup" Grid.Column="0" Grid.Row="1" Checked="RadioButtonQuicNone_Checked" HorizontalAlignment="Left" VerticalAlignment="Center"></RadioButton>
<TextBlock Text="{DynamicResource TextBlockV2RayQuicNoneExplain}" TextWrapping="Wrap" Grid.Column="1" Grid.Row="1" Grid.ColumnSpan="3" HorizontalAlignment="Left" VerticalAlignment="Center"></TextBlock>
<RadioButton x:Name="RadioButtonQuicSRTP" Content="QUIC+SRTP" GroupName="TemplateGroup" Grid.Column="0" Grid.Row="2" Checked="RadioButtonQuicNone_Checked" HorizontalAlignment="Left" VerticalAlignment="Center"></RadioButton>
<TextBlock Text="{DynamicResource TextBlockV2RayQuicSRTPExplain}" TextWrapping="Wrap" Grid.Column="1" Grid.Row="2" Grid.ColumnSpan="3" HorizontalAlignment="Left" VerticalAlignment="Center"></TextBlock>
<RadioButton x:Name="RadioButtonQuic2uTP" Content="QUIC+uTP" GroupName="TemplateGroup" Grid.Column="0" Grid.Row="3" Checked="RadioButtonQuicNone_Checked" HorizontalAlignment="Left" VerticalAlignment="Center"></RadioButton>
<TextBlock Text="{DynamicResource TextBlockV2RayQuicuTPExplain}" TextWrapping="Wrap" Grid.Column="1" Grid.Row="3" Grid.ColumnSpan="3" HorizontalAlignment="Left" VerticalAlignment="Center"></TextBlock>
<RadioButton x:Name="RadioButtonQuicWechatVideo" Content="QUIC+WechatVideo" GroupName="TemplateGroup" Grid.Column="0" Grid.Row="4" Checked="RadioButtonQuicNone_Checked" HorizontalAlignment="Left" VerticalAlignment="Center"></RadioButton>
<TextBlock Text="{DynamicResource TextBlockV2RayQuicWeChatExplain}" TextWrapping="Wrap" Grid.Column="1" Grid.Row="4" Grid.ColumnSpan="3" HorizontalAlignment="Left" VerticalAlignment="Center"></TextBlock>
<RadioButton x:Name="RadioButtonQuicDTLS" Content="QUIC+DTLS 1.2" GroupName="TemplateGroup" Grid.Column="0" Grid.Row="5" Checked="RadioButtonQuicNone_Checked" HorizontalAlignment="Left" VerticalAlignment="Center"></RadioButton>
<TextBlock Text="{DynamicResource TextBlockV2RayQuicDTLSExplain}" TextWrapping="Wrap" Grid.Column="1" Grid.Row="5" Grid.ColumnSpan="3" HorizontalAlignment="Left" VerticalAlignment="Center"></TextBlock>
<RadioButton x:Name="RadioButtonQuicWireGuard" Content="QUIC+WireGuard" GroupName="TemplateGroup" Grid.Column="0" Grid.Row="6" Checked="RadioButtonQuicNone_Checked" HorizontalAlignment="Left" VerticalAlignment="Center"></RadioButton>
<TextBlock Text="{DynamicResource TextBlockV2RayQuicWireGuardExplain}" TextWrapping="Wrap" Grid.Column="1" Grid.Row="6" Grid.ColumnSpan="3" HorizontalAlignment="Left" VerticalAlignment="Center"></TextBlock>
</Grid>
</TabItem>
</TabControl>
</Grid>
</GroupBox>
<GroupBox Header="{DynamicResource GroupBoxHeaderParameterV2Ray}" Grid.Row="3" Grid.RowSpan="2">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="1.1*"></ColumnDefinition>
<ColumnDefinition ></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
</Grid.RowDefinitions>
<TextBlock x:Name="TextBlockServerListenPort" Text="{DynamicResource TextBlockV2RayServerPort}" Grid.Column="0" Grid.Row="0" Grid.ColumnSpan="1" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
<TextBox x:Name="TextBoxServerListenPort" Grid.Column="1" Grid.Row="0" Grid.ColumnSpan="3" Margin="3"></TextBox>
<Button x:Name="ButtonServerListenPort" Content="{DynamicResource ButtonV2RayServerPortChange}" Grid.Column="4" Grid.Row="0" Margin="2" Click="ButtonServerListenPort_Click"></Button>
<TextBlock Text="{DynamicResource TextBlockV2RayServerPortExplain}" 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" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
<TextBox x:Name="TextBoxNewUUID" Grid.Column="1" Grid.Row="1" Grid.ColumnSpan="3" Margin="3"></TextBox>
<Button x:Name="ButtonNewUUID" Content="{DynamicResource ButtonTrojanChangePassword}" Grid.Column="4" Grid.Row="1" Margin="2" Click="ButtonNewUUID_Click"></Button>
<TextBlock Text="{DynamicResource TextBlockV2RayUUIDExplain}" TextWrapping="Wrap" Grid.Column="5" Grid.Row="1" Grid.ColumnSpan="2" Margin="0"></TextBlock>
<TextBlock x:Name="TextBlockQuicUUID" Text="{DynamicResource TextBlockV2RayQuicUUID}" Visibility="Collapsed" Grid.Column="0" Grid.Row="2" Grid.ColumnSpan="1" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
<TextBlock x:Name="TextBlockMkcpSeedUUID" Text="{DynamicResource TextBlockV2RayMkcpSeedUUID}" Grid.Column="0" Grid.Row="2" Grid.ColumnSpan="1" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
<TextBox x:Name="TextBoxQuicAndMkcpSeedUUID" Grid.Column="1" Grid.Row="2" Grid.ColumnSpan="3" Margin="3"></TextBox>
<Button x:Name="ButtonQuicAndmKcpSeedUUID" Content="{DynamicResource ButtonTrojanChangePassword}" Grid.Column="4" Grid.Row="2" Margin="2" Click="ButtonQuicAndMkcpSeedUUID_Click"></Button>
<TextBlock x:Name="TextBlockMkcpUUID" Text="{DynamicResource TextBlockV2RayMkcpExplain}" TextWrapping="Wrap" Grid.Column="5" Grid.Row="2" Grid.ColumnSpan="2"></TextBlock>
<TextBlock x:Name="TextBlockPath" Text="{DynamicResource TextBlockV2RayPath}" Visibility="Collapsed" Grid.Column="0" Grid.Row="3" Grid.ColumnSpan="1" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
<TextBox x:Name="TextBoxPath" Visibility="Collapsed" Grid.Column="1" Grid.Row="3" Grid.ColumnSpan="3" Margin="3"></TextBox>
<Button x:Name="ButtonPath" Content="{DynamicResource ButtonNaiveProxyChangeUser}" Visibility="Collapsed" Grid.Column="4" Grid.Row="3" Margin="2" Click="ButtonPath_Click"></Button>
<TextBlock x:Name="TextBlockPathVlessWs" Text="{DynamicResource TextBlockV2RayVlessWsPath}" Grid.Column="0" Grid.Row="3" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
<TextBox x:Name="TextBoxPathVlessWS" Grid.Column="1" Grid.Row="3" Margin="3"></TextBox>
<TextBlock x:Name="TextBlockPathVmessTcp" Text="{DynamicResource TextBlockV2RayVmessTcpPath}" Grid.Column="2" Grid.Row="3" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
<TextBox x:Name="TextBoxPathVmessTcp" Grid.Column="3" Grid.Row="3" Margin="3"></TextBox>
<TextBlock x:Name="TextBlockPathVmessWs" Text="{DynamicResource TextBlockV2RayVmessWsPath}" Grid.Column="4" Grid.Row="3" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
<TextBox x:Name="TextBoxPathVmessWS" Grid.Column="5" Grid.Row="3" Margin="3"></TextBox>
<Button x:Name="ButtonVlessVmessPath" Content="{DynamicResource ButtonNaiveProxyChangeUser}" Grid.Column="6" Grid.Row="3" Margin="2" Click="ButtonVlessVmessPath_Click"></Button>
<TextBlock x:Name="TextBlockQuicEncryption" Text="{DynamicResource TextBlockQuicEncryption}" Visibility="Collapsed" Grid.Column="0" Grid.Row="3" Grid.ColumnSpan="1" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
<ComboBox x:Name="ComboBoxEncryptionMethodInfo" Visibility="Collapsed" Grid.Column="1" Grid.Row="3" Grid.ColumnSpan="2" Height="25" Margin="3,0,0,0" SelectionChanged="ComboBoxEncryptionMethodInfo_SelectionChanged"></ComboBox>
<TextBlock x:Name="TextBlockDomain" Text="{DynamicResource TextBlockV2RayDomain}" Grid.Column="0" Grid.Row="4" Grid.ColumnSpan="1" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
<TextBox x:Name="TextBoxDomain" Style="{StaticResource TitleText}" Tag="{DynamicResource TextBoxDomainPrompt}" Grid.Column="1" Grid.Row="4" Grid.ColumnSpan="3" Margin="3"></TextBox>
<Button x:Name="ButtonDomain" Content="检测" Visibility="Collapsed" Grid.Column="4" Grid.Row="4" Margin="2" Click="ButtonDomain_Click"></Button>
<TextBlock x:Name="TextBlockTrojanPassword" Text="{DynamicResource TextBlockTrojanPassword}" Grid.Column="5" Grid.Row="4" Grid.ColumnSpan="2" HorizontalAlignment="Left" VerticalAlignment="Center"></TextBlock>
<TextBlock x:Name="TextBlockMaskSites" Text="{DynamicResource TextBlockV2RayMaskSites}" Grid.Column="0" Grid.Row="5" Grid.ColumnSpan="1" HorizontalAlignment="Right" VerticalAlignment="Center" ></TextBlock>
<TextBox x:Name="TextBoxMaskSites" Style="{StaticResource TitleText}" Tag="{DynamicResource TextBoxV2RayMaskSitesTag}" ToolTip="{DynamicResource TextBoxV2RayMaskSitesToolTip}" Grid.Column="1" Grid.Row="5" Grid.ColumnSpan="3" Margin="3" ></TextBox>
<Button x:Name="ButtondDecide" Content="{DynamicResource ButtonTrojanGoTemplateOK}" Grid.Column="1" Grid.Row="6" Margin="0" Click="ButtondDecide_Click"></Button>
<Button x:Name="ButtondCancel" Content="{DynamicResource ButtonTrojanGoTemplateCancel}" Grid.Column="3" Grid.Row="6" Margin="0" Click="ButtondCancel_Click"></Button>
<!--<Button x:Name="ButtonTestChecked" Content="测试选中状态" Grid.Column="5" Grid.Row="6" Click="ButtonTestChecked_Click"></Button>-->
</Grid>
</GroupBox>
</Grid>
</Window>

File diff suppressed because it is too large Load Diff

Binary file not shown.

View File

@ -1,4 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="SSH.NET" version="2020.0.1" targetFramework="net40" />
</packages>

View File

@ -1,14 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />
</startup>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="ControlzEx" publicKeyToken="69f1c32f803d307e" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="5.0.0.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>

View File

@ -1,33 +0,0 @@
<Application x:Class="ProxySU_Core.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:ProxySU_Core"
xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes"
StartupUri="Views/MainWindow.xaml">
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<!--Languages-->
<ResourceDictionary Source="/Resources/Languages/zh_cn.xaml" />
<!-- MahApps -->
<ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Controls.xaml" />
<ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Fonts.xaml" />
<ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Themes/Light.Teal.xaml" />
<!-- Material Design -->
<ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesignTheme.Light.xaml" />
<ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesignTheme.Defaults.xaml" />
<ResourceDictionary Source="pack://application:,,,/MaterialDesignColors;component/Themes/Recommended/Primary/MaterialDesignColor.Teal.xaml" />
<ResourceDictionary Source="pack://application:,,,/MaterialDesignColors;component/Themes/Recommended/Accent/MaterialDesignColor.Teal.xaml" />
<!-- Material Design: MahApps Compatibility -->
<ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.MahApps;component/Themes/MaterialDesignTheme.MahApps.Fonts.xaml" />
<ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.MahApps;component/Themes/MaterialDesignTheme.MahApps.Flyout.xaml" />
<!--Override Themes-->
<ResourceDictionary Source="/Resources/Styles/MaterialDesignThemes.Overrides.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
</Application>

View File

@ -1,17 +0,0 @@
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Threading.Tasks;
using System.Windows;
namespace ProxySU_Core
{
/// <summary>
/// Interaction logic for App.xaml
/// </summary>
public partial class App : Application
{
}
}

View File

@ -1,10 +0,0 @@
using System.Windows;
[assembly: ThemeInfo(
ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located
//(used if a resource is not found in the page,
// or application resource dictionaries)
ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located
//(used if a resource is not found in the page,
// app, or any theme specific resource dictionaries)
)]

View File

@ -1,23 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ProxySU_Core.Common
{
public class Base64
{
public static string Encode(string plainText)
{
var plainTextBytes = System.Text.Encoding.UTF8.GetBytes(plainText);
return System.Convert.ToBase64String(plainTextBytes);
}
public static string Decode(string base64EncodedData)
{
var base64EncodedBytes = System.Convert.FromBase64String(base64EncodedData);
return System.Text.Encoding.UTF8.GetString(base64EncodedBytes);
}
}
}

View File

@ -1,32 +0,0 @@
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Text;
using System.Windows.Data;
namespace ProxySU_Core.Converters
{
public class LoginSecretTypeConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
return value != null && value.Equals(parameter);
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value == null)
{
return Binding.DoNothing;
}
if (!value.Equals(true))
{
return Binding.DoNothing;
}
return parameter;
}
}
}

View File

@ -1,31 +0,0 @@
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Text;
using System.Windows.Data;
namespace ProxySU_Core.Converters
{
public class ProxyTypeConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
return value != null && value.Equals(parameter);
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value == null)
{
return Binding.DoNothing;
}
if (!value.Equals(true))
{
return Binding.DoNothing;
}
return parameter;
}
}
}

View File

@ -1,34 +0,0 @@
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Data;
namespace ProxySU_Core.Converters
{
public class VisibleConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
return value.Equals(true) ? Visibility.Visible : Visibility.Collapsed;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value == null)
{
return false;
}
if (value.Equals(Visibility.Visible))
{
return true;
}
return false;
}
}
}

View File

@ -1,13 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ProxySU_Core.Models
{
public class AppSettings
{
public string Language { get; set; }
}
}

View File

@ -1,15 +0,0 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace ProxySU_Core.Models.Developers
{
public interface IParameters
{
int Port { get; set; }
string Domain { get; set; }
List<int> FreePorts { get; }
}
}

View File

@ -1,740 +0,0 @@
using ProxySU_Core.Tools;
using ProxySU_Core.ViewModels;
using Renci.SshNet;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
namespace ProxySU_Core.Models.Developers
{
public enum CmdType
{
None,
Apt,
Dnf,
Yum
}
public abstract class Project<TParameters> : BaseViewModel where TParameters : IParameters
{
private SshClient _sshClient;
protected Action<string> WriteOutput;
protected CmdType CmdType { get; set; }
protected bool IsSELinux { get; set; }
protected bool OnlyIpv6 { get; set; }
protected string IPv4 { get; set; }
protected string IPv6 { get; set; }
protected TParameters Parameters { get; set; }
public Project(SshClient sshClient, TParameters parameters, Action<string> writeOutput)
{
_sshClient = sshClient;
WriteOutput = writeOutput;
Parameters = parameters;
}
protected string RunCmd(string cmdStr)
{
var cmd = _sshClient.CreateCommand(cmdStr);
WriteOutput(cmdStr);
var result = cmd.Execute();
WriteOutput(result);
return result;
}
/// <summary>
/// 执行安装命令
/// </summary>
public abstract void Install();
/// <summary>
/// 配置系统基础环境
/// </summary>
protected void EnsureSystemEnv()
{
string cmd;
// 确认安装命令
if (CmdType == CmdType.None)
{
cmd = RunCmd("command -v apt-get");
if (!string.IsNullOrEmpty(cmd))
{
CmdType = CmdType.Apt;
}
}
if (CmdType == CmdType.None)
{
cmd = RunCmd("command -v dnf");
if (!string.IsNullOrEmpty(cmd))
{
CmdType = CmdType.Dnf;
}
}
if (CmdType == CmdType.None)
{
cmd = RunCmd("command -v yum");
if (!string.IsNullOrEmpty(cmd))
{
CmdType = CmdType.Yum;
}
}
// systemctl
cmd = RunCmd("command -v systemctl");
var hasSystemCtl = !string.IsNullOrEmpty(cmd);
// SELinux
cmd = RunCmd("command -v getenforce");
IsSELinux = !string.IsNullOrEmpty(cmd);
if (CmdType == CmdType.None || !hasSystemCtl)
{
throw new Exception("系统缺乏必要的安装组件如:apt-get||dnf||yum||Syetemd主机系统推荐使用CentOS 7/8,Debian 8/9/10,Ubuntu 16.04及以上版本");
}
// 判断是否启用了SELinux,如果启用了并且工作在Enforcing模式下则改为Permissive模式
if (IsSELinux)
{
cmd = RunCmd("getenforce");
// 检测到系统启用SELinux且工作在严格模式下需改为宽松模式
if (cmd.Contains("Enforcing"))
{
RunCmd("setenforce 0");
RunCmd(@"sed -i 's/SELINUX=enforcing/SELINUX=permissive/' /etc/selinux/config");
}
}
}
/// <summary>
/// 确保Root账户登陆
/// </summary>
protected void EnsureRootAuth()
{
// 禁止一些可能产生的干扰信息
RunCmd(@"sed -i 's/echo/#echo/g' ~/.bashrc");
RunCmd(@"sed -i 's/echo/#echo/g' ~/.profile");
// 检测是否运行在Root权限下
var cmd = RunCmd("id -u");
if (!cmd.Equals("0\n"))
{
throw new Exception("请使用Root账户登陆主机");
}
}
/// <summary>
/// 配置IPV6环境
/// </summary>
protected void ConfigureIPv6()
{
if (IsOnlyIpv6())
{
SetNat64();
}
}
/// <summary>
/// 配置必要的软件
/// </summary>
protected void ConfigureSoftware()
{
string cmd = RunCmd("command -v sudo");
if (string.IsNullOrEmpty(cmd))
{
RunCmd(GetInstallCmd("sudo"));
}
// 安装curl,wget,unzip
cmd = RunCmd("command -v curl");
if (string.IsNullOrEmpty(cmd))
{
RunCmd(GetInstallCmd("curl"));
}
cmd = RunCmd("command -v wget");
if (string.IsNullOrEmpty(cmd))
{
RunCmd(GetInstallCmd("wget"));
}
cmd = RunCmd("command -v unzip");
if (string.IsNullOrEmpty(cmd))
{
RunCmd(GetInstallCmd("unzip"));
}
// 安装dig
cmd = RunCmd("command -v dig");
if (string.IsNullOrEmpty(cmd))
{
if (CmdType == CmdType.Apt)
{
RunCmd(GetUpdateCmd());
RunCmd(GetInstallCmd("dnsutils"));
}
else if (CmdType == CmdType.Dnf)
{
RunCmd(GetUpdateCmd());
RunCmd(GetInstallCmd("bind-utils"));
}
else if (CmdType == CmdType.Yum)
{
RunCmd(GetUpdateCmd());
RunCmd(GetInstallCmd("bind-utils"));
}
}
// 处理极其少见的xz-utils未安装的情况
if (CmdType == CmdType.Apt)
{
RunCmd(GetInstallCmd("xz-utils"));
}
else
{
RunCmd(GetInstallCmd("xz-devel"));
}
// 检测是否安装lsof
cmd = RunCmd("command -v lsof");
if (string.IsNullOrEmpty(cmd))
{
RunCmd(GetInstallCmd("lsof"));
}
}
protected void ClosePort(params int[] portList)
{
string cmd;
cmd = RunCmd("command -v firewall-cmd");
if (!string.IsNullOrEmpty(cmd))
{
//有很奇怪的vps主机在firewalld未运行时端口是关闭的无法访问。所以要先启动firewalld
//用于保证acme.sh申请证书成功
cmd = RunCmd("firewall-cmd --state");
if (cmd.Trim() != "running")
{
RunCmd("systemctl restart firewalld");
}
foreach (var port in portList)
{
RunCmd($"firewall-cmd --zone=public --remove-port={port}/tcp --permanent");
RunCmd($"firewall-cmd --zone=public --remove-port={port}/udp --permanent");
}
RunCmd("yes | firewall-cmd --reload");
}
else
{
cmd = RunCmd("command -v ufw");
if (!string.IsNullOrEmpty(cmd))
{
foreach (var port in portList)
{
RunCmd($"ufw delete allow {port}/tcp");
RunCmd($"ufw delete allow {port}/udp");
}
RunCmd("yes | ufw reload");
}
}
}
protected void OpenPort(params int[] portList)
{
string cmd;
cmd = RunCmd("command -v firewall-cmd");
if (!string.IsNullOrEmpty(cmd))
{
//有很奇怪的vps主机在firewalld未运行时端口是关闭的无法访问。所以要先启动firewalld
//用于保证acme.sh申请证书成功
cmd = RunCmd("firewall-cmd --state");
if (cmd.Trim() != "running")
{
RunCmd("systemctl restart firewalld");
}
foreach (var port in portList)
{
RunCmd($"firewall-cmd --zone=public --add-port={port}/tcp --permanent");
RunCmd($"firewall-cmd --zone=public --add-port={port}/udp --permanent");
}
RunCmd("yes | firewall-cmd --reload");
}
else
{
cmd = RunCmd("command -v ufw");
if (!string.IsNullOrEmpty(cmd))
{
foreach (var port in portList)
{
RunCmd($"ufw allow {port}/tcp");
RunCmd($"ufw allow {port}/udp");
}
RunCmd("yes | ufw reload");
}
}
}
/// <summary>
/// 配置防火墙
/// </summary>
protected void ConfigureFirewall()
{
var portList = new List<int>();
portList.Add(80);
portList.Add(Parameters.Port);
portList.AddRange(Parameters.FreePorts);
OpenPort(portList.ToArray());
}
/// <summary>
/// 配置同步时间差
/// </summary>
protected void SyncTimeDiff()
{
RunCmd("rm -f /etc/localtime");
RunCmd("ln -s /usr/share/zoneinfo/UTC /etc/localtime");
var result = RunCmd("date +%s");
var vpsSeconds = Convert.ToInt64(result);
var localSeconds = (int)(DateTime.Now.ToUniversalTime() - DateTime.Parse("1970-01-01")).TotalSeconds;
if (Math.Abs(vpsSeconds - localSeconds) >= 90)
{
// 同步本地时间
var netUtcTime = DateTimeUtils.GetUTCTime();
DateTimeUtils.SetDate(netUtcTime.ToLocalTime());
// 同步VPS时间
var utcTS = DateTimeUtils.GetUTCTime() - new DateTime(1970, 1, 1, 0, 0, 0, 0);
long timeStampVPS = Convert.ToInt64(utcTS.TotalSeconds);
RunCmd($"date --set=\"$(date \"+%Y-%m-%d %H:%M:%S\" -d @{timeStampVPS.ToString()})\"");
}
}
/// <summary>
/// 验证域名是否绑定了主机
/// </summary>
protected void ValidateDomain()
{
if (OnlyIpv6)
{
string cmdFilter = @"| grep -oE '(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))' | head -n 1";
var cmd = $"dig @resolver1.opendns.com AAAA {Parameters.Domain} +short -6 {cmdFilter}";
var result = RunCmd(cmd).TrimEnd('\r', '\n');
if (result == IPv6) return;
}
else
{
string cmdFilter = @"| grep -oE '[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+' | head -n 1";
var cmd = $"dig @resolver1.opendns.com A {Parameters.Domain} +short -4 {cmdFilter}";
var result = RunCmd(cmd).TrimEnd('\r', '\n');
if (result == IPv4) return;
}
var btnResult = MessageBox.Show(
$"{Parameters.Domain}未能正常解析到服务器的IP如果您使用了CDN请忽略是否继续安装?", "提示", MessageBoxButton.YesNo);
if (btnResult == MessageBoxResult.No)
{
throw new Exception($"域名解析失败,安装停止!");
}
}
/// <summary>
/// 判断是否安装某个软件
/// </summary>
/// <param name="path"></param>
/// <returns></returns>
protected bool FileExists(string path)
{
var cmdStr = $"if [[ -f {path} ]];then echo '1';else echo '0'; fi";
var cmd = RunCmd(cmdStr);
return cmd.Trim() == "1";
}
/// <summary>
/// 安装 Caddy
/// </summary>
protected void InstallCaddy()
{
RunCmd("rm -rf caddy_install.sh");
RunCmd("curl -o caddy_install.sh https://raw.githubusercontent.com/proxysu/shellscript/master/Caddy-Naive/caddy-naive-install.sh");
RunCmd("yes | bash caddy_install.sh");
RunCmd("rm -rf caddy_install.sh");
RunCmd("systemctl enable caddy.service");
}
/// <summary>
/// 卸载 Caddy
/// </summary>
protected void UninstallCaddy()
{
RunCmd("rm -rf caddy_install.sh");
RunCmd("curl -o caddy_install.sh https://raw.githubusercontent.com/proxysu/shellscript/master/Caddy-Naive/caddy-naive-install.sh");
RunCmd("yes | bash caddy_install.sh uninstall");
RunCmd("rm -rf caddy_install.sh");
RunCmd("rm -rf /usr/share/caddy");
}
#region
private bool IsOnlyIpv6()
{
string cmd;
cmd = RunCmd(@"curl -s https://api.ip.sb/ip --ipv4 --max-time 8");
IPv4 = cmd.TrimEnd('\r', '\n');
if (!string.IsNullOrEmpty(IPv4))
{
OnlyIpv6 = false;
return false;
}
cmd = RunCmd(@"curl -s https://api.ip.sb/ip --ipv6 --max-time 8");
IPv6 = cmd.TrimEnd('\r', '\n');
if (string.IsNullOrEmpty(IPv6))
{
throw new Exception("未检测可用的的IP地址");
}
OnlyIpv6 = true;
return OnlyIpv6;
}
private bool SetPortFree(int port, bool force = true)
{
string result = RunCmd($"lsof -n -P -i :{port} | grep LISTEN");
if (!string.IsNullOrEmpty(result))
{
if (force)
{
var btnResult = MessageBox.Show($"{port}端口被占用,将强制停止占用{port}端口的程序?", "提示", MessageBoxButton.YesNo);
if (btnResult == MessageBoxResult.No)
{
throw new Exception($"{port}端口被占用,安装停止!");
}
string[] process = result.Split(' ');
RunCmd($"systemctl stop {process[0]}");
RunCmd($"systemctl disable {process[0]}");
RunCmd($"pkill {process[0]}");
return SetPortFree(port, force: false);
}
else
{
return false;
}
}
return true;
}
public void ConfigurePort()
{
if (Parameters.Port == 80 || Parameters.Port == 443)
{
SetPortFree(80);
SetPortFree(443);
}
else
{
SetPortFree(80);
SetPortFree(443);
SetPortFree(Parameters.Port);
Parameters.FreePorts.ForEach(port =>
{
SetPortFree(port);
});
}
}
protected void SetNat64()
{
var dns64List = FilterFastestIP();
if (dns64List.Count == 0)
{
throw new Exception("未找到有效的Nat64网关");
}
var exists = FileExists("/etc/resolv.conf.proxysu");
if (!exists)
{
var cmdStr = @"mv /etc/resolv.conf /etc/resolv.conf.proxysu";
RunCmd(cmdStr);
}
foreach (var gateip in dns64List)
{
RunCmd($"echo \"nameserver {gateip}\" > /etc/resolv.conf");
}
}
protected void RemoveNat64()
{
RunCmd("rm /etc/resolv.conf");
RunCmd("mv /etc/resolv.conf.proxysu /etc/resolv.conf");
}
private List<string> FilterFastestIP()
{
string[] gateNat64 = {
"2a01:4f9:c010:3f02::1",
"2001:67c:2b0::4",
"2001:67c:2b0::6",
"2a09:11c0:f1:bbf0::70",
"2a01:4f8:c2c:123f::1",
"2001:67c:27e4:15::6411",
"2001:67c:27e4::64",
"2001:67c:27e4:15::64",
"2001:67c:27e4::60",
"2a00:1098:2b::1",
"2a03:7900:2:0:31:3:104:161",
"2a00:1098:2c::1",
"2a09:11c0:100::53",
};
Dictionary<string, float> dns64List = new Dictionary<string, float>();
foreach (var gateip in gateNat64)
{
var cmdStr = $"ping6 -c4 {gateip} | grep avg | awk '{{print $4}}'|cut -d/ -f2";
var cmd = RunCmd(cmdStr);
if (!string.IsNullOrEmpty(cmd))
{
if (float.TryParse(cmd, out float delay))
{
dns64List.Add(gateip, delay);
}
}
}
return dns64List.Keys.ToList();
}
#endregion
#region BBR
private bool CheckKernelVersionBBR(string kernelVer)
{
string[] linuxKernelCompared = kernelVer.Split('.');
if (int.Parse(linuxKernelCompared[0]) > 4)
{
return true;
}
else if (int.Parse(linuxKernelCompared[0]) < 4)
{
return false;
}
else if (int.Parse(linuxKernelCompared[0]) == 4)
{
if (int.Parse(linuxKernelCompared[1]) >= 9)
{
return true;
}
else if (int.Parse(linuxKernelCompared[1]) < 9)
{
return false;
}
}
return false;
}
protected void EnableBBR()
{
var osVersion = RunCmd("uname -r");
var canInstallBBR = CheckKernelVersionBBR(osVersion.Split('-')[0]);
var bbrInfo = RunCmd("sysctl net.ipv4.tcp_congestion_control | grep bbr");
var installed = bbrInfo.Contains("bbr");
if (canInstallBBR && !installed)
{
RunCmd(@"bash -c 'echo ""net.core.default_qdisc=fq"" >> /etc/sysctl.conf'");
RunCmd(@"bash -c 'echo ""net.ipv4.tcp_congestion_control=bbr"" >> /etc/sysctl.conf'");
RunCmd(@"sysctl -p");
if (OnlyIpv6)
{
RemoveNat64();
}
WriteOutput("BBR启动成功");
}
if (!canInstallBBR)
{
WriteOutput("****** 系统不满足启用BBR条件启动失败。 ******");
}
}
#endregion
/// <summary>
/// 安装证书
/// </summary>
/// <param name="certPath"></param>
/// <param name="keyPath"></param>
protected void InstallCert(string dirPath, string certName, string keyName)
{
string certPath = Path.Combine(dirPath, certName);
string keyPath = Path.Combine(dirPath, keyName);
// 安装依赖
RunCmd(GetInstallCmd("socat"));
// 解决搬瓦工CentOS缺少问题
RunCmd(GetInstallCmd("automake autoconf libtool"));
// 安装Acme
var result = RunCmd($"curl https://get.acme.sh yes | sh");
if (result.Contains("Install success"))
{
WriteOutput("安装 acme.sh 成功");
}
else
{
WriteOutput("安装 acme.sh 失败,请联系开发者!");
throw new Exception("安装 acme.sh 失败,请联系开发者!");
}
RunCmd("cd ~/.acme.sh/");
RunCmd("alias acme.sh=~/.acme.sh/acme.sh");
// 申请证书
if (OnlyIpv6)
{
var cmd = $"/root/.acme.sh/acme.sh --force --debug --issue --standalone -d {Parameters.Domain} --listen-v6";
result = RunCmd(cmd);
}
else
{
var cmd = $"/root/.acme.sh/acme.sh --force --debug --issue --standalone -d {Parameters.Domain}";
result = RunCmd(cmd);
}
if (result.Contains("success"))
{
WriteOutput("申请证书成功");
}
else
{
WriteOutput("申请证书失败,如果申请次数过多请更换二级域名,或联系开发者!");
throw new Exception("申请证书失败,如果申请次数过多请更换二级域名,或联系开发者!");
}
// 安装证书
RunCmd($"mkdir -p {dirPath}");
RunCmd($"/root/.acme.sh/acme.sh --installcert -d {Parameters.Domain} --certpath {certPath} --keypath {keyPath} --capath {certPath}");
result = RunCmd($@"if [ ! -f ""{keyPath}"" ]; then echo ""0""; else echo ""1""; fi | head -n 1");
if (result.Contains("1"))
{
WriteOutput("安装证书成功");
}
else
{
WriteOutput("安装证书失败,请联系开发者!");
throw new Exception("安装证书失败,请联系开发者!");
}
RunCmd($"chmod 755 {dirPath}");
}
/// <summary>
/// 上传文件
/// </summary>
/// <param name="stream"></param>
/// <param name="path"></param>
protected void UploadFile(Stream stream, string path)
{
using (var sftp = new SftpClient(_sshClient.ConnectionInfo))
{
sftp.Connect();
sftp.UploadFile(stream, path, true);
sftp.Disconnect();
}
}
/// <summary>
/// 根据系统环境匹配更新命令
/// </summary>
/// <returns></returns>
protected string GetUpdateCmd()
{
if (CmdType == CmdType.Apt)
{
return "apt-get update";
}
else if (CmdType == CmdType.Dnf)
{
return "dnf clean all;dnf makecache";
}
else if (CmdType == CmdType.Yum)
{
return "yum clean all;yum makecache";
}
throw new Exception("未识别的系统");
}
/// <summary>
/// 根据系统匹配安装命令
/// </summary>
/// <param name="soft"></param>
/// <returns></returns>
protected string GetInstallCmd(string soft)
{
if (CmdType == CmdType.Apt)
{
return "echo y | apt-get install " + soft;
}
else if (CmdType == CmdType.Dnf)
{
return "echo y | dnf -y install " + soft;
}
else if (CmdType == CmdType.Yum)
{
return "echo y | yum -y install " + soft;
}
throw new Exception("未识别的系统");
}
}
}

View File

@ -1,63 +0,0 @@
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ProxySU_Core.Models.Developers
{
public class TrojanGoConfigBuilder
{
public static readonly int WebPort = 8088;
public static readonly string TrojanGoSettingPath = @"Templates\trojan-go\trojan-go.json";
public static readonly string CaddyFilePath = @"Templates\trojan-go\base.caddyfile";
public static string BuildTrojanGoConfig(TrojanGoSettings parameters)
{
var jsonStr = File.ReadAllText(TrojanGoSettingPath);
var settings = JToken.FromObject(JsonConvert.DeserializeObject(jsonStr));
settings["remote_port"] = WebPort;
settings["password"][0] = parameters.Password;
settings["ssl"]["sni"] = parameters.Domain;
return JsonConvert.SerializeObject(settings, Formatting.Indented, new JsonSerializerSettings()
{
NullValueHandling = NullValueHandling.Ignore
});
}
public static string BuildCaddyConfig(TrojanGoSettings parameters, bool useCustomWeb = false)
{
var caddyStr = File.ReadAllText(CaddyFilePath);
caddyStr.Replace("##domain##", parameters.Domain);
caddyStr.Replace("##port##", WebPort.ToString());
if (!useCustomWeb && !string.IsNullOrEmpty(parameters.MaskDomain))
{
var prefix = "http://";
if (parameters.MaskDomain.StartsWith("https://"))
{
prefix = "https://";
}
var domain = parameters.MaskDomain
.TrimStart("http://".ToCharArray())
.TrimStart("https://".ToCharArray());
caddyStr = caddyStr.Replace("##reverse_proxy##", $"reverse_proxy {prefix}{domain} {{ \n header_up Host {domain} \n }}");
}
else
{
caddyStr = caddyStr.Replace("##reverse_proxy##", "");
}
return caddyStr;
}
}
}

View File

@ -1,135 +0,0 @@
using Renci.SshNet;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
namespace ProxySU_Core.Models.Developers
{
public class TrojanGoProject : Project<TrojanGoSettings>
{
public TrojanGoProject(SshClient sshClient, TrojanGoSettings parameters, Action<string> writeOutput) : base(sshClient, parameters, writeOutput)
{
}
public override void Install()
{
try
{
EnsureRootAuth();
if (FileExists("/usr/local/bin/xray"))
{
var btnResult = MessageBox.Show("已经安装Xray是否需要重装", "提示", MessageBoxButton.YesNo);
if (btnResult == MessageBoxResult.No)
{
MessageBox.Show("安装终止", "提示");
return;
}
}
WriteOutput("检测安装系统环境...");
EnsureSystemEnv();
WriteOutput("检测安装系统环境完成");
WriteOutput("配置服务器端口...");
ConfigurePort();
WriteOutput("端口配置完成");
WriteOutput("安装必要的系统工具...");
ConfigureSoftware();
WriteOutput("系统工具安装完成");
WriteOutput("检测IP6...");
ConfigureIPv6();
WriteOutput("检测IP6完成");
WriteOutput("配置防火墙...");
ConfigureFirewall();
WriteOutput("防火墙配置完成");
WriteOutput("同步系统和本地时间...");
SyncTimeDiff();
WriteOutput("时间同步完成");
WriteOutput("检测域名是否绑定本机IP...");
ValidateDomain();
WriteOutput("域名检测完成");
WriteOutput("安装Trojan-Go...");
InstallTrojanGo();
WriteOutput("Trojan-Go安装完成");
WriteOutput("安装Caddy...");
InstallCaddy();
WriteOutput("Caddy安装完成");
WriteOutput("启动BBR");
EnableBBR();
UploadCaddyFile();
WriteOutput("************");
WriteOutput("安装完成,尽情享用吧......");
WriteOutput("************");
}
catch (Exception ex)
{
var errorLog = "安装终止," + ex.Message;
WriteOutput(errorLog);
MessageBox.Show(errorLog);
}
}
private void InstallTrojanGo()
{
WriteOutput("安装Trojan-Go");
RunCmd(@"curl https://raw.githubusercontent.com/proxysu/shellscript/master/trojan-go.sh yes | bash");
var success = FileExists("/usr/local/etc/trojan-go");
if (success == false)
{
throw new Exception("trojan-go 安装失败,请联系开发者!");
}
RunCmd($"sed -i 's/User=nobody/User=root/g' /etc/systemd/system/xray.service");
RunCmd($"sed -i 's/CapabilityBoundingSet=/#CapabilityBoundingSet=/g' /etc/systemd/system/xray.service");
RunCmd($"sed -i 's/AmbientCapabilities=/#AmbientCapabilities=/g' /etc/systemd/system/xray.service");
RunCmd($"systemctl daemon-reload");
RunCmd("systemctl enable trojan-go");
RunCmd("systemctl start trojan-go");
WriteOutput("Trojan-Go 安装完成");
InstallCert(
dirPath: "/usr/local/etc/trojan-go",
certName: "trojan-go.crt",
keyName: "trojan-go.key");
if (FileExists("/usr/local/etc/trojan-go/config.json"))
{
RunCmd("mv /usr/local/etc/trojan-go/config.json config.json.old");
}
// 上传配置
var settings = TrojanGoConfigBuilder.BuildTrojanGoConfig(Parameters);
var stream = new MemoryStream(Encoding.UTF8.GetBytes(settings));
UploadFile(stream, "/usr/local/etc/trojan-go/config.json");
RunCmd("systemctl restart trojan-go");
}
private void UploadCaddyFile(bool useCustomWeb = false)
{
var config = TrojanGoConfigBuilder.BuildCaddyConfig(Parameters, useCustomWeb);
var stream = new MemoryStream(Encoding.UTF8.GetBytes(config));
if (FileExists("/etc/caddy/Caddyfile"))
{
RunCmd("mv /etc/caddy/Caddyfile /etc/caddy/Caddyfile.back");
}
UploadFile(stream, "/etc/caddy/Caddyfile");
RunCmd("systemctl restart caddy");
}
}
}

View File

@ -1,29 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ProxySU_Core.Models.Developers
{
public class TrojanGoSettings : IParameters
{
public int Port { get; set; }
public List<int> FreePorts
{
get
{
return new List<int>();
}
}
public string Domain { get; set; }
public List<XrayType> Types { get; set; }
public string Password { get; set; }
public string MaskDomain { get; set; }
}
}

View File

@ -1,232 +0,0 @@
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using ProxySU_Core.Models;
using System;
using System.Collections.Generic;
using System.IO;
using System.Text;
namespace ProxySU_Core.Models.Developers
{
public class XrayConfigBuilder
{
private const string ServerLogDir = @"Templates\xray\server\00_log";
private const string ServerApiDir = @"Templates\xray\server\01_api";
private const string ServerDnsDir = @"Templates\xray\server\02_dns";
private const string ServerRoutingDir = @"Templates\xray\server\03_routing";
private const string ServerPolicyDir = @"Templates\xray\server\04_policy";
private const string ServerInboundsDir = @"Templates\xray\server\05_inbounds";
private const string ServerOutboundsDir = @"Templates\xray\server\06_outbounds";
private const string ServerTransportDir = @"Templates\xray\server\07_transport";
private const string ServerStatsDir = @"Templates\xray\server\08_stats";
private const string ServerReverseDir = @"Templates\xray\server\09_reverse";
private const string CaddyFileDir = @"Templates\xray\caddy";
public static int VLESS_TCP_Port = 1110;
public static int VLESS_WS_Port = 1111;
public static int VLESS_H2_Port = 1112;
public static int VLESS_mKCP_Port = 1113;
public static int VMESS_TCP_Port = 1210;
public static int VMESS_WS_Port = 1211;
public static int VMESS_H2_Port = 1212;
public static int Trojan_TCP_Port = 1310;
public static int Trojan_WS_Port = 1311;
public static int FullbackPort = 8080;
public static dynamic LoadXrayConfig()
{
dynamic logObj = LoadJsonObj(Path.Combine(ServerLogDir, "00_log.json"));
dynamic apiObj = LoadJsonObj(Path.Combine(ServerApiDir, "01_api.json"));
dynamic dnsObj = LoadJsonObj(Path.Combine(ServerDnsDir, "02_dns.json"));
dynamic routingObj = LoadJsonObj(Path.Combine(ServerRoutingDir, "03_routing.json"));
dynamic policyObj = LoadJsonObj(Path.Combine(ServerPolicyDir, "04_policy.json"));
dynamic inboundsObj = LoadJsonObj(Path.Combine(ServerInboundsDir, "05_inbounds.json"));
dynamic outboundsObj = LoadJsonObj(Path.Combine(ServerOutboundsDir, "06_outbounds.json"));
dynamic transportObj = LoadJsonObj(Path.Combine(ServerTransportDir, "07_transport.json"));
dynamic statsObj = LoadJsonObj(Path.Combine(ServerStatsDir, "08_stats.json"));
dynamic reverseObj = LoadJsonObj(Path.Combine(ServerReverseDir, "09_reverse.json"));
return new
{
log = logObj["log"],
//api = apiObj["api"], api不能为空
dns = dnsObj["dns"],
routing = routingObj["routing"],
policy = policyObj["policy"],
inbounds = inboundsObj["inbounds"],
outbounds = outboundsObj["outbounds"],
transport = transportObj["transport"],
stats = statsObj["stats"],
reverse = reverseObj["reverse"]
};
}
public static string BuildCaddyConfig(XraySettings parameters, bool useCustomWeb = false)
{
var caddyStr = File.ReadAllText(Path.Combine(CaddyFileDir, "base.caddyfile"));
caddyStr = caddyStr.Replace("##domain##", parameters.Domain);
caddyStr = caddyStr.Replace("##port##", FullbackPort.ToString());
if (!useCustomWeb && !string.IsNullOrEmpty(parameters.MaskDomain))
{
var prefix = "http://";
if (parameters.MaskDomain.StartsWith("https://"))
{
prefix = "https://";
}
var domain = parameters.MaskDomain
.TrimStart("http://".ToCharArray())
.TrimStart("https://".ToCharArray());
caddyStr = caddyStr.Replace("##reverse_proxy##", $"reverse_proxy {prefix}{domain} {{ \n header_up Host {domain} \n }}");
}
else
{
caddyStr = caddyStr.Replace("##reverse_proxy##", "");
}
return caddyStr;
}
public static string BuildXrayConfig(XraySettings parameters)
{
var xrayConfig = LoadXrayConfig();
var baseBound = GetBound("VLESS_TCP_XTLS.json");
baseBound.port = parameters.Port;
baseBound.settings.fallbacks.Add(JToken.FromObject(new
{
dest = FullbackPort
}));
xrayConfig.inbounds.Add(baseBound);
baseBound.settings.clients[0].id = parameters.UUID;
if (parameters.Types.Contains(XrayType.VLESS_WS))
{
var wsInbound = GetBound("VLESS_WS.json");
wsInbound.port = VLESS_WS_Port;
wsInbound.settings.clients[0].id = parameters.UUID;
wsInbound.streamSettings.wsSettings.path = parameters.VLESS_WS_Path;
baseBound.settings.fallbacks.Add(JToken.FromObject(new
{
dest = VLESS_WS_Port,
path = parameters.VLESS_WS_Path,
xver = 1,
}));
xrayConfig.inbounds.Add(JToken.FromObject(wsInbound));
}
if (parameters.Types.Contains(XrayType.VLESS_gRPC))
{
var gRPCInBound = GetBound("VLESS_gRPC.json");
gRPCInBound.port = parameters.VLESS_gRPC_Port;
gRPCInBound.settings.clients[0].id = parameters.UUID;
gRPCInBound.streamSettings.grpcSettings.serviceName = parameters.VLESS_gRPC_ServiceName;
xrayConfig.inbounds.Add(JToken.FromObject(gRPCInBound));
}
if (parameters.Types.Contains(XrayType.VLESS_KCP))
{
var kcpBound = GetBound("VLESS_KCP.json");
kcpBound.port = parameters.VLESS_KCP_Port;
kcpBound.settings.clients[0].id = parameters.UUID;
kcpBound.streamSettings.kcpSettings.header.type = parameters.VLESS_KCP_Type;
kcpBound.streamSettings.kcpSettings.seed = parameters.VLESS_KCP_Seed;
xrayConfig.inbounds.Add(JToken.FromObject(kcpBound));
}
if (parameters.Types.Contains(XrayType.VMESS_TCP))
{
var mtcpBound = GetBound("VMESS_TCP.json");
mtcpBound.port = VMESS_TCP_Port;
mtcpBound.settings.clients[0].id = parameters.UUID;
mtcpBound.streamSettings.tcpSettings.header.request.path = parameters.VMESS_TCP_Path;
baseBound.settings.fallbacks.Add(JToken.FromObject(new
{
dest = VMESS_TCP_Port,
path = parameters.VMESS_TCP_Path,
xver = 1,
}));
xrayConfig.inbounds.Add(JToken.FromObject(mtcpBound));
}
if (parameters.Types.Contains(XrayType.VMESS_WS))
{
var mwsBound = GetBound("VMESS_WS.json");
mwsBound.port = VMESS_WS_Port;
mwsBound.settings.clients[0].id = parameters.UUID;
mwsBound.streamSettings.wsSettings.path = parameters.VMESS_WS_Path;
baseBound.settings.fallbacks.Add(JToken.FromObject(new
{
dest = VMESS_WS_Port,
path = parameters.VMESS_WS_Path,
xver = 1,
}));
xrayConfig.inbounds.Add(JToken.FromObject(mwsBound));
}
if (parameters.Types.Contains(XrayType.VMESS_KCP))
{
var kcpBound = GetBound("VMESS_KCP.json");
kcpBound.port = parameters.VMESS_KCP_Port;
kcpBound.settings.clients[0].id = parameters.UUID;
kcpBound.streamSettings.kcpSettings.header.type = parameters.VMESS_KCP_Type;
kcpBound.streamSettings.kcpSettings.seed = parameters.VMESS_KCP_Seed;
xrayConfig.inbounds.Add(JToken.FromObject(kcpBound));
}
if (parameters.Types.Contains(XrayType.Trojan_TCP))
{
var trojanTcpBound = GetBound("Trojan_TCP.json");
trojanTcpBound.port = Trojan_TCP_Port;
trojanTcpBound.settings.clients[0].password = parameters.TrojanPassword;
trojanTcpBound.settings.fallbacks[0].dest = FullbackPort;
baseBound.settings.fallbacks[0] = JToken.FromObject(new
{
dest = Trojan_TCP_Port,
xver = 1,
});
xrayConfig.inbounds.Add(JToken.FromObject(trojanTcpBound));
}
if (parameters.Types.Contains(XrayType.ShadowsocksAEAD))
{
var ssBound = GetBound("Shadowsocks-AEAD.json");
ssBound.port = parameters.ShadowSocksPort;
ssBound.settings.clients[0].password = parameters.ShadowsocksPassword;
ssBound.settings.clients[0].method = parameters.ShadowsocksMethod;
xrayConfig.inbounds.Add(JToken.FromObject(ssBound));
}
return JsonConvert.SerializeObject(
xrayConfig,
Formatting.Indented,
new JsonSerializerSettings()
{
NullValueHandling = NullValueHandling.Ignore
});
}
private static dynamic GetBound(string name)
{
return LoadJsonObj(Path.Combine(ServerInboundsDir, name));
}
private static dynamic LoadJsonObj(string path)
{
if (File.Exists(path))
{
var jsonStr = File.ReadAllText(path, Encoding.UTF8);
return JToken.FromObject(JsonConvert.DeserializeObject(jsonStr));
}
return null;
}
}
}

View File

@ -1,321 +0,0 @@
using Renci.SshNet;
using System;
using System.Collections.Generic;
using System.IO;
using System.Text;
using System.Windows;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using ProxySU_Core.Models;
namespace ProxySU_Core.Models.Developers
{
public class XrayProject : Project<XraySettings>
{
private const string ServerLogDir = @"Templates\xray\server\00_log";
private const string ServerApiDir = @"Templates\xray\server\01_api";
private const string ServerDnsDir = @"Templates\xray\server\02_dns";
private const string ServerRoutingDir = @"Templates\xray\server\03_routing";
private const string ServerPolicyDir = @"Templates\xray\server\04_policy";
private const string ServerInboundsDir = @"Templates\xray\server\05_inbounds";
private const string ServerOutboundsDir = @"Templates\xray\server\06_outbounds";
private const string ServerTransportDir = @"Templates\xray\server\07_transport";
private const string ServerStatsDir = @"Templates\xray\server\08_stats";
private const string ServerReverseDir = @"Templates\xray\server\09_reverse";
private const string CaddyFileDir = @"Templates\xray\caddy";
public XrayProject(SshClient sshClient, XraySettings parameters, Action<string> writeOutput) : base(sshClient, parameters, writeOutput)
{
}
/// <summary>
/// 安装Xray
/// </summary>
public override void Install()
{
try
{
EnsureRootAuth();
if (FileExists("/usr/local/bin/xray"))
{
var btnResult = MessageBox.Show("已经安装Xray是否需要重装", "提示", MessageBoxButton.YesNo);
if (btnResult == MessageBoxResult.No)
{
MessageBox.Show("安装终止", "提示");
return;
}
}
WriteOutput("检测安装系统环境...");
EnsureSystemEnv();
WriteOutput("检测安装系统环境完成");
WriteOutput("配置服务器端口...");
ConfigurePort();
WriteOutput("端口配置完成");
WriteOutput("安装必要的系统工具...");
ConfigureSoftware();
WriteOutput("系统工具安装完成");
WriteOutput("检测IP6...");
ConfigureIPv6();
WriteOutput("检测IP6完成");
WriteOutput("配置防火墙...");
ConfigureFirewall();
WriteOutput("防火墙配置完成");
WriteOutput("同步系统和本地时间...");
SyncTimeDiff();
WriteOutput("时间同步完成");
WriteOutput("检测域名是否绑定本机IP...");
ValidateDomain();
WriteOutput("域名检测完成");
WriteOutput("安装Xray-Core...");
InstallXrayWithCert();
WriteOutput("Xray-Core安装完成");
WriteOutput("安装Caddy...");
InstallCaddy();
WriteOutput("Caddy安装完成");
WriteOutput("启动BBR");
EnableBBR();
UploadCaddyFile();
WriteOutput("************");
WriteOutput("安装完成,尽情享用吧......");
WriteOutput("************");
}
catch (Exception ex)
{
var errorLog = "安装终止," + ex.Message;
WriteOutput(errorLog);
MessageBox.Show(errorLog);
}
}
public void UninstallProxy()
{
EnsureRootAuth();
WriteOutput("卸载Caddy");
UninstallCaddy();
WriteOutput("卸载Xray");
UninstallXray();
WriteOutput("卸载证书");
UninstallAcme();
WriteOutput("关闭端口");
ClosePort(Parameters.ShadowSocksPort, Parameters.VMESS_KCP_Port);
WriteOutput("************ 卸载完成 ************");
}
/// <summary>
/// 更新xray内核
/// </summary>
public void UpdateXrayCore()
{
EnsureRootAuth();
EnsureSystemEnv();
RunCmd("bash -c \"$(curl -L https://github.com/XTLS/Xray-install/raw/main/install-release.sh)\" @ install");
RunCmd("systemctl restart xray");
WriteOutput("************ 更新xray内核完成 ************");
}
/// <summary>
/// 更新xray配置
/// </summary>
public void UpdateXraySettings()
{
EnsureRootAuth();
EnsureSystemEnv();
ConfigureFirewall();
var configJson = XrayConfigBuilder.BuildXrayConfig(Parameters);
var stream = new MemoryStream(Encoding.UTF8.GetBytes(configJson));
RunCmd("rm -rf /usr/local/etc/xray/config.json");
UploadFile(stream, "/usr/local/etc/xray/config.json");
ConfigurePort();
UploadCaddyFile(string.IsNullOrEmpty(Parameters.MaskDomain));
RunCmd("systemctl restart xray");
WriteOutput("************ 更新Xray配置成功更新配置不包含域名如果域名更换请重新安装。 ************");
}
/// <summary>
/// 重装Caddy
/// </summary>
public void DoUninstallCaddy()
{
EnsureRootAuth();
UninstallCaddy();
WriteOutput("************ 卸载Caddy完成 ************");
}
/// <summary>
/// 安装证书
/// </summary>
public void InstallCertToXray()
{
EnsureRootAuth();
EnsureSystemEnv();
InstallCert(
dirPath: "/usr/local/etc/xray/ssl",
certName: "xray_ssl.crt",
keyName: "xray_ssl.key");
RunCmd("systemctl restart xray");
WriteOutput("************ 安装证书完成 ************");
}
/// <summary>
/// 上传证书
/// </summary>
/// <param name="keyStrem"></param>
/// <param name="crtStream"></param>
public void UploadCert(Stream stream)
{
EnsureRootAuth();
EnsureSystemEnv();
// 转移旧文件
var oldFileName = $"ssl_{DateTime.Now.Ticks}";
RunCmd($"mv /usr/local/etc/xray/ssl /usr/local/etc/xray/{oldFileName}");
// 上传新文件
RunCmd("mkdir /usr/local/etc/xray/ssl");
UploadFile(stream, "/usr/local/etc/xray/ssl/ssl.zip");
RunCmd("unzip /usr/local/etc/xray/ssl/ssl.zip -d /usr/local/etc/xray/ssl");
// 改名
var crtFiles = RunCmd("find /usr/local/etc/xray/ssl/*.crt").Split("\n".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
if (crtFiles.Length > 0)
{
RunCmd($"mv {crtFiles[0]} /usr/local/etc/xray/ssl/xray_ssl.crt");
}
else
{
WriteOutput("************ 上传证书失败,请联系开发者 ************");
RunCmd("rm -rf /usr/local/etc/xray/ssl");
RunCmd($"mv /usr/local/etc/xray/ssl{oldFileName} /usr/local/etc/xray/ssl");
WriteOutput("操作已回滚");
return;
}
var keyFiles = RunCmd("find /usr/local/etc/xray/ssl/*.key").Split("\n".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
if (keyFiles.Length > 0)
{
RunCmd($"mv {keyFiles[0]} /usr/local/etc/xray/ssl/xray_ssl.key");
}
else
{
WriteOutput("************ 上传证书失败,请联系开发者 ************");
RunCmd("rm -rf /usr/local/etc/xray/ssl");
RunCmd($"mv /usr/local/etc/xray/ssl{oldFileName} /usr/local/etc/xray/ssl");
WriteOutput("操作已回滚");
return;
}
RunCmd("systemctl restart xray");
WriteOutput("************ 上传证书完成 ************");
}
/// <summary>
/// 上传静态网站
/// </summary>
/// <param name="stream"></param>
public void UploadWeb(Stream stream)
{
EnsureRootAuth();
EnsureSystemEnv();
if (!FileExists("/usr/share/caddy"))
{
RunCmd("mkdir /usr/share/caddy");
}
RunCmd("rm -rf /usr/share/caddy/*");
UploadFile(stream, "/usr/share/caddy/caddy.zip");
RunCmd("unzip /usr/share/caddy/caddy.zip -d /usr/share/caddy");
RunCmd("chmod -R 777 /usr/share/caddy");
UploadCaddyFile(useCustomWeb: true);
WriteOutput("************ 上传网站模板完成 ************");
}
private void UploadCaddyFile(bool useCustomWeb = false)
{
var configJson = XrayConfigBuilder.BuildCaddyConfig(Parameters, useCustomWeb);
var stream = new MemoryStream(Encoding.UTF8.GetBytes(configJson));
if (FileExists("/etc/caddy/Caddyfile"))
{
RunCmd("mv /etc/caddy/Caddyfile /etc/caddy/Caddyfile.back");
}
UploadFile(stream, "/etc/caddy/Caddyfile");
RunCmd("systemctl restart caddy");
}
private void UninstallXray()
{
RunCmd("bash -c \"$(curl -L https://github.com/XTLS/Xray-install/raw/main/install-release.sh)\" @ remove");
}
private void UninstallAcme()
{
RunCmd("acme.sh --uninstall");
RunCmd("rm -r ~/.acme.sh");
}
private void InstallXrayWithCert()
{
RunCmd("bash -c \"$(curl -L https://github.com/XTLS/Xray-install/raw/main/install-release.sh)\" @ install");
if (!FileExists("/usr/local/bin/xray"))
{
WriteOutput("Xray-Core安装失败请联系开发者");
throw new Exception("Xray-Core安装失败请联系开发者");
}
RunCmd($"sed -i 's/User=nobody/User=root/g' /etc/systemd/system/xray.service");
RunCmd($"sed -i 's/CapabilityBoundingSet=/#CapabilityBoundingSet=/g' /etc/systemd/system/xray.service");
RunCmd($"sed -i 's/AmbientCapabilities=/#AmbientCapabilities=/g' /etc/systemd/system/xray.service");
RunCmd($"systemctl daemon-reload");
if (FileExists("/usr/local/etc/xray/config.json"))
{
RunCmd(@"mv /usr/local/etc/xray/config.json /usr/local/etc/xray/config.json.1");
}
WriteOutput("安装TLS证书");
InstallCertToXray();
WriteOutput("TLS证书安装完成");
var configJson = XrayConfigBuilder.BuildXrayConfig(Parameters);
var stream = new MemoryStream(Encoding.UTF8.GetBytes(configJson));
UploadFile(stream, "/usr/local/etc/xray/config.json");
RunCmd("systemctl restart xray");
}
private int GetRandomPort()
{
var random = new Random();
return random.Next(10001, 60000);
}
private dynamic LoadJsonObj(string path)
{
if (File.Exists(path))
{
var jsonStr = File.ReadAllText(path, Encoding.UTF8);
return JsonConvert.DeserializeObject(jsonStr);
}
return null;
}
}
}

View File

@ -1,220 +0,0 @@
using Newtonsoft.Json;
using ProxySU_Core.Common;
using ProxySU_Core.Models.Developers;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Web;
namespace ProxySU_Core.Models
{
public class XraySettings : IParameters
{
public XraySettings()
{
var guid = Guid.NewGuid().ToString();
Port = 443;
VLESS_KCP_Port = 2001;
VLESS_gRPC_Port = 2002;
VMESS_KCP_Port = 3001;
ShadowSocksPort = 4001;
UUID = guid;
Types = new List<XrayType>();
VLESS_WS_Path = "/vlessws";
VLESS_H2_Path = "/vlessh2";
VLESS_KCP_Type = "none";
VLESS_KCP_Seed = guid;
VLESS_gRPC_ServiceName = "xray_gRPC";
VMESS_WS_Path = "/vmessws";
VMESS_TCP_Path = "/vmesstcp";
VMESS_H2_Path = "/vmessh2";
VMESS_KCP_Seed = guid;
VMESS_KCP_Type = "none";
TrojanPassword = guid;
Trojan_WS_Path = "/trojanws";
ShadowsocksPassword = guid;
ShadowsocksMethod = "aes-128-gcm";
}
/// <summary>
/// 访问端口
/// </summary>
public int Port { get; set; }
/// <summary>
/// UUID
/// </summary>
public string UUID { get; set; }
#region vless
/// <summary>
/// vless ws路径
/// </summary>
public string VLESS_WS_Path { get; set; }
/// <summary>
/// vless http2 path
/// </summary>
public string VLESS_H2_Path { get; set; }
/// <summary>
/// vless kcp seed
/// </summary>
public string VLESS_KCP_Seed { get; set; }
/// <summary>
/// vless kcp type
/// </summary>
public string VLESS_KCP_Type { get; set; }
/// <summary>
/// vless kcp端口
/// </summary>
public int VLESS_KCP_Port { get; set; }
/// <summary>
/// grpc service name
/// </summary>
public string VLESS_gRPC_ServiceName { get; set; }
/// <summary>
/// grpc port
/// </summary>
public int VLESS_gRPC_Port { get; set; }
#endregion
#region vmess
/// <summary>
/// vmess ws路径
/// </summary>
public string VMESS_WS_Path { get; set; }
/// <summary>
/// vmess tcp路径
/// </summary>
public string VMESS_TCP_Path { get; set; }
/// <summary>
/// vmess http2 path
/// </summary>
public string VMESS_H2_Path { get; set; }
/// <summary>
/// vmess kcp seed
/// </summary>
public string VMESS_KCP_Seed { get; set; }
/// <summary>
/// vmess kcp type
/// </summary>
public string VMESS_KCP_Type { get; set; }
/// <summary>
/// vmess kcp端口
/// </summary>
public int VMESS_KCP_Port { get; set; }
#endregion
#region Trojan
/// <summary>
/// trojan密码
/// </summary>
public string TrojanPassword { get; set; }
/// <summary>
/// trojan ws path
/// </summary>
public string Trojan_WS_Path { get; set; }
#endregion
#region ShadowsocksAEAD
/// <summary>
/// ss password
/// </summary>
public string ShadowsocksPassword { get; set; }
/// <summary>
/// ss method
/// </summary>
public string ShadowsocksMethod { get; set; }
/// <summary>
/// ss端口
/// </summary>
public int ShadowSocksPort { get; set; }
#endregion
/// <summary>
/// 域名
/// </summary>
public string Domain { get; set; }
/// <summary>
/// 伪装域名
/// </summary>
public string MaskDomain { get; set; }
/// <summary>
/// 安装类型
/// </summary>
public List<XrayType> Types { get; set; }
public List<int> FreePorts
{
get
{
return new List<int>
{
VLESS_gRPC_Port,
VLESS_KCP_Port,
VMESS_KCP_Port,
ShadowSocksPort,
};
}
}
public string GetPath(XrayType type)
{
switch (type)
{
case XrayType.VLESS_WS:
return VLESS_WS_Path;
case XrayType.VLESS_H2:
return VLESS_H2_Path;
case XrayType.VMESS_TCP:
return VMESS_TCP_Path;
case XrayType.VMESS_WS:
return VMESS_WS_Path;
case XrayType.Trojan_WS:
return Trojan_WS_Path;
// no path
case XrayType.VLESS_TCP_XTLS:
case XrayType.VLESS_TCP:
case XrayType.VLESS_KCP:
case XrayType.VMESS_KCP:
case XrayType.Trojan_TCP:
return string.Empty;
default:
return string.Empty;
}
}
}
}

View File

@ -1,35 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ProxySU_Core.Models
{
public class Host
{
public Host()
{
Proxy = new LocalProxy();
}
public string Tag { get; set; }
public string Address { get; set; }
public string UserName { get; set; }
public string Password { get; set; }
public int Port { get; set; } = 22;
public string PrivateKeyPath { get; set; }
public LocalProxy Proxy { get; set; }
public LoginSecretType SecretType { get; set; }
}
}

View File

@ -1,20 +0,0 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace ProxySU_Core.Models
{
public class LocalProxy
{
public string Address { get; set; } = "127.0.0.1";
public int Port { get; set; } = 1080;
public LocalProxyType Type { get; set; }
public string UserName { get; set; }
public string Password { get; set; }
}
}

View File

@ -1,23 +0,0 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace ProxySU_Core.Models
{
public enum LocalProxyType
{
None = 0,
//
// 摘要:
// A SOCKS4 proxy server.
Socks4 = 1,
//
// 摘要:
// A SOCKS5 proxy server.
Socks5 = 2,
//
// 摘要:
// A HTTP proxy server.
Http = 3
}
}

View File

@ -1,12 +0,0 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace ProxySU_Core.Models
{
public enum LoginSecretType
{
Password = 0,
PrivateKey = 1
}
}

View File

@ -1,24 +0,0 @@
using ProxySU_Core.Models;
using System;
using System.Collections.Generic;
using System.Text;
namespace ProxySU_Core.Models
{
public class Record
{
public Record()
{
}
public Record(Host host)
{
this.Host = host;
}
public Host Host { get; set; } = new Host();
public XraySettings Settings { get; set; } = new XraySettings();
}
}

View File

@ -1,196 +0,0 @@
using Newtonsoft.Json;
using ProxySU_Core.Common;
using ProxySU_Core.Models.Developers;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Web;
namespace ProxySU_Core.Models
{
public class ShareLink
{
public static string Build(XrayType xrayType, XraySettings settings)
{
switch (xrayType)
{
case XrayType.VLESS_TCP:
case XrayType.VLESS_TCP_XTLS:
case XrayType.VLESS_WS:
case XrayType.VLESS_KCP:
case XrayType.VLESS_gRPC:
case XrayType.Trojan_TCP:
return BuildVlessShareLink(xrayType, settings);
case XrayType.VMESS_TCP:
case XrayType.VMESS_WS:
case XrayType.VMESS_KCP:
return BuildVmessShareLink(xrayType, settings);
case XrayType.ShadowsocksAEAD:
return BuildShadowSocksShareLink(settings);
default:
return string.Empty;
}
}
private static string BuildShadowSocksShareLink(XraySettings settings)
{
var _method = settings.ShadowsocksMethod;
var _password = settings.ShadowsocksPassword;
var _server = settings.Domain;
var _port = settings.ShadowSocksPort;
var base64URL = Base64.Encode($"{_method}:{_password}@{_server}:{_port}");
return "ss://" + base64URL + "#ShadowSocks";
}
private static string BuildVmessShareLink(XrayType xrayType, XraySettings settings)
{
var vmess = new Vmess
{
v = "2",
add = settings.Domain,
port = settings.Port.ToString(),
id = settings.UUID,
aid = "0",
net = "",
type = "none",
host = settings.Domain,
path = "",
tls = "tls",
ps = "",
};
switch (xrayType)
{
case XrayType.VMESS_TCP:
vmess.ps = "vmess-tcp-tls";
vmess.net = "tcp";
vmess.type = "http";
vmess.path = settings.VMESS_TCP_Path;
break;
case XrayType.VMESS_WS:
vmess.ps = "vmess-ws-tls";
vmess.net = "ws";
vmess.type = "none";
vmess.path = settings.VMESS_WS_Path;
break;
case XrayType.VMESS_KCP:
vmess.ps = "vmess-mKCP";
vmess.port = settings.VMESS_KCP_Port.ToString();
vmess.net = "kcp";
vmess.type = settings.VMESS_KCP_Type;
vmess.path = settings.VMESS_KCP_Seed;
vmess.tls = "";
break;
default:
return string.Empty;
}
var base64Url = Base64.Encode(JsonConvert.SerializeObject(vmess));
return $"vmess://" + base64Url;
}
private static string BuildVlessShareLink(XrayType xrayType, XraySettings settings)
{
var _protocol = string.Empty;
var _uuid = settings.UUID;
var _domain = settings.Domain;
var _port = settings.Port;
var _type = string.Empty;
var _encryption = "none";
var _security = "tls";
var _path = "/";
var _host = settings.Domain;
var _descriptiveText = string.Empty;
var _headerType = "none";
var _seed = string.Empty;
switch (xrayType)
{
case XrayType.VLESS_TCP:
_protocol = "vless";
_type = "tcp";
_descriptiveText = "vless-tcp-tls";
break;
case XrayType.VLESS_TCP_XTLS:
_protocol = "vless";
_type = "tcp";
_security = "xtls";
_descriptiveText = "vless-tcp-xtls";
break;
case XrayType.VLESS_WS:
_protocol = "vless";
_type = "ws";
_path = settings.VLESS_WS_Path;
_descriptiveText = "vless-ws-tls";
break;
case XrayType.VLESS_KCP:
_protocol = "vless";
_type = "kcp";
_headerType = settings.VLESS_KCP_Type;
_seed = settings.VLESS_KCP_Seed;
_port = settings.VLESS_KCP_Port;
_security = "none";
_descriptiveText = "vless-mKCP";
break;
case XrayType.VLESS_gRPC:
_protocol = "vless";
_type = "grpc";
_path = settings.VLESS_gRPC_ServiceName;
_descriptiveText = "vless-gRPC";
break;
case XrayType.Trojan_TCP:
_protocol = "trojan";
_uuid = settings.TrojanPassword;
_descriptiveText = "trojan-tcp";
break;
default:
throw new Exception("暂未实现的协议");
}
string parametersURL = string.Empty;
if (xrayType != XrayType.Trojan_TCP)
{
// 4.3 传输层相关段
parametersURL = $"?type={_type}&encryption={_encryption}&security={_security}&path={HttpUtility.UrlEncode(_path)}&headerType={_headerType}";
// kcp
if (xrayType == XrayType.VLESS_KCP)
{
parametersURL += $"&seed={_seed}";
}
// 4.4 TLS 相关段
if (xrayType == XrayType.VLESS_TCP_XTLS)
{
parametersURL += "&flow=xtls-rprx-direct";
}
}
return $"{_protocol}://{HttpUtility.UrlEncode(_uuid)}@{_domain}:{_port}{parametersURL}#{HttpUtility.UrlEncode(_descriptiveText)}";
}
}
class Vmess
{
public string v { get; set; }
public string ps { get; set; }
public string add { get; set; }
public string port { get; set; }
public string id { get; set; }
public string aid { get; set; }
public string net { get; set; }
public string type { get; set; }
public string host { get; set; }
public string path { get; set; }
public string tls { get; set; }
}
}

View File

@ -1,34 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ProxySU_Core.Models
{
public enum XrayType
{
// 入口
VLESS_TCP_XTLS = 100,
// VLESS 101开头
VLESS_TCP = 101,
VLESS_WS = 102,
VLESS_H2 = 103,
VLESS_KCP = 104,
VLESS_gRPC = 110,
// VMESS 201开头
VMESS_TCP = 201,
VMESS_WS = 202,
VMESS_H2 = 203,
VMESS_KCP = 204,
// Trojan 301开头
Trojan_TCP = 301,
Trojan_WS = 302,
// SS
ShadowsocksAEAD = 401
}
}

View File

@ -1,55 +0,0 @@
using System.Reflection;
using System.Resources;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Windows;
// 有关程序集的一般信息由以下
// 控制。更改这些特性值可修改
// 与程序集关联的信息。
[assembly: AssemblyTitle("ProxySU_Core")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("ProxySU_Core")]
[assembly: AssemblyCopyright("Copyright © 2021")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// 将 ComVisible 设置为 false 会使此程序集中的类型
//对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型
//请将此类型的 ComVisible 特性设置为 true。
[assembly: ComVisible(false)]
//若要开始生成可本地化的应用程序,请设置
//.csproj 文件中的 <UICulture>CultureYouAreCodingWith</UICulture>
//例如,如果您在源文件中使用的是美国英语,
//使用的是美国英语,请将 <UICulture> 设置为 en-US。 然后取消
//对以下 NeutralResourceLanguage 特性的注释。 更新
//以下行中的“en-US”以匹配项目文件中的 UICulture 设置。
//[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)]
[assembly: ThemeInfo(
ResourceDictionaryLocation.None, //主题特定资源词典所处位置
//(未在页面中找到资源时使用,
//或应用程序资源字典中找到时使用)
ResourceDictionaryLocation.SourceAssembly //常规资源词典所处位置
//(未在页面中找到资源时使用,
//、应用程序或任何主题专用资源字典中找到时使用)
)]
// 程序集的版本信息由下列四个值组成:
//
// 主版本
// 次版本
// 生成号
// 修订号
//
//可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值
//通过使用 "*",如下所示:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("3.1.3.0")]
[assembly: AssemblyFileVersion("3.1.3.0")]

View File

@ -1,63 +0,0 @@
//------------------------------------------------------------------------------
// <auto-generated>
// 此代码由工具生成。
// 运行时版本:4.0.30319.42000
//
// 对此文件的更改可能会导致不正确的行为,并且如果
// 重新生成代码,这些更改将会丢失。
// </auto-generated>
//------------------------------------------------------------------------------
namespace ProxySU_Core.Properties {
using System;
/// <summary>
/// 一个强类型的资源类,用于查找本地化的字符串等。
/// </summary>
// 此类是由 StronglyTypedResourceBuilder
// 类通过类似于 ResGen 或 Visual Studio 的工具自动生成的。
// 若要添加或移除成员,请编辑 .ResX 文件,然后重新运行 ResGen
// (以 /str 作为命令选项),或重新生成 VS 项目。
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class Resources {
private static global::System.Resources.ResourceManager resourceMan;
private static global::System.Globalization.CultureInfo resourceCulture;
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
internal Resources() {
}
/// <summary>
/// 返回此类使用的缓存的 ResourceManager 实例。
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Resources.ResourceManager ResourceManager {
get {
if (object.ReferenceEquals(resourceMan, null)) {
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("ProxySU_Core.Properties.Resources", typeof(Resources).Assembly);
resourceMan = temp;
}
return resourceMan;
}
}
/// <summary>
/// 重写当前线程的 CurrentUICulture 属性,对
/// 使用此强类型资源类的所有资源查找执行重写。
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture {
get {
return resourceCulture;
}
set {
resourceCulture = value;
}
}
}
}

View File

@ -1,117 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@ -1,26 +0,0 @@
//------------------------------------------------------------------------------
// <auto-generated>
// 此代码由工具生成。
// 运行时版本:4.0.30319.42000
//
// 对此文件的更改可能会导致不正确的行为,并且如果
// 重新生成代码,这些更改将会丢失。
// </auto-generated>
//------------------------------------------------------------------------------
namespace ProxySU_Core.Properties {
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "16.8.1.0")]
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
public static Settings Default {
get {
return defaultInstance;
}
}
}
}

View File

@ -1,7 +0,0 @@
<?xml version='1.0' encoding='utf-8'?>
<SettingsFile xmlns="uri:settings" CurrentProfile="(Default)">
<Profiles>
<Profile Name="(Default)" />
</Profiles>
<Settings />
</SettingsFile>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

View File

@ -1,463 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{B066015C-D347-4493-92F1-6556D3863996}</ProjectGuid>
<OutputType>WinExe</OutputType>
<RootNamespace>ProxySU_Core</RootNamespace>
<AssemblyName>ProxySU_Core</AssemblyName>
<TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<ProjectTypeGuids>{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
<WarningLevel>4</WarningLevel>
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
<Deterministic>true</Deterministic>
<NuGetPackageImportStamp>
</NuGetPackageImportStamp>
<IsWebBootstrapper>false</IsWebBootstrapper>
<PublishUrl>C:\Users\huife\Desktop\publish_new\</PublishUrl>
<Install>true</Install>
<InstallFrom>Disk</InstallFrom>
<UpdateEnabled>false</UpdateEnabled>
<UpdateMode>Foreground</UpdateMode>
<UpdateInterval>7</UpdateInterval>
<UpdateIntervalUnits>Days</UpdateIntervalUnits>
<UpdatePeriodically>false</UpdatePeriodically>
<UpdateRequired>false</UpdateRequired>
<MapFileExtensions>true</MapFileExtensions>
<ApplicationRevision>1</ApplicationRevision>
<ApplicationVersion>1.0.0.%2a</ApplicationVersion>
<UseApplicationTrust>false</UseApplicationTrust>
<PublishWizardCompleted>true</PublishWizardCompleted>
<BootstrapperEnabled>true</BootstrapperEnabled>
<TargetFrameworkProfile />
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup>
<ManifestCertificateThumbprint>D529B8E43BC86188988D830C545B400612900BB3</ManifestCertificateThumbprint>
</PropertyGroup>
<PropertyGroup>
<ManifestKeyFile>ProxySU_Core_TemporaryKey.pfx</ManifestKeyFile>
</PropertyGroup>
<PropertyGroup>
<GenerateManifests>true</GenerateManifests>
</PropertyGroup>
<PropertyGroup>
<SignManifests>false</SignManifests>
</PropertyGroup>
<PropertyGroup>
<ApplicationIcon>ProxySU.ico</ApplicationIcon>
</PropertyGroup>
<ItemGroup>
<Reference Include="ControlzEx, Version=5.0.0.0, Culture=neutral, PublicKeyToken=69f1c32f803d307e, processorArchitecture=MSIL">
<HintPath>..\packages\ControlzEx.5.0.0\lib\net452\ControlzEx.dll</HintPath>
</Reference>
<Reference Include="MahApps.Metro, Version=2.0.0.0, Culture=neutral, PublicKeyToken=51482d6f650b2b3f, processorArchitecture=MSIL">
<HintPath>..\packages\MahApps.Metro.2.4.5\lib\net46\MahApps.Metro.dll</HintPath>
</Reference>
<Reference Include="MaterialDesignColors, Version=2.0.1.2556, Culture=neutral, PublicKeyToken=df2a72020bd7962a, processorArchitecture=MSIL">
<HintPath>..\packages\MaterialDesignColors.2.0.1\lib\net452\MaterialDesignColors.dll</HintPath>
</Reference>
<Reference Include="MaterialDesignThemes.MahApps, Version=0.1.7.2556, Culture=neutral, PublicKeyToken=df2a72020bd7962a, processorArchitecture=MSIL">
<HintPath>..\packages\MaterialDesignThemes.MahApps.0.1.7\lib\net452\MaterialDesignThemes.MahApps.dll</HintPath>
</Reference>
<Reference Include="MaterialDesignThemes.Wpf, Version=4.1.0.2556, Culture=neutral, PublicKeyToken=df2a72020bd7962a, processorArchitecture=MSIL">
<HintPath>..\packages\MaterialDesignThemes.4.1.0\lib\net452\MaterialDesignThemes.Wpf.dll</HintPath>
</Reference>
<Reference Include="Microsoft.Xaml.Behaviors, Version=1.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.Xaml.Behaviors.Wpf.1.1.31\lib\net45\Microsoft.Xaml.Behaviors.dll</HintPath>
</Reference>
<Reference Include="Newtonsoft.Json, Version=13.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<HintPath>..\packages\Newtonsoft.Json.13.0.1\lib\net45\Newtonsoft.Json.dll</HintPath>
</Reference>
<Reference Include="QRCoder, Version=1.4.1.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\QRCoder.1.4.1\lib\net40\QRCoder.dll</HintPath>
</Reference>
<Reference Include="Renci.SshNet, Version=2020.0.1.0, Culture=neutral, PublicKeyToken=1cee9f8bde3db106, processorArchitecture=MSIL">
<HintPath>..\packages\SSH.NET.2020.0.1\lib\net40\Renci.SshNet.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.ComponentModel.DataAnnotations" />
<Reference Include="System.Configuration" />
<Reference Include="System.Data" />
<Reference Include="System.Drawing" />
<Reference Include="System.Web" />
<Reference Include="System.Web.Extensions" />
<Reference Include="System.Xml" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Core" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="System.Net.Http" />
<Reference Include="System.Xaml">
<RequiredTargetFramework>4.0</RequiredTargetFramework>
</Reference>
<Reference Include="WindowsBase" />
<Reference Include="PresentationCore" />
<Reference Include="PresentationFramework" />
</ItemGroup>
<ItemGroup>
<ApplicationDefinition Include="App.xaml">
<Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType>
</ApplicationDefinition>
<Compile Include="App.xaml.cs">
<DependentUpon>App.xaml</DependentUpon>
<SubType>Code</SubType>
</Compile>
<Compile Include="Common\Base64.cs" />
<Compile Include="Converters\LoginSecretTypeConverter.cs" />
<Compile Include="Converters\VisibleConverter.cs" />
<Compile Include="Models\AppSettings.cs" />
<Compile Include="Models\Developers\TrojanGoConfigBuilder.cs" />
<Compile Include="Models\Developers\TrojanGoProject.cs" />
<Compile Include="Models\Developers\TrojanGoSettings.cs" />
<Compile Include="Models\Host.cs" />
<Compile Include="Models\ShareLink.cs" />
<Compile Include="Models\Developers\XraySettings.cs" />
<Compile Include="Models\XrayType.cs" />
<Compile Include="Tools\DateTimeUtils.cs" />
<Compile Include="Tools\Extensions.cs" />
<Compile Include="ViewModels\BaseCommand.cs" />
<Compile Include="ViewModels\BaseModel.cs" />
<Compile Include="ViewModels\BaseViewModel.cs" />
<Compile Include="Models\Developers\XrayConfigBuilder.cs" />
<Compile Include="Models\Developers\IParameters.cs" />
<Compile Include="Models\Developers\Project.cs" />
<Compile Include="Models\Developers\XrayProject.cs" />
<Compile Include="ViewModels\HostViewModel.cs" />
<Compile Include="Models\LocalProxy.cs" />
<Compile Include="Models\LocalProxyType.cs" />
<Compile Include="Models\LoginSecretType.cs" />
<Compile Include="Models\Record.cs" />
<Compile Include="ViewModels\IdValueViewModel.cs" />
<Compile Include="ViewModels\RecordViewModel.cs" />
<Compile Include="ViewModels\Terminal.cs" />
<Compile Include="ViewModels\XraySettingsViewModel.cs" />
<Compile Include="Views\ClientInfo\ClientInfoWindow.xaml.cs">
<DependentUpon>ClientInfoWindow.xaml</DependentUpon>
</Compile>
<Compile Include="Views\ClientInfo\ShadowSocksControl.xaml.cs">
<DependentUpon>ShadowSocksControl.xaml</DependentUpon>
</Compile>
<Compile Include="Views\ClientInfo\Trojan_TCP_Control.xaml.cs">
<DependentUpon>Trojan_TCP_Control.xaml</DependentUpon>
</Compile>
<Compile Include="Views\ClientInfo\VLESS_gRPC_Control.xaml.cs">
<DependentUpon>VLESS_gRPC_Control.xaml</DependentUpon>
</Compile>
<Compile Include="Views\ClientInfo\VLESS_KCP_Control.xaml.cs">
<DependentUpon>VLESS_KCP_Control.xaml</DependentUpon>
</Compile>
<Compile Include="Views\ClientInfo\VLESS_TCP_TLS_Control.xaml.cs">
<DependentUpon>VLESS_TCP_TLS_Control.xaml</DependentUpon>
</Compile>
<Compile Include="Views\ClientInfo\VLESS_WS_TLS_Control.xaml.cs">
<DependentUpon>VLESS_WS_TLS_Control.xaml</DependentUpon>
</Compile>
<Compile Include="Views\ClientInfo\VLESS_XTLS_Control.xaml.cs">
<DependentUpon>VLESS_XTLS_Control.xaml</DependentUpon>
</Compile>
<Compile Include="Views\ClientInfo\VMESS_KCP_Control.xaml.cs">
<DependentUpon>VMESS_KCP_Control.xaml</DependentUpon>
</Compile>
<Compile Include="Views\ClientInfo\VMESS_TCP_TLS_Control.xaml.cs">
<DependentUpon>VMESS_TCP_TLS_Control.xaml</DependentUpon>
</Compile>
<Compile Include="Views\ClientInfo\VMESS_WS_TLS_Control.xaml.cs">
<DependentUpon>VMESS_WS_TLS_Control.xaml</DependentUpon>
</Compile>
<Compile Include="Views\MainWindow.xaml.cs">
<DependentUpon>MainWindow.xaml</DependentUpon>
</Compile>
<Compile Include="Views\RecordEditor\RecordEditorWindow.xaml.cs">
<DependentUpon>RecordEditorWindow.xaml</DependentUpon>
</Compile>
<Compile Include="Views\RecordEditor\ServerInfoControl.xaml.cs">
<DependentUpon>ServerInfoControl.xaml</DependentUpon>
</Compile>
<Compile Include="Views\RecordEditor\XrayEditorControl.xaml.cs">
<DependentUpon>XrayEditorControl.xaml</DependentUpon>
</Compile>
<Compile Include="Views\TerminalWindow.xaml.cs">
<DependentUpon>TerminalWindow.xaml</DependentUpon>
</Compile>
<Compile Include="Views\TextBoxWindow.xaml.cs">
<DependentUpon>TextBoxWindow.xaml</DependentUpon>
</Compile>
</ItemGroup>
<ItemGroup>
<Compile Include="Converters\ProxyTypeConverter.cs" />
<Compile Include="Properties\AssemblyInfo.cs">
<SubType>Code</SubType>
</Compile>
<Compile Include="Properties\Resources.Designer.cs">
<AutoGen>True</AutoGen>
<DesignTime>True</DesignTime>
<DependentUpon>Resources.resx</DependentUpon>
</Compile>
<Compile Include="Properties\Settings.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Settings.settings</DependentUpon>
<DesignTimeSharedInput>True</DesignTimeSharedInput>
</Compile>
<EmbeddedResource Include="Properties\Resources.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
</EmbeddedResource>
<None Include="packages.config" />
<None Include="Properties\Settings.settings">
<Generator>SettingsSingleFileGenerator</Generator>
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
</None>
<None Include="Templates\trojan-go\base.caddyfile">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Include="Templates\trojan-go\trojan-go.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Include="Templates\xray\base.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Include="Templates\xray\caddy\base.caddyfile">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Include="Templates\xray\client\00_log\00_log.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Include="Templates\xray\client\01_api\01_api.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Include="Templates\xray\client\02_dns\02_dns.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Include="Templates\xray\client\03_routing\03_routing.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Include="Templates\xray\client\04_policy\04_policy.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Include="Templates\xray\client\05_inbounds\05_inbounds.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Include="Templates\xray\client\06_outbounds\06_outbounds.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Include="Templates\xray\client\06_outbounds\VLESS_HTTP2_TLS.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Include="Templates\xray\client\06_outbounds\VLESS_TCP_TLS_WS.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Include="Templates\xray\client\07_transport\07_transport.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Include="Templates\xray\client\08_stats\08_stats.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Include="Templates\xray\client\09_reverse\09_reverse.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Include="Templates\xray\server\00_log\00_log.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Include="Templates\xray\server\01_api\01_api.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Include="Templates\xray\server\02_dns\02_dns.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Include="Templates\xray\server\03_routing\03_routing.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Include="Templates\xray\server\04_policy\04_policy.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Include="Templates\xray\server\05_inbounds\05_inbounds.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Include="Templates\xray\server\05_inbounds\Shadowsocks-AEAD.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Include="Templates\xray\server\05_inbounds\Trojan_TCP.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Include="Templates\xray\server\05_inbounds\Trojan_WS.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Include="Templates\xray\server\05_inbounds\VLESS_gRPC.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Include="Templates\xray\server\05_inbounds\VLESS_HTTP2.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Include="Templates\xray\server\05_inbounds\VLESS_KCP.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Include="Templates\xray\server\05_inbounds\VLESS_TCP_XTLS.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Include="Templates\xray\server\05_inbounds\VLESS_WS.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Include="Templates\xray\server\05_inbounds\VMESS_HTTP2.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Include="Templates\xray\server\05_inbounds\VMESS_KCP.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Include="Templates\xray\server\05_inbounds\VMESS_TCP.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Include="Templates\xray\server\05_inbounds\VMESS_WS.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Include="Templates\xray\server\06_outbounds\06_outbounds.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Include="Templates\xray\server\07_transport\07_transport.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Include="Templates\xray\server\08_stats\08_stats.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Include="Templates\xray\server\09_reverse\09_reverse.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
</ItemGroup>
<ItemGroup>
<None Include="App.config" />
</ItemGroup>
<ItemGroup>
<Page Include="Resources\Languages\en.xaml">
<Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType>
</Page>
<Page Include="Resources\Languages\zh_cn.xaml">
<Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType>
</Page>
<Page Include="Resources\Styles\MaterialDesignThemes.Overrides.xaml">
<Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType>
</Page>
<Page Include="Views\ClientInfo\ClientInfoWindow.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Include="Views\ClientInfo\ShadowSocksControl.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Include="Views\ClientInfo\Trojan_TCP_Control.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Include="Views\ClientInfo\VLESS_gRPC_Control.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Include="Views\ClientInfo\VLESS_KCP_Control.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Include="Views\ClientInfo\VLESS_TCP_TLS_Control.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Include="Views\ClientInfo\VLESS_WS_TLS_Control.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Include="Views\ClientInfo\VLESS_XTLS_Control.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Include="Views\ClientInfo\VMESS_KCP_Control.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Include="Views\ClientInfo\VMESS_TCP_TLS_Control.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Include="Views\ClientInfo\VMESS_WS_TLS_Control.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Include="Views\MainWindow.xaml">
<Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType>
</Page>
<Page Include="Views\RecordEditor\RecordEditorWindow.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Include="Views\RecordEditor\ServerInfoControl.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Include="Views\RecordEditor\XrayEditorControl.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Include="Views\TerminalWindow.xaml">
<Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType>
</Page>
<Page Include="Views\TextBoxWindow.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
</ItemGroup>
<ItemGroup>
<Folder Include="Data\" />
</ItemGroup>
<ItemGroup>
<BootstrapperPackage Include=".NETFramework,Version=v4.6.1">
<Visible>False</Visible>
<ProductName>Microsoft .NET Framework 4.6.1 %28x86 和 x64%29</ProductName>
<Install>true</Install>
</BootstrapperPackage>
<BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
<Visible>False</Visible>
<ProductName>.NET Framework 3.5 SP1</ProductName>
<Install>false</Install>
</BootstrapperPackage>
</ItemGroup>
<ItemGroup>
<Resource Include="Resources\ProxySU.ico" />
</ItemGroup>
<ItemGroup>
<Resource Include="ProxySU.ico" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<ProjectExtensions />
<Import Project="..\packages\MaterialDesignThemes.4.1.0\build\MaterialDesignThemes.targets" Condition="Exists('..\packages\MaterialDesignThemes.4.1.0\build\MaterialDesignThemes.targets')" />
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
<PropertyGroup>
<ErrorText>这台计算机上缺少此项目引用的 NuGet 程序包。使用“NuGet 程序包还原”可下载这些程序包。有关更多信息,请参见 http://go.microsoft.com/fwlink/?LinkID=322105。缺少的文件是 {0}。</ErrorText>
</PropertyGroup>
<Error Condition="!Exists('..\packages\MaterialDesignThemes.4.1.0\build\MaterialDesignThemes.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\MaterialDesignThemes.4.1.0\build\MaterialDesignThemes.targets'))" />
</Target>
</Project>

View File

@ -1,122 +0,0 @@
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:sys="clr-namespace:System;assembly=mscorlib">
<sys:String x:Key="TabItemHeaderAppDeployment">Deployment</sys:String>
<sys:String x:Key="TabItemHeaderReadme">Readme</sys:String>
<sys:String x:Key="LanguageText">Language(语言)</sys:String>
<sys:String x:Key="LanguageChinese">Chinese</sys:String>
<sys:String x:Key="LanguageEnglish">English</sys:String>
<sys:String x:Key="Hosts">Hosts</sys:String>
<sys:String x:Key="AddHost">Add Host</sys:String>
<sys:String x:Key="ViewConfig">Export Config</sys:String>
<sys:String x:Key="ViewSub">Export Sub</sys:String>
<sys:String x:Key="Random">Random</sys:String>
<!--table-->
<sys:String x:Key="MainTableSelection">Selection</sys:String>
<sys:String x:Key="MainTableRemark">Remark</sys:String>
<sys:String x:Key="MainTableHost">Host</sys:String>
<sys:String x:Key="MainTablePort">Port</sys:String>
<sys:String x:Key="MainTableProxy">Proxy</sys:String>
<sys:String x:Key="MainTableActions">Actions</sys:String>
<sys:String x:Key="MainTableControl">Cnsole</sys:String>
<sys:String x:Key="MainTableViewConfig">Config</sys:String>
<sys:String x:Key="MainTableEditor">Edit</sys:String>
<sys:String x:Key="MainTableDelete">Delete</sys:String>
<sys:String x:Key="Actions">Actions</sys:String>
<sys:String x:Key="Connect">Connect</sys:String>
<sys:String x:Key="Edit">Edit</sys:String>
<sys:String x:Key="EditTemp">Edit Xray</sys:String>
<sys:String x:Key="Delete">Delete</sys:String>
<sys:String x:Key="Install">Install</sys:String>
<sys:String x:Key="Save">Save</sys:String>
<sys:String x:Key="SaveAs">Save as</sys:String>
<sys:String x:Key="Info">Info</sys:String>
<sys:String x:Key="Warning">Warning</sys:String>
<sys:String x:Key="Error">Error</sys:String>
<!--Host Window-->
<sys:String x:Key="HostWindowTitle">Server Editor</sys:String>
<sys:String x:Key="ConnectionGroupName">Connection</sys:String>
<sys:String x:Key="HostUserName">User</sys:String>
<sys:String x:Key="HostPassword">Password</sys:String>
<sys:String x:Key="HostTag">Tag</sys:String>
<sys:String x:Key="HostAddress">Host</sys:String>
<sys:String x:Key="HostPort">Port</sys:String>
<sys:String x:Key="HostLoginType">Method</sys:String>
<sys:String x:Key="PasswordLogin">Password Login</sys:String>
<sys:String x:Key="CertLogin">KeyLogin</sys:String>
<sys:String x:Key="KeyLoginField">Key</sys:String>
<sys:String x:Key="KeyUpload">Upload</sys:String>
<sys:String x:Key="ProxyGroupName">Proxy</sys:String>
<sys:String x:Key="ProxyType">Method</sys:String>
<sys:String x:Key="ProxyTypeNone">None</sys:String>
<sys:String x:Key="ProxyTypeHttp">Http</sys:String>
<sys:String x:Key="ProxyTypeSocks5">Socks5</sys:String>
<sys:String x:Key="ProxyHostName">Host</sys:String>
<sys:String x:Key="ProxyHostPort">Port</sys:String>
<sys:String x:Key="ProxyUserName">User</sys:String>
<sys:String x:Key="ProxyPassword">Password</sys:String>
<sys:String x:Key="HostAddressNotNull">Please enter host</sys:String>
<sys:String x:Key="HostPortNotNull">Please enter port</sys:String>
<sys:String x:Key="PorxyAddressNotNull">Please enter proxy host</sys:String>
<sys:String x:Key="ProxyProtNotNull">Please enter proxy port</sys:String>
<sys:String x:Key="VlessXtlsDesc" xml:space="preserve">VLESS over TCP With XTLS&#x0a;Preferred</sys:String>
<sys:String x:Key="VlessTcpDesc" xml:space="preserve">VLESS over TCP with TLS&#x0a;XTLS is Preferred</sys:String>
<sys:String x:Key="VlessWsDesc" xml:space="preserve">VLESS over WS with TLS&#x0a;Support CDN</sys:String>
<sys:String x:Key="VlessKcpDesc" xml:space="preserve">VLESS mKCP&#x0a;low delay</sys:String>
<sys:String x:Key="VmessWsDesc" xml:space="preserve">VMESS over WS with TLS&#x0a;Support CDN</sys:String>
<sys:String x:Key="VmessKcpDesc" xml:space="preserve">VMESS mKCP&#x0a;low delay</sys:String>
<sys:String x:Key="SSDesc" xml:space="preserve">ShadowSocks&#x0a;Support CDN</sys:String>
<sys:String x:Key="TrojanDesc" xml:space="preserve">Trojan over TCP with TLS&#x0a;Trojan</sys:String>
<sys:String x:Key="XrayDomain">Address</sys:String>
<sys:String x:Key="XrayMarkDomain">GuiseHost</sys:String>
<sys:String x:Key="XrayUUID">UUID</sys:String>
<sys:String x:Key="VlessWsPath">VLESS WS Path</sys:String>
<sys:String x:Key="VlessKcpSeed">VLESS KCP Seed</sys:String>
<sys:String x:Key="VlessKcpType">VLESS KCP Type</sys:String>
<sys:String x:Key="VlessKcpPort">VLESS KCP Port</sys:String>
<sys:String x:Key="VmessWsPath">VMESS WS Path</sys:String>
<sys:String x:Key="VmessKcpSeed">VMESS KCP Seed</sys:String>
<sys:String x:Key="VmessKcpType">VMESS KCP Type</sys:String>
<sys:String x:Key="VmessKcpPort">VMESS KCP Port</sys:String>
<sys:String x:Key="SSPassword">SS Pwd</sys:String>
<sys:String x:Key="SSMethods">SS Method</sys:String>
<sys:String x:Key="TrojanPassword">Trojan Pwd</sys:String>
<sys:String x:Key="XrayPort">xray Port</sys:String>
<sys:String x:Key="XrayPortDefault">default port is 443</sys:String>
<!--Terminal Window-->
<sys:String x:Key="TerminalTitle">Console</sys:String>
<sys:String x:Key="InstallActions">xray/settings</sys:String>
<sys:String x:Key="InstallXray">Install</sys:String>
<sys:String x:Key="UpdateSettings">UpdateSettings</sys:String>
<sys:String x:Key="UpdateXrayCore">UpdateXray</sys:String>
<sys:String x:Key="UninstallXray">UninstallXray</sys:String>
<sys:String x:Key="SettingActions">cert/web</sys:String>
<sys:String x:Key="UpdateCert">UpdateCert</sys:String>
<sys:String x:Key="UploadSelfCert">UploadSelfCert</sys:String>
<sys:String x:Key="UploadWeb">UploadWebite</sys:String>
<sys:String x:Key="UninstallCaddy">UninstallCaddy</sys:String>
<sys:String x:Key="ReadmeInstallXray">Install: Finally output "please enjoy" to indicate completion, go to [Configuration] or [Config] to view the node</sys:String>
<sys:String x:Key="ReadmeUpdateSettings">Update Settings: After modifying the node configuration information, there is no need to reinstall, this function can update the configuration</sys:String>
<sys:String x:Key="ReadmeUpdateCert">Update Cert: The certificate is automatically updated by default, but it is not guaranteed to be updated successfully. If it fails, please use [Update Cert] to update manually</sys:String>
<sys:String x:Key="ReadmeUploadWeb">Upload website: Disguise the website, the correct static webpage must have an index.html file (please check), and then upload the website compressed package.</sys:String>
<sys:String x:Key="ReadmeWebsiteDemo">The following is a static web page connection provided by netizens, please check whether there is an index.html file by yourself</sys:String>
<!--client info window-->
<sys:String x:Key="ClientInfoTitle">View Settings</sys:String>
</ResourceDictionary>

View File

@ -1,120 +0,0 @@
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:sys="clr-namespace:System;assembly=mscorlib">
<sys:String x:Key="TabItemHeaderAppDeployment">应用布署</sys:String>
<sys:String x:Key="TabItemHeaderReadme">说明文档</sys:String>
<sys:String x:Key="LanguageText">语言(Language)</sys:String>
<sys:String x:Key="LanguageChinese">中文</sys:String>
<sys:String x:Key="LanguageEnglish">英文</sys:String>
<sys:String x:Key="Hosts">主机列表</sys:String>
<sys:String x:Key="AddHost">添加主机</sys:String>
<sys:String x:Key="ViewConfig">导出配置</sys:String>
<sys:String x:Key="ViewSub">导出订阅</sys:String>
<sys:String x:Key="Random">随机</sys:String>
<!--table-->
<sys:String x:Key="MainTableSelection">选择</sys:String>
<sys:String x:Key="MainTableRemark">别名</sys:String>
<sys:String x:Key="MainTableHost">主机</sys:String>
<sys:String x:Key="MainTablePort">端口</sys:String>
<sys:String x:Key="MainTableProxy">代理</sys:String>
<sys:String x:Key="MainTableActions">操作</sys:String>
<sys:String x:Key="MainTableControl">控制台</sys:String>
<sys:String x:Key="MainTableViewConfig">查看配置</sys:String>
<sys:String x:Key="MainTableEditor">编辑</sys:String>
<sys:String x:Key="MainTableDelete">删除</sys:String>
<sys:String x:Key="Connect">连接</sys:String>
<sys:String x:Key="Install">安装</sys:String>
<sys:String x:Key="Edit">编辑</sys:String>
<sys:String x:Key="EditTemp">编辑模板</sys:String>
<sys:String x:Key="Delete">删除</sys:String>
<sys:String x:Key="Save">保存</sys:String>
<sys:String x:Key="SaveAs">另存为</sys:String>
<sys:String x:Key="Info">消息</sys:String>
<sys:String x:Key="Warning">提示</sys:String>
<sys:String x:Key="Error">错误</sys:String>
<!--Host Window-->
<sys:String x:Key="HostWindowTitle">服务器管理</sys:String>
<sys:String x:Key="ConnectionGroupName">连接</sys:String>
<sys:String x:Key="HostUserName">用户名</sys:String>
<sys:String x:Key="HostPassword">密码</sys:String>
<sys:String x:Key="HostTag">别名</sys:String>
<sys:String x:Key="HostAddress">主机</sys:String>
<sys:String x:Key="HostPort">端口</sys:String>
<sys:String x:Key="HostLoginType">登陆方式</sys:String>
<sys:String x:Key="PasswordLogin">密码登陆</sys:String>
<sys:String x:Key="KeyLogin">密钥登陆</sys:String>
<sys:String x:Key="KeyLoginField">密钥</sys:String>
<sys:String x:Key="KeyUpload">上传</sys:String>
<sys:String x:Key="ProxyGroupName">代理</sys:String>
<sys:String x:Key="ProxyType">类型</sys:String>
<sys:String x:Key="ProxyTypeNone">无</sys:String>
<sys:String x:Key="ProxyTypeHttp">Http</sys:String>
<sys:String x:Key="ProxyTypeSocks5">Socks5</sys:String>
<sys:String x:Key="ProxyHostName">代理地址</sys:String>
<sys:String x:Key="ProxyHostPort">代理端口</sys:String>
<sys:String x:Key="ProxyUserName">用户名</sys:String>
<sys:String x:Key="ProxyPassword">密码</sys:String>
<sys:String x:Key="HostAddressNotNull">请输入主机</sys:String>
<sys:String x:Key="HostPortNotNull">请输入端口号</sys:String>
<sys:String x:Key="PorxyAddressNotNull">请输入代理地址</sys:String>
<sys:String x:Key="ProxyProtNotNull">请输入代理端口号</sys:String>
<sys:String x:Key="VlessXtlsDesc" xml:space="preserve">VLESS Over TCP With XTLS&#x0a;性能数倍,首选方式。</sys:String>
<sys:String x:Key="VlessTcpDesc" xml:space="preserve">VLESS over TCP with TLS&#x0a;仍推荐XTLS。</sys:String>
<sys:String x:Key="VlessWsDesc" xml:space="preserve">VLESS over WS with TLS&#x0a;推荐支持CDN。</sys:String>
<sys:String x:Key="VlessKcpDesc" xml:space="preserve">VLESS mKCP&#x0a;游戏推荐,延迟低。</sys:String>
<sys:String x:Key="VmessWsDesc" xml:space="preserve">VMESS over WS with TLS&#x0a;推荐支持CDN。</sys:String>
<sys:String x:Key="VmessKcpDesc" xml:space="preserve">VMESS mKCP&#x0a;游戏推荐,延迟低。</sys:String>
<sys:String x:Key="SSDesc" xml:space="preserve">ShadowSocks&#x0a;SS支持udp。</sys:String>
<sys:String x:Key="TrojanDesc" xml:space="preserve">Trojan over TCP with TLS&#x0a;Trojan。</sys:String>
<sys:String x:Key="XrayDomain">域名</sys:String>
<sys:String x:Key="XrayMarkDomain">伪装域名</sys:String>
<sys:String x:Key="XrayUUID">UUID</sys:String>
<sys:String x:Key="VlessWsPath">VLESS WS路径</sys:String>
<sys:String x:Key="VlessKcpSeed">VLESS KCP Seed</sys:String>
<sys:String x:Key="VlessKcpType">VLESS KCP伪装</sys:String>
<sys:String x:Key="VlessKcpPort">VLESS KCP端口</sys:String>
<sys:String x:Key="VmessWsPath">VMESS WS路径</sys:String>
<sys:String x:Key="VmessKcpSeed">VMESS KCP Seed</sys:String>
<sys:String x:Key="VmessKcpType">VMESS KCP伪装</sys:String>
<sys:String x:Key="VmessKcpPort">VMESS KCP端口</sys:String>
<sys:String x:Key="SSPassword">SS密码</sys:String>
<sys:String x:Key="SSMethods">SS加密方式</sys:String>
<sys:String x:Key="TrojanPassword">Trojan密码</sys:String>
<sys:String x:Key="XrayPort">xray端口</sys:String>
<sys:String x:Key="XrayPortDefault">默认端口443不建议修改</sys:String>
<!--Terminal Window-->
<sys:String x:Key="TerminalTitle">控制台</sys:String>
<sys:String x:Key="InstallActions">内核/配置</sys:String>
<sys:String x:Key="InstallXray">一键安装</sys:String>
<sys:String x:Key="UpdateSettings">更新配置</sys:String>
<sys:String x:Key="UpdateXrayCore">更新xray内核</sys:String>
<sys:String x:Key="UninstallXray">卸载代理</sys:String>
<sys:String x:Key="SettingActions">证书/网站</sys:String>
<sys:String x:Key="UpdateCert">续签证书</sys:String>
<sys:String x:Key="UploadSelfCert">上传自有证书</sys:String>
<sys:String x:Key="UploadWeb">上传网站</sys:String>
<sys:String x:Key="UninstallCaddy">卸载Caddy</sys:String>
<sys:String x:Key="ReadmeInstallXray">一键安装: 最后输出 “请尽情享用” 表示完成,到[查看配置]或[导出配置]查看节点</sys:String>
<sys:String x:Key="ReadmeUpdateSettings">更新配置: 修改节点配置信息后,不需要重新安装,这个功能就可以更新配置了</sys:String>
<sys:String x:Key="ReadmeUpdateCert">续签证书: 证书默认是自动续签,但不保证都能续签成功,如果失败请用[续签证书]手动续签</sys:String>
<sys:String x:Key="ReadmeUploadWeb">上传网站: 伪装网站正确的静态网页要有index.html文件(请检查),然后将网站压缩包上传。</sys:String>
<sys:String x:Key="ReadmeWebsiteDemo">如下是网友提供的静态网页连接请自行检查是否有index.html文件</sys:String>
<!--client info window-->
<sys:String x:Key="ClientInfoTitle">查看配置信息</sys:String>
</ResourceDictionary>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

View File

@ -1,48 +0,0 @@
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:materialDesign="clr-namespace:MaterialDesignThemes.Wpf;assembly=MaterialDesignThemes.Wpf">
<Style
TargetType="{x:Type TabItem}"
BasedOn="{StaticResource MaterialDesignNavigationRailTabItem}"
x:Key="MaterialDesignNavigationRailTabItem">
<Setter Property="Height" Value="52" />
<Setter Property="Padding" Value="12,0" />
</Style>
<Style
TargetType="GroupBox"
x:Key="MaterialDesignHeaderedContentControl">
</Style>
<Style
TargetType="DataGridCell"
BasedOn="{StaticResource MahApps.Styles.DataGridCell}"
x:Key="DataGridCell">
<Setter Property="BorderThickness" Value="0"/>
<Setter Property="HorizontalAlignment" Value="Center"/>
<Setter Property="Padding" Value="10,7"/>
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Foreground" Value="{DynamicResource MahApps.Brushes.Accent}" />
</Trigger>
<Trigger Property="IsSelected" Value="True">
<Setter Property="Foreground" Value="{DynamicResource MahApps.Brushes.Accent}" />
<Setter Property="FontWeight" Value="Bold"/>
</Trigger>
</Style.Triggers>
</Style>
<Style TargetType="DataGridColumnHeader"
BasedOn="{StaticResource MaterialDesignDataGridColumnHeader}"
x:Key="DataGridColumnHeader">
<Setter Property="HorizontalAlignment" Value="Center" />
<Setter Property="BorderThickness" Value="0,0,0,1"/>
</Style>
<Style
TargetType="DataGrid"
BasedOn="{StaticResource MahApps.Styles.DataGrid}"
x:Key="DataGrid">
</Style>
</ResourceDictionary>

View File

@ -1,9 +0,0 @@
:##port## {
root * /usr/share/caddy
file_server
##reverse_proxy##
}
##domain##:80 {
redir https://##domain##{uri}
}

View File

@ -1,16 +0,0 @@
{
"run_type": "server",
"local_addr": "0.0.0.0",
"local_port": 443,
"remote_addr": "127.0.0.1",
"remote_port": 80,
"password": [
""
],
"ssl": {
"cert": "/usr/local/etc/trojan-go/trojan-go.crt",
"key": "/usr/local/etc/trojan-go/trojan-go.key",
"sni": ""
}
}

View File

@ -1,12 +0,0 @@
{
"log": {},
"api": {},
"dns": {},
"routing": {},
"policy": {},
"inbounds": [],
"outbounds": [],
"transport": {},
"stats": {},
"reverse": {}
}

View File

@ -1,9 +0,0 @@
:##port## {
root * /usr/share/caddy
file_server
##reverse_proxy##
}
##domain##:80 {
redir https://##domain##{uri}
}

View File

@ -1,5 +0,0 @@
{
"log": {
"loglevel": "warning"
}
}

View File

@ -1,3 +0,0 @@
{
"api": null
}

View File

@ -1,3 +0,0 @@
{
"dns": {}
}

View File

@ -1,3 +0,0 @@
{
"routing": {}
}

View File

@ -1,3 +0,0 @@
{
"policy": {}
}

View File

@ -1,23 +0,0 @@
{
"inbounds": [
{
"protocol": "http",
"port": 1081
},
{
"port": 1080,
"protocol": "socks",
"sniffing": {
"enabled": true,
"destOverride": [
"http",
"tls"
]
},
"settings": {
"udp": true,
"auth": "noauth"
}
}
]
}

View File

@ -1,3 +0,0 @@
{
"outbounds": []
}

View File

@ -1,31 +0,0 @@
{
"outbounds": [
{
"protocol": "vless",
"settings": {
"vnext": [
{
"address": "",
"port": 443,
"users": [
{
"id": "",
"encryption": "none"
}
]
}
]
},
"streamSettings": {
"network": "h2",
"security": "tls",
"httpSettings": {
"host": [
""
],
"path": null
}
}
}
]
}

View File

@ -1,32 +0,0 @@
{
"outbounds": [
{
"protocol": "vless",
"settings": {
"vnext": [
{
"address": "",
"port": 443,
"users": [
{
"id": "",
"encryption": "none",
"level": 0
}
]
}
]
},
"streamSettings": {
"network": "ws",
"security": "tls",
"tlsSettings": {
"serverName": ""
},
"wsSettings": {
"path": ""
}
}
}
]
}

View File

@ -1,3 +0,0 @@
{
"transport": {}
}

View File

@ -1,3 +0,0 @@
{
"stats": null
}

View File

@ -1,3 +0,0 @@
{
"reverse": {}
}

View File

@ -1,6 +0,0 @@
{
"log": {
"access": "none",
"loglevel": "none"
}
}

View File

@ -1,3 +0,0 @@
{
"api": {}
}

View File

@ -1,3 +0,0 @@
{
"dns": {}
}

View File

@ -1,14 +0,0 @@
{
"routing": {
"domainStrategy": "AsIs",
"rules": [
{
"type": "field",
"ip": [
"geoip:private"
],
"outboundTag": "block"
}
]
}
}

View File

@ -1,3 +0,0 @@
{
"policy": {}
}

View File

@ -1,3 +0,0 @@
{
"inbounds": []
}

View File

@ -1,13 +0,0 @@
{
"port": 12345,
"protocol": "shadowsocks",
"settings": {
"clients": [
{
"password": "",
"method": "aes-128-gcm"
}
],
"network": "tcp,udp"
}
}

View File

@ -1,24 +0,0 @@
{
"port": 1310,
"listen": "127.0.0.1",
"protocol": "trojan",
"settings": {
"clients": [
{
"password": ""
}
],
"fallbacks": [
{
"dest": 8080
}
]
},
"streamSettings": {
"network": "tcp",
"security": "none",
"tcpSettings": {
"acceptProxyProtocol": true
}
}
}

View File

@ -1,26 +0,0 @@
{
"port": 1320,
"listen": "127.0.0.1",
"protocol": "trojan",
"settings": {
"clients": [
{
"password": ""
}
],
"fallbacks": [
{
"dest": 80
}
]
},
"streamSettings": {
"network": "ws",
"security": "none",
"wsSettings": {
"acceptProxyProtocol": true,
"path": "/trojanws"
}
}
}

View File

@ -1,19 +0,0 @@
{
"port": 1234,
"listen": "127.0.0.1",
"protocol": "vmess",
"settings": {
"decryption": "none",
"clients": [
{
"id": ""
}
]
},
"streamSettings": {
"network": "h2",
"httpSettings": {
"path": ""
}
}
}

View File

@ -1,24 +0,0 @@
{
"port": 3456,
"protocol": "vless",
"settings": {
"clients": [
{
"id": ""
}
],
"decryption": "none"
},
"streamSettings": {
"network": "mkcp",
"kcpSettings": {
"uplinkCapacity": 100,
"downlinkCapacity": 100,
"congestion": true,
"header": {
"type": "none"
},
"seed": null
}
}
}

View File

@ -1,31 +0,0 @@
{
"port": 443,
"protocol": "vless",
"settings": {
"clients": [
{
"id": "",
"flow": "xtls-rprx-direct"
}
],
"decryption": "none",
"fallbacks": []
},
"streamSettings": {
"network": "tcp",
"security": "xtls",
"xtlsSettings": {
"allowInsecure": false,
"minVersion": "1.2",
"alpn": [
"http/1.1"
],
"certificates": [
{
"certificateFile": "/usr/local/etc/xray/ssl/xray_ssl.crt",
"keyFile": "/usr/local/etc/xray/ssl/xray_ssl.key"
}
]
}
}
}

View File

@ -1,21 +0,0 @@
{
"port": 1234,
"listen": "127.0.0.1",
"protocol": "vless",
"settings": {
"clients": [
{
"id": ""
}
],
"decryption": "none"
},
"streamSettings": {
"network": "ws",
"security": "none",
"wsSettings": {
"acceptProxyProtocol": true,
"path": "/websocket"
}
}
}

View File

@ -1,25 +0,0 @@
{
"port": 2002,
"listen": "127.0.0.1",
"protocol": "vless",
"settings": {
"clients": [
{
"id": ""
}
],
"decryption": "none"
},
"streamSettings": {
"network": "grpc",
"grpcSettings": {
"serviceName": "",
"certificates": [
{
"certificateFile": "/usr/local/etc/xray/ssl/xray_ssl.crt",
"keyFile": "/usr/local/etc/xray/ssl/xray_ssl.key"
}
]
}
}
}

View File

@ -1,18 +0,0 @@
{
"port": 1234,
"listen": "127.0.0.1",
"protocol": "vmess",
"settings": {
"clients": [
{
"id": ""
}
]
},
"streamSettings": {
"network": "h2",
"httpSettings": {
"path": ""
}
}
}

View File

@ -1,23 +0,0 @@
{
"port": 3456,
"protocol": "vmess",
"settings": {
"clients": [
{
"id": ""
}
]
},
"streamSettings": {
"network": "mkcp",
"kcpSettings": {
"uplinkCapacity": 100,
"downlinkCapacity": 100,
"congestion": true,
"header": {
"type": "none"
},
"seed": null
}
}
}

Some files were not shown because too many files have changed in this diff Show More