1
0
mirror of https://github.com/proxysu/ProxySU.git synced 2025-02-16 22:53:13 +03:00

添加VLESS VMESS XTLS TLS WS 复合方案

This commit is contained in:
ProxySU 2020-10-04 22:44:57 +08:00
parent dc05f990d8
commit 5eeb2bfd48
32 changed files with 2536 additions and 694 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.3.0" Height="675" Width="620">
Title="ProxySU - v2.3.1" 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>
@ -223,8 +223,26 @@
<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="TextBlockV2RayShowPathSeedKey" Text="Path/mKCP Seed/Quic Key" Visibility="Collapsed" Grid.Column="0" Grid.Row="2" HorizontalAlignment="Center" VerticalAlignment="Center"></TextBlock>
<TextBlock x:Name="TextBlockCurrentlySelectedPlanPathSeedKey" Visibility="Collapsed" Grid.Column="1" Grid.Row="2" HorizontalAlignment="Left" VerticalAlignment="Center"></TextBlock>
<Grid x:Name="GridVlessVmessXtlsTcpWs" Grid.Column="0" Grid.Row="2" Grid.ColumnSpan="2">
<Grid.ColumnDefinitions>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
</Grid.ColumnDefinitions>
<TextBlock x:Name="TextBlockPathVlessWs" Text="{DynamicResource TextBlockV2RayVlessWsPath}" Grid.Column="0" Grid.Row="3" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
<TextBlock x:Name="TextBlockBoxPathVlessWS" Grid.Column="1" Grid.Row="3" Margin="0"></TextBlock>
<TextBlock x:Name="TextBlockPathVmessTcp" Text="{DynamicResource TextBlockV2RayVmessTcpPath}" Grid.Column="2" Grid.Row="3" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
<TextBlock x:Name="TextBlockBoxPathVmessTcp" Grid.Column="3" Grid.Row="3" Margin="0"></TextBlock>
<TextBlock x:Name="TextBlockPathVmessWs" Text="{DynamicResource TextBlockV2RayVmessWsPath}" Grid.Column="4" Grid.Row="3" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
<TextBlock x:Name="TextBlockBoxPathVmessWS" Grid.Column="5" Grid.Row="3" Margin="0"></TextBlock>
</Grid>
<TextBlock x:Name="TextBlockV2RayShowCurrentlySelectedPlanDomain" Text="Domain/Quic Encrypt" Grid.Column="0" Grid.Row="3" HorizontalAlignment="Center" VerticalAlignment="Center"></TextBlock>
<TextBlock x:Name="TextBlockCurrentlySelectedPlanDomain" Grid.Column="1" Grid.Row="3" HorizontalAlignment="Left" VerticalAlignment="Center"></TextBlock>

View File

