diff --git a/backend/package.json b/backend/package.json index d7cf303..4ba0893 100644 --- a/backend/package.json +++ b/backend/package.json @@ -1,6 +1,6 @@ { "name": "sub-store", - "version": "2.14.84", + "version": "2.14.85", "description": "Advanced Subscription Manager for QX, Loon, Surge, Stash and ShadowRocket.", "main": "src/main.js", "scripts": { diff --git a/backend/src/core/proxy-utils/parsers/index.js b/backend/src/core/proxy-utils/parsers/index.js index 7f22ac4..7213f05 100644 --- a/backend/src/core/proxy-utils/parsers/index.js +++ b/backend/src/core/proxy-utils/parsers/index.js @@ -519,6 +519,10 @@ function Clash_All() { } } + if (proxy['benchmark-url']) { + proxy['test-url'] = proxy['benchmark-url']; + } + return proxy; }; return { name, test, parse }; diff --git a/backend/src/core/proxy-utils/parsers/peggy/qx.js b/backend/src/core/proxy-utils/parsers/peggy/qx.js index 464b06e..c99545d 100644 --- a/backend/src/core/proxy-utils/parsers/peggy/qx.js +++ b/backend/src/core/proxy-utils/parsers/peggy/qx.js @@ -43,13 +43,13 @@ start = (trojan/shadowsocks/vmess/http/socks5) { } trojan = "trojan" equals address - (password/over_tls/tls_host/tls_fingerprint/tls_verification/obfs/obfs_host/obfs_uri/tag/udp_relay/udp_over_tcp/fast_open/others)* { + (password/over_tls/tls_host/tls_fingerprint/tls_verification/obfs/obfs_host/obfs_uri/tag/udp_relay/udp_over_tcp/fast_open/server_check_url/others)* { proxy.type = "trojan"; handleObfs(); } shadowsocks = "shadowsocks" equals address - (password/method/obfs_ssr/obfs_ss/obfs_host/obfs_uri/ssr_protocol/ssr_protocol_param/tls_fingerprint/tls_verification/udp_relay/udp_over_tcp/fast_open/tag/others)* { + (password/method/obfs_ssr/obfs_ss/obfs_host/obfs_uri/ssr_protocol/ssr_protocol_param/tls_fingerprint/tls_verification/udp_relay/udp_over_tcp/fast_open/tag/server_check_url/others)* { if (proxy.protocol) { proxy.type = "ssr"; // handle ssr obfs @@ -80,7 +80,7 @@ shadowsocks = "shadowsocks" equals address } vmess = "vmess" equals address - (uuid/method/over_tls/tls_host/tls_fingerprint/tls_verification/tag/obfs/obfs_host/obfs_uri/udp_relay/udp_over_tcp/fast_open/aead/others)* { + (uuid/method/over_tls/tls_host/tls_fingerprint/tls_verification/tag/obfs/obfs_host/obfs_uri/udp_relay/udp_over_tcp/fast_open/aead/server_check_url/others)* { proxy.type = "vmess"; proxy.cipher = proxy.cipher || "none"; if (proxy.aead) { @@ -92,12 +92,12 @@ vmess = "vmess" equals address } http = "http" equals address - (username/password/over_tls/tls_host/tls_fingerprint/tls_verification/tag/fast_open/udp_relay/udp_over_tcp/others)*{ + (username/password/over_tls/tls_host/tls_fingerprint/tls_verification/tag/fast_open/udp_relay/udp_over_tcp/server_check_url/others)*{ proxy.type = "http"; } socks5 = "socks5" equals address - (username/password/password/over_tls/tls_host/tls_fingerprint/tls_verification/tag/fast_open/udp_relay/udp_over_tcp/others)* { + (username/password/password/over_tls/tls_host/tls_fingerprint/tls_verification/tag/fast_open/udp_relay/udp_over_tcp/server_check_url/others)* { proxy.type = "socks5"; } @@ -166,6 +166,8 @@ obfs_uri = comma "obfs-uri" equals uri:uri { obfs.path = uri; } ssr_protocol = comma "ssr-protocol" equals protocol:("origin"/"auth_sha1_v4"/"auth_aes128_md5"/"auth_aes128_sha1"/"auth_chain_a"/"auth_chain_b") { proxy.protocol = protocol; return protocol; } ssr_protocol_param = comma "ssr-protocol-param" equals param:$[^=,]+ { proxy["protocol-param"] = param; } +server_check_url = comma "server_check_url" equals param:$[^=,]+ { proxy["test-url"] = param; } + uri = $[^,]+ tag = comma "tag" equals tag:[^=,]+ { proxy.name = tag.join(""); } diff --git a/backend/src/core/proxy-utils/parsers/peggy/qx.peg b/backend/src/core/proxy-utils/parsers/peggy/qx.peg index e041184..6e98db7 100644 --- a/backend/src/core/proxy-utils/parsers/peggy/qx.peg +++ b/backend/src/core/proxy-utils/parsers/peggy/qx.peg @@ -41,13 +41,13 @@ start = (trojan/shadowsocks/vmess/http/socks5) { } trojan = "trojan" equals address - (password/over_tls/tls_host/tls_fingerprint/tls_verification/obfs/obfs_host/obfs_uri/tag/udp_relay/udp_over_tcp/fast_open/others)* { + (password/over_tls/tls_host/tls_fingerprint/tls_verification/obfs/obfs_host/obfs_uri/tag/udp_relay/udp_over_tcp/fast_open/server_check_url/others)* { proxy.type = "trojan"; handleObfs(); } shadowsocks = "shadowsocks" equals address - (password/method/obfs_ssr/obfs_ss/obfs_host/obfs_uri/ssr_protocol/ssr_protocol_param/tls_fingerprint/tls_verification/udp_relay/udp_over_tcp/fast_open/tag/others)* { + (password/method/obfs_ssr/obfs_ss/obfs_host/obfs_uri/ssr_protocol/ssr_protocol_param/tls_fingerprint/tls_verification/udp_relay/udp_over_tcp/fast_open/tag/server_check_url/others)* { if (proxy.protocol) { proxy.type = "ssr"; // handle ssr obfs @@ -78,7 +78,7 @@ shadowsocks = "shadowsocks" equals address } vmess = "vmess" equals address - (uuid/method/over_tls/tls_host/tls_fingerprint/tls_verification/tag/obfs/obfs_host/obfs_uri/udp_relay/udp_over_tcp/fast_open/aead/others)* { + (uuid/method/over_tls/tls_host/tls_fingerprint/tls_verification/tag/obfs/obfs_host/obfs_uri/udp_relay/udp_over_tcp/fast_open/aead/server_check_url/others)* { proxy.type = "vmess"; proxy.cipher = proxy.cipher || "none"; if (proxy.aead) { @@ -90,12 +90,12 @@ vmess = "vmess" equals address } http = "http" equals address - (username/password/over_tls/tls_host/tls_fingerprint/tls_verification/tag/fast_open/udp_relay/udp_over_tcp/others)*{ + (username/password/over_tls/tls_host/tls_fingerprint/tls_verification/tag/fast_open/udp_relay/udp_over_tcp/server_check_url/others)*{ proxy.type = "http"; } socks5 = "socks5" equals address - (username/password/password/over_tls/tls_host/tls_fingerprint/tls_verification/tag/fast_open/udp_relay/udp_over_tcp/others)* { + (username/password/password/over_tls/tls_host/tls_fingerprint/tls_verification/tag/fast_open/udp_relay/udp_over_tcp/server_check_url/others)* { proxy.type = "socks5"; } @@ -164,6 +164,8 @@ obfs_uri = comma "obfs-uri" equals uri:uri { obfs.path = uri; } ssr_protocol = comma "ssr-protocol" equals protocol:("origin"/"auth_sha1_v4"/"auth_aes128_md5"/"auth_aes128_sha1"/"auth_chain_a"/"auth_chain_b") { proxy.protocol = protocol; return protocol; } ssr_protocol_param = comma "ssr-protocol-param" equals param:$[^=,]+ { proxy["protocol-param"] = param; } +server_check_url = comma "server_check_url" equals param:$[^=,]+ { proxy["test-url"] = param; } + uri = $[^,]+ tag = comma "tag" equals tag:[^=,]+ { proxy.name = tag.join(""); } diff --git a/backend/src/core/proxy-utils/producers/qx.js b/backend/src/core/proxy-utils/producers/qx.js index b646d28..a00d984 100644 --- a/backend/src/core/proxy-utils/producers/qx.js +++ b/backend/src/core/proxy-utils/producers/qx.js @@ -83,6 +83,12 @@ function shadowsocks(proxy) { // udp appendIfPresent(`,udp-relay=${proxy.udp}`, 'udp'); + // server_check_url + result.appendIfPresent( + `,server_check_url=${proxy['test-url']}`, + 'test-url', + ); + // tag append(`,tag=${proxy.name}`); @@ -115,6 +121,12 @@ function shadowsocksr(proxy) { // udp appendIfPresent(`,udp-relay=${proxy.udp}`, 'udp'); + // server_check_url + result.appendIfPresent( + `,server_check_url=${proxy['test-url']}`, + 'test-url', + ); + // tag append(`,tag=${proxy.name}`); @@ -173,6 +185,12 @@ function trojan(proxy) { // udp appendIfPresent(`,udp-relay=${proxy.udp}`, 'udp'); + // server_check_url + result.appendIfPresent( + `,server_check_url=${proxy['test-url']}`, + 'test-url', + ); + // tag append(`,tag=${proxy.name}`); @@ -257,6 +275,12 @@ function vmess(proxy) { // udp appendIfPresent(`,udp-relay=${proxy.udp}`, 'udp'); + // server_check_url + result.appendIfPresent( + `,server_check_url=${proxy['test-url']}`, + 'test-url', + ); + // tag append(`,tag=${proxy.name}`); @@ -299,6 +323,12 @@ function http(proxy) { // udp appendIfPresent(`,udp-relay=${proxy.udp}`, 'udp'); + // server_check_url + result.appendIfPresent( + `,server_check_url=${proxy['test-url']}`, + 'test-url', + ); + // tag append(`,tag=${proxy.name}`); @@ -341,6 +371,12 @@ function socks5(proxy) { // udp appendIfPresent(`,udp-relay=${proxy.udp}`, 'udp'); + // server_check_url + result.appendIfPresent( + `,server_check_url=${proxy['test-url']}`, + 'test-url', + ); + // tag append(`,tag=${proxy.name}`); diff --git a/backend/src/core/proxy-utils/producers/stash.js b/backend/src/core/proxy-utils/producers/stash.js index ae22770..36803cf 100644 --- a/backend/src/core/proxy-utils/producers/stash.js +++ b/backend/src/core/proxy-utils/producers/stash.js @@ -185,6 +185,12 @@ export default function Stash_Producer() { proxy.fingerprint = proxy['tls-fingerprint']; } delete proxy['tls-fingerprint']; + + if (proxy['test-url']) { + proxy['benchmark-url'] = proxy['test-url']; + delete proxy['test-url']; + } + delete proxy.subName; delete proxy.collectionName; if (