1
0
Fork 0
mirror of https://github.com/proxysu/ProxySU.git synced 2025-04-01 21:06:18 +03:00

添加VLESS相关模式,优化代码结构

This commit is contained in:
ProxySU 2020-09-30 09:39:09 +08:00
parent b1a7c2149b
commit 7e187bbdd4
20 changed files with 1462 additions and 728 deletions

View file

@ -5,7 +5,7 @@
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:ProxySU"
mc:Ignorable="d"
Title="ProxySU - v2.2.3" Height="675" Width="620">
Title="ProxySU - v2.3.0" Height="675" Width="620">
<!--以下样式参考自https://yq.aliyun.com/articles/331878
https://docs.microsoft.com/en-us/dotnet/desktop-wpf/fundamentals/styles-templates-overview-->
<Window.Resources>
@ -204,19 +204,34 @@
<RowDefinition></RowDefinition>
</Grid.RowDefinitions>
<TextBlock Text="{DynamicResource TextBlockCurrentlySelectedPlan}" Grid.Column="0" Grid.Row="0" HorizontalAlignment="Center" VerticalAlignment="Center" ></TextBlock>
<TextBlock x:Name="TextBlockV2RayShowPort" Text="{DynamicResource TextBlockV2RayServerPort}" Grid.Column="0" Grid.Row="1" HorizontalAlignment="Center" VerticalAlignment="Center" Visibility="Hidden"></TextBlock>
<TextBlock x:Name="TextBlockV2RayShowUUID" Text="UUID:" Grid.Column="0" Grid.Row="2" HorizontalAlignment="Center" VerticalAlignment="Center" Visibility="Hidden"></TextBlock>
<TextBlock x:Name="TextBlockV2RayShowPathSeedKey" Grid.Column="0" Grid.Row="3" HorizontalAlignment="Center" VerticalAlignment="Center" Visibility="Hidden"></TextBlock>
<TextBlock x:Name="TextBlockV2RayShowCurrentlySelectedPlanDomain" Text="{DynamicResource TextBlockV2RayDomain}" Grid.Column="0" Grid.Row="4" HorizontalAlignment="Center" VerticalAlignment="Center" Visibility="Hidden"></TextBlock>
<TextBlock x:Name="TextBlockV2RayShowCurrentlySelectedPlanFakeWebsite" Text="{DynamicResource TextBlockV2RayMaskSites}" Grid.Column="0" Grid.Row="5" HorizontalAlignment="Center" VerticalAlignment="Center" Visibility="Hidden"></TextBlock>
<TextBlock x:Name="TextBlockCurrentlySelectedPlan" Text="{DynamicResource TextBlockCurrentlySelectedPlanNo}" Grid.Column="1" Grid.Row="0" HorizontalAlignment="Left" VerticalAlignment="Center"></TextBlock>
<TextBlock x:Name="TextBlockCurrentlySelectedPlanPort" Grid.Column="1" Grid.Row="1" HorizontalAlignment="Left" VerticalAlignment="Center" Visibility="Hidden"></TextBlock>
<TextBlock x:Name="TextBlockCurrentlySelectedPlanUUID" Grid.Column="1" Grid.Row="2" HorizontalAlignment="Left" VerticalAlignment="Center" Visibility="Hidden"></TextBlock>
<TextBlock x:Name="TextBlockCurrentlySelectedPlanPathSeedKey" Grid.Column="1" Grid.Row="3" HorizontalAlignment="Left" VerticalAlignment="Center" Visibility="Hidden"></TextBlock>
<TextBlock x:Name="TextBlockCurrentlySelectedPlanDomain" Grid.Column="1" Grid.Row="4" HorizontalAlignment="Left" VerticalAlignment="Center" Visibility="Hidden"></TextBlock>
<TextBlock x:Name="TextBlockCurrentlySelectedPlanFakeWebsite" Grid.Column="1" Grid.Row="5" HorizontalAlignment="Left" VerticalAlignment="Center" Visibility="Hidden"></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" Grid.Column="0" Grid.Row="2" HorizontalAlignment="Center" VerticalAlignment="Center"></TextBlock>
<TextBlock x:Name="TextBlockCurrentlySelectedPlanPathSeedKey" Grid.Column="1" Grid.Row="2" HorizontalAlignment="Left" VerticalAlignment="Center"></TextBlock>
<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>
@ -574,6 +589,7 @@
<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 Content="test" Grid.Column="0" Grid.Row="1" Margin="10" Click="Button_Click"></Button>
</Grid>
</TabItem>

View file