@ -45,13 +45,13 @@ namespace ProxySU
//ReceiveConfigurationParameters[0]----模板类型
//ReceiveConfigurationParameters[1]----服务端口
//ReceiveConfigurationParameters[2]----V2Ray uuid/(naive/Trojan-go/Trojan/SSR/SS)' Password
//ReceiveConfigurationParameters[3]----QUIC加密方式/SSR 加密方法/naive'user
//ReceiveConfigurationParameters[3]----QUIC加密方式/SSR 加密方法/naive'user/VLESS ws Path
//ReceiveConfigurationParameters[4]----Domain
//ReceiveConfigurationParameters[5]----伪装类型/插件名称
//ReceiveConfigurationParameters[6]----Websocket'Path/http2'Path/QUIC密钥/mKCP Seed/SS 加密方式
//ReceiveConfigurationParameters[6]----Websocket'Path/http2'Path/QUIC密钥/mKCP Seed/SS 加密方式/VMESS ws Path
//ReceiveConfigurationParameters[7]----伪装网站
//ReceiveConfigurationParameters[8]----方案名称
//ReceiveConfigurationParameters[9]----插件参数选项
//ReceiveConfigurationParameters[9]----插件参数选项/VMESS tcp Path
//public static ConnectionInfo ConnectionInfo;
public static string proxyType = "V2Ray"; //代理类型标识: V2Ray\TrojanGo\Trojan\NaiveProxy
static bool testDomain = false; //设置标识--域名是否需要检测解析,初始化为不需要
@ -723,6 +723,7 @@ namespace ProxySU
{
//隐藏Path/mKCP Seed/Quic Key
HideV2RayPathSeedKey();
HideVlessVmessXtlsTcpWs();
//隐藏域名/Quic加密方式
HideV2RayDomainQuicEncrypt();
@ -735,28 +736,36 @@ namespace ProxySU
{
//隐藏Path/mKCP Seed/Quic Key
HideV2RayPathSeedKey();
HideVlessVmessXtlsTcpWs();
//显示域名
ShowV2RayDomainQuicEncrypt();
TextBlockV2RayShowCurrentlySelectedPlanDomain.Text = Application.Current.FindResource("TextBlockV2RayDomain").ToString();
TextBlockCurrentlySelectedPlanDomain.Text = ReceiveConfigurationParameters[4]; //域名
//隐藏伪装网站
HideV2RayMaskSites();
}
else if (String.Equals(ReceiveConfigurationParameters[0], "VlessVmessXtlsTcpWebSocketWeb") == true)
{
//显示复合方案路径
ShowVlessVmessXtlsTcpWs();
//显示域名
ShowV2RayDomainQuicEncrypt();
//显示伪装网站(暂时不显示)
ShowV2RayMaskSites();
}
else if (String.Equals(ReceiveConfigurationParameters[0], "VlessTcpTlsWeb") == true
|| String.Equals(ReceiveConfigurationParameters[0], "VlessXtlsTcp") == true)
{
//隐藏Path/mKCP Seed/Quic Key
HideV2RayPathSeedKey();
HideVlessVmessXtlsTcpWs();
//显示域名
ShowV2RayDomainQuicEncrypt();
TextBlockV2RayShowCurrentlySelectedPlanDomain.Text = Application.Current.FindResource("TextBlockV2RayDomain").ToString();
TextBlockCurrentlySelectedPlanDomain.Text = ReceiveConfigurationParameters[4]; //域名
//显示伪装网站(暂时不显示)
ShowV2RayMaskSites();
}
@ -771,9 +780,7 @@ namespace ProxySU
//显示域名
ShowV2RayDomainQuicEncrypt();
TextBlockV2RayShowCurrentlySelectedPlanDomain.Text = Application.Current.FindResource("TextBlockV2RayDomain").ToString();
TextBlockCurrentlySelectedPlanDomain.Text = ReceiveConfigurationParameters[4]; //域名
//显示伪装网站(暂时不显示)
HideV2RayMaskSites();
}
@ -789,9 +796,7 @@ namespace ProxySU
//显示域名
ShowV2RayDomainQuicEncrypt();
TextBlockV2RayShowCurrentlySelectedPlanDomain.Text = Application.Current.FindResource("TextBlockV2RayDomain").ToString();
TextBlockCurrentlySelectedPlanDomain.Text = ReceiveConfigurationParameters[4]; //域名
//显示伪装网站(暂时不显示)
ShowV2RayMaskSites();
}
@ -858,6 +863,7 @@ namespace ProxySU
//显示Path/mKCP Seed/Quic Key
private void ShowV2RayPathSeedKey()
{
HideVlessVmessXtlsTcpWs();
TextBlockV2RayShowPathSeedKey.Visibility = Visibility.Visible;
TextBlockCurrentlySelectedPlanPathSeedKey.Visibility = Visibility.Visible;
}
@ -869,11 +875,30 @@ namespace ProxySU
TextBlockCurrentlySelectedPlanPathSeedKey.Visibility = Visibility.Hidden;
}
//显示VLESS VMESS XTLS TCP WS 复合方案
private void ShowVlessVmessXtlsTcpWs()
{
HideV2RayPathSeedKey();
GridVlessVmessXtlsTcpWs.Visibility = Visibility.Visible;
TextBlockBoxPathVlessWS.Text = ReceiveConfigurationParameters[3];
TextBlockBoxPathVmessTcp.Text = ReceiveConfigurationParameters[9];
TextBlockBoxPathVmessWS.Text = ReceiveConfigurationParameters[6];
}
//隐藏VLESS VMESS XTLS TCP WS 复合方案
private void HideVlessVmessXtlsTcpWs()
{
GridVlessVmessXtlsTcpWs.Visibility = Visibility.Collapsed;
}
//显示域名/Quic加密方式
private void ShowV2RayDomainQuicEncrypt()
{
TextBlockV2RayShowCurrentlySelectedPlanDomain.Visibility = Visibility.Visible;
TextBlockCurrentlySelectedPlanDomain.Visibility = Visibility.Visible;
TextBlockV2RayShowCurrentlySelectedPlanDomain.Text = Application.Current.FindResource("TextBlockV2RayDomain").ToString();
TextBlockCurrentlySelectedPlanDomain.Text = ReceiveConfigurationParameters[4]; //域名
}
//隐藏域名/Quic加密方式
@ -923,23 +948,27 @@ namespace ProxySU
MessageBox.Show(Application.Current.FindResource("MessageBoxShow_ChooseTemplate").ToString());
return;
}
else if (String.Equals(ReceiveConfigurationParameters[0], "TCP")
|| String.Equals(ReceiveConfigurationParameters[0], "TCPhttp")
|| String.Equals(ReceiveConfigurationParameters[0], "tcpTLSselfSigned")
|| String.Equals(ReceiveConfigurationParameters[0], "webSocket")
|| String.Equals(ReceiveConfigurationParameters[0], "WebSocketTLSselfSigned")
|| String.Equals(ReceiveConfigurationParameters[0], "http2selfSigned")
|| ReceiveConfigurationParameters[0].Contains("mKCP")
|| ReceiveConfigurationParameters[0].Contains("Quic"))
else 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
|| String.Equals(ReceiveConfigurationParameters[0], "WebSocketTLSselfSigned") == true
|| String.Equals(ReceiveConfigurationParameters[0], "http2selfSigned") == true
|| ReceiveConfigurationParameters[0].Contains("mKCP") == true
|| ReceiveConfigurationParameters[0].Contains("Quic") == true)
{
testDomain = false;
}
else if (String.Equals(ReceiveConfigurationParameters[0], "tcpTLS")
|| String.Equals(ReceiveConfigurationParameters[0], "VlessTcpTlsWeb")
|| String.Equals(ReceiveConfigurationParameters[0], "WebSocketTLS2Web")
|| String.Equals(ReceiveConfigurationParameters[0], "Http2")
|| String.Equals(ReceiveConfigurationParameters[0], "http2Web"))
else if (String.Equals(ReceiveConfigurationParameters[0], "tcpTLS") == true
|| 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], "VlessVmessXtlsTcpWebSocketWeb") == true
|| String.Equals(ReceiveConfigurationParameters[0], "WebSocketTLS2Web") == true
|| String.Equals(ReceiveConfigurationParameters[0], "Http2") == true
|| String.Equals(ReceiveConfigurationParameters[0], "http2Web") == true)
{
testDomain = true;
@ -1669,9 +1698,9 @@ namespace ProxySU
//Thread.Sleep(1000);
//生成服务端配
#region
//依据所选择的模式选择配置文件
//读取配置文件各个模块
string logConfigJson = @"TemplateConfg\v2ray\server\00_log\00_log.json";
string apiConfigJson = @"TemplateConfg\v2ray\server\01_api\01_api.json";
string dnsConfigJson = @"TemplateConfg\v2ray\server\02_dns\02_dns.json";
@ -1685,6 +1714,7 @@ namespace ProxySU
string baseConfigJson = @"TemplateConfg\v2ray\base.json";
string serverRemoteConfig = @"/usr/local/etc/v2ray/config.json";
//配置文件模块合成
using (StreamReader reader = File.OpenText(baseConfigJson))
{
JObject serverJson = (JObject)JToken.ReadFrom(new JsonTextReader(reader));
@ -1750,74 +1780,78 @@ namespace ProxySU
}
//依据安装模式读取相应模板
if (String.Equals(ReceiveConfigurationParameters[0], "TCP"))
if (String.Equals(ReceiveConfigurationParameters[0], "TCP") == true)
{
inboundsConfigJson = @"TemplateConfg\v2ray\server\05_inbounds\tcp_server_config.json";
}
else if (String.Equals(ReceiveConfigurationParameters[0], "TCPhttp"))
else if (String.Equals(ReceiveConfigurationParameters[0], "TCPhttp") == true)
{
inboundsConfigJson = @"TemplateConfg\v2ray\server\05_inbounds\tcp_http_server_config.json";
}
else if (String.Equals(ReceiveConfigurationParameters[0], "tcpTLS"))
else if (String.Equals(ReceiveConfigurationParameters[0], "tcpTLS") == true)
{
inboundsConfigJson = @"TemplateConfg\v2ray\server\05_inbounds\tcp_TLS_server_config.json";
}
else if (String.Equals(ReceiveConfigurationParameters[0], "tcpTLSselfSigned"))
else if (String.Equals(ReceiveConfigurationParameters[0], "tcpTLSselfSigned") == true)
{
inboundsConfigJson = @"TemplateConfg\v2ray\server\05_inbounds\tcpTLSselfSigned_server_config.json";
}
else if (String.Equals(ReceiveConfigurationParameters[0], "VlessXtlsTcp"))
else if (String.Equals(ReceiveConfigurationParameters[0], "VlessXtlsTcp") == true)
{
inboundsConfigJson = @"TemplateConfg\v2ray\server\05_inbounds\vless_tcp_xtls_server_config.json";
}
else if (String.Equals(ReceiveConfigurationParameters[0], "VlessTcpTlsWeb"))
else if (String.Equals(ReceiveConfigurationParameters[0], "VlessTcpTlsWeb") == true)
{
inboundsConfigJson = @"TemplateConfg\v2ray\server\05_inbounds\vless_tcp_tls_server_config.json";
}
else if (String.Equals(ReceiveConfigurationParameters[0], "VlessWebSocketTlsWeb"))
else if (String.Equals(ReceiveConfigurationParameters[0], "VlessWebSocketTlsWeb") == true)
{
inboundsConfigJson = @"TemplateConfg\v2ray\server\05_inbounds\vless_ws_tls_server_config.json";
}
else if (String.Equals(ReceiveConfigurationParameters[0], "VlessHttp2Web"))
else if (String.Equals(ReceiveConfigurationParameters[0], "VlessHttp2Web") == true)
{
inboundsConfigJson = @"TemplateConfg\v2ray\server\05_inbounds\vless_http2_tls_server_config.json";
}
else if (String.Equals(ReceiveConfigurationParameters[0], "webSocket"))
else if (String.Equals(ReceiveConfigurationParameters[0], "VlessVmessXtlsTcpWebSocketWeb") == true)
{
inboundsConfigJson = @"TemplateConfg\v2ray\server\05_inbounds\vless_vmess_xtls_tcp_websocket_server_config.json";
}
else if (String.Equals(ReceiveConfigurationParameters[0], "webSocket") == true)
{
inboundsConfigJson = @"TemplateConfg\v2ray\server\05_inbounds\webSocket_server_config.json";
}
else if (String.Equals(ReceiveConfigurationParameters[0], "WebSocketTLS"))
else if (String.Equals(ReceiveConfigurationParameters[0], "WebSocketTLS") == true)
{
inboundsConfigJson = @"TemplateConfg\v2ray\server\05_inbounds\WebSocket_TLS_server_config.json";
}
else if (String.Equals(ReceiveConfigurationParameters[0], "WebSocketTLSselfSigned"))
else if (String.Equals(ReceiveConfigurationParameters[0], "WebSocketTLSselfSigned") == true)
{
inboundsConfigJson = @"TemplateConfg\v2ray\server\05_inbounds\WebSocketTLS_selfSigned_server_config.json";
}
else if (String.Equals(ReceiveConfigurationParameters[0], "WebSocketTLS2Web"))
else if (String.Equals(ReceiveConfigurationParameters[0], "WebSocketTLS2Web") == true)
{
inboundsConfigJson = @"TemplateConfg\v2ray\server\05_inbounds\WebSocketTLSWeb_server_config.json";
}
else if (String.Equals(ReceiveConfigurationParameters[0], "Http2"))
else if (String.Equals(ReceiveConfigurationParameters[0], "Http2") == true)
{
inboundsConfigJson = @"TemplateConfg\v2ray\server\05_inbounds\http2_server_config.json";
}
else if (String.Equals(ReceiveConfigurationParameters[0], "http2Web"))
else if (String.Equals(ReceiveConfigurationParameters[0], "http2Web") == true)
{
inboundsConfigJson = @"TemplateConfg\v2ray\server\05_inbounds\Http2Web_server_config.json";
}
else if (String.Equals(ReceiveConfigurationParameters[0], "http2selfSigned"))
else if (String.Equals(ReceiveConfigurationParameters[0], "http2selfSigned") == true)
{
inboundsConfigJson = @"TemplateConfg\v2ray\server\Http2selfSigned_server_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"))
else if (ReceiveConfigurationParameters[0].Contains("mKCP") == true)
{
inboundsConfigJson = @"TemplateConfg\v2ray\server\05_inbounds\mkcp_server_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"))
else if (ReceiveConfigurationParameters[0].Contains("Quic") == true)
{
inboundsConfigJson = @"TemplateConfg\v2ray\server\05_inbounds\quic_server_config.json";
}
@ -1851,7 +1885,8 @@ namespace ProxySU
//设置VLESS协议的回落端口指向Caddy
if (String.Equals(ReceiveConfigurationParameters[0], "VlessTcpTlsWeb") == true
|| String.Equals(ReceiveConfigurationParameters[0], "VlessXtlsTcp") == true)
|| String.Equals(ReceiveConfigurationParameters[0], "VlessXtlsTcp") == true
|| String.Equals(ReceiveConfigurationParameters[0], "VlessVmessXtlsTcpWebSocketWeb") == true)
{
//设置Caddy随机监听的端口
randomCaddyListenPort = GetRandomPort();
@ -1860,6 +1895,28 @@ namespace ProxySU
jObjectJson["inbounds"][0]["settings"]["fallbacks"][0]["dest"] = randomCaddyListenPort;
}
//
if (String.Equals(ReceiveConfigurationParameters[0], "VlessVmessXtlsTcpWebSocketWeb") == true)
{
//设置其他模式的UUID
jObjectJson["inbounds"][1]["settings"]["clients"][0]["id"] = ReceiveConfigurationParameters[2];
jObjectJson["inbounds"][2]["settings"]["clients"][0]["id"] = ReceiveConfigurationParameters[2];
jObjectJson["inbounds"][3]["settings"]["clients"][0]["id"] = ReceiveConfigurationParameters[2];
//设置Vless回落与分流的Path
jObjectJson["inbounds"][0]["settings"]["fallbacks"][1]["path"] = ReceiveConfigurationParameters[3];
jObjectJson["inbounds"][0]["settings"]["fallbacks"][2]["path"] = ReceiveConfigurationParameters[9];
jObjectJson["inbounds"][0]["settings"]["fallbacks"][3]["path"] = ReceiveConfigurationParameters[6];
//设置Vless ws Path
jObjectJson["inbounds"][1]["streamSettings"]["wsSettings"]["path"] = ReceiveConfigurationParameters[3];
//设置Vmess tcp Path
jObjectJson["inbounds"][2]["streamSettings"]["tcpSettings"]["header"]["request"]["path"][0] = ReceiveConfigurationParameters[9];
//设置Vmess ws Path
jObjectJson["inbounds"][3]["streamSettings"]["wsSettings"]["path"] = ReceiveConfigurationParameters[6];
}
//TLS自签证书/WebSocketTLS(自签证书)/http2自签证书模式下使用v2ctl 生成自签证书
if (String.Equals(ReceiveConfigurationParameters[0], "WebSocketTLSselfSigned") == true
|| String.Equals(ReceiveConfigurationParameters[0], "tcpTLSselfSigned") == true
@ -1931,12 +1988,17 @@ namespace ProxySU
File.Delete(@"config.json");
#endregion
#region acme.sh安装
//如果使用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)
|| String.Equals(ReceiveConfigurationParameters[0], "VlessTcpTlsWeb") == true
|| String.Equals(ReceiveConfigurationParameters[0], "VlessVmessXtlsTcpWebSocketWeb") == true)
{
//****** "正在安装acme.sh......" ******22
SetUpProgressBarProcessing(55);
@ -2091,13 +2153,18 @@ namespace ProxySU
}
#endregion
#region Caddy安装
//如果是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)
|| String.Equals(ReceiveConfigurationParameters[0], "http2Web") == true
|| String.Equals(ReceiveConfigurationParameters[0], "VlessVmessXtlsTcpWebSocketWeb") == true)
{
//****** "安装Caddy......" ******28
SetUpProgressBarProcessing(70);
@ -2277,7 +2344,8 @@ namespace ProxySU
TextBoxMonitorCommandResults.Dispatcher.BeginInvoke(updateMonitorAction, TextBoxMonitorCommandResults, currentShellCommandResult);//显示命令执行的结果
if (String.Equals(ReceiveConfigurationParameters[0], "VlessXtlsTcp") == true
|| String.Equals(ReceiveConfigurationParameters[0], "VlessTcpTlsWeb") == true)
|| String.Equals(ReceiveConfigurationParameters[0], "VlessTcpTlsWeb") == true
|| String.Equals(ReceiveConfigurationParameters[0], "VlessVmessXtlsTcpWebSocketWeb") == true)
{
serverConfig = @"TemplateConfg\v2ray\caddy\vlessTcpTlsWeb.caddyfile";
}
@ -2420,6 +2488,9 @@ namespace ProxySU
}
}
#endregion
//****** "正在启动V2ray......" ******35
SetUpProgressBarProcessing(90);
currentStatus = Application.Current.FindResource("DisplayInstallInfo_StartSoft").ToString() + "V2ray......";
@ -2597,6 +2668,8 @@ namespace ProxySU
}
client.Disconnect();//断开服务器ssh连接
#region
//****** "生成客户端配置......" ******39
SetUpProgressBarProcessing(99);
currentStatus = Application.Current.FindResource("DisplayInstallInfo_GenerateClientConfig").ToString();
@ -2685,150 +2758,277 @@ namespace ProxySU
clientJson["reverse"] = jObjectJson["reverse"];
}
//根据选择的不同模式,选择相应的配置文件
if (String.Equals(ReceiveConfigurationParameters[0], "TCP"))
//根据不同的安装方案,选择相应的客户端模板
if (String.Equals(ReceiveConfigurationParameters[0], "VlessVmessXtlsTcpWebSocketWeb") == false)
{
outboundsConfigJson = @"TemplateConfg\v2ray\client\06_outbounds\tcp_client_config.json";
}
else if (String.Equals(ReceiveConfigurationParameters[0], "TCPhttp"))
{
outboundsConfigJson = @"TemplateConfg\v2ray\client\06_outbounds\tcp_http_client_config.json";
}
else if (String.Equals(ReceiveConfigurationParameters[0], "tcpTLS"))
{
outboundsConfigJson = @"TemplateConfg\v2ray\client\06_outbounds\tcp_TLS_client_config.json";
}
else if (String.Equals(ReceiveConfigurationParameters[0], "tcpTLSselfSigned"))
{
outboundsConfigJson = @"TemplateConfg\v2ray\client\06_outbounds\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\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";
}
else if (String.Equals(ReceiveConfigurationParameters[0], "WebSocketTLS"))
{
outboundsConfigJson = @"TemplateConfg\v2ray\client\06_outbounds\WebSocket_TLS_client_config.json";
}
else if (String.Equals(ReceiveConfigurationParameters[0], "WebSocketTLSselfSigned"))
{
outboundsConfigJson = @"TemplateConfg\v2ray\client\06_outbounds\WebSocketTLS_selfSigned_client_config.json";
}
else if (String.Equals(ReceiveConfigurationParameters[0], "WebSocketTLS2Web"))
{
outboundsConfigJson = @"TemplateConfg\v2ray\client\06_outbounds\WebSocketTLSWeb_client_config.json";
}
else if (String.Equals(ReceiveConfigurationParameters[0], "Http2"))
{
outboundsConfigJson = @"TemplateConfg\v2ray\client\06_outbounds\http2_client_config.json";
}
else if (String.Equals(ReceiveConfigurationParameters[0], "http2Web"))
{
outboundsConfigJson = @"TemplateConfg\v2ray\client\06_outbounds\Http2Web_client_config.json";
}
else if (String.Equals(ReceiveConfigurationParameters[0], "http2selfSigned"))
{
outboundsConfigJson = @"TemplateConfg\v2ray\client\06_outbounds\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";
}
// 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";
}
//读取"相应模板的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
|| String.Equals(ReceiveConfigurationParameters[0], "VlessWebSocketTlsWeb") == true)
#region
//根据选择的不同模式,选择相应的配置文件
if (String.Equals(ReceiveConfigurationParameters[0], "TCP") == true)
{
outboundsConfigJson = @"TemplateConfg\v2ray\client\06_outbounds\tcp_client_config.json";
}
else if (String.Equals(ReceiveConfigurationParameters[0], "TCPhttp") == true)
{
outboundsConfigJson = @"TemplateConfg\v2ray\client\06_outbounds\tcp_http_client_config.json";
}
else if (String.Equals(ReceiveConfigurationParameters[0], "tcpTLS") == true)
{
outboundsConfigJson = @"TemplateConfg\v2ray\client\06_outbounds\tcp_TLS_client_config.json";
}
else if (String.Equals(ReceiveConfigurationParameters[0], "tcpTLSselfSigned") == true)
{
outboundsConfigJson = @"TemplateConfg\v2ray\client\06_outbounds\tcpTLSselfSigned_client_config.json";
}
else if (String.Equals(ReceiveConfigurationParameters[0], "VlessXtlsTcp") == true)
{
outboundsConfigJson = @"TemplateConfg\v2ray\client\06_outbounds\vless_tcp_xtls_client_config.json";
}
else if (String.Equals(ReceiveConfigurationParameters[0], "VlessTcpTlsWeb") == true)
{
outboundsConfigJson = @"TemplateConfg\v2ray\client\06_outbounds\vless_tcp_tls_caddy_cilent_config.json";
}
else if (String.Equals(ReceiveConfigurationParameters[0], "VlessWebSocketTlsWeb") == true)
{
outboundsConfigJson = @"TemplateConfg\v2ray\client\06_outbounds\vless_ws_tls_client_config.json";
}
else if (String.Equals(ReceiveConfigurationParameters[0], "VlessHttp2Web") == true)
{
outboundsConfigJson = @"TemplateConfg\v2ray\client\06_outbounds\vless_http2_tls_server_config.json";
}
else if (String.Equals(ReceiveConfigurationParameters[0], "webSocket") == true)
{
outboundsConfigJson = @"TemplateConfg\v2ray\client\06_outbounds\webSocket_client_config.json";
}
else if (String.Equals(ReceiveConfigurationParameters[0], "WebSocketTLS") == true)
{
outboundsConfigJson = @"TemplateConfg\v2ray\client\06_outbounds\WebSocket_TLS_client_config.json";
}
else if (String.Equals(ReceiveConfigurationParameters[0], "WebSocketTLSselfSigned") == true)
{
outboundsConfigJson = @"TemplateConfg\v2ray\client\06_outbounds\WebSocketTLS_selfSigned_client_config.json";
}
else if (String.Equals(ReceiveConfigurationParameters[0], "WebSocketTLS2Web") == true)
{
outboundsConfigJson = @"TemplateConfg\v2ray\client\06_outbounds\WebSocketTLSWeb_client_config.json";
}
else if (String.Equals(ReceiveConfigurationParameters[0], "Http2") == true)
{
outboundsConfigJson = @"TemplateConfg\v2ray\client\06_outbounds\http2_client_config.json";
}
else if (String.Equals(ReceiveConfigurationParameters[0], "http2Web") == true)
{
outboundsConfigJson = @"TemplateConfg\v2ray\client\06_outbounds\Http2Web_client_config.json";
}
else if (String.Equals(ReceiveConfigurationParameters[0], "http2selfSigned") == true)
{
outboundsConfigJson = @"TemplateConfg\v2ray\client\06_outbounds\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") == true)
{
outboundsConfigJson = @"TemplateConfg\v2ray\client\06_outbounds\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") == true)
{
outboundsConfigJson = @"TemplateConfg\v2ray\client\06_outbounds\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
|| String.Equals(ReceiveConfigurationParameters[0], "VlessWebSocketTlsWeb") == true)
{
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
|| String.Equals(ReceiveConfigurationParameters[0], "VlessHttp2Web") == true)
{
jObjectJson["outbounds"][0]["streamSettings"]["httpSettings"]["path"] = ReceiveConfigurationParameters[6];
}
//设置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];
if (String.IsNullOrEmpty(ReceiveConfigurationParameters[6]) == false)
{
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];
}
clientJson["outbounds"] = jObjectJson["outbounds"];
}
using (StreamWriter sw = new StreamWriter(@"v2ray_config\config.json"))
{
sw.Write(clientJson.ToString());
}
#endregion
}
else
{
//复合方案所需要的配置文件
//VLESS over TCP with XTLS模式
string outboundsConfigJsonVlessXtls = @"TemplateConfg\v2ray\client\06_outbounds\vless_tcp_xtls_client_config.json";
using (StreamReader readerJson = File.OpenText(outboundsConfigJsonVlessXtls))
{
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];
clientJson["outbounds"] = jObjectJson["outbounds"];
if (!Directory.Exists(@"v2ray_config\vless_tcp_xtls_client_config"))//如果不存在就创建file文件夹     
{
Directory.CreateDirectory(@"v2ray_config\vless_tcp_xtls_client_config");//创建该文件夹  
}
using (StreamWriter sw = new StreamWriter(@"v2ray_config\vless_tcp_xtls_client_config\config.json"))
{
sw.Write(clientJson.ToString());
}
}
//VLESS over TCP with TLS模式
string outboundsConfigJsonVlessTcpTls = @"TemplateConfg\v2ray\client\06_outbounds\vless_tcp_tls_caddy_cilent_config.json";
using (StreamReader readerJson = File.OpenText(outboundsConfigJsonVlessTcpTls))
{
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];
clientJson["outbounds"] = jObjectJson["outbounds"];
if (!Directory.Exists(@"v2ray_config\vless_tcp_tls_client_config"))//如果不存在就创建file文件夹     
{
Directory.CreateDirectory(@"v2ray_config\vless_tcp_tls_client_config");//创建该文件夹  
}
using (StreamWriter sw = new StreamWriter(@"v2ray_config\vless_tcp_tls_client_config\config.json"))
{
sw.Write(clientJson.ToString());
}
}
//VLESS over WS with TLS 模式
string outboundsConfigJsonVlessWsTls = @"TemplateConfg\v2ray\client\06_outbounds\vless_ws_tls_client_config.json";
using (StreamReader readerJson = File.OpenText(outboundsConfigJsonVlessWsTls))
{
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];
jObjectJson["outbounds"][0]["streamSettings"]["wsSettings"]["path"] = ReceiveConfigurationParameters[3];
clientJson["outbounds"] = jObjectJson["outbounds"];
if (!Directory.Exists(@"v2ray_config\vless_ws_tls_client_config"))//如果不存在就创建file文件夹     
{
Directory.CreateDirectory(@"v2ray_config\vless_ws_tls_client_config");//创建该文件夹  
}
using (StreamWriter sw = new StreamWriter(@"v2ray_config\vless_ws_tls_client_config\config.json"))
{
sw.Write(clientJson.ToString());
}
}
//VMess over TCP with TLS模式
string outboundsConfigJsonVmessTcpTls = @"TemplateConfg\v2ray\client\06_outbounds\vmess_tcp_tls_client_config.json";
using (StreamReader readerJson = File.OpenText(outboundsConfigJsonVmessTcpTls))
{
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];
jObjectJson["outbounds"][0]["streamSettings"]["tcpSettings"]["header"]["request"]["path"][0] = ReceiveConfigurationParameters[9];
clientJson["outbounds"] = jObjectJson["outbounds"];
if (!Directory.Exists(@"v2ray_config\vmess_tcp_tls_client_config"))//如果不存在就创建file文件夹     
{
Directory.CreateDirectory(@"v2ray_config\vmess_tcp_tls_client_config");//创建该文件夹  
}
using (StreamWriter sw = new StreamWriter(@"v2ray_config\vmess_tcp_tls_client_config\config.json"))
{
sw.Write(clientJson.ToString());
}
}
//VMess over WS with TLS模式
string outboundsConfigJsonVmessWsTls = @"TemplateConfg\v2ray\client\06_outbounds\WebSocketTLSWeb_client_config.json";
using (StreamReader readerJson = File.OpenText(outboundsConfigJsonVmessWsTls))
{
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];
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
|| String.Equals(ReceiveConfigurationParameters[0], "VlessHttp2Web") == true)
{
jObjectJson["outbounds"][0]["streamSettings"]["httpSettings"]["path"] = ReceiveConfigurationParameters[6];
}
//设置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];
if (String.IsNullOrEmpty(ReceiveConfigurationParameters[6]) == false)
clientJson["outbounds"] = jObjectJson["outbounds"];
if (!Directory.Exists(@"v2ray_config\vmess_ws_tls_client_config"))//如果不存在就创建file文件夹     
{
jObjectJson["outbounds"][0]["streamSettings"]["kcpSettings"]["seed"] = ReceiveConfigurationParameters[6];
Directory.CreateDirectory(@"v2ray_config\vmess_ws_tls_client_config");//创建该文件夹  
}
using (StreamWriter sw = new StreamWriter(@"v2ray_config\vmess_ws_tls_client_config\config.json"))
{
sw.Write(clientJson.ToString());
}
}
//设置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];
}
clientJson["outbounds"] = jObjectJson["outbounds"];
}
using (StreamWriter sw = new StreamWriter(@"v2ray_config\config.json"))
{
sw.Write(clientJson.ToString());
}
}
#endregion
//****** "V2Ray安装成功,祝你玩的愉快!!" ******40
SetUpProgressBarProcessing(100);
currentStatus = "V2Ray" + Application.Current.FindResource("DisplayInstallInfo_ProxyInstalledOK").ToString();
@ -12239,7 +12439,7 @@ namespace ProxySU
private void Button_Click(object sender, RoutedEventArgs e)
{
//显示服务端连接参数
proxyType = "V2Ray";
proxyType = "Trojan";
ResultClientInformation resultClientInformation = new ResultClientInformation();
resultClientInformation.ShowDialog();
}

