Skip to content

Commit 433883c

Browse files
committed
update quic
1 parent e86db63 commit 433883c

18 files changed

+489
-14
lines changed

ProxySuper.Core/Models/Projects/V2raySettings.cs

+3-3
Original file line numberDiff line numberDiff line change
@@ -38,14 +38,16 @@ public V2raySettings()
3838
VLESS_WS_Path = "/" + Utils.RandomString(6);
3939
VLESS_KCP_Type = "none";
4040
VLESS_KCP_Seed = guid;
41+
VLESS_QUIC_Key = "";
4142
VLESS_QUIC_Type = "none";
4243
VLESS_QUIC_Security = "none";
4344
VLESS_QUIC_Type = "none";
44-
VLESS_gRPC_ServiceName = "/" + Utils.RandomString(7);
45+
VLESS_gRPC_ServiceName = Utils.RandomString(7);
4546

4647
VMESS_WS_Path = "/" + Utils.RandomString(8);
4748
VMESS_TCP_Path = "/" + Utils.RandomString(9);
4849
VMESS_KCP_Seed = guid;
50+
VMESS_QUIC_Key = "";
4951
VMESS_KCP_Type = "none";
5052
VMESS_QUIC_Security = "none";
5153
VMESS_QUIC_Type = "none";
@@ -98,8 +100,6 @@ public List<int> FreePorts
98100
}
99101
}
100102

101-
//public ProjectType Type { get; set; } = ProjectType.Xray;
102-
103103
/// <summary>
104104
/// 是否安装证书,
105105
/// 上传自有证书时选False,则不会自动安装证书。

ProxySuper.Core/Services/ShareLink.cs