@ -45,10 +45,10 @@ namespace ProxySU
//ReceiveConfigurationParameters[0]----模板类型
//ReceiveConfigurationParameters[1]----服务端口
//ReceiveConfigurationParameters[2]----V2Ray uuid/(naive/Trojan-go/Trojan/SSR/SS)' Password
//ReceiveConfigurationParameters[3]----Websocket'Path/http2'Path/naive'user
//ReceiveConfigurationParameters[3]----QUIC加密方式/SSR 加密方法/naive'user
//ReceiveConfigurationParameters[4]----Domain
//ReceiveConfigurationParameters[5]----伪装类型/插件名称
//ReceiveConfigurationParameters[6]----QUIC密钥/mKCP Seed/SS 加密方式
//ReceiveConfigurationParameters[6]----Websocket'Path/http2'Path/QUIC密钥/mKCP Seed/SS 加密方式
//ReceiveConfigurationParameters[7]----伪装网站
//ReceiveConfigurationParameters[8]----方案名称
//ReceiveConfigurationParameters[9]----插件参数选项
@ -113,6 +113,9 @@ namespace ProxySU
//初始化SSR的密码
TextBoxSSRPassword.Text = RandomUUID();
//初始化所选方案面板为不显示
GridV2rayCurrentlyPlan.Visibility = Visibility.Hidden;
//初始化三合一的所有内容
//TextBoxV2rayUUID3in1.Text = RandomUUID();
//TextBoxV2rayPath3in1.Text = "/ray";
@ -698,152 +701,202 @@ namespace ProxySU
//显示"未选择方案!"
TextBlockCurrentlySelectedPlan.Text = Application.Current.FindResource("TextBlockCurrentlySelectedPlanNo").ToString();
TextBlockV2RayShowPort.Visibility = Visibility.Hidden;
TextBlockCurrentlySelectedPlanPort.Visibility = Visibility.Hidden;
GridV2rayCurrentlyPlan.Visibility = Visibility.Hidden;
TextBlockV2RayShowUUID.Visibility = Visibility.Hidden;
TextBlockCurrentlySelectedPlanUUID.Visibility = Visibility.Hidden;
TextBlockV2RayShowPathSeedKey.Visibility = Visibility.Hidden;
TextBlockCurrentlySelectedPlanPathSeedKey.Visibility = Visibility.Hidden;
TextBlockV2RayShowCurrentlySelectedPlanDomain.Visibility = Visibility.Hidden;
TextBlockCurrentlySelectedPlanDomain.Visibility = Visibility.Hidden;
TextBlockV2RayShowCurrentlySelectedPlanFakeWebsite.Visibility = Visibility.Hidden;
TextBlockCurrentlySelectedPlanFakeWebsite.Visibility = Visibility.Hidden;
return;
}
else
{
GridV2rayCurrentlyPlan.Visibility = Visibility.Visible;
}
TextBlockCurrentlySelectedPlan.Text = ReceiveConfigurationParameters[8]; //所选方案名称
TextBlockCurrentlySelectedPlanPort.Text = ReceiveConfigurationParameters[1]; //服务器端口
TextBlockCurrentlySelectedPlanUUID.Text = ReceiveConfigurationParameters[2]; //UUID
TextBlockCurrentlySelectedPlanPathSeedKey.Text = ReceiveConfigurationParameters[6]; //mKCP Seed\Quic Key\Path
TextBlockCurrentlySelectedPlanDomain.Text = ReceiveConfigurationParameters[4]; //域名
TextBlockCurrentlySelectedPlanFakeWebsite.Text = ReceiveConfigurationParameters[7]; //伪装网站
if (String.Equals(ReceiveConfigurationParameters[0],"TCP")
|| String.Equals(ReceiveConfigurationParameters[0], "TCPhttp")
|| String.Equals(ReceiveConfigurationParameters[0], "tcpTLSselfSigned")
|| String.Equals(ReceiveConfigurationParameters[0], "webSocket"))
if (String.Equals(ReceiveConfigurationParameters[0],"TCP") == true
|| String.Equals(ReceiveConfigurationParameters[0], "TCPhttp") == true
|| String.Equals(ReceiveConfigurationParameters[0], "tcpTLSselfSigned") == true
|| String.Equals(ReceiveConfigurationParameters[0], "webSocket") == true)
{
TextBlockV2RayShowPort.Visibility = Visibility.Visible;
TextBlockCurrentlySelectedPlanPort.Visibility = Visibility.Visible;
//隐藏Path/mKCP Seed/Quic Key
HideV2RayPathSeedKey();
TextBlockV2RayShowUUID.Visibility = Visibility.Visible;
TextBlockCurrentlySelectedPlanUUID.Visibility = Visibility.Visible;
//隐藏域名/Quic加密方式
HideV2RayDomainQuicEncrypt();
TextBlockV2RayShowPathSeedKey.Visibility = Visibility.Hidden;
TextBlockCurrentlySelectedPlanPathSeedKey.Visibility = Visibility.Hidden;
TextBlockV2RayShowCurrentlySelectedPlanDomain.Visibility = Visibility.Hidden;
TextBlockCurrentlySelectedPlanDomain.Visibility = Visibility.Hidden;
TextBlockV2RayShowCurrentlySelectedPlanFakeWebsite.Visibility = Visibility.Hidden;
TextBlockCurrentlySelectedPlanFakeWebsite.Visibility = Visibility.Hidden;
//隐藏伪装网站
HideV2RayMaskSites();
}
else if (String.Equals(ReceiveConfigurationParameters[0], "tcpTLS") || String.Equals(ReceiveConfigurationParameters[0], "VlessTcpTlsWeb"))
else if (String.Equals(ReceiveConfigurationParameters[0], "tcpTLS") == true)
{
TextBlockV2RayShowPort.Visibility = Visibility.Visible;
TextBlockCurrentlySelectedPlanPort.Visibility = Visibility.Visible;
//隐藏Path/mKCP Seed/Quic Key
HideV2RayPathSeedKey();
TextBlockV2RayShowUUID.Visibility = Visibility.Visible;
TextBlockCurrentlySelectedPlanUUID.Visibility = Visibility.Visible;
//显示域名
ShowV2RayDomainQuicEncrypt();
TextBlockV2RayShowCurrentlySelectedPlanDomain.Text = Application.Current.FindResource("TextBlockV2RayDomain").ToString();
TextBlockCurrentlySelectedPlanDomain.Text = ReceiveConfigurationParameters[4]; //域名
TextBlockV2RayShowPathSeedKey.Visibility = Visibility.Hidden;
TextBlockCurrentlySelectedPlanPathSeedKey.Visibility = Visibility.Hidden;
TextBlockV2RayShowCurrentlySelectedPlanDomain.Visibility = Visibility.Visible;
TextBlockCurrentlySelectedPlanDomain.Visibility = Visibility.Visible;
TextBlockV2RayShowCurrentlySelectedPlanFakeWebsite.Visibility = Visibility.Hidden;
TextBlockCurrentlySelectedPlanFakeWebsite.Visibility = Visibility.Hidden;
//隐藏伪装网站
HideV2RayMaskSites();
}
else if (String.Equals(ReceiveConfigurationParameters[0], "WebSocketTLS")
|| String.Equals(ReceiveConfigurationParameters[0], "WebSocketTLS2Web")
|| String.Equals(ReceiveConfigurationParameters[0], "Http2")
|| String.Equals(ReceiveConfigurationParameters[0], "http2Web"))
else if (String.Equals(ReceiveConfigurationParameters[0], "VlessTcpTlsWeb") == true
|| String.Equals(ReceiveConfigurationParameters[0], "VlessXtlsTcp") == true)
{
TextBlockV2RayShowPort.Visibility = Visibility.Visible;
TextBlockCurrentlySelectedPlanPort.Visibility = Visibility.Visible;
//隐藏Path/mKCP Seed/Quic Key
HideV2RayPathSeedKey();
TextBlockV2RayShowUUID.Visibility = Visibility.Visible;
TextBlockCurrentlySelectedPlanUUID.Visibility = Visibility.Visible;
//显示域名
ShowV2RayDomainQuicEncrypt();
TextBlockV2RayShowCurrentlySelectedPlanDomain.Text = Application.Current.FindResource("TextBlockV2RayDomain").ToString();
TextBlockCurrentlySelectedPlanDomain.Text = ReceiveConfigurationParameters[4]; //域名
//显示伪装网站(暂时不显示)
ShowV2RayMaskSites();
}
else if (String.Equals(ReceiveConfigurationParameters[0], "WebSocketTLS") == true
|| String.Equals(ReceiveConfigurationParameters[0], "Http2") == true)
{
//显示Path
ShowV2RayPathSeedKey();
TextBlockV2RayShowPathSeedKey.Text = "Path:";
TextBlockCurrentlySelectedPlanPathSeedKey.Text = ReceiveConfigurationParameters[3]; //mKCP Seed\Quic Key\Path
TextBlockCurrentlySelectedPlanPathSeedKey.Text = ReceiveConfigurationParameters[6]; //mKCP Seed\Quic Key\Path
TextBlockV2RayShowPathSeedKey.Visibility = Visibility.Visible;
TextBlockCurrentlySelectedPlanPathSeedKey.Visibility = Visibility.Visible;
TextBlockV2RayShowCurrentlySelectedPlanDomain.Visibility = Visibility.Visible;
TextBlockCurrentlySelectedPlanDomain.Visibility = Visibility.Visible;
//显示域名
ShowV2RayDomainQuicEncrypt();
TextBlockV2RayShowCurrentlySelectedPlanDomain.Text = Application.Current.FindResource("TextBlockV2RayDomain").ToString();
TextBlockCurrentlySelectedPlanDomain.Text = ReceiveConfigurationParameters[4]; //域名
TextBlockV2RayShowCurrentlySelectedPlanFakeWebsite.Visibility = Visibility.Hidden;
TextBlockCurrentlySelectedPlanFakeWebsite.Visibility = Visibility.Hidden;
//显示伪装网站(暂时不显示)
HideV2RayMaskSites();
}
else if (String.Equals(ReceiveConfigurationParameters[0], "WebSocketTLSselfSigned") || String.Equals(ReceiveConfigurationParameters[0], "http2selfSigned"))
else if (String.Equals(ReceiveConfigurationParameters[0], "WebSocketTLS2Web") == true
|| String.Equals(ReceiveConfigurationParameters[0], "http2Web") == true
|| String.Equals(ReceiveConfigurationParameters[0], "VlessWebSocketTlsWeb") == true
|| String.Equals(ReceiveConfigurationParameters[0], "VlessHttp2Web") == true)
{
TextBlockV2RayShowPort.Visibility = Visibility.Visible;
TextBlockCurrentlySelectedPlanPort.Visibility = Visibility.Visible;
TextBlockV2RayShowUUID.Visibility = Visibility.Visible;
TextBlockCurrentlySelectedPlanUUID.Visibility = Visibility.Visible;
//显示Path
ShowV2RayPathSeedKey();
TextBlockV2RayShowPathSeedKey.Text = "Path:";
TextBlockCurrentlySelectedPlanPathSeedKey.Text = ReceiveConfigurationParameters[3]; //mKCP Seed\Quic Key\Path
TextBlockCurrentlySelectedPlanPathSeedKey.Text = ReceiveConfigurationParameters[6]; //mKCP Seed\Quic Key\Path
TextBlockV2RayShowPathSeedKey.Visibility = Visibility.Visible;
TextBlockCurrentlySelectedPlanPathSeedKey.Visibility = Visibility.Visible;
//显示域名
ShowV2RayDomainQuicEncrypt();
TextBlockV2RayShowCurrentlySelectedPlanDomain.Text = Application.Current.FindResource("TextBlockV2RayDomain").ToString();
TextBlockCurrentlySelectedPlanDomain.Text = ReceiveConfigurationParameters[4]; //域名
TextBlockV2RayShowCurrentlySelectedPlanDomain.Visibility = Visibility.Hidden;
TextBlockCurrentlySelectedPlanDomain.Visibility = Visibility.Hidden;
TextBlockV2RayShowCurrentlySelectedPlanFakeWebsite.Visibility = Visibility.Hidden;
TextBlockCurrentlySelectedPlanFakeWebsite.Visibility = Visibility.Hidden;
//显示伪装网站(暂时不显示)
ShowV2RayMaskSites();
}
else if (ReceiveConfigurationParameters[0].Contains("mKCP"))
else if (String.Equals(ReceiveConfigurationParameters[0], "WebSocketTLSselfSigned") == true
|| String.Equals(ReceiveConfigurationParameters[0], "http2selfSigned") == true)
{
//显示Path
ShowV2RayPathSeedKey();
TextBlockV2RayShowPathSeedKey.Text = "Path:";
TextBlockCurrentlySelectedPlanPathSeedKey.Text = ReceiveConfigurationParameters[6]; //mKCP Seed\Quic Key\Path
//隐藏域名/Quic加密方式
HideV2RayDomainQuicEncrypt();
//隐藏伪装网站
HideV2RayMaskSites();
}
else if (ReceiveConfigurationParameters[0].Contains("mKCP") == true)
{
TextBlockV2RayShowPort.Visibility = Visibility.Visible;
TextBlockCurrentlySelectedPlanPort.Visibility = Visibility.Visible;
TextBlockV2RayShowUUID.Visibility = Visibility.Visible;
TextBlockCurrentlySelectedPlanUUID.Visibility = Visibility.Visible;
//显示mKCP Seed
ShowV2RayPathSeedKey();
TextBlockV2RayShowPathSeedKey.Text = "mKCP Seed:";
TextBlockCurrentlySelectedPlanPathSeedKey.Text = ReceiveConfigurationParameters[6]; //mKCP Seed\Quic Key\Path
TextBlockV2RayShowPathSeedKey.Visibility = Visibility.Visible;
TextBlockCurrentlySelectedPlanPathSeedKey.Visibility = Visibility.Visible;
//隐藏域名/Quic加密方式
HideV2RayDomainQuicEncrypt();
TextBlockV2RayShowCurrentlySelectedPlanDomain.Visibility = Visibility.Hidden;
TextBlockCurrentlySelectedPlanDomain.Visibility = Visibility.Hidden;
TextBlockV2RayShowCurrentlySelectedPlanFakeWebsite.Visibility = Visibility.Hidden;
TextBlockCurrentlySelectedPlanFakeWebsite.Visibility = Visibility.Hidden;
//隐藏伪装网站
HideV2RayMaskSites();
}
else if (ReceiveConfigurationParameters[0].Contains("Quic"))
else if (ReceiveConfigurationParameters[0].Contains("Quic") == true)
{
TextBlockV2RayShowPort.Visibility = Visibility.Visible;
TextBlockCurrentlySelectedPlanPort.Visibility = Visibility.Visible;
TextBlockV2RayShowUUID.Visibility = Visibility.Visible;
TextBlockCurrentlySelectedPlanUUID.Visibility = Visibility.Visible;
//显示QUIC Key
ShowV2RayPathSeedKey();
TextBlockV2RayShowPathSeedKey.Text = "QUIC Key:";
TextBlockCurrentlySelectedPlanPathSeedKey.Text = ReceiveConfigurationParameters[6]; //mKCP Seed\Quic Key\Path
TextBlockV2RayShowPathSeedKey.Visibility = Visibility.Visible;
TextBlockCurrentlySelectedPlanPathSeedKey.Visibility = Visibility.Visible;
//显示Quic加密方式
ShowV2RayDomainQuicEncrypt();
TextBlockV2RayShowCurrentlySelectedPlanDomain.Text = Application.Current.FindResource("TextBlockQuicEncryption").ToString();
TextBlockCurrentlySelectedPlanDomain.Text = ReceiveConfigurationParameters[3]; //Quic加密方式
if (String.Equals(TextBlockCurrentlySelectedPlanDomain.Text,"none")==true)
{
HideV2RayPathSeedKey();
}
TextBlockV2RayShowCurrentlySelectedPlanDomain.Visibility = Visibility.Hidden;
TextBlockCurrentlySelectedPlanDomain.Visibility = Visibility.Hidden;
TextBlockV2RayShowCurrentlySelectedPlanFakeWebsite.Visibility = Visibility.Hidden;
TextBlockCurrentlySelectedPlanFakeWebsite.Visibility = Visibility.Hidden;
//隐藏伪装网站
HideV2RayMaskSites();
}
}
#region
//显示端口与UUID
private void ShowV2RayCurrentPortUUID()
{
TextBlockV2RayShowPort.Visibility = Visibility.Visible;
TextBlockCurrentlySelectedPlanPort.Visibility = Visibility.Visible;
TextBlockV2RayShowUUID.Visibility = Visibility.Visible;
TextBlockCurrentlySelectedPlanUUID.Visibility = Visibility.Visible;
}
//显示Path/mKCP Seed/Quic Key
private void ShowV2RayPathSeedKey()
{
TextBlockV2RayShowPathSeedKey.Visibility = Visibility.Visible;
TextBlockCurrentlySelectedPlanPathSeedKey.Visibility = Visibility.Visible;
}
//隐藏Path/mKCP Seed/Quic Key
private void HideV2RayPathSeedKey()
{
TextBlockV2RayShowPathSeedKey.Visibility = Visibility.Hidden;
TextBlockCurrentlySelectedPlanPathSeedKey.Visibility = Visibility.Hidden;
}
//显示域名/Quic加密方式
private void ShowV2RayDomainQuicEncrypt()
{
TextBlockV2RayShowCurrentlySelectedPlanDomain.Visibility = Visibility.Visible;
TextBlockCurrentlySelectedPlanDomain.Visibility = Visibility.Visible;
}
//隐藏域名/Quic加密方式
private void HideV2RayDomainQuicEncrypt()
{
TextBlockV2RayShowCurrentlySelectedPlanDomain.Visibility = Visibility.Hidden;
TextBlockCurrentlySelectedPlanDomain.Visibility = Visibility.Hidden;
}
//显示伪装网站(暂时不显示)
private void ShowV2RayMaskSites()
{
TextBlockV2RayShowCurrentlySelectedPlanFakeWebsite.Visibility = Visibility.Hidden;
TextBlockCurrentlySelectedPlanFakeWebsite.Visibility = Visibility.Hidden;
}
//隐藏伪装网站
private void HideV2RayMaskSites()
{
TextBlockV2RayShowCurrentlySelectedPlanFakeWebsite.Visibility = Visibility.Hidden;
TextBlockCurrentlySelectedPlanFakeWebsite.Visibility = Visibility.Hidden;
}
#endregion
//传送V2Ray模板参数,启动V2Ray安装进程
private void Button_Login_Click(object sender, RoutedEventArgs e)
@ -1700,89 +1753,73 @@ namespace ProxySU
if (String.Equals(ReceiveConfigurationParameters[0], "TCP"))
{
inboundsConfigJson = @"TemplateConfg\v2ray\server\05_inbounds\tcp_server_config.json";
//serverConfig = "TemplateConfg\\tcp_server_config.json";
//clientConfig = "TemplateConfg\\tcp_client_config.json";
}
else if (String.Equals(ReceiveConfigurationParameters[0], "TCPhttp"))
{
inboundsConfigJson = @"TemplateConfg\v2ray\server\05_inbounds\tcp_http_server_config.json";
//serverConfig = "TemplateConfg\\tcp_http_server_config.json";
//clientConfig = "TemplateConfg\\tcp_http_client_config.json";
}
else if (String.Equals(ReceiveConfigurationParameters[0], "tcpTLS"))
{
inboundsConfigJson = @"TemplateConfg\v2ray\server\05_inbounds\tcp_TLS_server_config.json";
//serverConfig = "TemplateConfg\\tcp_TLS_server_config.json";
//clientConfig = "TemplateConfg\\tcp_TLS_client_config.json";
}
else if (String.Equals(ReceiveConfigurationParameters[0], "tcpTLSselfSigned"))
{
inboundsConfigJson = @"TemplateConfg\v2ray\server\05_inbounds\tcpTLSselfSigned_server_config.json";
//serverConfig = "TemplateConfg\\tcpTLSselfSigned_server_config.json";
//clientConfig = "TemplateConfg\\tcpTLSselfSigned_client_config.json";
}
else if (String.Equals(ReceiveConfigurationParameters[0], "VlessXtlsTcp"))
{
inboundsConfigJson = @"TemplateConfg\v2ray\server\05_inbounds\vless_tcp_xtls_server_config.json";
}
else if (String.Equals(ReceiveConfigurationParameters[0], "VlessTcpTlsWeb"))
{
inboundsConfigJson = @"TemplateConfg\v2ray\server\05_inbounds\tcp_vless_tls_caddy_server_config.json";
//serverConfig = "TemplateConfg\\tcp_vless_tls_caddy_server_config.json";
//clientConfig = "TemplateConfg\\tcp_vless_tls_caddy_cilent_config.json";
inboundsConfigJson = @"TemplateConfg\v2ray\server\05_inbounds\vless_tcp_tls_server_config.json";
}
else if (String.Equals(ReceiveConfigurationParameters[0], "VlessWebSocketTlsWeb"))
{
inboundsConfigJson = @"TemplateConfg\v2ray\server\05_inbounds\vless_ws_tls_server_config.json";
}
else if (String.Equals(ReceiveConfigurationParameters[0], "VlessHttp2Web"))
{
inboundsConfigJson = @"TemplateConfg\v2ray\server\05_inbounds\vless_http2_tls_server_config.json";
}
else if (String.Equals(ReceiveConfigurationParameters[0], "webSocket"))
{
inboundsConfigJson = @"TemplateConfg\v2ray\server\05_inbounds\webSocket_server_config.json";
//serverConfig = "TemplateConfg\\webSocket_server_config.json";
//clientConfig = "TemplateConfg\\webSocket_client_config.json";
}
else if (String.Equals(ReceiveConfigurationParameters[0], "WebSocketTLS"))
{
inboundsConfigJson = @"TemplateConfg\v2ray\server\05_inbounds\WebSocket_TLS_server_config.json";
//serverConfig = "TemplateConfg\\WebSocket_TLS_server_config.json";
//clientConfig = "TemplateConfg\\WebSocket_TLS_client_config.json";
}
else if (String.Equals(ReceiveConfigurationParameters[0], "WebSocketTLSselfSigned"))
{
inboundsConfigJson = @"TemplateConfg\v2ray\server\05_inbounds\WebSocketTLS_selfSigned_server_config.json";
//serverConfig = "TemplateConfg\\WebSocketTLS_selfSigned_server_config.json";
//clientConfig = "TemplateConfg\\WebSocketTLS_selfSigned_client_config.json";
}
else if (String.Equals(ReceiveConfigurationParameters[0], "WebSocketTLS2Web"))
{
inboundsConfigJson = @"TemplateConfg\v2ray\server\05_inbounds\WebSocketTLSWeb_server_config.json";
//serverConfig = "TemplateConfg\\WebSocketTLSWeb_server_config.json";
//clientConfig = "TemplateConfg\\WebSocketTLSWeb_client_config.json";
}
else if (String.Equals(ReceiveConfigurationParameters[0], "Http2"))
{
inboundsConfigJson = @"TemplateConfg\v2ray\server\05_inbounds\http2_server_config.json";
//serverConfig = "TemplateConfg\\http2_server_config.json";
//clientConfig = @"TemplateConfg\http2_client_config.json";
}
else if (String.Equals(ReceiveConfigurationParameters[0], "http2Web"))
{
inboundsConfigJson = @"TemplateConfg\v2ray\server\05_inbounds\Http2Web_server_config.json";
//serverConfig = "TemplateConfg\\Http2Web_server_config.json";
//clientConfig = "TemplateConfg\\Http2Web_client_config.json";
}
else if (String.Equals(ReceiveConfigurationParameters[0], "http2selfSigned"))
{
inboundsConfigJson = @"TemplateConfg\v2ray\server\Http2selfSigned_server_config.json";
//serverConfig = "TemplateConfg\\Http2selfSigned_server_config.json";
//clientConfig = "TemplateConfg\\Http2selfSigned_client_config.json";
}
//else if (String.Equals(ReceiveConfigurationParameters[0], "MkcpNone")|| String.Equals(ReceiveConfigurationParameters[0], "mKCP2SRTP")||String.Equals(ReceiveConfigurationParameters[0], "mKCPuTP")|| String.Equals(ReceiveConfigurationParameters[0], "mKCP2WechatVideo")|| String.Equals(ReceiveConfigurationParameters[0], "mKCP2DTLS")|| String.Equals(ReceiveConfigurationParameters[0], "mKCP2WireGuard"))
else if (ReceiveConfigurationParameters[0].Contains("mKCP"))
{
inboundsConfigJson = @"TemplateConfg\v2ray\server\05_inbounds\mkcp_server_config.json";
//serverConfig = "TemplateConfg\\mkcp_server_config.json";
//clientConfig = "TemplateConfg\\mkcp_client_config.json";
}
// else if (String.Equals(ReceiveConfigurationParameters[0], "QuicNone") || String.Equals(ReceiveConfigurationParameters[0], "QuicSRTP") || String.Equals(ReceiveConfigurationParameters[0], "Quic2uTP") || String.Equals(ReceiveConfigurationParameters[0], "QuicWechatVideo") || String.Equals(ReceiveConfigurationParameters[0], "QuicDTLS") || String.Equals(ReceiveConfigurationParameters[0], "QuicWireGuard"))
else if (ReceiveConfigurationParameters[0].Contains("Quic"))
{
inboundsConfigJson = @"TemplateConfg\v2ray\server\05_inbounds\quic_server_config.json";
//serverConfig = "TemplateConfg\\quic_server_config.json";
//clientConfig = "TemplateConfg\\quic_client_config.json";
}
//读取"inbounds"
@ -1802,21 +1839,27 @@ namespace ProxySU
//设置uuid
jObjectJson["inbounds"][0]["settings"]["clients"][0]["id"] = ReceiveConfigurationParameters[2];
//除WebSocketTLSWeb/http2Web/VlessTcpTlsWeb模式外设置监听端口
//除WebSocketTLSWeb/http2Web/VLESS+WebSocket+TLS+Web/VLESS+http2+TLS+Web模式外设置监听端口
if (String.Equals(ReceiveConfigurationParameters[0], "WebSocketTLS2Web") == false
&& String.Equals(ReceiveConfigurationParameters[0], "http2Web") == false
&& String.Equals(ReceiveConfigurationParameters[0], "VlessTcpTlsWeb") == false)
&& String.Equals(ReceiveConfigurationParameters[0], "VlessWebSocketTlsWeb") == false
&& String.Equals(ReceiveConfigurationParameters[0], "VlessHttp2Web") == false)
{
jObjectJson["inbounds"][0]["port"] = int.Parse(ReceiveConfigurationParameters[1]);
}
if (String.Equals(ReceiveConfigurationParameters[0], "VlessTcpTlsWeb") == true)
//设置VLESS协议的回落端口指向Caddy
if (String.Equals(ReceiveConfigurationParameters[0], "VlessTcpTlsWeb") == true
|| String.Equals(ReceiveConfigurationParameters[0], "VlessXtlsTcp") == true)
{
//设置Caddy随机监听的端口用于Trojan-go,Trojan,V2Ray vless TLS
//Random random = new Random();
//设置Caddy随机监听的端口
randomCaddyListenPort = GetRandomPort();
//指向Caddy监听的随机端口
jObjectJson["inbounds"][0]["settings"]["fallbacks"][0]["dest"] = randomCaddyListenPort;
}
//TLS自签证书/WebSocketTLS(自签证书)/http2自签证书模式下使用v2ctl 生成自签证书
if (String.Equals(ReceiveConfigurationParameters[0], "WebSocketTLSselfSigned") == true
|| String.Equals(ReceiveConfigurationParameters[0], "tcpTLSselfSigned") == true
@ -1826,26 +1869,32 @@ namespace ProxySU
JObject selfSignedCaJObject = JObject.Parse(selfSignedCa);
jObjectJson["inbounds"][0]["streamSettings"]["tlsSettings"]["certificates"][0] = selfSignedCaJObject;
}
//如果是WebSocketTLSWeb/WebSocketTLS/WebSocketTLS(自签证书)模式,则设置路径
//如果是WebSocketTLSWeb/WebSocketTLS/WebSocketTLS(自签证书)/VLESS+WebSocket+TLS+Web模式则设置路径
if (String.Equals(ReceiveConfigurationParameters[0], "WebSocketTLS") == true
|| String.Equals(ReceiveConfigurationParameters[0], "WebSocketTLSselfSigned") == true
|| String.Equals(ReceiveConfigurationParameters[0], "WebSocketTLS2Web") == true)
|| String.Equals(ReceiveConfigurationParameters[0], "WebSocketTLS2Web") == true
|| String.Equals(ReceiveConfigurationParameters[0], "VlessWebSocketTlsWeb")==true)
{
jObjectJson["inbounds"][0]["streamSettings"]["wsSettings"]["path"] = ReceiveConfigurationParameters[3];
jObjectJson["inbounds"][0]["streamSettings"]["wsSettings"]["path"] = ReceiveConfigurationParameters[6];
}
//如果是Http2/http2Web/http2自签模式下设置路径
//如果是Http2/http2Web/http2自签/VLESS+http2+TLS+Web模式下设置路径
if (String.Equals(ReceiveConfigurationParameters[0], "Http2") == true
|| String.Equals(ReceiveConfigurationParameters[0], "http2Web") == true
|| String.Equals(ReceiveConfigurationParameters[0], "http2selfSigned") == true)
|| String.Equals(ReceiveConfigurationParameters[0], "http2selfSigned") == true
|| String.Equals(ReceiveConfigurationParameters[0], "VlessHttp2Web") == true)
{
jObjectJson["inbounds"][0]["streamSettings"]["httpSettings"]["path"] = ReceiveConfigurationParameters[3];
jObjectJson["inbounds"][0]["streamSettings"]["httpSettings"]["path"] = ReceiveConfigurationParameters[6];
}
//如果是Http2Web模式下设置host
if (String.Equals(ReceiveConfigurationParameters[0], "http2Web") == true)
//如果是Http2+Web/VLESS+http2+TLS+Web模式下设置host
if (String.Equals(ReceiveConfigurationParameters[0], "http2Web") == true
|| String.Equals(ReceiveConfigurationParameters[0], "VlessHttp2Web") == true)
{
// jObjectJson["inbounds"][0]["streamSettings"]["httpSettings"]["path"] = ReceiveConfigurationParameters[3];
jObjectJson["inbounds"][0]["streamSettings"]["httpSettings"]["host"][0] = ReceiveConfigurationParameters[4];
}
//mkcp模式下设置伪装类型
if (ReceiveConfigurationParameters[0].Contains("mKCP") == true)
{
@ -1855,12 +1904,20 @@ namespace ProxySU
jObjectJson["inbounds"][0]["streamSettings"]["kcpSettings"]["seed"] = ReceiveConfigurationParameters[6];
}
}
//quic模式下设置伪装类型及密钥
if (ReceiveConfigurationParameters[0].Contains("Quic") == true)
{
jObjectJson["inbounds"][0]["streamSettings"]["quicSettings"]["header"]["type"] = ReceiveConfigurationParameters[5];
jObjectJson["inbounds"][0]["streamSettings"]["quicSettings"]["security"] = ReceiveConfigurationParameters[3];
if (String.Equals(ReceiveConfigurationParameters[3],"none") == true)
{
ReceiveConfigurationParameters[6] = "";
}
jObjectJson["inbounds"][0]["streamSettings"]["quicSettings"]["key"] = ReceiveConfigurationParameters[6];
}
serverJson["inbounds"] = jObjectJson["inbounds"];
}
@ -1874,8 +1931,12 @@ namespace ProxySU
File.Delete(@"config.json");
//如果使用http2/WebSocketTLS/tcpTLS/VlessTcpTlsWeb模式先要安装acme.sh,申请证书
if (String.Equals(ReceiveConfigurationParameters[0], "Http2") == true || String.Equals(ReceiveConfigurationParameters[0], "WebSocketTLS") == true || String.Equals(ReceiveConfigurationParameters[0], "tcpTLS") == true || String.Equals(ReceiveConfigurationParameters[0], "VlessTcpTlsWeb") == true)
//如果使用http2/WebSocketTLS/tcpTLS/VlessTcpTlsWeb/VLESS+TCP+XTLS+Web模式先要安装acme.sh,申请证书
if (String.Equals(ReceiveConfigurationParameters[0], "Http2") == true
|| String.Equals(ReceiveConfigurationParameters[0], "WebSocketTLS") == true
|| String.Equals(ReceiveConfigurationParameters[0], "tcpTLS") == true
|| String.Equals(ReceiveConfigurationParameters[0], "VlessXtlsTcp") == true
|| String.Equals(ReceiveConfigurationParameters[0], "VlessTcpTlsWeb") == true)
{
//****** "正在安装acme.sh......" ******22
SetUpProgressBarProcessing(55);
@ -2030,10 +2091,13 @@ namespace ProxySU
}
//如果是WebSocket+TLS+Web/http2Web/vlessTcpTlsWeb模式需要安装Caddy
if (ReceiveConfigurationParameters[0].Contains("WebSocketTLS2Web") ==true
|| ReceiveConfigurationParameters[0].Contains("http2Web") == true
|| ReceiveConfigurationParameters[0].Contains("VlessTcpTlsWeb") == true)
//如果是VLESS+TCP+XTLS+Web/VLESS+TCP+TLS+Web/VLESS+WebSocket+TLS+Web/VLESS+http2+TLS+Web/WebSocket+TLS+Web/http2Web模式需要安装Caddy
if (String.Equals(ReceiveConfigurationParameters[0], "VlessXtlsTcp") == true
|| String.Equals(ReceiveConfigurationParameters[0], "VlessTcpTlsWeb") == true
|| String.Equals(ReceiveConfigurationParameters[0], "VlessWebSocketTlsWeb") == true
|| String.Equals(ReceiveConfigurationParameters[0], "VlessHttp2Web") == true
|| String.Equals(ReceiveConfigurationParameters[0],"WebSocketTLS2Web") ==true
|| String.Equals(ReceiveConfigurationParameters[0], "http2Web") == true)
{
//****** "安装Caddy......" ******28
SetUpProgressBarProcessing(70);
@ -2155,7 +2219,8 @@ namespace ProxySU
TextBoxMonitorCommandResults.Dispatcher.BeginInvoke(updateMonitorAction, TextBoxMonitorCommandResults, currentShellCommandResult);//显示命令执行的结果
//在Caddy 2还未推出2.2.0的正式版之前,先用测试版替代
if (String.Equals(ReceiveConfigurationParameters[0], "http2Web"))
if (String.Equals(ReceiveConfigurationParameters[0], "http2Web") == true
|| String.Equals(ReceiveConfigurationParameters[0], "VlessHttp2Web") == true)
{
//****** "正在为Http2Web模式升级Caddy v2.2.0测试版!" ******30
SetUpProgressBarProcessing(77);
@ -2211,18 +2276,22 @@ namespace ProxySU
currentShellCommandResult = client.RunCommand(sshShellCommand).Result;
TextBoxMonitorCommandResults.Dispatcher.BeginInvoke(updateMonitorAction, TextBoxMonitorCommandResults, currentShellCommandResult);//显示命令执行的结果
if (ReceiveConfigurationParameters[0].Contains("WebSocketTLS2Web") == true)
{
serverConfig = @"TemplateConfg\v2ray\caddy\WebSocketTLSWeb.caddyfile";
}
else if (ReceiveConfigurationParameters[0].Contains("http2Web") == true)
{
serverConfig = @"TemplateConfg\v2ray\caddy\Http2Web.caddyfile";
}
else if(ReceiveConfigurationParameters[0].Contains("VlessTcpTlsWeb")==true)
if (String.Equals(ReceiveConfigurationParameters[0], "VlessXtlsTcp") == true
|| String.Equals(ReceiveConfigurationParameters[0], "VlessTcpTlsWeb") == true)
{
serverConfig = @"TemplateConfg\v2ray\caddy\vlessTcpTlsWeb.caddyfile";
}
else if (String.Equals(ReceiveConfigurationParameters[0], "VlessWebSocketTlsWeb") == true
|| String.Equals(ReceiveConfigurationParameters[0], "WebSocketTLS2Web") == true)
{
serverConfig = @"TemplateConfg\v2ray\caddy\WebSocketTLSWeb.caddyfile";
}
else if (String.Equals(ReceiveConfigurationParameters[0], "VlessHttp2Web") == true
|| String.Equals(ReceiveConfigurationParameters[0], "http2Web") == true)
{
serverConfig = @"TemplateConfg\v2ray\caddy\Http2Web.caddyfile";
}
string upLoadPath = "/etc/caddy/Caddyfile";
client.RunCommand("mv /etc/caddy/Caddyfile /etc/caddy/Caddyfile.bak");
UploadConfig(connectionInfo, serverConfig, upLoadPath);
@ -2244,7 +2313,7 @@ namespace ProxySU
TextBoxMonitorCommandResults.Dispatcher.BeginInvoke(updateMonitorAction, TextBoxMonitorCommandResults, currentShellCommandResult);//显示命令执行的结果
//设置Path
sshShellCommand = $"sed -i 's/##path##/\\{ReceiveConfigurationParameters[3]}/' {upLoadPath}";
sshShellCommand = $"sed -i 's/##path##/\\{ReceiveConfigurationParameters[6]}/' {upLoadPath}";
TextBoxMonitorCommandResults.Dispatcher.BeginInvoke(updateMonitorAction, TextBoxMonitorCommandResults, sshShellCommand);//显示执行的命令
currentShellCommandResult = client.RunCommand(sshShellCommand).Result;
TextBoxMonitorCommandResults.Dispatcher.BeginInvoke(updateMonitorAction, TextBoxMonitorCommandResults, currentShellCommandResult);//显示命令执行的结果
@ -2616,117 +2685,120 @@ namespace ProxySU
clientJson["reverse"] = jObjectJson["reverse"];
}
//根据选择的不同模式,选择相应的配置文件
if (String.Equals(ReceiveConfigurationParameters[0], "TCP"))
{
outboundsConfigJson = @"TemplateConfg\v2ray\client\06_outbounds\tcp_client_config.json";
//serverConfig = "TemplateConfg\\tcp_server_config.json";
//clientConfig = "TemplateConfg\\tcp_client_config.json";
}
else if (String.Equals(ReceiveConfigurationParameters[0], "TCPhttp"))
{
outboundsConfigJson = @"TemplateConfg\v2ray\client\06_outbounds\tcp_http_client_config.json";
//serverConfig = "TemplateConfg\\tcp_http_server_config.json";
//clientConfig = "TemplateConfg\\tcp_http_client_config.json";
}
else if (String.Equals(ReceiveConfigurationParameters[0], "tcpTLS"))
{
outboundsConfigJson = @"TemplateConfg\v2ray\client\06_outbounds\tcp_TLS_client_config.json";
//serverConfig = "TemplateConfg\\tcp_TLS_server_config.json";
//clientConfig = "TemplateConfg\\tcp_TLS_client_config.json";
}
else if (String.Equals(ReceiveConfigurationParameters[0], "tcpTLSselfSigned"))
{
outboundsConfigJson = @"TemplateConfg\v2ray\client\06_outbounds\tcpTLSselfSigned_client_config.json";
//serverConfig = "TemplateConfg\\tcpTLSselfSigned_server_config.json";
//clientConfig = "TemplateConfg\\tcpTLSselfSigned_client_config.json";
}
else if (String.Equals(ReceiveConfigurationParameters[0], "VlessXtlsTcp"))
{
outboundsConfigJson = @"TemplateConfg\v2ray\client\06_outbounds\vless_tcp_xtls_client_config.json";
}
else if (String.Equals(ReceiveConfigurationParameters[0], "VlessTcpTlsWeb"))
{
outboundsConfigJson = @"TemplateConfg\v2ray\client\06_outbounds\tcp_vless_tls_caddy_cilent_config.json";
//serverConfig = "TemplateConfg\\tcp_vless_tls_caddy_server_config.json";
//clientConfig = "TemplateConfg\\tcp_vless_tls_caddy_cilent_config.json";
outboundsConfigJson = @"TemplateConfg\v2ray\client\06_outbounds\vless_tcp_tls_caddy_cilent_config.json";
}
else if (String.Equals(ReceiveConfigurationParameters[0], "VlessWebSocketTlsWeb"))
{
outboundsConfigJson = @"TemplateConfg\v2ray\client\06_outbounds\vless_ws_tls_client_config.json";
}
else if (String.Equals(ReceiveConfigurationParameters[0], "VlessHttp2Web"))
{
outboundsConfigJson = @"TemplateConfg\v2ray\client\06_outbounds\vless_http2_tls_server_config.json";
}
else if (String.Equals(ReceiveConfigurationParameters[0], "webSocket"))
{
outboundsConfigJson = @"TemplateConfg\v2ray\client\06_outbounds\webSocket_client_config.json";
//serverConfig = "TemplateConfg\\webSocket_server_config.json";
//clientConfig = "TemplateConfg\\webSocket_client_config.json";
}
else if (String.Equals(ReceiveConfigurationParameters[0], "WebSocketTLS"))
{
outboundsConfigJson = @"TemplateConfg\v2ray\client\06_outbounds\WebSocket_TLS_client_config.json";
//serverConfig = "TemplateConfg\\WebSocket_TLS_server_config.json";
//clientConfig = "TemplateConfg\\WebSocket_TLS_client_config.json";
}
else if (String.Equals(ReceiveConfigurationParameters[0], "WebSocketTLSselfSigned"))
{
outboundsConfigJson = @"TemplateConfg\v2ray\client\06_outbounds\WebSocketTLS_selfSigned_client_config.json";
//serverConfig = "TemplateConfg\\WebSocketTLS_selfSigned_server_config.json";
//clientConfig = "TemplateConfg\\WebSocketTLS_selfSigned_client_config.json";
}
else if (String.Equals(ReceiveConfigurationParameters[0], "WebSocketTLS2Web"))
{
outboundsConfigJson = @"TemplateConfg\v2ray\client\06_outbounds\WebSocketTLSWeb_client_config.json";
//serverConfig = "TemplateConfg\\WebSocketTLSWeb_server_config.json";
//clientConfig = "TemplateConfg\\WebSocketTLSWeb_client_config.json";
}
else if (String.Equals(ReceiveConfigurationParameters[0], "Http2"))
{
outboundsConfigJson = @"TemplateConfg\v2ray\client\06_outbounds\http2_client_config.json";
//serverConfig = "TemplateConfg\\http2_server_config.json";
//clientConfig = @"TemplateConfg\http2_client_config.json";
}
else if (String.Equals(ReceiveConfigurationParameters[0], "http2Web"))
{
outboundsConfigJson = @"TemplateConfg\v2ray\client\06_outbounds\Http2Web_client_config.json";
//serverConfig = "TemplateConfg\\Http2Web_server_config.json";
//clientConfig = "TemplateConfg\\Http2Web_client_config.json";
}
else if (String.Equals(ReceiveConfigurationParameters[0], "http2selfSigned"))
{
outboundsConfigJson = @"TemplateConfg\v2ray\client\06_outbounds\Http2selfSigned_client_config.json";
//serverConfig = "TemplateConfg\\Http2selfSigned_server_config.json";
//clientConfig = "TemplateConfg\\Http2selfSigned_client_config.json";
}
//else if (String.Equals(ReceiveConfigurationParameters[0], "MkcpNone")|| String.Equals(ReceiveConfigurationParameters[0], "mKCP2SRTP")||String.Equals(ReceiveConfigurationParameters[0], "mKCPuTP")|| String.Equals(ReceiveConfigurationParameters[0], "mKCP2WechatVideo")|| String.Equals(ReceiveConfigurationParameters[0], "mKCP2DTLS")|| String.Equals(ReceiveConfigurationParameters[0], "mKCP2WireGuard"))
else if (ReceiveConfigurationParameters[0].Contains("mKCP"))
{
outboundsConfigJson = @"TemplateConfg\v2ray\client\06_outbounds\mkcp_client_config.json";
//serverConfig = "TemplateConfg\\mkcp_server_config.json";
//clientConfig = "TemplateConfg\\mkcp_client_config.json";
}
// else if (String.Equals(ReceiveConfigurationParameters[0], "QuicNone") || String.Equals(ReceiveConfigurationParameters[0], "QuicSRTP") || String.Equals(ReceiveConfigurationParameters[0], "Quic2uTP") || String.Equals(ReceiveConfigurationParameters[0], "QuicWechatVideo") || String.Equals(ReceiveConfigurationParameters[0], "QuicDTLS") || String.Equals(ReceiveConfigurationParameters[0], "QuicWireGuard"))
else if (ReceiveConfigurationParameters[0].Contains("Quic"))
{
outboundsConfigJson = @"TemplateConfg\v2ray\client\06_outbounds\quic_client_config.json";
//serverConfig = "TemplateConfg\\quic_server_config.json";
//clientConfig = "TemplateConfg\\quic_client_config.json";
}
//读取"相应模板的outbounds"
using (StreamReader readerJson = File.OpenText(outboundsConfigJson))
{
JObject jObjectJson = (JObject)JToken.ReadFrom(new JsonTextReader(readerJson));
//设置客户端的地址/端口/id
jObjectJson["outbounds"][0]["settings"]["vnext"][0]["address"] = ReceiveConfigurationParameters[4];
jObjectJson["outbounds"][0]["settings"]["vnext"][0]["port"] = int.Parse(ReceiveConfigurationParameters[1]);
jObjectJson["outbounds"][0]["settings"]["vnext"][0]["users"][0]["id"] = ReceiveConfigurationParameters[2];
//设置WebSocket系统模式下的path
if (String.Equals(ReceiveConfigurationParameters[0], "WebSocketTLS") == true || String.Equals(ReceiveConfigurationParameters[0], "WebSocketTLSselfSigned") == true || String.Equals(ReceiveConfigurationParameters[0], "WebSocketTLS2Web") == true)
//设置WebSocket模式下的path
if (String.Equals(ReceiveConfigurationParameters[0], "WebSocketTLS") == true
|| String.Equals(ReceiveConfigurationParameters[0], "WebSocketTLSselfSigned") == true
|| String.Equals(ReceiveConfigurationParameters[0], "WebSocketTLS2Web") == true
|| String.Equals(ReceiveConfigurationParameters[0], "VlessWebSocketTlsWeb") == true)
{
jObjectJson["outbounds"][0]["streamSettings"]["wsSettings"]["path"] = ReceiveConfigurationParameters[3];
jObjectJson["outbounds"][0]["streamSettings"]["wsSettings"]["path"] = ReceiveConfigurationParameters[6];
}
//设置http2模式下的path
if (String.Equals(ReceiveConfigurationParameters[0], "Http2") == true || String.Equals(ReceiveConfigurationParameters[0], "http2Web") == true || String.Equals(ReceiveConfigurationParameters[0], "http2selfSigned") == true)
if (String.Equals(ReceiveConfigurationParameters[0], "Http2") == true
|| String.Equals(ReceiveConfigurationParameters[0], "http2Web") == true
|| String.Equals(ReceiveConfigurationParameters[0], "http2selfSigned") == true
|| String.Equals(ReceiveConfigurationParameters[0], "VlessHttp2Web") == true)
{
jObjectJson["outbounds"][0]["streamSettings"]["httpSettings"]["path"] = ReceiveConfigurationParameters[3];
jObjectJson["outbounds"][0]["streamSettings"]["httpSettings"]["path"] = ReceiveConfigurationParameters[6];
}
//设置http2web模式下的host
if (String.Equals(ReceiveConfigurationParameters[0], "http2Web") == true)
//设置http2+TLS+Web/VLESS+http2+TLS+Web模式下的host
if (String.Equals(ReceiveConfigurationParameters[0], "http2Web") == true
|| String.Equals(ReceiveConfigurationParameters[0], "VlessHttp2Web") == true)
{
jObjectJson["outbounds"][0]["streamSettings"]["httpSettings"]["host"][0] = ReceiveConfigurationParameters[4];
}
//设置VLESS+TCP+XTLS+Web模式下的serverName
if (String.Equals(ReceiveConfigurationParameters[0], "VlessXtlsTcp") == true)
{
jObjectJson["outbounds"][0]["streamSettings"]["xtlsSettings"]["serverName"] = ReceiveConfigurationParameters[4];
}
//设置mkcp
if (ReceiveConfigurationParameters[0].Contains("mKCP") == true)
{
jObjectJson["outbounds"][0]["streamSettings"]["kcpSettings"]["header"]["type"] = ReceiveConfigurationParameters[5];
@ -2735,9 +2807,16 @@ namespace ProxySU
jObjectJson["outbounds"][0]["streamSettings"]["kcpSettings"]["seed"] = ReceiveConfigurationParameters[6];
}
}
//设置QUIC
if (ReceiveConfigurationParameters[0].Contains("Quic") == true)
{
jObjectJson["outbounds"][0]["streamSettings"]["quicSettings"]["header"]["type"] = ReceiveConfigurationParameters[5];
jObjectJson["inbounds"][0]["streamSettings"]["quicSettings"]["security"] = ReceiveConfigurationParameters[3];
if (String.Equals(ReceiveConfigurationParameters[3], "none") == true)
{
ReceiveConfigurationParameters[6] = "";
}
jObjectJson["outbounds"][0]["streamSettings"]["quicSettings"]["key"] = ReceiveConfigurationParameters[6];
}
@ -12153,12 +12232,19 @@ namespace ProxySU
MessageBox.Show(ex.Message);
}
}
#endregion
// #region 三合一安装过程
private void Button_Click(object sender, RoutedEventArgs e)
{
//显示服务端连接参数
proxyType = "V2Ray";
ResultClientInformation resultClientInformation = new ResultClientInformation();
resultClientInformation.ShowDialog();
}
#region
// //生成三合一的v2ray路径
// private void ButtonV2rayPath3in1_Click(object sender, RoutedEventArgs e)
@ -13141,7 +13227,7 @@ namespace ProxySU
// }
// #endregion
#endregion
}