View File

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

View File

@ -13,12 +13,12 @@
<RowDefinition Height="0.12*"></RowDefinition>
</Grid.RowDefinitions>
<!-- V2Ray客户端配置参数 -->
<GroupBox Header="{DynamicResource GroupBoxHeaderClientParameter}" x:Name="GroupBoxV2rayClient" Visibility="Visible" Grid.Row="0">
<GroupBox Header="{DynamicResource GroupBoxHeaderClientParameter}" x:Name="GroupBoxV2rayClient" Visibility="Collapsed" Grid.Row="0">
<Grid >
<Grid.ColumnDefinitions>
<ColumnDefinition Width="0.6*"></ColumnDefinition>
<ColumnDefinition Width="0.5*"></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition Width="0.7*"></ColumnDefinition>
<ColumnDefinition Width="0.8*"></ColumnDefinition>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition></RowDefinition>
@ -47,9 +47,6 @@
<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="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" Visibility="Collapsed" VerticalAlignment="Center"></TextBlock>
@ -63,10 +60,6 @@
<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>
@ -75,9 +68,28 @@
<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>
<TextBlock Text="{DynamicResource TextBlockCopyToClipExplain}" Grid.Column="0" Grid.Row="10" Grid.ColumnSpan="2" Margin="5"></TextBlock>
<GroupBox x:Name="GroupBoxSelectVlessVmessXtlsTcpWs" Grid.Column="2" Grid.Row="5" Grid.RowSpan="6" Margin="10,0,2,0">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="5"></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
</Grid.RowDefinitions>
<RadioButton x:Name="RadioButtonVlessTcpXtls" Content="VLESS over TCP with XTLS" Grid.Column="1" Grid.Row="0" VerticalAlignment="Center" Checked="RadioButtonVlessTcpXtls_Checked"></RadioButton>
<RadioButton x:Name="RadioButtonVlessTcpTls" Content="VLESS over TCP with TLS" Grid.Column="1" Grid.Row="1" VerticalAlignment="Center" Checked="RadioButtonVlessTcpTls_Checked"></RadioButton>
<RadioButton x:Name="RadioButtonVlessWsTls" Content="VLESS over WS with TLS" Grid.Column="1" Grid.Row="2" VerticalAlignment="Center" Checked="RadioButtonVlessWsTls_Checked"></RadioButton>
<RadioButton x:Name="RadioButtonVmessTcpTls" Content="VMess over TCP with TLS" Grid.Column="1" Grid.Row="3" VerticalAlignment="Center" Checked="RadioButtonVmessTcpTls_Checked"></RadioButton>
<RadioButton x:Name="RadioButtonVmessWsTls" Content="VMess over WS with TLS" Grid.Column="1" Grid.Row="4" VerticalAlignment="Center" Checked="RadioButtonVmessWsTls_Checked"></RadioButton>
</Grid>
</GroupBox>
</Grid>
</GroupBox>
<!-- Trojan-Go客户端配置参数 -->
@ -97,17 +109,18 @@
<RowDefinition></RowDefinition>
</Grid.RowDefinitions>
<TextBlock Text="{DynamicResource TextBlockServerAddress}" Grid.Column="0" Grid.Row="1" HorizontalAlignment="Right" VerticalAlignment="Center" ></TextBlock>
<TextBox x:Name="TextBoxTrojanGoServerHost" Grid.Column="1" Grid.Row="1" Margin="4"></TextBox>
<TextBox x:Name="TextBoxTrojanGoServerHost" IsReadOnly="True" Grid.Column="1" Grid.Row="1" Margin="4" MouseDoubleClick="TextBoxTrojanGoServerHost_MouseDoubleClick"></TextBox>
<TextBlock Grid.Column="2" Grid.Row="1"></TextBlock>
<TextBlock Text="{DynamicResource TextBlockServerPort}" Grid.Column="0" Grid.Row="2" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
<TextBox x:Name="TextBoxTrojanGoServerPort" Grid.Column="1" Grid.Row="2" Margin="4"></TextBox>
<TextBox x:Name="TextBoxTrojanGoServerPort" IsReadOnly="True" Grid.Column="1" Grid.Row="2" Margin="4" MouseDoubleClick="TextBoxTrojanGoServerPort_MouseDoubleClick"></TextBox>
<TextBlock Grid.Column="2" Grid.Row="2"></TextBlock>
<TextBlock Text="{DynamicResource TextBlockHostPassword}" Grid.Column="0" Grid.Row="3" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
<TextBox x:Name="TextBoxTrojanGoServerPassword" Grid.Column="1" Grid.Row="3" Margin="4"></TextBox>
<TextBox x:Name="TextBoxTrojanGoServerPassword" IsReadOnly="True" Grid.Column="1" Grid.Row="3" Margin="4" MouseDoubleClick="TextBoxTrojanGoServerPassword_MouseDoubleClick"></TextBox>
<TextBlock Grid.Column="2" Grid.Row="3"></TextBlock>
<TextBlock x:Name="TextBlockTrojanGoWebSocketPath" Text="{DynamicResource TextBlockTrojanGoWebSocketPath}" Grid.Column="0" Grid.Row="4" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
<TextBox x:Name="TextBoxTrojanGoWSPath" Grid.Column="1" Grid.Row="4" Margin="4"></TextBox>
<TextBox x:Name="TextBoxTrojanGoWSPath" IsReadOnly="True" Grid.Column="1" Grid.Row="4" Margin="4" MouseDoubleClick="TextBoxTrojanGoWSPath_MouseDoubleClick"></TextBox>
<TextBlock x:Name="TextBlockTrojanGoCaption" Grid.Column="2" Grid.Row="4"></TextBlock>
<TextBlock Text="{DynamicResource TextBlockCopyToClipExplain}" Grid.Column="0" Grid.Row="5" Grid.ColumnSpan="2" Margin="5" VerticalAlignment="Center"></TextBlock>
</Grid>
</GroupBox>
<!-- Trojan客户端配置参数 -->
@ -127,14 +140,15 @@
<RowDefinition></RowDefinition>
</Grid.RowDefinitions>
<TextBlock Text="{DynamicResource TextBlockServerAddress}" Grid.Column="0" Grid.Row="1" HorizontalAlignment="Right" VerticalAlignment="Center" ></TextBlock>
<TextBox x:Name="TextBoxTrojanServerHost" Grid.Column="1" Grid.Row="1" Margin="4"></TextBox>
<TextBox x:Name="TextBoxTrojanServerHost" IsReadOnly="True" Grid.Column="1" Grid.Row="1" Margin="4" MouseDoubleClick="TextBoxTrojanServerHost_MouseDoubleClick"></TextBox>
<TextBlock Grid.Column="2" Grid.Row="1"></TextBlock>
<TextBlock Text="{DynamicResource TextBlockServerPort}" Grid.Column="0" Grid.Row="2" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
<TextBox x:Name="TextBoxTrojanServerPort" Grid.Column="1" Grid.Row="2" Margin="4"></TextBox>
<TextBox x:Name="TextBoxTrojanServerPort" IsReadOnly="True" Grid.Column="1" Grid.Row="2" Margin="4" MouseDoubleClick="TextBoxTrojanServerPort_MouseDoubleClick"></TextBox>
<TextBlock Grid.Column="2" Grid.Row="2"></TextBlock>
<TextBlock Text="{DynamicResource TextBlockHostPassword}" Grid.Column="0" Grid.Row="3" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
<TextBox x:Name="TextBoxTrojanServerPassword" Grid.Column="1" Grid.Row="3" Margin="4"></TextBox>
<TextBox x:Name="TextBoxTrojanServerPassword" IsReadOnly="True" Grid.Column="1" Grid.Row="3" Margin="4" MouseDoubleClick="TextBoxTrojanServerPassword_MouseDoubleClick"></TextBox>
<TextBlock Grid.Column="2" Grid.Row="3"></TextBlock>
<TextBlock Text="{DynamicResource TextBlockCopyToClipExplain}" Grid.Column="0" Grid.Row="10" Grid.ColumnSpan="2" Margin="5"></TextBlock>
</Grid>
</GroupBox>
<!-- NaiveProxy客户端配置参数 -->
@ -155,15 +169,15 @@
<RowDefinition></RowDefinition>
</Grid.RowDefinitions>
<TextBlock Text="{DynamicResource TextBlockServerAddress}" Grid.Column="0" Grid.Row="1" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
<TextBox x:Name="TextBoxNaiveServerHost" Grid.Column="1" Grid.Row="1" Margin="4"></TextBox>
<TextBox x:Name="TextBoxNaiveServerHost" IsReadOnly="True" Grid.Column="1" Grid.Row="1" Margin="4" MouseDoubleClick="TextBoxNaiveServerHost_MouseDoubleClick"></TextBox>
<TextBlock Text="{DynamicResource TextBlockHostPart}" Grid.Column="0" Grid.Row="2" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
<TextBox x:Name="TextBoxNaivePort" Text="443" Grid.Column="1" Grid.Row="2" Margin="4"></TextBox>
<TextBox x:Name="TextBoxNaivePort" Text="443" IsReadOnly="True" Grid.Column="1" Grid.Row="2" Margin="4" MouseDoubleClick="TextBoxNaivePort_MouseDoubleClick"></TextBox>
<TextBlock Text="{DynamicResource TextBlockHostUser}" Grid.Column="0" Grid.Row="3" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
<TextBox x:Name="TextBoxNaiveUser" Grid.Column="1" Grid.Row="3" Margin="4"></TextBox>
<TextBox x:Name="TextBoxNaiveUser" IsReadOnly="True" Grid.Column="1" Grid.Row="3" Margin="4" MouseDoubleClick="TextBoxNaiveUser_MouseDoubleClick"></TextBox>
<TextBlock Text="{DynamicResource TextBlockHostPassword}" Grid.Column="0" Grid.Row="4" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
<TextBox x:Name="TextBoxNaivePassword" Grid.Column="1" Grid.Row="4" Margin="4"></TextBox>
<TextBox x:Name="TextBoxNaivePassword" IsReadOnly="True" Grid.Column="1" Grid.Row="4" Margin="4" MouseDoubleClick="TextBoxNaivePassword_MouseDoubleClick"></TextBox>
<TextBlock Text="{DynamicResource TextBlockCopyToClipExplain}" Grid.Column="0" Grid.Row="6" Grid.ColumnSpan="2" Margin="5"></TextBlock>
<!--<Button x:Name="ButtonOpenDir" Content="确定" Grid.Column="1" Grid.Row="4" Margin="40,3,40,3" Click="ButtonOpenDir_Click"></Button>-->
</Grid>
</GroupBox>
@ -176,37 +190,35 @@
<ColumnDefinition></ColumnDefinition>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition Height="30"></RowDefinition>
<RowDefinition Height="30"></RowDefinition>
<RowDefinition Height="30"></RowDefinition>
<RowDefinition Height="30"></RowDefinition>
<RowDefinition Height="30"></RowDefinition>
<RowDefinition Height="30"></RowDefinition>
<RowDefinition Height="30"></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
</Grid.RowDefinitions>
<TextBlock Text="{DynamicResource TextBlockServerAddress}" Grid.Column="0" Grid.Row="0" Margin="1" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
<TextBox x:Name="TextBoxSSRHostAddress" IsReadOnly="True" Grid.Column="1" Grid.Row="0" Margin="2"></TextBox>
<TextBlock Text="" Grid.Column="2" Grid.Row="0"></TextBlock>
<TextBlock Text="{DynamicResource TextBlockServerPort}" Grid.Column="0" Grid.Row="1" Margin="1" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
<TextBox x:Name="TextBoxSSRPort" IsReadOnly="True" Grid.Column="1" Grid.Row="1" Margin="2"></TextBox>
<TextBlock Text="" Grid.Column="2" Grid.Row="1"></TextBlock>
<TextBlock Text="{DynamicResource TextBlockTrojanGoPassword}" Grid.Column="0" Grid.Row="2" Margin="1" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
<TextBox x:Name="TextBoxSSRUUID" IsReadOnly="True" Grid.Column="1" Grid.Row="2" Margin="2"></TextBox>
<TextBlock Text="" Grid.Column="2" Grid.Row="2"></TextBlock>
<!--<TextBlock x:Name="TextBlockSSRUUIDextra" Text="{DynamicResource TextBlockV2RayAlterId}" Grid.Column="0" Grid.Row="3" Margin="1" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
<TextBox x:Name="TextBoxSSRUUIDextra" IsReadOnly="False" Grid.Column="1" Grid.Row="3" Margin="2"></TextBox>
<TextBlock x:Name="TextBlockSSRUUIDextraExplanation" Text="{DynamicResource TextBlockV2RayAlterIdExplain}" TextWrapping="Wrap" Grid.Column="2" Grid.Row="3"></TextBlock>-->
<TextBlock Text="{DynamicResource TextBlockEncryption}" Grid.Column="0" Grid.Row="3" Margin="1" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
<TextBox x:Name="TextBoxSSREncryption" IsReadOnly="True" Grid.Column="1" Grid.Row="3" Margin="2"></TextBox>
<!--<TextBlock Text="{DynamicResource TextBlockEncryptionIsAuto}" Grid.Column="2" Grid.Row="3"></TextBlock>-->
<TextBlock Text="{DynamicResource TextBlockTransferProtocol}" Grid.Column="0" Grid.Row="4" Margin="1" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
<TextBox x:Name="TextBoxSSRTransmission" IsReadOnly="True" Grid.Column="1" Grid.Row="4" Margin="2"></TextBox>
<TextBlock Text="" Grid.Column="2" Grid.Row="4"></TextBlock>
<TextBlock Text="{DynamicResource TextBlockCamouflageType}" Grid.Column="0" Grid.Row="5" Margin="1" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
<TextBox x:Name="TextBoxSSRCamouflageType" IsReadOnly="True" Grid.Column="1" Grid.Row="5" Margin="2"></TextBox>
<TextBlock Text="" Grid.Column="2" Grid.Row="5"></TextBlock>
<TextBlock Text="{DynamicResource TextBlockServerAddress}" Grid.Column="0" Grid.Row="1" Margin="1" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
<TextBox x:Name="TextBoxSSRHostAddress" IsReadOnly="True" Grid.Column="1" Grid.Row="1" Margin="4" MouseDoubleClick="TextBoxSSRHostAddress_MouseDoubleClick"></TextBox>
<TextBlock Text="{DynamicResource TextBlockServerPort}" Grid.Column="0" Grid.Row="2" Margin="1" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
<TextBox x:Name="TextBoxSSRPort" IsReadOnly="True" Grid.Column="1" Grid.Row="2" Margin="4" MouseDoubleClick="TextBoxSSRPort_MouseDoubleClick"></TextBox>
<TextBlock Text="{DynamicResource TextBlockTrojanGoPassword}" Grid.Column="0" Grid.Row="3" Margin="1" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
<TextBox x:Name="TextBoxSSRUUID" IsReadOnly="True" Grid.Column="1" Grid.Row="3" Margin="4" MouseDoubleClick="TextBoxSSRUUID_MouseDoubleClick"></TextBox>
<TextBlock Text="{DynamicResource TextBlockEncryption}" Grid.Column="0" Grid.Row="4" Margin="1" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
<TextBox x:Name="TextBoxSSREncryption" IsReadOnly="True" Grid.Column="1" Grid.Row="4" Margin="4" MouseDoubleClick="TextBoxSSREncryption_MouseDoubleClick"></TextBox>
<TextBlock Text="{DynamicResource TextBlockTransferProtocol}" Grid.Column="0" Grid.Row="5" Margin="1" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
<TextBox x:Name="TextBoxSSRTransmission" IsReadOnly="True" Grid.Column="1" Grid.Row="5" Margin="4" MouseDoubleClick="TextBoxSSRTransmission_MouseDoubleClick"></TextBox>
<TextBlock Text="{DynamicResource TextBlockCamouflageType}" Grid.Column="0" Grid.Row="6" Margin="1" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
<TextBox x:Name="TextBoxSSRCamouflageType" IsReadOnly="True" Grid.Column="1" Grid.Row="6" Margin="4" MouseDoubleClick="TextBoxSSRCamouflageType_MouseDoubleClick"></TextBox>
<TextBlock Text="{DynamicResource TextBlockCopyToClipExplain}" Grid.Column="0" Grid.Row="7" Grid.ColumnSpan="2" Margin="5" VerticalAlignment="Bottom"></TextBlock>
<!--<TextBlock x:Name="TextBlocSSRTLSonOrNo" Text="{DynamicResource TextBlockIsOrNotTLS}" Grid.Column="0" Grid.Row="7" Margin="1" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
<TextBox x:Name="TextBoxSSRTLS" IsReadOnly="True" Grid.Column="1" Grid.Row="7" Margin="2"></TextBox>
<TextBlock x:Name="TextBlocSSRTLSonOrNoExplain" Text="" Grid.Column="2" Grid.Row="7"></TextBlock>
@ -225,7 +237,7 @@
</Grid>
</GroupBox>
<!-- SS客户端配置参数 -->
<GroupBox Header="{DynamicResource GroupBoxHeaderClientParameter}" x:Name="GroupBoxClientSS" Visibility="Collapsed" Grid.Row="0">
<GroupBox Header="{DynamicResource GroupBoxHeaderClientParameter}" x:Name="GroupBoxClientSS" Visibility="Visible" Grid.Row="0">
<Grid >
<Grid.ColumnDefinitions>
<ColumnDefinition Width="0.6*"></ColumnDefinition>
@ -244,27 +256,28 @@
<RowDefinition></RowDefinition>
</Grid.RowDefinitions>
<TextBlock Text="{DynamicResource TextBlockServerAddress}" Grid.Column="0" Grid.Row="0" Margin="1" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
<TextBox x:Name="TextBoxHostAddressSS" IsReadOnly="True" Grid.Column="1" Grid.Row="0" Margin="2" VerticalAlignment="Center"/>
<TextBox x:Name="TextBoxHostAddressSS" IsReadOnly="True" Grid.Column="1" Grid.Row="0" Margin="2" VerticalAlignment="Center" MouseDoubleClick="TextBoxHostAddressSS_MouseDoubleClick"/>
<TextBlock Text="" Grid.Column="2" Grid.Row="0"></TextBlock>
<TextBlock Text="{DynamicResource TextBlockServerPort}" Grid.Column="0" Grid.Row="1" Margin="1" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
<TextBox x:Name="TextBoxPortSS" IsReadOnly="True" Grid.Column="1" Grid.Row="1" Margin="2" VerticalAlignment="Center"/>
<TextBox x:Name="TextBoxPortSS" IsReadOnly="True" Grid.Column="1" Grid.Row="1" Margin="2" VerticalAlignment="Center" MouseDoubleClick="TextBoxPortSS_MouseDoubleClick"/>
<TextBlock Text="" Grid.Column="2" Grid.Row="1"></TextBlock>
<TextBlock Text="{DynamicResource TextBlockTrojanGoPassword}" Grid.Column="0" Grid.Row="2" Margin="1" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
<TextBox x:Name="TextBoxPasswordSS" IsReadOnly="True" Grid.Column="1" Grid.Row="2" Margin="2" VerticalAlignment="Center"/>
<TextBox x:Name="TextBoxPasswordSS" IsReadOnly="True" Grid.Column="1" Grid.Row="2" Margin="2" VerticalAlignment="Center" MouseDoubleClick="TextBoxPasswordSS_MouseDoubleClick"/>
<TextBlock Text="" Grid.Column="2" Grid.Row="2"></TextBlock>
<!--<TextBlock x:Name="TextBlockSSRUUIDextra" Text="{DynamicResource TextBlockV2RayAlterId}" Grid.Column="0" Grid.Row="3" Margin="1" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
<TextBox x:Name="TextBoxSSRUUIDextra" IsReadOnly="False" Grid.Column="1" Grid.Row="3" Margin="2"></TextBox>
<TextBlock x:Name="TextBlockSSRUUIDextraExplanation" Text="{DynamicResource TextBlockV2RayAlterIdExplain}" TextWrapping="Wrap" Grid.Column="2" Grid.Row="3"></TextBlock>-->
<TextBlock Text="{DynamicResource TextBlockEncryption}" Grid.Column="0" Grid.Row="3" Margin="1" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
<TextBox x:Name="TextBoxEncryptionSS" IsReadOnly="True" Grid.Column="1" Grid.Row="3" Margin="2" VerticalAlignment="Center"/>
<TextBox x:Name="TextBoxEncryptionSS" IsReadOnly="True" Grid.Column="1" Grid.Row="3" Margin="2" VerticalAlignment="Center" MouseDoubleClick="TextBoxEncryptionSS_MouseDoubleClick"/>
<!--<TextBlock Text="{DynamicResource TextBlockEncryptionIsAuto}" Grid.Column="2" Grid.Row="3"></TextBlock>-->
<TextBlock x:Name="TextBlockPluginNameExplainSS" Text="{DynamicResource TextBlockPluginNameExplainSS}" Grid.Column="0" Grid.Row="4" Margin="1" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
<TextBox x:Name="TextBoxPluginNameExplainSS" IsReadOnly="True" Grid.Column="1" Grid.Row="4" Margin="2" VerticalAlignment="Center"/>
<TextBox x:Name="TextBoxPluginNameExplainSS" IsReadOnly="True" Grid.Column="1" Grid.Row="4" Margin="2" VerticalAlignment="Center" MouseDoubleClick="TextBoxPluginNameExplainSS_MouseDoubleClick"/>
<TextBox x:Name="TextBoxPluginNameExplainSSpc" IsReadOnly="True" Grid.Column="1" Grid.Row="4" Margin="2" Visibility="Collapsed" VerticalAlignment="Center"/>
<TextBlock Text="" Grid.Column="2" Grid.Row="4"></TextBlock>
<TextBlock x:Name="TextBlockPluginOptionExplainSS" Text="{DynamicResource TextBlockPluginOptionExplainSS}" Grid.Column="0" Grid.Row="5" Margin="1" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
<TextBox x:Name="TextBoxPluginOptionExplainSS" IsReadOnly="True" Grid.Column="1" Grid.Row="5" Margin="2" VerticalAlignment="Center"/>
<TextBox x:Name="TextBoxPluginOptionExplainSS" IsReadOnly="True" Grid.Column="1" Grid.Row="5" Margin="2" VerticalAlignment="Center" MouseDoubleClick="TextBoxPluginOptionExplainSS_MouseDoubleClick"/>
<TextBlock Text="" Grid.Column="2" Grid.Row="5"></TextBlock>
<TextBlock Text="{DynamicResource TextBlockCopyToClipExplain}" Grid.Column="0" Grid.Row="6" Grid.ColumnSpan="2" Margin="5"></TextBlock>
<TextBlock x:Name="TextBlockClientPromptSS" Text="{DynamicResource TextBlockClientPromptSS}" Foreground="Red" TextWrapping="Wrap" Grid.Column="0" Grid.Row="7" Grid.ColumnSpan="3" Margin="10,0,0,0"></TextBlock>
<RadioButton x:Name="RadioButtonMobile" Content="{DynamicResource RadioButtonMobileSS}" Grid.Column="1" Grid.Row="8" HorizontalAlignment="Left" VerticalAlignment="Center" Checked="RadioButtonMobile_Checked"></RadioButton>
<RadioButton x:Name="RadioButtonPC" Content="{DynamicResource RadioButtonPCSS}" Grid.Column="2" Grid.Row="8" HorizontalAlignment="Left" VerticalAlignment="Center" Checked="RadioButtonPC_Checked"></RadioButton>