+35-8
Original file line numberDiff line numberDiff line change
@@ -78,12 +78,14 @@ public static string Build(RayType xrayType, V2raySettings settings)
7878
case RayType.VLESS_TCP_XTLS:
7979
case RayType.VLESS_WS:
8080
case RayType.VLESS_KCP:
81+
case RayType.VLESS_QUIC:
8182
case RayType.VLESS_gRPC:
8283
case RayType.Trojan_TCP:
8384
return BuildVlessShareLink(xrayType, settings);
8485
case RayType.VMESS_TCP:
8586
case RayType.VMESS_WS:
8687
case RayType.VMESS_KCP:
88+
case RayType.VMESS_QUIC:
8789
return BuildVmessShareLink(xrayType, settings);
8890
case RayType.ShadowsocksAEAD:
8991
return BuildShadowSocksShareLink(settings);
@@ -142,6 +144,15 @@ private static string BuildVmessShareLink(RayType xrayType, V2raySettings settin
142144
vmess.path = settings.VMESS_KCP_Seed;
143145
vmess.tls = "";
144146
break;
147+
case RayType.VMESS_QUIC:
148+
vmess.ps = "vmess-quic";
149+
vmess.port = settings.VMESS_QUIC_Port.ToString();
150+
vmess.net = "quic";
151+
vmess.type = settings.VMESS_QUIC_Type;
152+
vmess.path = settings.VMESS_QUIC_Key;
153+
vmess.host = settings.VMESS_QUIC_Security;
154+
vmess.tls = "tls";
155+
break;
145156
default:
146157
return string.Empty;
147158
}
@@ -162,8 +173,6 @@ private static string BuildVlessShareLink(RayType xrayType, V2raySettings settin
162173
var _path = "/";
163174
var _host = settings.Domain;
164175
var _descriptiveText = string.Empty;
165-
var _headerType = "none";
166-
var _seed = string.Empty;
167176

168177
switch (xrayType)
169178
{
@@ -187,12 +196,17 @@ private static string BuildVlessShareLink(RayType xrayType, V2raySettings settin
187196
case RayType.VLESS_KCP:
188197
_protocol = "vless";
189198
_type = "kcp";
190-
_headerType = settings.VLESS_KCP_Type;
191-
_seed = settings.VLESS_KCP_Seed;
192199
_port = settings.VLESS_KCP_Port;
193200
_security = "none";
194201
_descriptiveText = "vless-mKCP";
195202
break;
203+
case RayType.VLESS_QUIC:
204+
_protocol = "vless";
205+
_port = settings.VLESS_QUIC_Port;
206+
_type = "quic";
207+
_security = "tls";
208+
_descriptiveText = "vless-quic";
209+
break;
196210
case RayType.VLESS_gRPC:
197211
_protocol = "vless";
198212
_type = "grpc";
@@ -213,19 +227,32 @@ private static string BuildVlessShareLink(RayType xrayType, V2raySettings settin
213227
if (xrayType != RayType.Trojan_TCP)
214228
{
215229
// 4.3 传输层相关段
216-
parametersURL = $"?type={_type}&encryption={_encryption}&security={_security}&path={HttpUtility.UrlEncode(_path)}&headerType={_headerType}";
230+
parametersURL = $"?type={_type}&encryption={_encryption}&security={_security}&path={HttpUtility.UrlEncode(_path)}";
217231

218232
// kcp
219233
if (xrayType == RayType.VLESS_KCP)
220234
{
221-
parametersURL += $"&seed={_seed}";
235+
parametersURL += $"&seed={settings.VLESS_KCP_Seed}&headerType={settings.VLESS_KCP_Type}";
236+
}
237+
238+
if (xrayType == RayType.VLESS_QUIC)
239+
{
240+
parametersURL += $"&quicSecurity={settings.VLESS_QUIC_Security}";
241+
if (settings.VLESS_QUIC_Security != "none")
242+
{
243+
parametersURL += $"&key={HttpUtility.UrlEncode(settings.VLESS_QUIC_Key)}";
244+
}
245+
parametersURL += $"&headerType={settings.VLESS_QUIC_Type}";
222246
}
223247

224248
// 4.4 TLS 相关段
225249
if (settings is XraySettings)
226250
{
227-
var xraySettings = settings as XraySettings;
228-
parametersURL += $"&flow={xraySettings.Flow}";
251+
if (xrayType == RayType.VLESS_TCP_XTLS)
252+
{
253+
var xraySettings = settings as XraySettings;
254+
parametersURL += $"&flow={xraySettings.Flow}";
255+
}
229256
}
230257

231258

ProxySuper.Core/Services/V2rayConfigBuilder.cs

+34
Original file line numberDiff line numberDiff line change
@@ -187,6 +187,7 @@ public static string BuildV2rayConfig(V2raySettings parameters)
187187
}
188188
#endregion
189189

190+
#region VLESS GRPC
190191
if (parameters.Types.Contains(RayType.VLESS_gRPC))
191192
{
192193
var gRPCInBound = GetBound("VLESS_gRPC.json");
@@ -196,7 +197,9 @@ public static string BuildV2rayConfig(V2raySettings parameters)
196197
gRPCInBound.streamSettings.tlsSettings.serverName = parameters.Domain;
197198
xrayConfig.inbounds.Add(JToken.FromObject(gRPCInBound));
198199
}
200+
#endregion
199201

202+
#region VLESS KCP
200203
if (parameters.Types.Contains(RayType.VLESS_KCP))
201204
{
202205
var kcpBound = GetBound("VLESS_KCP.json");
@@ -206,7 +209,22 @@ public static string BuildV2rayConfig(V2raySettings parameters)
206209
kcpBound.streamSettings.kcpSettings.seed = parameters.VLESS_KCP_Seed;
207210
xrayConfig.inbounds.Add(JToken.FromObject(kcpBound));
208211
}
212+
#endregion
213+
214+
#region VLESS QUIC
215+
if (parameters.Types.Contains(RayType.VLESS_QUIC))
216+
{
217+
var quicBound = GetBound("VLESS_QUIC.json");
218+
quicBound.port = parameters.VLESS_QUIC_Port;
219+
SetClients(quicBound, uuidList);
220+
quicBound.streamSettings.quicSettings.security = parameters.VLESS_QUIC_Security;
221+
quicBound.streamSettings.quicSettings.key = parameters.VLESS_QUIC_Key;
222+
quicBound.streamSettings.quicSettings.header.type = parameters.VLESS_QUIC_Type;
223+
xrayConfig.inbounds.Add(JToken.FromObject(quicBound));
224+
}
225+
#endregion
209226

227+
#region VMESS KCP
210228
if (parameters.Types.Contains(RayType.VMESS_KCP))
211229
{
212230
var kcpBound = GetBound("VMESS_KCP.json");
@@ -216,7 +234,22 @@ public static string BuildV2rayConfig(V2raySettings parameters)
216234
kcpBound.streamSettings.kcpSettings.seed = parameters.VMESS_KCP_Seed;
217235
xrayConfig.inbounds.Add(JToken.FromObject(kcpBound));
218236
}
237+
#endregion
238+
239+
#region VMESS QUIC
240+
if (parameters.Types.Contains(RayType.VMESS_QUIC))
241+
{
242+
var quicBound = GetBound("VMESS_QUIC.json");
243+
quicBound.port = parameters.VMESS_QUIC_Port;
244+
SetClients(quicBound, uuidList);
245+
quicBound.streamSettings.quicSettings.security = parameters.VMESS_QUIC_Security;
246+
quicBound.streamSettings.quicSettings.key = parameters.VMESS_QUIC_Key;
247+
quicBound.streamSettings.quicSettings.header.type = parameters.VMESS_QUIC_Type;
248+
xrayConfig.inbounds.Add(JToken.FromObject(quicBound));
249+
}
250+
#endregion
219251

252+
#region Shadowsocks
220253
if (parameters.Types.Contains(RayType.ShadowsocksAEAD))
221254
{
222255
var ssBound = GetBound("Shadowsocks-AEAD.json");
@@ -225,6 +258,7 @@ public static string BuildV2rayConfig(V2raySettings parameters)
225258
ssBound.settings.method = parameters.ShadowSocksMethod;
226259
xrayConfig.inbounds.Add(JToken.FromObject(ssBound));
227260
}
261+
#endregion
228262

229263
return JsonConvert.SerializeObject(
230264
xrayConfig,

ProxySuper.Core/Services/XrayConfigBuilder.cs

+34-1
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,6 @@ private static void SetClients(dynamic bound, List<string> uuidList, bool withXt
110110
});
111111
}
112112

113-
114113
public static string BuildXrayConfig(XraySettings parameters)
115114
{
116115
var uuidList = new List<string>();
@@ -190,6 +189,7 @@ public static string BuildXrayConfig(XraySettings parameters)
190189
}
191190
#endregion
192191

192+
#region VLESS GRPC
193193
if (parameters.Types.Contains(RayType.VLESS_gRPC))
194194
{
195195
var gRPCInBound = GetBound("VLESS_gRPC.json");
@@ -199,7 +199,9 @@ public static string BuildXrayConfig(XraySettings parameters)
199199
gRPCInBound.streamSettings.tlsSettings.serverName = parameters.Domain;
200200
xrayConfig.inbounds.Add(JToken.FromObject(gRPCInBound));
201201
}
202+
#endregion
202203

204+
#region VLESS KCP
203205
if (parameters.Types.Contains(RayType.VLESS_KCP))
204206
{
205207
var kcpBound = GetBound("VLESS_KCP.json");
@@ -209,7 +211,22 @@ public static string BuildXrayConfig(XraySettings parameters)
209211
kcpBound.streamSettings.kcpSettings.seed = parameters.VLESS_KCP_Seed;
210212
xrayConfig.inbounds.Add(JToken.FromObject(kcpBound));
211213
}
214+
#endregion
215+
216+
#region VLESS QUIC
217+
if (parameters.Types.Contains(RayType.VLESS_QUIC))
218+
{
219+
var quicBound = GetBound("VLESS_QUIC.json");
220+
quicBound.port = parameters.VLESS_QUIC_Port;
221+
SetClients(quicBound, uuidList);
222+
quicBound.streamSettings.quicSettings.security = parameters.VLESS_QUIC_Security;
223+
quicBound.streamSettings.quicSettings.key = parameters.VLESS_QUIC_Key;
224+
quicBound.streamSettings.quicSettings.header.type = parameters.VLESS_QUIC_Type;
225+
xrayConfig.inbounds.Add(JToken.FromObject(quicBound));
226+
}
227+
#endregion
212228

229+
#region VMESS KCP
213230
if (parameters.Types.Contains(RayType.VMESS_KCP))
214231
{
215232
var kcpBound = GetBound("VMESS_KCP.json");
@@ -219,7 +236,22 @@ public static string BuildXrayConfig(XraySettings parameters)
219236
kcpBound.streamSettings.kcpSettings.seed = parameters.VMESS_KCP_Seed;
220237
xrayConfig.inbounds.Add(JToken.FromObject(kcpBound));
221238
}
239+
#endregion
240+
241+
#region VMESS QUIC
242+
if (parameters.Types.Contains(RayType.VMESS_QUIC))
243+
{
244+
var quicBound = GetBound("VMESS_QUIC.json");
245+
quicBound.port = parameters.VMESS_QUIC_Port;
246+
SetClients(quicBound, uuidList);
247+
quicBound.streamSettings.quicSettings.security = parameters.VMESS_QUIC_Security;
248+
quicBound.streamSettings.quicSettings.key = parameters.VMESS_QUIC_Key;
249+
quicBound.streamSettings.quicSettings.header.type = parameters.VMESS_QUIC_Type;
250+
xrayConfig.inbounds.Add(JToken.FromObject(quicBound));
251+
}
252+
#endregion
222253

254+
#region Shadowsocks
223255
if (parameters.Types.Contains(RayType.ShadowsocksAEAD))
224256
{
225257
var ssBound = GetBound("Shadowsocks-AEAD.json");
@@ -228,6 +260,7 @@ public static string BuildXrayConfig(XraySettings parameters)
228260
ssBound.settings.method = parameters.ShadowSocksMethod;
229261
xrayConfig.inbounds.Add(JToken.FromObject(ssBound));
230262
}
263+
#endregion
231264

232265
return JsonConvert.SerializeObject(
233266
xrayConfig,

ProxySuper.Core/ViewModels/V2rayConfigViewModel.cs

+16
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,14 @@ public bool Checked_VLESS_KCP
4242
}
4343
}
4444

45+
public bool Checked_VLESS_QUIC
46+
{
47+
get
48+
{
49+
return Settings.Types.Contains(RayType.VLESS_QUIC);
50+
}
51+
}
52+
4553
public bool Checked_VLESS_gRPC
4654
{
4755
get
@@ -74,6 +82,14 @@ public bool Checked_VMESS_KCP
7482
}
7583
}
7684

85+
public bool Checked_VMESS_QUIC
86+
{
87+
get
88+
{
89+
return Settings.Types.Contains(RayType.VMESS_QUIC);
90+
}
91+
}
92+
7793
public bool Checked_Trojan_TCP
7894
{
7995
get

ProxySuper.Core/ViewModels/XrayConfigViewModel.cs

+16
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,14 @@ public bool Checked_VLESS_KCP
5555
}
5656
}
5757