View file

@ -51,5 +51,5 @@ using System.Windows;
// 可以指定所有值,也可以使用以下所示的 "*" 预置版本号和修订号
// 方法是按如下所示使用“*”: :
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("2.2.3.0")]
[assembly: AssemblyFileVersion("2.2.3.0")]
[assembly: AssemblyVersion("2.3.0.0")]
[assembly: AssemblyFileVersion("2.3.0.0")]

View file

@ -13,18 +13,18 @@
<RowDefinition Height="0.12*"></RowDefinition>
</Grid.RowDefinitions>
<!-- V2Ray客户端配置参数 -->
<GroupBox Header="{DynamicResource GroupBoxHeaderClientParameter}" x:Name="GroupBoxV2rayClient" Visibility="Collapsed" Grid.Row="0">
<GroupBox Header="{DynamicResource GroupBoxHeaderClientParameter}" x:Name="GroupBoxV2rayClient" Visibility="Visible" Grid.Row="0">
<Grid >
<Grid.ColumnDefinitions>
<ColumnDefinition Width="0.6*"></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition Width="0.7*"></ColumnDefinition>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition Height="1.2*"></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
@ -34,39 +34,48 @@
<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"></TextBox>
<TextBlock Text="" Grid.Column="2" Grid.Row="0"></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"></TextBox>
<TextBlock Text="" Grid.Column="2" Grid.Row="1"></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"></TextBox>
<TextBlock Text="" Grid.Column="2" Grid.Row="2"></TextBlock>
<TextBox x:Name="TextBoxUUID" IsReadOnly="True" Grid.Column="1" Grid.Row="2" Margin="2" MouseDoubleClick="TextBoxUUID_MouseDoubleClick"></TextBox>
<TextBlock x:Name="TextBlockUUIDextra" Text="{DynamicResource TextBlockV2RayAlterId}" Grid.Column="0" Grid.Row="3" Margin="1" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
<TextBox x:Name="TextBoxUUIDextra" IsReadOnly="False" Grid.Column="1" Grid.Row="3" Margin="2"></TextBox>
<TextBlock x:Name="TextBlockUUIDextraExplanation" Text="{DynamicResource TextBlockV2RayAlterIdExplain}" TextWrapping="Wrap" Grid.Column="2" Grid.Row="3"></TextBlock>
<TextBlock Text="{DynamicResource TextBlockEncryption}" Grid.Column="0" Grid.Row="4" Margin="1" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
<TextBox x:Name="TextBoxEncryption" IsReadOnly="True" Grid.Column="1" Grid.Row="4" Margin="2"></TextBox>
<TextBlock Text="{DynamicResource TextBlockEncryptionIsAuto}" Grid.Column="2" Grid.Row="4"></TextBlock>
<TextBlock Text="{DynamicResource TextBlockTransferProtocol}" Grid.Column="0" Grid.Row="5" Margin="1" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
<TextBox x:Name="TextBoxTransmission" IsReadOnly="True" Grid.Column="1" Grid.Row="5" Margin="2"></TextBox>
<TextBlock Text="" Grid.Column="2" Grid.Row="5"></TextBlock>
<TextBlock Text="{DynamicResource TextBlockCamouflageType}" Grid.Column="0" Grid.Row="6" Margin="1" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
<TextBox x:Name="TextBoxCamouflageType" IsReadOnly="True" Grid.Column="1" Grid.Row="6" Margin="2"></TextBox>
<TextBlock Text="" Grid.Column="2" Grid.Row="6"></TextBlock>
<TextBlock x:Name="TextBlocTLSonOrNo" Text="{DynamicResource TextBlockIsOrNotTLS}" Grid.Column="0" Grid.Row="7" Margin="1" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
<TextBox x:Name="TextBoxTLS" IsReadOnly="True" Grid.Column="1" Grid.Row="7" Margin="2"></TextBox>
<TextBlock x:Name="TextBlocTLSonOrNoExplain" Text="" Grid.Column="2" Grid.Row="7"></TextBlock>
<TextBlock x:Name="TextBlockHost" Text="Host:" Grid.Column="0" Grid.Row="8" Margin="1" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
<TextBox x:Name="TextBoxHost" IsReadOnly="True" Grid.Column="1" Grid.Row="8" Margin="2"></TextBox>
<TextBlock x:Name="TextBlockHostExplain" Text="" Grid.Column="2" Grid.Row="8"></TextBlock>
<TextBox x:Name="TextBoxUUIDextra" IsReadOnly="False" Grid.Column="1" Grid.Row="3" Margin="2" MouseDoubleClick="TextBoxUUIDextra_MouseDoubleClick"></TextBox>
<TextBlock x:Name="TextBlockUUIDextraExplanation" Text="{DynamicResource TextBlockV2RayAlterIdExplain}" TextWrapping="Wrap" Grid.Column="2" Grid.Row="3" VerticalAlignment="Center"></TextBlock>
<TextBlock x:Name="TextBlockPath" Text="{DynamicResource TextBlockClientPath}" Grid.Column="0" Grid.Row="9" Margin="1" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
<TextBox x:Name="TextBoxPath" IsReadOnly="True" Grid.Column="1" Grid.Row="9" Margin="2"></TextBox>
<TextBlock x:Name="TextBlockPathExplain" Text="" Grid.Column="2" Grid.Row="9"></TextBlock>
<TextBlock x:Name="TextBlockQuicKey" Text="{DynamicResource TextBlockClientMkcpQuicKey}" Grid.Column="0" Grid.Row="10" Margin="1" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
<TextBox x:Name="TextBoxQuicKey" IsReadOnly="True" Grid.Column="1" Grid.Row="10" Margin="2"></TextBox>
<TextBlock x:Name="TextBlockQuicKeyExplain" Text="" Grid.Column="2" Grid.Row="10"></TextBlock>
<!--<TextBlock x:Name="TextBlockVless" Text="{DynamicResource TextBlockV2RayAlterId}" Grid.Column="0" Grid.Row="3" Margin="1" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
<TextBox x:Name="TextBoxVless" IsReadOnly="False" Grid.Column="1" Grid.Row="3" Margin="2"></TextBox>-->
<TextBlock Text="{DynamicResource TextBlockEncryption}" Grid.Column="0" Grid.Row="4" Margin="1" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
<TextBox x:Name="TextBoxEncryption" IsReadOnly="True" Grid.Column="1" Grid.Row="4" Margin="2" MouseDoubleClick="TextBoxEncryption_MouseDoubleClick"></TextBox>
<TextBlock Text="{DynamicResource TextBlockEncryptionIsAuto}" Grid.Column="2" Grid.Row="4" VerticalAlignment="Center"></TextBlock>
<TextBlock Text="{DynamicResource TextBlockTransferProtocol}" Grid.Column="0" Grid.Row="5" Margin="1" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
<TextBox x:Name="TextBoxTransmission" IsReadOnly="True" Grid.Column="1" Grid.Row="5" Margin="2" MouseDoubleClick="TextBoxTransmission_MouseDoubleClick"></TextBox>
<TextBlock Text="{DynamicResource TextBlockCamouflageType}" Grid.Column="0" Grid.Row="6" Margin="1" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
<TextBox x:Name="TextBoxCamouflageType" IsReadOnly="True" Grid.Column="1" Grid.Row="6" Margin="2" MouseDoubleClick="TextBoxCamouflageType_MouseDoubleClick"></TextBox>
<TextBlock x:Name="TextBlockQuicEncryption" Text="{DynamicResource TextBlockQuicEncryption}" Visibility="Collapsed" Grid.Column="0" Grid.Row="7" Margin="1" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
<TextBlock x:Name="TextBlockHost" Text="Host:" Grid.Column="0" Grid.Row="7" Margin="1" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
<TextBox x:Name="TextBoxHostQuicEncryption" IsReadOnly="True" Grid.Column="1" Grid.Row="7" Margin="2" MouseDoubleClick="TextBoxHostQuicEncryption_MouseDoubleClick"></TextBox>
<!--<TextBox x:Name="TextBoxPath" IsReadOnly="True" Grid.Column="1" Grid.Row="9" Margin="2"></TextBox>
<TextBlock x:Name="TextBlockPathExplain" Text="" Grid.Column="2" Grid.Row="9"></TextBlock>-->
<TextBlock x:Name="TextBlockPath" Text="{DynamicResource TextBlockClientPath}" Visibility="Visible" Grid.Column="0" Grid.Row="8" Margin="1" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
<TextBlock x:Name="TextBlockMkcpSeed" Text="{DynamicResource TextBlockClientMkcpSeed}" Visibility="Collapsed" Grid.Column="0" Grid.Row="8" Margin="1" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
<TextBlock x:Name="TextBlockQuicKey" Text="{DynamicResource TextBlockClientQuicKey}" Visibility="Collapsed" Grid.Column="0" Grid.Row="8" Margin="1" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
<TextBox x:Name="TextBoxQuicKeyMkcpSeedPath" IsReadOnly="True" Grid.Column="1" Grid.Row="8" Margin="2" MouseDoubleClick="TextBoxQuicKeyMkcpSeedPath_MouseDoubleClick"></TextBox>
<TextBlock x:Name="TextBlocTLSonOrNo" Text="{DynamicResource TextBlockIsOrNotTLS}" Grid.Column="0" Grid.Row="9" Margin="1" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
<TextBox x:Name="TextBoxTLS" IsReadOnly="True" Grid.Column="1" Grid.Row="9" Margin="2" MouseDoubleClick="TextBoxTLS_MouseDoubleClick"></TextBox>
<TextBlock Text="{DynamicResource TextBlockCopyToClipExplain}" Grid.Column="0" Grid.Row="10" Grid.ColumnSpan="3" Margin="5"></TextBlock>
</Grid>
@ -129,7 +138,7 @@
</Grid>
</GroupBox>
<!-- NaiveProxy客户端配置参数 -->
<GroupBox Header="{DynamicResource GroupBoxHeaderClientParameter}" x:Name="GroupBoxNaiveProxyClient" Visibility="Visible" Grid.Row="0">
<GroupBox Header="{DynamicResource GroupBoxHeaderClientParameter}" x:Name="GroupBoxNaiveProxyClient" Visibility="Collapsed" Grid.Row="0">
<Grid >
<Grid.ColumnDefinitions>
<ColumnDefinition Width="0.5*"></ColumnDefinition>

