Compare commits

...

3 commits

Author SHA1 Message Date
2dust
c49ba735a0 Optimize code
Some checks are pending
release macos / build (Release) (push) Waiting to run
release / build (Release) (push) Waiting to run
2024-12-16 21:05:36 +08:00
2dust
1a33c598e8 Disable mux when using xhttp 2024-12-16 21:01:03 +08:00
2dust
a4bbdb49de proxy api.ip.sb
https://github.com/2dust/v2rayN/issues/6280
2024-12-16 19:59:46 +08:00
4 changed files with 171 additions and 176 deletions

View file

@ -350,21 +350,9 @@ namespace ServiceLib.Models
public string? path { get; set; } public string? path { get; set; }
public string? host { get; set; } public string? host { get; set; }
public string? mode { get; set; } public string? mode { get; set; }
public object? scMaxEachPostBytes { get; set; }
public object? scMaxConcurrentPosts { get; set; }
public object? scMinPostsIntervalMs { get; set; }
//public Xmux4Ray? xmux { get; set; }
public object? extra { get; set; } public object? extra { get; set; }
} }
//public class Xmux4Ray
//{
// public object? maxConcurrency { get; set; }
// public object? maxConnections { get; set; }
// public object? cMaxReuseTimes { get; set; }
// public object? cMaxLifetimeMs { get; set; }
//}
public class HttpSettings4Ray public class HttpSettings4Ray
{ {
public string? path { get; set; } public string? path { get; set; }

View file

@ -1,149 +1,156 @@
[ [
{ {
"remarks": "绕过bittorrent", "remarks": "绕过bittorrent",
"outboundTag": "direct", "outboundTag": "direct",
"protocol": [ "protocol": [
"bittorrent" "bittorrent"
] ]
}, },
{ {
"remarks": "Google cn", "remarks": "api.ip.sb",
"outboundTag": "proxy", "outboundTag": "proxy",
"domain": [ "domain": [
"domain:googleapis.cn", "api.ip.sb"
"domain:gstatic.com" ]
] },
}, {
{ "remarks": "Google cn",
"remarks": "阻断udp443", "outboundTag": "proxy",
"outboundTag": "block", "domain": [
"port": "443", "domain:googleapis.cn",
"network": "udp" "domain:gstatic.com"
}, ]
{ },
"remarks": "阻断广告", {
"outboundTag": "block", "remarks": "阻断udp443",
"domain": [ "outboundTag": "block",
"geosite:category-ads-all" "port": "443",
] "network": "udp"
}, },
{ {
"remarks": "绕过局域网IP", "remarks": "阻断广告",
"outboundTag": "direct", "outboundTag": "block",
"ip": [ "domain": [
"geoip:private" "geosite:category-ads-all"
] ]
}, },
{ {
"remarks": "绕过局域网域名", "remarks": "绕过局域网IP",
"outboundTag": "direct", "outboundTag": "direct",
"domain": [ "ip": [
"geosite:private" "geoip:private"
] ]
}, },
{ {
"remarks": "代理海外公共DNSIP", "remarks": "绕过局域网域名",
"outboundTag": "proxy", "outboundTag": "direct",
"ip": [ "domain": [
"1.1.1.1", "geosite:private"
"1.0.0.1", ]
"2606:4700:4700::1111", },
"2606:4700:4700::1001", {
"1.1.1.2", "remarks": "代理海外公共DNSIP",
"1.0.0.2", "outboundTag": "proxy",
"2606:4700:4700::1112", "ip": [
"2606:4700:4700::1002", "1.1.1.1",
"1.1.1.3", "1.0.0.1",
"1.0.0.3", "2606:4700:4700::1111",
"2606:4700:4700::1113", "2606:4700:4700::1001",
"2606:4700:4700::1003", "1.1.1.2",
"8.8.8.8", "1.0.0.2",
"8.8.4.4", "2606:4700:4700::1112",
"2001:4860:4860::8888", "2606:4700:4700::1002",
"2001:4860:4860::8844", "1.1.1.3",
"94.140.14.14", "1.0.0.3",
"94.140.15.15", "2606:4700:4700::1113",
"2a10:50c0::ad1:ff", "2606:4700:4700::1003",
"2a10:50c0::ad2:ff", "8.8.8.8",
"94.140.14.15", "8.8.4.4",
"94.140.15.16", "2001:4860:4860::8888",
"2a10:50c0::bad1:ff", "2001:4860:4860::8844",
"2a10:50c0::bad2:ff", "94.140.14.14",
"94.140.14.140", "94.140.15.15",
"94.140.14.141", "2a10:50c0::ad1:ff",
"2a10:50c0::1:ff", "2a10:50c0::ad2:ff",
"2a10:50c0::2:ff", "94.140.14.15",
"208.67.222.222", "94.140.15.16",
"208.67.220.220", "2a10:50c0::bad1:ff",
"2620:119:35::35", "2a10:50c0::bad2:ff",
"2620:119:53::53", "94.140.14.140",
"208.67.222.123", "94.140.14.141",
"208.67.220.123", "2a10:50c0::1:ff",
"2620:119:35::123", "2a10:50c0::2:ff",
"2620:119:53::123", "208.67.222.222",
"9.9.9.9", "208.67.220.220",
"149.112.112.112", "2620:119:35::35",
"2620:fe::9", "2620:119:53::53",
"2620:fe::fe", "208.67.222.123",
"9.9.9.11", "208.67.220.123",
"149.112.112.11", "2620:119:35::123",
"2620:fe::11", "2620:119:53::123",
"2620:fe::fe:11", "9.9.9.9",
"9.9.9.10", "149.112.112.112",
"149.112.112.10", "2620:fe::9",
"2620:fe::10", "2620:fe::fe",
"2620:fe::fe:10", "9.9.9.11",
"77.88.8.8", "149.112.112.11",
"77.88.8.1", "2620:fe::11",
"2a02:6b8::feed:0ff", "2620:fe::fe:11",
"2a02:6b8:0:1::feed:0ff", "9.9.9.10",
"77.88.8.88", "149.112.112.10",
"77.88.8.2", "2620:fe::10",
"2a02:6b8::feed:bad", "2620:fe::fe:10",
"2a02:6b8:0:1::feed:bad", "77.88.8.8",
"77.88.8.7", "77.88.8.1",
"77.88.8.3", "2a02:6b8::feed:0ff",
"2a02:6b8::feed:a11", "2a02:6b8:0:1::feed:0ff",
"2a02:6b8:0:1::feed:a11" "77.88.8.88",
] "77.88.8.2",
}, "2a02:6b8::feed:bad",
{ "2a02:6b8:0:1::feed:bad",
"remarks": "代理海外公共DNS域名", "77.88.8.7",
"outboundTag": "proxy", "77.88.8.3",
"domain": [ "2a02:6b8::feed:a11",
"domain:cloudflare-dns.com", "2a02:6b8:0:1::feed:a11"
"domain:one.one.one.one", ]
"domain:dns.google", },
"domain:adguard-dns.com", {
"domain:opendns.com", "remarks": "代理海外公共DNS域名",
"domain:umbrella.com", "outboundTag": "proxy",
"domain:quad9.net", "domain": [
"domain:yandex.net" "domain:cloudflare-dns.com",
] "domain:one.one.one.one",
}, "domain:dns.google",
{ "domain:adguard-dns.com",
"remarks": "代理IP", "domain:opendns.com",
"outboundTag": "proxy", "domain:umbrella.com",
"ip": [ "domain:quad9.net",
"geoip:facebook", "domain:yandex.net"
"geoip:fastly", ]
"geoip:google", },
"geoip:netflix", {
"geoip:telegram", "remarks": "代理IP",
"geoip:twitter" "outboundTag": "proxy",
] "ip": [
}, "geoip:facebook",
{ "geoip:fastly",
"remarks": "代理GFW", "geoip:google",
"outboundTag": "proxy", "geoip:netflix",
"domain": [ "geoip:telegram",
"geosite:gfw", "geoip:twitter"
"geosite:greatfire" ]
] },
}, {
{ "remarks": "代理GFW",
"remarks": "最终直连", "outboundTag": "proxy",
"port": "0-65535", "domain": [
"outboundTag": "direct" "geosite:gfw",
} "geosite:greatfire"
]
},
{
"remarks": "最终直连",
"port": "0-65535",
"outboundTag": "direct"
}
] ]

View file

@ -700,8 +700,7 @@ namespace ServiceLib.Services.CoreConfig
await GenOutboundMux(node, outbound, _config.CoreBasicItem.MuxEnabled); await GenOutboundMux(node, outbound, _config.CoreBasicItem.MuxEnabled);
if (node.StreamSecurity == Global.StreamSecurityReality if (node.StreamSecurity == Global.StreamSecurityReality || node.StreamSecurity == Global.StreamSecurity)
|| node.StreamSecurity == Global.StreamSecurity)
{ {
if (Utils.IsNotEmpty(node.Flow)) if (Utils.IsNotEmpty(node.Flow))
{ {
@ -745,7 +744,7 @@ namespace ServiceLib.Services.CoreConfig
} }
outbound.protocol = Global.ProtocolTypes[node.ConfigType]; outbound.protocol = Global.ProtocolTypes[node.ConfigType];
await GenBoundStreamSettings(node, outbound.streamSettings); await GenBoundStreamSettings(node, outbound);
} }
catch (Exception ex) catch (Exception ex)
{ {
@ -778,10 +777,11 @@ namespace ServiceLib.Services.CoreConfig
return 0; return 0;
} }
private async Task<int> GenBoundStreamSettings(ProfileItem node, StreamSettings4Ray streamSettings) private async Task<int> GenBoundStreamSettings(ProfileItem node, Outbounds4Ray outbound)
{ {
try try
{ {
var streamSettings = outbound.streamSettings;
streamSettings.network = node.GetNetwork(); streamSettings.network = node.GetNetwork();
var host = node.RequestHost.TrimEx(); var host = node.RequestHost.TrimEx();
var path = node.Path.TrimEx(); var path = node.Path.TrimEx();
@ -904,12 +904,7 @@ namespace ServiceLib.Services.CoreConfig
//xhttp //xhttp
case nameof(ETransport.xhttp): case nameof(ETransport.xhttp):
streamSettings.network = ETransport.xhttp.ToString(); streamSettings.network = ETransport.xhttp.ToString();
XhttpSettings4Ray xhttpSettings = new() XhttpSettings4Ray xhttpSettings = new();
{
scMaxEachPostBytes = "500000-1000000",
scMaxConcurrentPosts = "50-100",
scMinPostsIntervalMs = "30-50"
};
if (Utils.IsNotEmpty(path)) if (Utils.IsNotEmpty(path))
{ {
@ -929,6 +924,7 @@ namespace ServiceLib.Services.CoreConfig
} }
streamSettings.xhttpSettings = xhttpSettings; streamSettings.xhttpSettings = xhttpSettings;
await GenOutboundMux(node, outbound, false);
break; break;
//h2 //h2

View file

@ -9,7 +9,6 @@ namespace ServiceLib.ViewModels
{ {
private ConcurrentQueue<string> _queueMsg = new(); private ConcurrentQueue<string> _queueMsg = new();
private int _numMaxMsg = 500; private int _numMaxMsg = 500;
private string _lastMsgFilter = string.Empty;
private bool _lastMsgFilterNotAvailable; private bool _lastMsgFilterNotAvailable;
private bool _blLockShow = false; private bool _blLockShow = false;
@ -28,7 +27,7 @@ namespace ServiceLib.ViewModels
this.WhenAnyValue( this.WhenAnyValue(
x => x.MsgFilter) x => x.MsgFilter)
.Subscribe(c => _config.MsgUIItem.MainMsgFilter = MsgFilter); .Subscribe(c => DoMsgFilter());
this.WhenAnyValue( this.WhenAnyValue(
x => x.AutoRefresh, x => x.AutoRefresh,
@ -77,8 +76,7 @@ namespace ServiceLib.ViewModels
private async Task EnqueueQueueMsg(string msg) private async Task EnqueueQueueMsg(string msg)
{ {
//filter msg //filter msg
if (MsgFilter != _lastMsgFilter) _lastMsgFilterNotAvailable = false; if (MsgFilter.IsNotEmpty() && !_lastMsgFilterNotAvailable)
if (Utils.IsNotEmpty(MsgFilter) && !_lastMsgFilterNotAvailable)
{ {
try try
{ {
@ -87,12 +85,12 @@ namespace ServiceLib.ViewModels
return; return;
} }
} }
catch (Exception) catch (Exception ex)
{ {
_queueMsg.Enqueue(ex.Message);
_lastMsgFilterNotAvailable = true; _lastMsgFilterNotAvailable = true;
} }
} }
_lastMsgFilter = MsgFilter;
//Enqueue //Enqueue
if (_queueMsg.Count > _numMaxMsg) if (_queueMsg.Count > _numMaxMsg)
@ -113,5 +111,11 @@ namespace ServiceLib.ViewModels
{ {
_queueMsg.Clear(); _queueMsg.Clear();
} }
private void DoMsgFilter()
{
_config.MsgUIItem.MainMsgFilter = MsgFilter;
_lastMsgFilterNotAvailable = false;
}
} }
} }