diff --git a/v2rayN/v2rayN/Handler/CoreConfigV2ray.cs b/v2rayN/v2rayN/Handler/CoreConfigV2ray.cs
index c29f3869..92252850 100644
--- a/v2rayN/v2rayN/Handler/CoreConfigV2ray.cs
+++ b/v2rayN/v2rayN/Handler/CoreConfigV2ray.cs
@@ -834,6 +834,33 @@ namespace v2rayN.Handler
private int GenMoreOutbounds(ProfileItem node, V2rayConfig v2rayConfig)
{
+ //fragment proxy
+ if (_config.coreBasicItem.enableFragment
+ && !Utils.IsNullOrEmpty(v2rayConfig.outbounds[0].streamSettings?.security))
+ {
+ var fragmentOutbound = new Outbounds4Ray
+ {
+ protocol = "freedom",
+ tag = $"{Global.ProxyTag}3",
+ settings = new()
+ {
+ fragment = new()
+ {
+ packets = "tlshello",
+ length = "100-200",
+ interval = "10-20"
+ }
+ }
+ };
+
+ v2rayConfig.outbounds.Add(fragmentOutbound);
+ v2rayConfig.outbounds[0].streamSettings.sockopt = new()
+ {
+ dialerProxy = fragmentOutbound.tag
+ };
+ return 0;
+ }
+
if (node.subid.IsNullOrEmpty())
{
return 0;
diff --git a/v2rayN/v2rayN/Models/ConfigItems.cs b/v2rayN/v2rayN/Models/ConfigItems.cs
index 5e3b8d58..80ddb74d 100644
--- a/v2rayN/v2rayN/Models/ConfigItems.cs
+++ b/v2rayN/v2rayN/Models/ConfigItems.cs
@@ -31,6 +31,8 @@ namespace v2rayN.Models
/// 默认用户代理
///
public string defUserAgent { get; set; }
+
+ public bool enableFragment { get; set; }
}
[Serializable]
diff --git a/v2rayN/v2rayN/Models/V2rayConfig.cs b/v2rayN/v2rayN/Models/V2rayConfig.cs
index eba9def5..73259a97 100644
--- a/v2rayN/v2rayN/Models/V2rayConfig.cs
+++ b/v2rayN/v2rayN/Models/V2rayConfig.cs
@@ -253,6 +253,8 @@ namespace v2rayN.Models
///
///
public int? userLevel { get; set; }
+
+ public FragmentItem4Ray? fragment { get; set; }
}
public class VnextItem4Ray
@@ -665,4 +667,11 @@ namespace v2rayN.Models
{
public string? dialerProxy { get; set; }
}
+
+ public class FragmentItem4Ray
+ {
+ public string? packets { get; set; }
+ public string? length { get; set; }
+ public string? interval { get; set; }
+ }
}
\ No newline at end of file
diff --git a/v2rayN/v2rayN/Resx/ResUI.Designer.cs b/v2rayN/v2rayN/Resx/ResUI.Designer.cs
index f2f0f507..eddcf0b0 100644
--- a/v2rayN/v2rayN/Resx/ResUI.Designer.cs
+++ b/v2rayN/v2rayN/Resx/ResUI.Designer.cs
@@ -2635,6 +2635,24 @@ namespace v2rayN.Resx {
}
}
+ ///
+ /// 查找类似 Enable fragment 的本地化字符串。
+ ///
+ public static string TbSettingsEnableFragment {
+ get {
+ return ResourceManager.GetString("TbSettingsEnableFragment", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 Use Xray and enable non-Tun mode, which conflicts with the group previous proxy 的本地化字符串。
+ ///
+ public static string TbSettingsEnableFragmentTips {
+ get {
+ return ResourceManager.GetString("TbSettingsEnableFragmentTips", resourceCulture);
+ }
+ }
+
///
/// 查找类似 Enable hardware acceleration(Require restart) 的本地化字符串。
///
diff --git a/v2rayN/v2rayN/Resx/ResUI.resx b/v2rayN/v2rayN/Resx/ResUI.resx
index f474f069..7ab6e440 100644
--- a/v2rayN/v2rayN/Resx/ResUI.resx
+++ b/v2rayN/v2rayN/Resx/ResUI.resx
@@ -1201,4 +1201,10 @@
Add [Http] server
+
+ Use Xray and enable non-Tun mode, which conflicts with the group previous proxy
+
+
+ Enable fragment
+
\ No newline at end of file
diff --git a/v2rayN/v2rayN/Resx/ResUI.zh-Hans.resx b/v2rayN/v2rayN/Resx/ResUI.zh-Hans.resx
index dca5948a..b5e98e8f 100644
--- a/v2rayN/v2rayN/Resx/ResUI.zh-Hans.resx
+++ b/v2rayN/v2rayN/Resx/ResUI.zh-Hans.resx
@@ -1198,4 +1198,10 @@
添加[Http]服务器
+
+ 启用分片(Fragment)
+
+
+ 使用Xray且非Tun模式启用,和分组前置代理冲突
+
\ No newline at end of file
diff --git a/v2rayN/v2rayN/Resx/ResUI.zh-Hant.resx b/v2rayN/v2rayN/Resx/ResUI.zh-Hant.resx
index 59538750..e69672ae 100644
--- a/v2rayN/v2rayN/Resx/ResUI.zh-Hant.resx
+++ b/v2rayN/v2rayN/Resx/ResUI.zh-Hant.resx
@@ -1171,4 +1171,10 @@
新增[Http]伺服器
+
+ 啟用分片(Fragment)
+
+
+ 使用Xray且非Tun模式啟用,和分組前置代理衝突
+
\ No newline at end of file
diff --git a/v2rayN/v2rayN/ViewModels/OptionSettingViewModel.cs b/v2rayN/v2rayN/ViewModels/OptionSettingViewModel.cs
index 79e046bd..994d052f 100644
--- a/v2rayN/v2rayN/ViewModels/OptionSettingViewModel.cs
+++ b/v2rayN/v2rayN/ViewModels/OptionSettingViewModel.cs
@@ -34,6 +34,7 @@ namespace v2rayN.ViewModels
[Reactive] public string mux4SboxProtocol { get; set; }
[Reactive] public int hyUpMbps { get; set; }
[Reactive] public int hyDownMbps { get; set; }
+ [Reactive] public bool enableFragment { get; set; }
#endregion Core
@@ -129,6 +130,7 @@ namespace v2rayN.ViewModels
mux4SboxProtocol = _config.mux4SboxItem.protocol;
hyUpMbps = _config.hysteriaItem.up_mbps;
hyDownMbps = _config.hysteriaItem.down_mbps;
+ enableFragment = _config.coreBasicItem.enableFragment;
#endregion Core
@@ -289,6 +291,7 @@ namespace v2rayN.ViewModels
_config.mux4SboxItem.protocol = mux4SboxProtocol;
_config.hysteriaItem.up_mbps = hyUpMbps;
_config.hysteriaItem.down_mbps = hyDownMbps;
+ _config.coreBasicItem.enableFragment = enableFragment;
//Kcp
//_config.kcpItem.mtu = Kcpmtu;
diff --git a/v2rayN/v2rayN/Views/OptionSettingWindow.xaml b/v2rayN/v2rayN/Views/OptionSettingWindow.xaml
index 6601637f..a02fa74c 100644
--- a/v2rayN/v2rayN/Views/OptionSettingWindow.xaml
+++ b/v2rayN/v2rayN/Views/OptionSettingWindow.xaml
@@ -67,6 +67,7 @@
+
@@ -333,6 +334,26 @@
materialDesign:HintAssist.Hint="Down"
Style="{StaticResource DefTextBox}" />
+
+
+
+
diff --git a/v2rayN/v2rayN/Views/OptionSettingWindow.xaml.cs b/v2rayN/v2rayN/Views/OptionSettingWindow.xaml.cs
index 4a9482ce..770700ca 100644
--- a/v2rayN/v2rayN/Views/OptionSettingWindow.xaml.cs
+++ b/v2rayN/v2rayN/Views/OptionSettingWindow.xaml.cs
@@ -156,6 +156,7 @@ namespace v2rayN.Views
this.Bind(ViewModel, vm => vm.mux4SboxProtocol, v => v.cmbmux4SboxProtocol.Text).DisposeWith(disposables);
this.Bind(ViewModel, vm => vm.hyUpMbps, v => v.txtUpMbps.Text).DisposeWith(disposables);
this.Bind(ViewModel, vm => vm.hyDownMbps, v => v.txtDownMbps.Text).DisposeWith(disposables);
+ this.Bind(ViewModel, vm => vm.enableFragment, v => v.togenableFragment.IsChecked).DisposeWith(disposables);
//this.Bind(ViewModel, vm => vm.Kcpmtu, v => v.txtKcpmtu.Text).DisposeWith(disposables);
//this.Bind(ViewModel, vm => vm.Kcptti, v => v.txtKcptti.Text).DisposeWith(disposables);