View file

@ -53,68 +53,111 @@ namespace ProxySU
TextBoxUUIDextra.Text = "16";
//加密方式一般都为auto
TextBoxEncryption.Text = "auto";
//传输协议
TextBoxTransmission.Text = "";
//伪装类型
TextBoxCamouflageType.Text = MainWindow.ReceiveConfigurationParameters[5];
//TLS的Host /Quic 加密方式
TextBoxHostQuicEncryption.Text = "";
//QUIC密钥/mKCP Seed/路径Path
TextBoxQuicKeyMkcpSeedPath.Text = MainWindow.ReceiveConfigurationParameters[6];
//是否启用TLS
TextBoxTLS.Text = "none";
//TLS的Host
TextBoxHost.Text = "";
//路径Path
TextBoxPath.Text = MainWindow.ReceiveConfigurationParameters[3];
//QUIC密钥/mKCP Seed
TextBoxQuicKey.Text = MainWindow.ReceiveConfigurationParameters[6];
if (String.Equals(MainWindow.ReceiveConfigurationParameters[0], "WebSocketTLS2Web"))
{
TextBoxTransmission.Text = "ws"; //传输协议
TextBoxCamouflageType.Text = "none"; //伪装类型
TextBoxTLS.Text = "tls"; //是否启用TLS
ShowPath(); //显示路径
HideQuicKey(); //隐藏Quic\mKCP密钥
}
else if (String.Equals(MainWindow.ReceiveConfigurationParameters[0], "TCP"))
if (String.Equals(MainWindow.ReceiveConfigurationParameters[0], "TCP"))
{
TextBoxTransmission.Text = "tcp";
TextBoxCamouflageType.Text = "none";
TextBoxTLS.Text = "none";
HidePath();
HideQuicKey();
ShowHostName();
ShowPathV2ray();
}
else if (String.Equals(MainWindow.ReceiveConfigurationParameters[0], "TCPhttp"))
{
TextBoxTransmission.Text = "tcp";
TextBoxCamouflageType.Text = "http";
TextBoxTLS.Text = "none";
HidePath();
HideQuicKey();
ShowHostName();
ShowPathV2ray();
}
else if (String.Equals(MainWindow.ReceiveConfigurationParameters[0], "tcpTLS"))
{
TextBoxTransmission.Text = "tcp";
TextBoxCamouflageType.Text = "none";
TextBoxTLS.Text = "tls";
HidePath();
HideQuicKey();
ShowHostName();
ShowPathV2ray();
}
else if (String.Equals(MainWindow.ReceiveConfigurationParameters[0], "tcpTLSselfSigned"))
{
TextBoxTransmission.Text = "tcp";
TextBoxCamouflageType.Text = "none";
TextBoxTLS.Text = "tls";
HidePath();
HideQuicKey();
ShowHostName();
ShowPathV2ray();
}
else if (String.Equals(MainWindow.ReceiveConfigurationParameters[0], "VlessTcpTlsWeb"))
else if (String.Equals(MainWindow.ReceiveConfigurationParameters[0], "VlessXtlsTcp"))
{
TextBlockVmessOrVless.Text = Application.Current.FindResource("TabItemHeaderV2RayVlessProtocol").ToString();
TextBoxTransmission.Text = "tcp";
TextBoxCamouflageType.Text = "none";
TextBoxEncryption.Text = "none";
TextBoxTLS.Text = "tls";
HideAlterId();
HidePath();
HideQuicKey();
ShowHostName();
ShowPathV2ray();
//TextBlockQrURLexplain.Text = Application.Current.FindResource("TabItemHeaderV2RayVlessProtocol").ToString();
ImageShareQRcode.Visibility = Visibility.Collapsed;
TextBoxURL.Visibility = Visibility.Collapsed;
}
else if (String.Equals(MainWindow.ReceiveConfigurationParameters[0], "VlessTcpTlsWeb"))
{
TextBlockVmessOrVless.Text = Application.Current.FindResource("TabItemHeaderV2RayVlessProtocol").ToString();
TextBoxTransmission.Text = "tcp";
TextBoxCamouflageType.Text = "none";
TextBoxEncryption.Text = "none";
TextBoxTLS.Text = "tls";
HideAlterId();
ShowHostName();
ShowPathV2ray();
//TextBlockQrURLexplain.Text = Application.Current.FindResource("TabItemHeaderV2RayVlessProtocol").ToString();
ImageShareQRcode.Visibility = Visibility.Collapsed;
TextBoxURL.Visibility = Visibility.Collapsed;
}
else if (String.Equals(MainWindow.ReceiveConfigurationParameters[0], "VlessWebSocketTlsWeb"))
{
TextBlockVmessOrVless.Text = Application.Current.FindResource("TabItemHeaderV2RayVlessProtocol").ToString();
TextBoxTransmission.Text = "ws";
TextBoxCamouflageType.Text = "none";
TextBoxEncryption.Text = "none";
TextBoxTLS.Text = "tls";
HideAlterId();
ShowHostName();
ShowPathV2ray();
//TextBlockQrURLexplain.Text = Application.Current.FindResource("TabItemHeaderV2RayVlessProtocol").ToString();
ImageShareQRcode.Visibility = Visibility.Collapsed;
TextBoxURL.Visibility = Visibility.Collapsed;
}
else if (String.Equals(MainWindow.ReceiveConfigurationParameters[0], "VlessHttp2Web"))
{
TextBlockVmessOrVless.Text = Application.Current.FindResource("TabItemHeaderV2RayVlessProtocol").ToString();
TextBoxTransmission.Text = "h2";
TextBoxCamouflageType.Text = "none";
TextBoxEncryption.Text = "none";
TextBoxTLS.Text = "tls";
HideAlterId();
ShowHostName();
ShowPathV2ray();
//TextBlockQrURLexplain.Text = Application.Current.FindResource("TabItemHeaderV2RayVlessProtocol").ToString();
ImageShareQRcode.Visibility = Visibility.Collapsed;
TextBoxURL.Visibility = Visibility.Collapsed;
}
@ -123,157 +166,125 @@ namespace ProxySU
TextBoxTransmission.Text = "ws";
TextBoxCamouflageType.Text = "none";
TextBoxTLS.Text = "none";
HidePath();
HideQuicKey();
ShowHostName();
ShowPathV2ray();
}
else if (String.Equals(MainWindow.ReceiveConfigurationParameters[0], "WebSocketTLS"))
{
TextBoxTransmission.Text = "ws";
TextBoxCamouflageType.Text = "none";
TextBoxTLS.Text = "tls";
ShowPath();
HideQuicKey();
ShowHostName();
ShowPathV2ray();
}
else if (String.Equals(MainWindow.ReceiveConfigurationParameters[0], "WebSocketTLS2Web"))
{
TextBoxTransmission.Text = "ws";
TextBoxCamouflageType.Text = "none";
TextBoxTLS.Text = "tls";
ShowHostName();
ShowPathV2ray();
}
else if (String.Equals(MainWindow.ReceiveConfigurationParameters[0], "WebSocketTLSselfSigned"))
{
TextBoxTransmission.Text = "ws";
TextBoxCamouflageType.Text = "none";
TextBoxTLS.Text = "tls";
ShowPath();
HideQuicKey();
ShowHostName();
ShowPathV2ray();
}
else if (String.Equals(MainWindow.ReceiveConfigurationParameters[0], "Http2"))
{
TextBoxTransmission.Text = "h2";
TextBoxCamouflageType.Text = "none";
TextBoxTLS.Text = "tls";
ShowPath();
HideQuicKey();
ShowHostName();
ShowPathV2ray();
}
else if (String.Equals(MainWindow.ReceiveConfigurationParameters[0], "http2Web"))
{
TextBoxTransmission.Text = "h2";
TextBoxCamouflageType.Text = "none";
TextBoxHost.Text = MainWindow.ReceiveConfigurationParameters[4];
TextBoxHostQuicEncryption.Text = MainWindow.ReceiveConfigurationParameters[4];//获取Host
TextBoxTLS.Text = "tls";
ShowPath();
HideQuicKey();
ShowHostName();
ShowPathV2ray();
}
else if (String.Equals(MainWindow.ReceiveConfigurationParameters[0], "http2selfSigned"))
{
TextBoxTransmission.Text = "h2";
TextBoxCamouflageType.Text = "none";
TextBoxTLS.Text = "tls";
ShowPath();
HideQuicKey();
ShowHostName();
ShowPathV2ray();
}
else if (String.Equals(MainWindow.ReceiveConfigurationParameters[0], "mKCPNone"))
else if (MainWindow.ReceiveConfigurationParameters[0].Contains("mKCP"))
{
if (String.Equals(MainWindow.ReceiveConfigurationParameters[0], "mKCPNone"))
{
TextBoxCamouflageType.Text = "none";
}
else if (String.Equals(MainWindow.ReceiveConfigurationParameters[0], "mKCP2SRTP"))
{
TextBoxCamouflageType.Text = "srtp";
}
else if (String.Equals(MainWindow.ReceiveConfigurationParameters[0], "mKCPuTP"))
{
TextBoxCamouflageType.Text = "utp";
}
else if (String.Equals(MainWindow.ReceiveConfigurationParameters[0], "mKCP2WechatVideo"))
{
TextBoxCamouflageType.Text = "wechat-video";
}
else if (String.Equals(MainWindow.ReceiveConfigurationParameters[0], "mKCP2DTLS"))
{
TextBoxCamouflageType.Text = "dtls";
}
else if (String.Equals(MainWindow.ReceiveConfigurationParameters[0], "mKCP2WireGuard"))
{
TextBoxCamouflageType.Text = "wireguard";
}
TextBoxTransmission.Text = "kcp";
TextBoxCamouflageType.Text = "none";
TextBoxQuicKey.Text = MainWindow.ReceiveConfigurationParameters[6];
TextBoxQuicKeyMkcpSeedPath.Text = MainWindow.ReceiveConfigurationParameters[6];//获取mkcp Seed
TextBoxTLS.Text = "none";
HidePath();
ShowQuicKey();//显示mKCP Seed
ShowHostName();
ShowMkcpSeed();
}
else if (String.Equals(MainWindow.ReceiveConfigurationParameters[0], "mKCP2SRTP"))
{
TextBoxTransmission.Text = "kcp";
TextBoxCamouflageType.Text = "srtp";
TextBoxQuicKey.Text = MainWindow.ReceiveConfigurationParameters[6];
TextBoxTLS.Text = "none";
HidePath();
ShowQuicKey();//显示mKCP Seed
}
else if (String.Equals(MainWindow.ReceiveConfigurationParameters[0], "mKCPuTP"))
{
TextBoxTransmission.Text = "kcp";
TextBoxCamouflageType.Text = "utp";
TextBoxQuicKey.Text = MainWindow.ReceiveConfigurationParameters[6];
TextBoxTLS.Text = "none";
HidePath();
ShowQuicKey();//显示mKCP Seed
}
else if (String.Equals(MainWindow.ReceiveConfigurationParameters[0], "mKCP2WechatVideo"))
{
TextBoxTransmission.Text = "kcp";
TextBoxCamouflageType.Text = "wechat-video";
TextBoxQuicKey.Text = MainWindow.ReceiveConfigurationParameters[6];
TextBoxTLS.Text = "none";
HidePath();
ShowQuicKey();//显示mKCP Seed
}
else if (String.Equals(MainWindow.ReceiveConfigurationParameters[0], "mKCP2DTLS"))
{
TextBoxTransmission.Text = "kcp";
TextBoxCamouflageType.Text = "dtls";
TextBoxQuicKey.Text = MainWindow.ReceiveConfigurationParameters[6];
TextBoxTLS.Text = "none";
HidePath();
ShowQuicKey();//显示mKCP Seed
}
else if (String.Equals(MainWindow.ReceiveConfigurationParameters[0], "mKCP2WireGuard"))
{
TextBoxTransmission.Text = "kcp";
TextBoxCamouflageType.Text = "wireguard";
TextBoxQuicKey.Text = MainWindow.ReceiveConfigurationParameters[6];
TextBoxTLS.Text = "none";
HidePath();
ShowQuicKey();//显示mKCP Seed
}
else if (String.Equals(MainWindow.ReceiveConfigurationParameters[0], "QuicNone"))
else if (MainWindow.ReceiveConfigurationParameters[0].Contains("Quic") == true)
{
if (String.Equals(MainWindow.ReceiveConfigurationParameters[0], "QuicNone"))
{
TextBoxCamouflageType.Text = "none";
}
else if (String.Equals(MainWindow.ReceiveConfigurationParameters[0], "QuicSRTP"))
{
TextBoxCamouflageType.Text = "srtp";
}
else if (String.Equals(MainWindow.ReceiveConfigurationParameters[0], "Quic2uTP"))
{
TextBoxCamouflageType.Text = "utp";
}
else if (String.Equals(MainWindow.ReceiveConfigurationParameters[0], "QuicWechatVideo"))
{
TextBoxCamouflageType.Text = "wechat-video";
}
else if (String.Equals(MainWindow.ReceiveConfigurationParameters[0], "QuicDTLS"))
{
TextBoxCamouflageType.Text = "dtls";
}
else if (String.Equals(MainWindow.ReceiveConfigurationParameters[0], "QuicWireGuard"))
{
TextBoxCamouflageType.Text = "wireguard";
}
TextBoxTransmission.Text = "quic";
TextBoxCamouflageType.Text = "none";
TextBoxQuicKey.Text = MainWindow.ReceiveConfigurationParameters[6];
TextBoxHostQuicEncryption.Text = MainWindow.ReceiveConfigurationParameters[3];//获取Quic加密方式
TextBoxQuicKeyMkcpSeedPath.Text = MainWindow.ReceiveConfigurationParameters[6];//获取Quic加密密钥
TextBoxTLS.Text = "none";
HidePath();
ShowQuicKey();//显示QUIC密钥
}
else if (String.Equals(MainWindow.ReceiveConfigurationParameters[0], "QuicSRTP"))
{
TextBoxTransmission.Text = "quic";
TextBoxCamouflageType.Text = "srtp";
TextBoxQuicKey.Text = MainWindow.ReceiveConfigurationParameters[6];
TextBoxTLS.Text = "none";
HidePath();
ShowQuicKey();//显示QUIC密钥
}
else if (String.Equals(MainWindow.ReceiveConfigurationParameters[0], "Quic2uTP"))
{
TextBoxTransmission.Text = "quic";
TextBoxCamouflageType.Text = "utp";
TextBoxQuicKey.Text = MainWindow.ReceiveConfigurationParameters[6];
TextBoxTLS.Text = "none";
HidePath();
ShowQuicKey();//显示QUIC密钥
}
else if (String.Equals(MainWindow.ReceiveConfigurationParameters[0], "QuicWechatVideo"))
{
TextBoxTransmission.Text = "quic";
TextBoxCamouflageType.Text = "wechat-video";
TextBoxQuicKey.Text = MainWindow.ReceiveConfigurationParameters[6];
TextBoxTLS.Text = "none";
HidePath();
ShowQuicKey();//显示QUIC密钥
}
else if (String.Equals(MainWindow.ReceiveConfigurationParameters[0], "QuicDTLS"))
{
TextBoxTransmission.Text = "quic";
TextBoxCamouflageType.Text = "dtls";
TextBoxQuicKey.Text = MainWindow.ReceiveConfigurationParameters[6];
TextBoxTLS.Text = "none";
HidePath();
ShowQuicKey();//显示QUIC密钥
}
else if (String.Equals(MainWindow.ReceiveConfigurationParameters[0], "QuicWireGuard"))
{
TextBoxTransmission.Text = "quic";
TextBoxCamouflageType.Text = "wireguard";
TextBoxQuicKey.Text = MainWindow.ReceiveConfigurationParameters[6];
TextBoxTLS.Text = "none";
HidePath();
ShowQuicKey();//显示QUIC密钥
ShowQuicEncryption();
ShowQuicKey();
}
else
@ -281,8 +292,8 @@ namespace ProxySU
TextBoxTransmission.Text = "tcp";
TextBoxCamouflageType.Text = "none";
TextBoxTLS.Text = "none";
HidePath();
HideQuicKey();
ShowHostName();
ShowPathV2ray();
}
CheckDir("v2ray_config");
@ -492,27 +503,46 @@ namespace ProxySU
}
#region
private void HidePath()
//显示Quic 加密方式
private void ShowQuicEncryption()
{
TextBlockPath.Visibility = Visibility.Collapsed;
TextBoxPath.Visibility = Visibility.Collapsed;
TextBlockPathExplain.Visibility = Visibility.Collapsed;
TextBlockQuicEncryption.Visibility = Visibility.Visible;
TextBlockHost.Visibility = Visibility.Collapsed;
}
private void ShowPath()
//显示Host隐藏Quic加密方式
private void ShowHostName()
{
TextBlockHost.Visibility = Visibility.Visible;
TextBlockQuicEncryption.Visibility = Visibility.Collapsed;
}
//显示路径Path,隐藏mKCP/Quic Key/复制按钮
private void ShowPathV2ray()
{
TextBlockPath.Visibility = Visibility.Visible;
TextBoxPath.Visibility = Visibility.Visible;
TextBlockPathExplain.Visibility = Visibility.Visible;
}
private void HideQuicKey()
{
TextBlockMkcpSeed.Visibility = Visibility.Collapsed;
TextBlockQuicKey.Visibility = Visibility.Collapsed;
TextBoxQuicKey.Visibility = Visibility.Collapsed;
TextBlockQuicKeyExplain.Visibility = Visibility.Collapsed;
}
//显示mKCP Seed/复制按钮隐藏Path/Quic Key
private void ShowMkcpSeed()
{
TextBlockPath.Visibility = Visibility.Collapsed;
TextBlockMkcpSeed.Visibility = Visibility.Visible;
TextBlockQuicKey.Visibility = Visibility.Collapsed;
}
//显示Quic Key/复制按钮 隐藏Path/mKcp Seed
private void ShowQuicKey()
{
TextBlockPath.Visibility = Visibility.Collapsed;
TextBlockMkcpSeed.Visibility = Visibility.Collapsed;
TextBlockQuicKey.Visibility = Visibility.Visible;
}
//显示额外ID
private void ShowAlterId()
{
TextBlockUUIDextra.Visibility = Visibility.Visible;
@ -520,6 +550,8 @@ namespace ProxySU
TextBlockUUIDextraExplanation.Visibility = Visibility.Visible;
}
//隐藏额外ID
private void HideAlterId()
{
TextBlockUUIDextra.Visibility = Visibility.Collapsed;
@ -527,15 +559,109 @@ namespace ProxySU
TextBlockUUIDextraExplanation.Visibility = Visibility.Collapsed;
}
private void ShowQuicKey()
{
TextBlockQuicKey.Visibility = Visibility.Visible;
TextBoxQuicKey.Visibility = Visibility.Visible;
TextBlockQuicKeyExplain.Visibility = Visibility.Visible;
}
//private void HidePath()
//{
// TextBlockPath.Visibility = Visibility.Collapsed;
// TextBoxQuicKeyMkcpSeedPath.Visibility = Visibility.Collapsed;
//}
//private void ShowPath()
//{
// TextBlockPath.Visibility = Visibility.Visible;
// TextBoxQuicKeyMkcpSeedPath.Visibility = Visibility.Visible;
//}
//private void HideQuicKey()
//{
// TextBlockQuicKey.Visibility = Visibility.Collapsed;
// TextBoxQuicKeyMkcpSeedPath.Visibility = Visibility.Collapsed;
//}
//private void ShowQuicKey()
//{
// TextBlockQuicKey.Visibility = Visibility.Visible;
// TextBoxQuicKeyMkcpSeedPath.Visibility = Visibility.Visible;
//}
#endregion
#region
//复制内容到剪贴板函数
private void CopyToClipboard(string content)
{
if (content != "")
{
Clipboard.SetDataObject(content);
MessageBox.Show(Application.Current.FindResource("MessageBoxShow_V2RayUUIDcopyedToClip").ToString());
}
else
{
MessageBox.Show(Application.Current.FindResource("MessageBoxShow_V2RayEmptyToClip").ToString());
}
}
//复制服务器地址到剪贴板
private void TextBoxHostAddress_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{
CopyToClipboard(TextBoxHostAddress.Text);
}
//复制服务器端口到剪贴板
private void TextBoxPort_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{
CopyToClipboard(TextBoxPort.Text);
}
//复制UUID到剪贴板
private void TextBoxUUID_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{
CopyToClipboard(TextBoxUUID.Text);
}
//复制额外ID到剪贴板
private void TextBoxUUIDextra_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{
CopyToClipboard(TextBoxUUIDextra.Text);
}
//复制加密方式到剪贴板
private void TextBoxEncryption_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{
CopyToClipboard(TextBoxEncryption.Text);
}
//复制传输协议到剪贴板
private void TextBoxTransmission_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{
CopyToClipboard(TextBoxTransmission.Text);
}
//复制伪装方式到剪贴板
private void TextBoxCamouflageType_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{
CopyToClipboard(TextBoxCamouflageType.Text);
}
//复制Host/Quic加密方法到剪贴板
private void TextBoxHostQuicEncryption_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{
CopyToClipboard(TextBoxHostQuicEncryption.Text);
}
private void TextBoxQuicKeyMkcpSeedPath_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{
CopyToClipboard(TextBoxQuicKeyMkcpSeedPath.Text);
}
private void TextBoxTLS_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{
CopyToClipboard(TextBoxTLS.Text);
}
#endregion
//生成v2rayN客户端导入文件
private void GenerateV2rayShareQRcodeAndBase64Url()
{
@ -566,17 +692,17 @@ namespace ProxySU
if (TextBoxTransmission.Text.Contains("kcp") == true)
{
v2rayNjsonObject["path"] = TextBoxQuicKey.Text;//设置mKCP Seed
v2rayNjsonObject["path"] = TextBoxQuicKeyMkcpSeedPath.Text;//设置mKCP Seed
}
else if (TextBoxTransmission.Text.Contains("quic")==true)
{
v2rayNjsonObject["path"] = TextBoxQuicKey.Text;//设置quic密钥
v2rayNjsonObject["host"] = "chacha20-poly1305";
v2rayNjsonObject["path"] = TextBoxQuicKeyMkcpSeedPath.Text;//设置quic密钥
v2rayNjsonObject["host"] = TextBoxHostQuicEncryption.Text;//Quic加密方式
}
else
{
v2rayNjsonObject["path"] = TextBoxPath.Text; //设置路径
v2rayNjsonObject["host"] = TextBoxHost.Text;//设置TLS的Host
v2rayNjsonObject["path"] = TextBoxQuicKeyMkcpSeedPath.Text; //设置路径
v2rayNjsonObject["host"] = TextBoxHostQuicEncryption.Text;//设置TLS的Host
}
v2rayNjsonObject["tls"] = TextBoxTLS.Text; //设置是否启用TLS
@ -670,8 +796,8 @@ namespace ProxySU
sw.WriteLine(Application.Current.FindResource("TextBlockCamouflageType").ToString() + $"{TextBoxCamouflageType.Text}");
sw.WriteLine(Application.Current.FindResource("TextBlockIsOrNotTLS").ToString() + $"{TextBoxTLS.Text}");
sw.WriteLine("host:" + $"{TextBoxHostAddress.Text}");
sw.WriteLine(Application.Current.FindResource("TextBlockClientPath").ToString() + $"{TextBoxPath.Text}");
sw.WriteLine(Application.Current.FindResource("TextBlockClientMkcpQuicKey").ToString() + $"{TextBoxQuicKey.Text}");
sw.WriteLine(Application.Current.FindResource("TextBlockClientPath").ToString() + $"{TextBoxQuicKeyMkcpSeedPath.Text}");
sw.WriteLine(Application.Current.FindResource("TextBlockClientMkcpQuicKey").ToString() + $"{TextBoxQuicKeyMkcpSeedPath.Text}");
}
@ -1435,7 +1561,8 @@ namespace ProxySU
GroupBoxClientSSpc.Visibility = Visibility.Visible;
}
}
}