File diff suppressed because it is too large Load Diff

View File

@ -111,8 +111,9 @@
<sys:String x:Key="ButtonTrojanGoTemplateOK">OK</sys:String>
<sys:String x:Key="ButtonTrojanGoTemplateCancel">Cancel</sys:String>
<!-- The following V2Ray template library interface -->
<sys:String x:Key="GroupBoxHeaderV2RayTemplates">V2Ray template library</sys:String>
<sys:String x:Key="TabItemHeaderV2RayHotPlan">Popular Plan</sys:String>
<sys:String x:Key="GroupBoxHeaderV2RayTemplates">V2Ray Templates</sys:String>
<sys:String x:Key="TabItemHeaderV2RayHotPlan">Recommend</sys:String>
<sys:String x:Key="TabItemHeaderV2RayEarlyPlan">EarlyPlan</sys:String>
<sys:String x:Key="TabItemHeaderV2RayVlessProtocol">VLESS</sys:String>
<sys:String x:Key="TextBlockVlessExplain">VLESS is a lightweight transmission protocol. Unlike VMess, VLESS don't depend on the system time. The authentication method is also UUID, but alterId is not required. Currently VLESS does not have its own encryption, please use it for reliable channels, such as TLS. Advantages: It can effectively reduce host resource consumption. Currently VLESS does not support sharing. Please ensure that both the client and server v2ray-core are the latest version.</sys:String>
<sys:String x:Key="TextBlockVlessXtlsTcpExplain">XTLS works well on devices with low performance or without AES hard-decoding. For example, XTLS is used on hard routers, and the network speed can be doubled when the CPU is full, or the same The CPU occupancy rate is halved at Internet speed, and for mobile devices, the reduction in the amount of calculation means power saving.Version requires 4.29+ (Domain required) Not support CDN.</sys:String>
@ -133,12 +134,16 @@
<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="TextBlockV2RayVlessWsPath">VLESS ws path:</sys:String>
<sys:String x:Key="TextBlockV2RayVmessTcpPath">VMESS tcp path:</sys:String>
<sys:String x:Key="TextBlockV2RayVmessWsPath">VMESS ws path:</sys:String>
<sys:String x:Key="TextBlockQuicEncryption">QUIC Encryption:</sys:String>
<sys:String x:Key="TextBlockV2RayDomain">Domain name:</sys:String>
<sys:String x:Key="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>
<sys:String x:Key="TextBlockV2RayWebSocketTlsWebExplain">Strong stability, Caddy2 as the front, hidden proxy feature, recognized as https traffic to the website, the strongest anti-blocking recognition, domain name is required, CDN support</sys:String >
<sys:String x:Key="TextBlockV2RayHttp2TlsWebExplain">based on HTTP/2 transmission. Completely implemented in accordance with the HTTP/2 standard, with Caddy2 as the front, hidden proxy features, H2C protocol forwarding to V2Ray, domain name is required, and CloudFlare CDN is not currently supported</sys:String>
<sys:String x:Key="TextBlockVlessVmessXtlsTcpWebSocketExplainHot">VLESS over TCP with XTLS + fallback and shunt to WHATEVER (ultimate configuration), configured and recommended by rprx boss (author of xtls), configure the following five solutions at the same time on the server side, sharing the same domain name and port 443, WS can pass through CDN.Option 4 has a special configuration, there is no graphics client support at present, you can use the official V2Ray client.</sys:String>
<sys:String x:Key="TextBlockV2RayTcpExplain">Encrypted data transmission will be recognized as unknown tcp traffic</sys:String>
<sys:String x:Key="RadioButtonV2RayTcpHttp">TCP+Http camouflage</sys:String>
<sys:String x:Key="TextBlockV2RayTcpHttpExplain">Encrypted data transmission and HTTP disguise will be recognized as http traffic, but not real http access</sys:String>
@ -190,7 +195,7 @@
<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="TextBlockIsOrNotTLS">TLS Set:</sys:String>
<sys:String x:Key="TextBlockCopyToClipExplain">Tip: Double-click the above content window to copy it to the clipboard.</sys:String>
<sys:String x:Key="TextBlockClientPath">Path:</sys:String>
<sys:String x:Key="TextBlockClientMkcpQuicKey">mKCP Seed/QUIC key:</sys:String>