58+
public bool Checked_VLESS_QUIC
59+
{
60+
get
61+
{
62+
return Settings.Types.Contains(RayType.VLESS_QUIC);
63+
}
64+
}
65+
5866
public bool Checked_VLESS_gRPC
5967
{
6068
get
@@ -87,6 +95,14 @@ public bool Checked_VMESS_KCP
8795
}
8896
}
8997

98+
public bool Checked_VMESS_QUIC
99+
{
100+
get
101+
{
102+
return Settings.Types.Contains(RayType.VMESS_QUIC);
103+
}
104+
}
105+
90106
public bool Checked_Trojan_TCP
91107
{
92108
get
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
<UserControl x:Class="ProxySuper.WPF.Controls.VLESS_QUIC_Control"
2+
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
3+
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
4+
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
5+
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
6+
xmlns:local="clr-namespace:ProxySuper.WPF.Controls"
7+
mc:Ignorable="d">
8+
<StackPanel Orientation="Vertical">
9+
<StackPanel Orientation="Horizontal">
10+
<Label Content="地址(address)" Width="140" />
11+
<TextBox Text="{Binding Settings.Domain}" IsReadOnly="True" Width="300" />
12+
</StackPanel>
13+
14+
<StackPanel Orientation="Horizontal" Margin="0,10,0,0">
15+
<Label Content="端口(port)" Width="140" />
16+
<TextBox Text="{Binding Path=Settings.VLESS_KCP_Port,Mode=OneTime}" IsReadOnly="True" Width="300" />
17+
</StackPanel>
18+
19+
<StackPanel Orientation="Horizontal" Margin="0,10,0,0">
20+
<Label Content="用户ID(id)" Width="140" />
21+
<TextBox Text="{Binding Settings.UUID}" IsReadOnly="True" Width="300" />
22+
</StackPanel>
23+
24+
<StackPanel Orientation="Horizontal" Margin="0,10,0,0">
25+
<Label Content="加密(security)" Width="140" />
26+
<TextBox Text="none" IsReadOnly="True" Width="300" />
27+
</StackPanel>
28+
29+
<StackPanel Orientation="Horizontal" Margin="0,10,0,0">
30+
<Label Content="传输协议(network)" Width="140" />
31+
<TextBox Text="quic" IsReadOnly="True" Width="300" />
32+
</StackPanel>
33+
34+
<StackPanel Orientation="Horizontal" Margin="0,10,0,0">
35+
<Label Content="伪装类型(type)" Width="140" />
36+
<TextBox Text="{Binding Settings.VLESS_QUIC_Type}" IsReadOnly="True" Width="300" />
37+
</StackPanel>
38+
39+
<StackPanel Orientation="Horizontal" Margin="0,10,0,0">
40+
<Label Content="伪装域名(host)" Width="140" />
41+
<TextBox Text="{Binding Settings.VLESS_QUIC_Security}" IsReadOnly="True" Width="300" />
42+
<Label Content="QUIC加密方式" />
43+
</StackPanel>
44+
45+
<StackPanel Orientation="Horizontal" Margin="0,10,0,0">
46+
<Label Content="路径(path)" Width="140" />
47+
<TextBox Text="{Binding Settings.VLESS_QUIC_Key}" IsReadOnly="True" Width="300" />
48+
<Label Content="QUIC密钥" />
49+
</StackPanel>
50+
51+
<StackPanel Orientation="Horizontal" Margin="0,10,0,0">
52+
<Label Content="传输安全(tls)" Width="140" />
53+
<TextBox Text="" IsReadOnly="True" Width="300" />
54+
</StackPanel>
55+
56+
<StackPanel Orientation="Horizontal" Margin="0,10,0,0">
57+
<Label Content="分享链接(ShareLink)" Width="140" />
58+
<TextBox Text="{Binding Settings.VLESS_QUIC_ShareLink,Mode=OneTime}" Width="300" IsReadOnly="True" />
59+
</StackPanel>
60+
</StackPanel>
61+
</UserControl>

0 commit comments

Comments
 (0)