View file

@ -18,7 +18,7 @@ namespace ProxySU
/// </summary>
public partial class SSpluginWindow : Window
{
//SS加密方法设定
public class EncryptionMethodInfo
{
public string Name { get; set; }
@ -144,12 +144,6 @@ namespace ProxySU
//V2Ray-Plugin SS+WebSocket+TLS+Web模式被选中
else if (RadioButtonWebSocketTLSWebFrontSS.IsChecked == true || RadioButtonWebSocketTLSWebFrontSSHot.IsChecked == true)
{
//if (string.IsNullOrEmpty(TextBoxDomain.Text.ToString()) == true)
//{
// //****** "域名不能为空,请检查相关参数设置!" ******
// MessageBox.Show(Application.Current.FindResource("MessageBoxShow_DomainNotEmpty").ToString());
// return;
//}
testDomain = TestDomainIsEmpty();
//传递模板类型
MainWindow.ReceiveConfigurationParameters[0] = "WebSocketTLSWebFrontSS";
@ -203,12 +197,6 @@ namespace ProxySU
//SS+GoQuiet-Plugin模式被选中
else if (RadioButtonGoQuietPluginSS.IsChecked == true)
{
//if (string.IsNullOrEmpty(TextBoxDomainSS.Text.ToString()) == true)
//{
// //****** "域名不能为空,请检查相关参数设置!" ******
// MessageBox.Show(Application.Current.FindResource("MessageBoxShow_DomainNotEmpty").ToString());
// return;
//}
testDomain = TestDomainIsEmpty();
//传递模板类型
MainWindow.ReceiveConfigurationParameters[0] = "GoQuietPluginSS";
@ -221,12 +209,6 @@ namespace ProxySU
//SS+Cloak-Plugin模式被选中
else if (RadioButtonCloakPluginSS.IsChecked == true)
{
//if (string.IsNullOrEmpty(TextBoxDomainSS.Text.ToString()) == true)
//{
// //****** "域名不能为空,请检查相关参数设置!" ******
// MessageBox.Show(Application.Current.FindResource("MessageBoxShow_DomainNotEmpty").ToString());
// return;
//}
testDomain = TestDomainIsEmpty();
//传递模板类型
MainWindow.ReceiveConfigurationParameters[0] = "CloakPluginSS";
@ -259,10 +241,6 @@ namespace ProxySU
//无插件的界面
private void RadioButtonNonePluginSS_Checked(object sender, RoutedEventArgs e)
{
//TextBlockServerListenPort.Visibility = Visibility.Visible;
//TextBoxServerListenPort.Visibility = Visibility.Visible;
//ButtonServerListenPort.Visibility = Visibility.Visible;
//隐藏Websocket Path
TextBlockWebSocketPathSS.Visibility = Visibility.Collapsed;
TextBoxWebSocketPathSS.Visibility = Visibility.Collapsed;

View file

@ -93,8 +93,6 @@
<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="DisplayInstallInfo_StartRemoveProxy">Start uninstall......</sys:String>
<!-- The following resource tool tab interface -->
<sys:String x:Key="ButtonWebBrowserHomePage">Home</sys:String>
<sys:String x:Key="ButtonWebBrowserForward">Forward</sys:String>
@ -115,6 +113,12 @@
<!-- The following V2Ray template library interface -->
<sys:String x:Key="GroupBoxHeaderV2RayTemplates">V2Ray template library</sys:String>
<sys:String x:Key="TabItemHeaderV2RayHotPlan">Popular Plan</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>
@ -125,9 +129,11 @@
<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">mKCP Seed/QUIC key</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="TextBlockQuicEncryption">QUIC Encryption</sys:String>
<sys:String x:Key="TextBlockV2RayDomain">Domain name:</sys:String>
<sys:String x:Key="TextBlockV2RayMaskSites">Mask a website:</sys:String>
<sys:String x:Key="TextBoxV2RayMaskSitesTag">Set this item to increase the concealment of the agent (may be empty)</sys:String>
@ -140,8 +146,7 @@
<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="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-profile VPS, or shared nodes by multiple people, the server client version requires 4.27+ (domain name required)</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="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>
@ -177,12 +182,16 @@
<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):</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:</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>

View file

@ -118,6 +118,13 @@
<!-- 以下V2Ray模板库界面 -->
<sys:String x:Key="GroupBoxHeaderV2RayTemplates">V2Ray 模板库</sys:String>
<sys:String x:Key="TabItemHeaderV2RayHotPlan">推荐方案</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>
@ -128,9 +135,11 @@
<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">mKCP Seed/QUIC密钥</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="TextBlockQuicEncryption">QUIC加密方式</sys:String>
<sys:String x:Key="TextBlockV2RayDomain">域名:</sys:String>
<sys:String x:Key="TextBlockV2RayMaskSites">伪装网站:</sys:String>
<sys:String x:Key="TextBoxV2RayMaskSitesTag">设置此项可增加代理的隐蔽(可为空)</sys:String>
@ -143,7 +152,6 @@
<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="TextBlockV2RayVlessTcpTlsWebExplain">轻量协议VLESS,占用更少主机资源数据TLS加密传输用Caddy2在节点上做伪装网站。适合配置低的VPS,或多人共用节点服务端客户端版本要求4.27+ (需域名)</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>
@ -180,14 +188,19 @@
<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">默认16可以填不超过64的值客户端没有此选项可不填</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="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>

View file

@ -115,6 +115,12 @@
<!-- 以下V2Ray模板庫界面 -->
<sys:String x:Key="GroupBoxHeaderV2RayTemplates">V2Ray 模板庫</sys:String>
<sys:String x:Key="TabItemHeaderV2RayHotPlan">推薦方案</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>
@ -125,9 +131,11 @@
<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">mKCP Seed/QUIC密鑰</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="TextBlockQuicEncryption">QUIC加密方式</sys:String>
<sys:String x:Key="TextBlockV2RayDomain">域名:</sys:String>
<sys:String x:Key="TextBlockV2RayMaskSites">偽裝網站:</sys:String>
<sys:String x:Key="TextBoxV2RayMaskSitesTag">設置此項可增加代理的隱蔽(可為空)</sys:String>
@ -140,7 +148,6 @@
<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="TextBlockV2RayVlessTcpTlsWebExplain">輕量協議VLESS,佔用更少主機資源數據TLS加密傳輸用Caddy2在節點上做偽裝網站。適合配置低的VPS,或多人共用節點服務端客戶端版本要求4.27+ (需域名)</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>
@ -177,12 +184,16 @@
<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">默認16可以填不超過64的值客戶端沒有此選項可不填</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>

View file

@ -67,6 +67,43 @@
</Grid>
</TabItem>
<TabItem Header="{DynamicResource TabItemHeaderV2RayVlessProtocol}" Width="110" 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+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>
@ -94,11 +131,10 @@
<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 TabItemHeaderV2RayWebSocketProtocol}" Width="150" Height="30">
<Grid>
<Grid.ColumnDefinitions>
@ -177,17 +213,17 @@
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
</Grid.RowDefinitions>
<RadioButton x:Name="RadioButtonMkcpNone" Content="{DynamicResource RadioButtonV2RayMkcpNone}" GroupName="TemplateGroup" Grid.Column="0" Grid.Row="1" Checked="RadioButtonQuicNone_Checked" HorizontalAlignment="Left" VerticalAlignment="Center"></RadioButton>
<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="RadioButtonQuicNone_Checked" HorizontalAlignment="Left" VerticalAlignment="Center"></RadioButton>
<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="RadioButtonQuicNone_Checked" HorizontalAlignment="Left" VerticalAlignment="Center"></RadioButton>
<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="RadioButtonQuicNone_Checked" HorizontalAlignment="Left" VerticalAlignment="Center"></RadioButton>
<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="RadioButtonQuicNone_Checked" HorizontalAlignment="Left" VerticalAlignment="Center"></RadioButton>
<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="RadioButtonQuicNone_Checked" HorizontalAlignment="Left" VerticalAlignment="Center"></RadioButton>
<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>
@ -259,14 +295,20 @@
<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}" Grid.Column="0" Grid.Row="2" Grid.ColumnSpan="1" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
<TextBox x:Name="TextBoxQuicUUID" Grid.Column="1" Grid.Row="2" Grid.ColumnSpan="3" Margin="3"></TextBox>
<Button x:Name="ButtonQuicUUID" Content="{DynamicResource ButtonTrojanChangePassword}" Grid.Column="4" Grid.Row="2" Margin="2" Click="ButtonQuicUUID_Click"></Button>
<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}" Grid.Column="0" Grid.Row="3" Grid.ColumnSpan="1" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
<TextBox x:Name="TextBoxPath" Grid.Column="1" Grid.Row="3" Grid.ColumnSpan="3" Margin="3"></TextBox>
<Button x:Name="ButtonPath" Content="{DynamicResource ButtonNaiveProxyChangeUser}" Grid.Column="4" Grid.Row="3" Margin="2" Click="ButtonPath_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>

File diff suppressed because it is too large Load diff

Binary file not shown.

View file

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

View file

@ -0,0 +1,29 @@
{
"outbounds": [
{
"protocol": "vless",
"settings": {
"vnext": [
{
"address": null,
"port": 443,
"users": [
{
"id": null,
"flow": "xtls-rprx-origin",
"encryption": "none"
}
]
}
]
},
"streamSettings": {
"network": "tcp",
"security": "xtls",
"xtlsSettings": {
"serverName": ""
}
}
}
]
}

View file

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

View file

@ -0,0 +1,27 @@
{
"inbounds": [
{
"port": 10000,
"listen": "127.0.0.1",
"protocol": "vless",
"settings": {
"clients": [
{
"id": ""
}
],
"decryption": "none"
},
"streamSettings": {
"network": "h2",
"security": "none",
"httpSettings": {
"path": null,
"host": [
""
]
}
}
}
]
}

View file

@ -0,0 +1,37 @@
{
"inbounds": [
{
"port": 443,
"protocol": "vless",
"settings": {
"clients": [
{
"id": "",
"flow": "xtls-rprx-origin"
}
],
"decryption": "none",
"fallbacks": [
{
"dest": 8800
}
]
},
"streamSettings": {
"network": "tcp",
"security": "xtls",
"xtlsSettings": {
"alpn": [
"http/1.1"
],
"certificates": [
{
"certificateFile": "/usr/local/etc/v2ray/ssl/v2ray_ssl.crt",
"keyFile": "/usr/local/etc/v2ray/ssl/v2ray_ssl.key"
}
]
}
}
}
]
}

View file

@ -0,0 +1,24 @@
{
"inbounds": [
{
"port": 10000,
"listen": "127.0.0.1",
"protocol": "vless",
"settings": {
"clients": [
{
"id": ""
}
],
"decryption": "none"
},
"streamSettings": {
"network": "ws",
"security": "none",
"wsSettings": {
"path": ""
}
}
}
]
}