View File

@ -118,6 +118,7 @@
<!-- 以下V2Ray模板库界面 -->
<sys:String x:Key="GroupBoxHeaderV2RayTemplates">V2Ray 模板库</sys:String>
<sys:String x:Key="TabItemHeaderV2RayHotPlan">推荐方案</sys:String>
<sys:String x:Key="TabItemHeaderV2RayEarlyPlan">尝鲜方案</sys:String>
<sys:String x:Key="TabItemHeaderV2RayVlessProtocol">VLESS协议</sys:String>
<sys:String x:Key="TextBlockVlessExplain">VLESS 是一个无状态的轻量传输协议,与 VMess 不同VLESS 不依赖于系统时间,认证方式同样为 UUID但不需要 alterId。目前 VLESS 没有自带加密,请用于可靠信道,如 TLS。优点可以有效的降低主机资源消耗。目前 VLESS 不支持分享。VLESS 处于公测阶段,测试期间请确保客户端与服务端的 v2ray-core 均为最新版本。</sys:String>
<sys:String x:Key="TextBlockVlessXtlsTcpExplain">XTLS 在低性能或没有 AES 硬解的设备上效果出众,如在硬路由上换用 XTLS同样跑满 CPU 时实现网速 翻倍,或是相同网速时 CPU 占用率减半,而对于移动设备计算量减少意味着省电。服务端客户端版本要求4.29+ (需域名)不支持CDN。</sys:String>
@ -139,15 +140,20 @@
<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="TextBlockV2RayVlessWsPath">VLESS ws路径</sys:String>
<sys:String x:Key="TextBlockV2RayVmessTcpPath">VMESS tcp路径</sys:String>
<sys:String x:Key="TextBlockV2RayVmessWsPath">VMESS ws路径</sys:String>
<sys:String x:Key="TextBlockQuicEncryption">QUIC加密方式:</sys:String>
<sys:String x:Key="TextBlockV2RayDomain">域名:</sys:String>
<sys:String x:Key="TextBlockV2RayMaskSites">伪装网站:</sys:String>
<sys:String x:Key="TextBoxV2RayMaskSitesTag">设置此项可增加代理的隐蔽(可为空)</sys:String>
<sys:String x:Key="TextBlockV2RayWebSocketTlsWebExplain">稳定性强Caddy2做前置隐藏代理特征被识别为访问网站的https流量抗封锁识别最强,需要域名,支持CDN</sys:String>
<sys:String x:Key="TextBlockV2RayHttp2TlsWebExplain">基于 HTTP/2 传输。完整按 HTTP/2 标准实现Caddy2做前置隐藏代理特征H2C协议转发到V2Ray需要域名暂不支持CloudFlare的CDN</sys:String>
<sys:String x:Key="TextBlockV2RayTcpExplain">数据加密传输会被识别为未知的tcp流量</sys:String>
<sys:String x:Key="TextBlockVlessVmessXtlsTcpWebSocketExplainHot">VLESS over TCP with XTLS + 回落 and 分流 to WHATEVER终极配置由rprx大佬 (xtls作者) 配置并推荐在服务端同时配置以下五种方案共用同一域名与443端口其中 WS 都可以通过 CDN。方案4 配置特别目前尚无图形客户端支持可使用V2Ray官方客户端。</sys:String>
<sys:String x:Key="RadioButtonV2RayTcpHttp">TCP+Http伪装</sys:String>
<sys:String x:Key="TextBlockV2RayTcpHttpExplain">数据加密传输并做http伪装会被识别为http流量但并不是真正的http访问</sys:String>
<sys:String x:Key="TextBlockV2RayTcpExplain">数据加密传输会被识别为未知的tcp流量</sys:String>
<sys:String x:Key="TextBlockV2RayTcpHttpExplain">数据加密传输并做http伪装会被识别为http流量但并不是真正的http访问</sys:String>
<sys:String x:Key="TextBlockV2RayTcpTlsExplain">数据加密传输传输协议使用TLS会被识别为TLS流量不等同于https流量特征 (需域名)</sys:String>
<sys:String x:Key="RadioButtonV2RayTcpTlsSelfSigned">TCP+TLS(自签证书)</sys:String>
<sys:String x:Key="TextBlockV2RayTcpTlsSelfSignedExplain">数据加密传输传输协议使用TLS会被识别为TLS流量不等同于https流量特征 (无需域名)</sys:String>
@ -196,7 +202,7 @@
<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="TextBlockIsOrNotTLS">TLS设置:</sys:String>
<sys:String x:Key="TextBlockCopyToClipExplain">提示:双击以上内容窗,即可复制到剪贴板中。</sys:String>
<sys:String x:Key="TextBlockClientPath">路径(Path):</sys:String>
<sys:String x:Key="TextBlockClientQuicKey">QUIC密钥:</sys:String>
@ -350,7 +356,7 @@
<sys:String x:Key="readmeTxtV2RayExplainLine09">v2rayNG(Android)在Google Play下载网址https://play.google.com/store/apps/details?id=com.v2ray.ang</sys:String>
<sys:String x:Key="readmeTxtV2RayExplainLine10">Shadowrocket(ios)下载,需要使用国外区的AppleID。请自行谷歌方法。</sys:String>
<sys:String x:Key="readmeTxtV2RayExplainLine11">此文件为v2rayN、Trojan-QT5、v2rayNG(Android)、Shadowrocket(ios)复制粘贴导入节点的vmess网址</sys:String>
<sys:String x:Key="readmeTxtV2RayExplainLine12">服务器通用连接配置参数</sys:String>
<sys:String x:Key="readmeTxtV2RayExplainLine12">服务器通用连接配置参数:</sys:String>
<!--以下为Trojan-go客户端说明文件-->
<sys:String x:Key="readmeTxtTrojan-goExplainLine01">此文件为Trojan-go官方程序所使用的客户端配置文件配置为全局模式http与socks5地址127.0.0.1:1080</sys:String>
<sys:String x:Key="readmeTxtTrojan-goExplainLine02">Trojan-go官方网站https://github.com/p4gefau1t/trojan-go</sys:String>

View File

@ -115,6 +115,7 @@
<!-- 以下V2Ray模板庫界面 -->
<sys:String x:Key="GroupBoxHeaderV2RayTemplates">V2Ray 模板庫</sys:String>
<sys:String x:Key="TabItemHeaderV2RayHotPlan">推薦方案</sys:String>
<sys:String x:Key="TabItemHeaderV2RayEarlyPlan">嚐鮮方案</sys:String>
<sys:String x:Key="TabItemHeaderV2RayVlessProtocol">VLESS協議</sys:String>
<sys:String x:Key="TextBlockVlessExplain">VLESS 是一個無狀態的輕量傳輸協議,與 VMess 不同VLESS 不依賴於系統時間,認證方式同樣為 UUID但不需要 alterId。目前 VLESS 沒有自帶加密,請用於可靠信道,如 TLS。優點可以有效的降低主機資源消耗。目前 VLESS 不支持分享。 VLESS 處於公測階段,測試期間請確保客戶端與服務端的 v2ray-core 均為最新版本。</sys:String>
<sys:String x:Key="TextBlockVlessXtlsTcpExplain">XTLS 在低性能或沒有AES 硬解的設備上效果出眾如在硬路由上換用XTLS同樣跑滿CPU 時實現網速翻倍或是相同網速時CPU 佔用率減半,而對於移動設備計算量減少意味著省電。服務端客戶端版本要求4.29+ (需域名)不支持CDN。</sys:String>
@ -135,12 +136,16 @@
<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="TextBlockV2RayVlessWsPath">VLESS ws路徑</sys:String>
<sys:String x:Key="TextBlockV2RayVmessTcpPath">VMESS tcp路徑</sys:String>
<sys:String x:Key="TextBlockV2RayVmessWsPath">VMESS ws路徑</sys:String>
<sys:String x:Key="TextBlockQuicEncryption">QUIC加密方式:</sys:String>
<sys:String x:Key="TextBlockV2RayDomain">域名:</sys:String>
<sys:String x:Key="TextBlockV2RayMaskSites">偽裝網站:</sys:String>
<sys:String x:Key="TextBoxV2RayMaskSitesTag">設置此項可增加代理的隱蔽(可為空)</sys:String>
<sys:String x:Key="TextBlockV2RayWebSocketTlsWebExplain">穩定性強Caddy2做前置隱藏代理特徵被識別為訪問網站的https流量抗封鎖識別最強,需要域名,支持CDN</sys:String >
<sys:String x:Key="TextBlockV2RayHttp2TlsWebExplain">基於 HTTP/2 傳輸。完整按 HTTP/2 標準實現Caddy2做前置隱藏代理特徵H2C協議轉發到V2Ray需要域名暫不支持CloudFlare的CDN</sys:String>
<sys:String x:Key="TextBlockVlessVmessXtlsTcpWebSocketExplainHot">VLESS over TCP with XTLS + 回落and 分流to WHATEVER終極配置由rprx大佬(xtls作者)配置並推薦在服務端同時配置以下五種方案共用同一域名與443端口其中 WS 都可以通過 CDN。方案4 配置特別目前尚無圖形客戶端支持可使用V2Ray官方客戶端。</sys:String>
<sys:String x:Key="TextBlockV2RayTcpExplain">數據加密傳輸會被識別為未知的tcp流量</sys:String>
<sys:String x:Key="RadioButtonV2RayTcpHttp">TCP+Http偽裝</sys:String>
<sys:String x:Key="TextBlockV2RayTcpHttpExplain">數據加密傳輸並做http偽裝會被識別為http流量但並不是真正的http訪問</sys:String>
@ -192,7 +197,7 @@
<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="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>

View File

@ -5,7 +5,7 @@
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:ProxySU"
mc:Ignorable="d"
Title="V2RayTemplateConfiguration" Height="600" Width="850">
Title="V2RayTemplateConfiguration" Height="600" Width="950">
<Window.Resources>
<Style BasedOn="{StaticResource {x:Type TextBox}}"
TargetType="TextBox"
@ -42,7 +42,7 @@
<GroupBox Header="{DynamicResource GroupBoxHeaderV2RayTemplates}" Grid.Row="0" Grid.RowSpan="3">
<Grid>
<TabControl x:Name="TabControlTemplate">
<TabItem Header="{DynamicResource TabItemHeaderV2RayHotPlan}" Width="110" Height="30">
<TabItem Header="{DynamicResource TabItemHeaderV2RayHotPlan}" Width="100" Height="30">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="0.8*"></ColumnDefinition>
@ -52,9 +52,7 @@
<ColumnDefinition Width="0.3*"></ColumnDefinition>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition></RowDefinition>
<RowDefinition Height="1.2*"></RowDefinition>
<RowDefinition Height="1.2*"></RowDefinition>
<RowDefinition Height="0.2*"></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
@ -64,11 +62,58 @@
<TextBlock Text="{DynamicResource TextBlockV2RayWebSocketTlsWebExplain}" TextWrapping="Wrap" Grid.Column="1" Grid.Row="1" Grid.ColumnSpan="3" VerticalAlignment="Center" HorizontalAlignment="Left"></TextBlock>
<RadioButton x:Name="RadioButtonHTTP2WebHot" Content="HTTP2+TLS+Web" GroupName="TemplateGroup" Grid.Column="0" Grid.Row="2" Checked="RadioButtonWebSocketTLS2Web_Checked" HorizontalAlignment="Left" VerticalAlignment="Center"></RadioButton>
<TextBlock Text="{DynamicResource TextBlockV2RayHttp2TlsWebExplain}" TextWrapping="Wrap" Grid.Column="1" Grid.Row="2" Grid.ColumnSpan="3" VerticalAlignment="Center" HorizontalAlignment="Left"></TextBlock>
</Grid>
</TabItem>
<TabItem Header="{DynamicResource TabItemHeaderV2RayVlessProtocol}" Width="110" Height="30">
<TabItem Header="{DynamicResource TabItemHeaderV2RayEarlyPlan}" Width="100" Height="30">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="10"></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition Width="10"></ColumnDefinition>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="10"></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition Height="0.4*"></RowDefinition>
<RowDefinition Height="10"></RowDefinition>
</Grid.RowDefinitions>
<Grid Grid.Column="1" Grid.Row="1">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="0.2*"></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
</Grid.RowDefinitions>
<TextBlock Text="{DynamicResource TextBlockVlessVmessXtlsTcpWebSocketExplainHot}" TextWrapping="Wrap" Grid.Column="0" Grid.Row="0" Grid.ColumnSpan="2" VerticalAlignment="Center" HorizontalAlignment="Left"></TextBlock>
<TextBlock Text="1. VLESS over TCP with XTLS" Grid.Column="1" Grid.Row="1" VerticalAlignment="Bottom"></TextBlock>
<TextBlock Text="2. VLESS over TCP with TLS" Grid.Column="1" Grid.Row="2" VerticalAlignment="Bottom"></TextBlock>
<TextBlock Text="3. VLESS over WS with TLS" Grid.Column="1" Grid.Row="3" VerticalAlignment="Bottom"></TextBlock>
<TextBlock Text="4. VMess over TCP with TLS" Grid.Column="1" Grid.Row="4" VerticalAlignment="Bottom"></TextBlock>
<TextBlock Text="5. VMess over WS with TLS" Grid.Column="1" Grid.Row="5" VerticalAlignment="Bottom"></TextBlock>
</Grid>
<RadioButton x:Name="RadioButtonVlessVmessXtlsTcpWebSocketHot" Content="VLESS+VMESS+XTLS+TCP+WebSocket+Web" GroupName="TemplateGroup" Grid.Column="1" Grid.Row="2" Grid.ColumnSpan="2" Checked="RadioButtonVlessVmessXtlsTcpWebSocketHot_Checked" HorizontalAlignment="Left" VerticalAlignment="Center"></RadioButton>
<!--<Grid Grid.Column="0" Grid.Row="2">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="0.15*"></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
</Grid.ColumnDefinitions>
<TextBlock x:Name="TextBlockVlessVmessXtlsTcpWebSocket" Text="VLESS+VMESS+XTLS+TCP+WebSocket+Web" TextWrapping="Wrap" Margin="0,0,8,0" Grid.Column="1" VerticalAlignment="Center" HorizontalAlignment="Left" MouseDown="TextBlockVlessVmessXtlsTcpWebSocket_MouseDown"></TextBlock>
</Grid>-->
</Grid>
</TabItem>
<TabItem Header="{DynamicResource TabItemHeaderV2RayVlessProtocol}" Width="100" Height="30">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition></ColumnDefinition>
@ -301,14 +346,21 @@
<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="TextBlockPath" Text="{DynamicResource TextBlockV2RayPath}" Visibility="Collapsed" Grid.Column="0" Grid.Row="3" Grid.ColumnSpan="1" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
<TextBox x:Name="TextBoxPath" Visibility="Collapsed" Grid.Column="1" Grid.Row="3" Grid.ColumnSpan="3" Margin="3"></TextBox>
<Button x:Name="ButtonPath" Content="{DynamicResource ButtonNaiveProxyChangeUser}" Visibility="Collapsed" Grid.Column="4" Grid.Row="3" Margin="2" Click="ButtonPath_Click"></Button>
<TextBlock x:Name="TextBlockPathVlessWs" Text="{DynamicResource TextBlockV2RayVlessWsPath}" Grid.Column="0" Grid.Row="3" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
<TextBox x:Name="TextBoxPathVlessWS" Grid.Column="1" Grid.Row="3" Margin="3"></TextBox>
<TextBlock x:Name="TextBlockPathVmessTcp" Text="{DynamicResource TextBlockV2RayVmessTcpPath}" Grid.Column="2" Grid.Row="3" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
<TextBox x:Name="TextBoxPathVmessTcp" Grid.Column="3" Grid.Row="3" Margin="3"></TextBox>
<TextBlock x:Name="TextBlockPathVmessWs" Text="{DynamicResource TextBlockV2RayVmessWsPath}" Grid.Column="4" Grid.Row="3" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
<TextBox x:Name="TextBoxPathVmessWS" Grid.Column="5" Grid.Row="3" Margin="3"></TextBox>
<Button x:Name="ButtonVlessVmessPath" Content="{DynamicResource ButtonNaiveProxyChangeUser}" Grid.Column="6" Grid.Row="3" Margin="2" Click="ButtonVlessVmessPath_Click"></Button>
<TextBlock x:Name="TextBlockQuicEncryption" Text="{DynamicResource TextBlockQuicEncryption}" Visibility="Collapsed" Grid.Column="0" Grid.Row="3" Grid.ColumnSpan="1" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
<ComboBox x:Name="ComboBoxEncryptionMethodInfo" Visibility="Collapsed" Grid.Column="1" Grid.Row="3" Grid.ColumnSpan="2" Height="25" Margin="3,0,0,0" SelectionChanged="ComboBoxEncryptionMethodInfo_SelectionChanged"></ComboBox>
<TextBlock x:Name="TextBlockDomain" Text="{DynamicResource TextBlockV2RayDomain}" Grid.Column="0" Grid.Row="4" Grid.ColumnSpan="1" HorizontalAlignment="Right" VerticalAlignment="Center"></TextBlock>
<TextBox x:Name="TextBoxDomain" Style="{StaticResource TitleText}" Tag="{DynamicResource TextBoxDomainPrompt}" Grid.Column="1" Grid.Row="4" Grid.ColumnSpan="3" Margin="3"></TextBox>
<Button x:Name="ButtonDomain" Content="检测" Visibility="Collapsed" Grid.Column="4" Grid.Row="4" Margin="2" Click="ButtonDomain_Click"></Button>

View File

@ -209,6 +209,28 @@ namespace ProxySU
DisguiseURLprocessing();
}
//VLESS+VMESS+XTLS+TCP+WebSocket+Web模式被选中
else if (RadioButtonVlessVmessXtlsTcpWebSocketHot.IsChecked == true)
{
domainNotEmpty = TestDomainIsEmpty();
//传递模板类型
MainWindow.ReceiveConfigurationParameters[0] = "VlessVmessXtlsTcpWebSocketWeb";
//传递方案名称
MainWindow.ReceiveConfigurationParameters[8] = RadioButtonVlessVmessXtlsTcpWebSocketHot.Content.ToString();
//传递路径
MainWindow.ReceiveConfigurationParameters[3] = TextBoxPathVlessWS.Text.ToString();//VLESS ws Path
MainWindow.ReceiveConfigurationParameters[9] = TextBoxPathVmessTcp.Text.ToString();//VMESS tcp Path
MainWindow.ReceiveConfigurationParameters[6] = TextBoxPathVmessWS.Text.ToString();//VMESS ws Path
//传递域名
MainWindow.ReceiveConfigurationParameters[4] = TextBoxDomain.Text.ToString();
//传递伪装网站
MainWindow.ReceiveConfigurationParameters[7] = TextBoxMaskSites.Text.ToString();
//处理伪装网站域名中的前缀
DisguiseURLprocessing();
}
#endregion
#region WebSocket传输协议(VMESS)
@ -575,6 +597,7 @@ namespace ProxySU
//隐藏Path
HidePath();
HideVlessVmessMultiplePath();
//隐藏域名
HideDomain();
@ -583,8 +606,8 @@ namespace ProxySU
HideMaskSites();
Guid uuid = Guid.NewGuid();
TextBoxNewUUID.Text = uuid.ToString();
//Guid uuid = Guid.NewGuid();
TextBoxNewUUID.Text = GenerateRandomUUID();
//Random random = new Random();
int randomServerPort = GetRandomPort();
TextBoxServerListenPort.Text = randomServerPort.ToString();
@ -603,6 +626,7 @@ namespace ProxySU
//隐藏Path
HidePath();
HideVlessVmessMultiplePath();
//隐藏域名
HideDomain();
@ -610,8 +634,8 @@ namespace ProxySU
//隐藏伪装网站
HideMaskSites();
Guid uuid = Guid.NewGuid();
TextBoxNewUUID.Text = uuid.ToString();
//Guid uuid = Guid.NewGuid();
TextBoxNewUUID.Text = GenerateRandomUUID();
//清除其他选项卡中的选项
UncheckLayouts((TabItem)TabControlTemplate.SelectedItem);
}
@ -627,6 +651,7 @@ namespace ProxySU
//隐藏Path
HidePath();
HideVlessVmessMultiplePath();
//显示域名
ShowDomain();
@ -634,8 +659,8 @@ namespace ProxySU
//隐藏伪装网站
HideMaskSites();
Guid uuid = Guid.NewGuid();
TextBoxNewUUID.Text = uuid.ToString();
//Guid uuid = Guid.NewGuid();
TextBoxNewUUID.Text = GenerateRandomUUID();
//清除其他选项卡中的选项
UncheckLayouts((TabItem)TabControlTemplate.SelectedItem);
}
@ -651,6 +676,7 @@ namespace ProxySU
//隐藏Path
HidePath();
HideVlessVmessMultiplePath();
//显示域名
ShowDomain();
@ -658,11 +684,41 @@ namespace ProxySU
//显示伪装网站
ShowMaskSites();
Guid uuid = Guid.NewGuid();
TextBoxNewUUID.Text = uuid.ToString();
//Guid uuid = Guid.NewGuid();
TextBoxNewUUID.Text = GenerateRandomUUID();
//清除其他选项卡中的选项
UncheckLayouts((TabItem)TabControlTemplate.SelectedItem);
}
private void RadioButtonVlessVmessXtlsTcpWebSocketHot_Checked(object sender, RoutedEventArgs e)
{
TextBoxServerListenPort.Text = "443";
//隐藏mKCP项
HideMkcpSeed();
//隐藏QUIC密钥
HideQuic();
//显示复合路径
ShowVlessVmessMultiplePath();
//显示域名
ShowDomain();
//显示伪装网站
ShowMaskSites();
//生成UUID
TextBoxNewUUID.Text = GenerateRandomUUID();
//清除其他选项卡中的选项
UncheckLayouts((TabItem)TabControlTemplate.SelectedItem);
}
//单击TextBlockVlessVmessXtlsTcpWebSocket标签则选中RadioButtonVlessVmessXtlsTcpWebSocketHot
private void TextBlockVlessVmessXtlsTcpWebSocket_MouseDown(object sender, MouseButtonEventArgs e)
{
RadioButtonVlessVmessXtlsTcpWebSocketHot.IsChecked = true;
}
private void RadioButtonTCP2TLSnoDomain_Checked(object sender, RoutedEventArgs e)
{
TextBoxServerListenPort.Text = "443";
@ -675,6 +731,7 @@ namespace ProxySU
//隐藏Path
HidePath();
HideVlessVmessMultiplePath();
//隐藏域名
HideDomain();
@ -682,8 +739,8 @@ namespace ProxySU
//隐藏伪装网站
HideMaskSites();
Guid uuid = Guid.NewGuid();
TextBoxNewUUID.Text = uuid.ToString();
//Guid uuid = Guid.NewGuid();
TextBoxNewUUID.Text = GenerateRandomUUID();
//清除其他选项卡中的选项
UncheckLayouts((TabItem)TabControlTemplate.SelectedItem);
}
@ -706,8 +763,8 @@ namespace ProxySU
//显示伪装网站
ShowMaskSites();
Guid uuid = Guid.NewGuid();
TextBoxNewUUID.Text = uuid.ToString();
//Guid uuid = Guid.NewGuid();
TextBoxNewUUID.Text = GenerateRandomUUID();
//清除其他选项卡中的选项
UncheckLayouts((TabItem)TabControlTemplate.SelectedItem);
}
@ -730,8 +787,8 @@ namespace ProxySU
//隐藏伪装网站
HideMaskSites();
Guid uuid = Guid.NewGuid();
TextBoxNewUUID.Text = uuid.ToString();
//Guid uuid = Guid.NewGuid();
TextBoxNewUUID.Text = GenerateRandomUUID();
//清除其他选项卡中的选项
UncheckLayouts((TabItem)TabControlTemplate.SelectedItem);
}
@ -754,8 +811,8 @@ namespace ProxySU
//隐藏伪装网站
HideMaskSites();
Guid uuid = Guid.NewGuid();
TextBoxNewUUID.Text = uuid.ToString();
//Guid uuid = Guid.NewGuid();
TextBoxNewUUID.Text = GenerateRandomUUID();
//清除其他选项卡中的选项
UncheckLayouts((TabItem)TabControlTemplate.SelectedItem);
}
@ -771,6 +828,7 @@ namespace ProxySU
//隐藏Path
HidePath();
HideVlessVmessMultiplePath();
//隐藏域名
HideDomain();
@ -778,11 +836,11 @@ namespace ProxySU
//隐藏伪装网站
HideMaskSites();
Guid uuid = Guid.NewGuid();
TextBoxNewUUID.Text = uuid.ToString();
//Guid uuid = Guid.NewGuid();
TextBoxNewUUID.Text = GenerateRandomUUID();
uuid = Guid.NewGuid();
TextBoxQuicAndMkcpSeedUUID.Text = uuid.ToString();
//uuid = Guid.NewGuid();
TextBoxQuicAndMkcpSeedUUID.Text = GenerateRandomUUID();
//Random random = new Random();
int randomServerPort = GetRandomPort();
@ -802,6 +860,7 @@ namespace ProxySU
//隐藏Path
HidePath();
HideVlessVmessMultiplePath();
//隐藏域名
HideDomain();
@ -809,11 +868,11 @@ namespace ProxySU
//隐藏伪装网站
HideMaskSites();
Guid uuid = Guid.NewGuid();
TextBoxNewUUID.Text = uuid.ToString();
//Guid uuid = Guid.NewGuid();
TextBoxNewUUID.Text = GenerateRandomUUID();
uuid = Guid.NewGuid();
TextBoxQuicAndMkcpSeedUUID.Text = uuid.ToString();
//uuid = Guid.NewGuid();
TextBoxQuicAndMkcpSeedUUID.Text = GenerateRandomUUID();
//Random random = new Random();
int randomServerPort = GetRandomPort();
@ -889,12 +948,43 @@ namespace ProxySU
//显示路径相关项
private void ShowPath()
{
HideVlessVmessMultiplePath();//隐藏VLESS VMESS多种方案的路径Path
//显示Path
TextBlockPath.Visibility = Visibility.Visible;
TextBoxPath.Visibility = Visibility.Visible;
TextBoxPath.Text = "/ray";
ButtonPath.Visibility = Visibility.Visible;
}
//隐藏VLESS VMESS复合方案路径
private void HideVlessVmessMultiplePath()
{
TextBlockPathVlessWs.Visibility = Visibility.Collapsed;
TextBoxPathVlessWS.Visibility = Visibility.Collapsed;
TextBlockPathVmessTcp.Visibility = Visibility.Collapsed;
TextBoxPathVmessTcp.Visibility = Visibility.Collapsed;
TextBlockPathVmessWs.Visibility = Visibility.Collapsed;
TextBoxPathVmessWS.Visibility = Visibility.Collapsed;
ButtonVlessVmessPath.Visibility = Visibility.Collapsed;
}
//显示VLESS VMESS复合方案路径
private void ShowVlessVmessMultiplePath()
{
HidePath();//隐藏普通路径Path
TextBlockPathVlessWs.Visibility = Visibility.Visible;
TextBoxPathVlessWS.Visibility = Visibility.Visible;
TextBoxPathVlessWS.Text = "/vlessws";
TextBlockPathVmessTcp.Visibility = Visibility.Visible;
TextBoxPathVmessTcp.Visibility = Visibility.Visible;
TextBoxPathVmessTcp.Text = "/vmesstcp";
TextBlockPathVmessWs.Visibility = Visibility.Visible;
TextBoxPathVmessWS.Visibility = Visibility.Visible;
TextBoxPathVmessWS.Text = "/vmessws";
ButtonVlessVmessPath.Visibility = Visibility.Visible;
}
//隐藏域名相关项
private void HideDomain()
{
@ -928,18 +1018,18 @@ namespace ProxySU
//产生随机的uuid
private void ButtonNewUUID_Click(object sender, RoutedEventArgs e)
{
Guid uuid = Guid.NewGuid();
TextBoxNewUUID.Text = uuid.ToString();
//Guid uuid = Guid.NewGuid();
TextBoxNewUUID.Text = GenerateRandomUUID();
}
//产生QUIC密钥/mKCP Seed所用的UUID
private void ButtonQuicAndMkcpSeedUUID_Click(object sender, RoutedEventArgs e)
{
Guid uuid = Guid.NewGuid();
TextBoxQuicAndMkcpSeedUUID.Text = uuid.ToString();
//Guid uuid = Guid.NewGuid();
TextBoxQuicAndMkcpSeedUUID.Text = GenerateRandomUUID();
}
//产生随机服务端口
//更新随机服务端口
private void ButtonServerListenPort_Click(object sender, RoutedEventArgs e)
{
//Random random = new Random();
@ -947,25 +1037,56 @@ namespace ProxySU
TextBoxServerListenPort.Text = randomServerPort.ToString();
}
//产生随机的Path
//更新单方案随机的Path
private void ButtonPath_Click(object sender, RoutedEventArgs e)
{
Random random = new Random();
int randomSerialNum = random.Next(0, 4);
Guid uuid = Guid.NewGuid();
string[] pathArray = uuid.ToString().Split('-');
string path = pathArray[randomSerialNum];
//Random random = new Random();
//int randomSerialNum = random.Next(0, 4);
//Guid uuid = Guid.NewGuid();
//string[] pathArray = uuid.ToString().Split('-');
string path = GenerateRandomPath();
TextBoxPath.Text = $"/{path}";
//MessageBox.Show(path);
}
//产生随机端口
//更新多方案共存的Path
private void ButtonVlessVmessPath_Click(object sender, RoutedEventArgs e)
{
string path = GenerateRandomPath();
TextBoxPathVlessWS.Text = $"/{path}";
path = GenerateRandomPath();
TextBoxPathVmessTcp.Text = $"/{path}";
path = GenerateRandomPath();
TextBoxPathVmessWS.Text = $"/{path}";
}
//生成随机端口
private int GetRandomPort()
{
Random random = new Random();
return random.Next(10001, 60000);
}
//生成随机UUID
private string GenerateRandomUUID()
{
Guid uuid = Guid.NewGuid();
return uuid.ToString();
}
//生成随机Path
private string GenerateRandomPath()
{
Random random = new Random();
int randomSerialNum = random.Next(0, 4);
//Guid uuid = Guid.NewGuid();
string uuid = GenerateRandomUUID();
string[] pathArray = uuid.Split('-');
string path = pathArray[randomSerialNum];
return path;
}
//域名检测是否为空
private bool TestDomainIsEmpty()
{
@ -1015,6 +1136,12 @@ namespace ProxySU
//private void ButtonTestChecked_Click(object sender, RoutedEventArgs e)
//{
// UncheckLayouts((TabItem)TabControlTemplate.SelectedItem);

Binary file not shown.

View File

@ -10,8 +10,8 @@
"users": [
{
"id": null,
"alterId": 16,
"security": "auto"
"alterId": 0,
"security": "none"
}
]
}

View File

@ -10,7 +10,7 @@
"users": [
{
"id": null,
"alterId": 16,
"alterId": 0,
"security": "auto"
}
]

View File

@ -6,12 +6,12 @@
"vnext": [
{
"address": null,
"port": null,
"port": 443,
"users": [
{
"id": null,
"alterId": 16,
"security": "auto"
"alterId": 0,
"security": "none"
}
]
}

View File

@ -10,7 +10,7 @@
"users": [
{
"id": null,
"alterId": 16,
"alterId": 0,
"security": "auto"
}
]

View File

@ -10,8 +10,8 @@
"users": [
{
"id": null,
"alterId": 16,
"security": "auto"
"alterId": 0,
"security": "none"
}
]
}

View File

@ -11,7 +11,7 @@
{
"id": null,
"alterId": 0,
"security": "auto"
"security": "none"
}
]
}

View File

@ -10,7 +10,7 @@
"users": [
{
"id": null,
"alterId": 16,
"alterId": 0,
"security": "auto"
}
]

View File

@ -10,7 +10,8 @@
"users": [
{
"id": null,
"alterId": 16
"alterId": 0,
"security": "auto"
}
]
}

View File

@ -10,7 +10,7 @@
"users": [
{
"id": null,
"alterId": 16,
"alterId": 0,
"security": "auto"
}
]

View File

@ -10,8 +10,8 @@
"users": [
{
"id": null,
"alterId": 16,
"security": "auto"
"alterId": 0,
"security": "none"
}
]
}

View File

@ -10,7 +10,7 @@
"users": [
{
"id": null,
"alterId": 16,
"alterId": 0,
"security": "auto"
}
]

View File

@ -10,7 +10,8 @@
"users": [
{
"id": null,
"alterId": 16
"alterId": 0,
"security": "auto"
}
]
}

View File

@ -10,8 +10,7 @@
"users": [
{
"id": null,
"encryption": "none",
"level": 0
"encryption": "none"
}
]
}

View File

@ -10,8 +10,7 @@
"users": [
{
"id": null,
"encryption": "none",
"level": 0
"encryption": "none"
}
]
}

View File

@ -19,10 +19,7 @@
},
"streamSettings": {
"network": "tcp",
"security": "xtls",
"xtlsSettings": {
"serverName": ""
}
"security": "xtls"
}
}
]

View File

@ -10,8 +10,7 @@
"users": [
{
"id": null,
"encryption": "none",
"level": 0
"encryption": "none"
}
]
}
@ -20,11 +19,8 @@
"streamSettings": {
"network": "ws",
"security": "tls",
"tlsSettings": {
"serverName": ""
},
"wsSettings": {
"path": ""
"path": null
}
}
}

View File

@ -0,0 +1,36 @@
{
"outbounds": [
{
"protocol": "vmess",
"settings": {
"vnext": [
{
"address": null,
"port": 443,
"users": [
{
"id": null,
"alterId": 0,
"security": "none"
}
]
}
]
},
"streamSettings": {
"network": "tcp",
"security": "tls",
"tcpSettings": {
"header": {
"type": "http",
"request": {
"path": [
""
]
}
}
}
}
}
]
}

View File

@ -10,7 +10,7 @@
"users": [
{
"id": null,
"alterId": 16,
"alterId": 0,
"security": "auto"
}
]

View File

@ -7,7 +7,7 @@
"clients": [
{
"id": null,
"alterId": 0
"alterId": 64
}
]
},

View File

@ -6,7 +6,7 @@
"settings": {
"clients": [
{
"id": "",
"id": null,
"flow": "xtls-rprx-origin"
}
],

View File

@ -0,0 +1,120 @@
{
"inbounds": [
{
"port": 443,
"protocol": "vless",
"settings": {
"clients": [
{
"id": null,
"flow": "xtls-rprx-origin"
}
],
"decryption": "none",
"fallbacks": [
{
"dest": null
},
{
"path": "/websocket",
"dest": 1234,
"xver": 1
},
{
"path": "/vmesstcp",
"dest": 2345,
"xver": 1
},
{
"path": "/vmessws",
"dest": 3456,
"xver": 1
}
]
},
"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"
}
]
}
}
},
{
"port": 1234,
"listen": "127.0.0.1",
"protocol": "vless",
"settings": {
"clients": [
{
"id": null
}
],
"decryption": "none"
},
"streamSettings": {
"network": "ws",
"security": "none",
"wsSettings": {
"acceptProxyProtocol": true,
"path": "/websocket"
}
}
},
{
"port": 2345,
"listen": "127.0.0.1",
"protocol": "vmess",
"settings": {
"clients": [
{
"id": null
}
]
},
"streamSettings": {
"network": "tcp",
"security": "none",
"tcpSettings": {
"acceptProxyProtocol": true,
"header": {
"type": "http",
"request": {
"path": [
"/vmesstcp"
]
}
}
}
}
},
{
"port": 3456,
"listen": "127.0.0.1",
"protocol": "vmess",
"settings": {
"clients": [
{
"id": null
}
]
},
"streamSettings": {
"network": "ws",
"security": "none",
"wsSettings": {
"acceptProxyProtocol": true,
"path": "/vmessws"
}
}
}
]
}