From 58695e0f5529208c96e00b0338421b2c86f17348 Mon Sep 17 00:00:00 2001 From: dev0 Date: Thu, 7 Sep 2023 23:09:46 +1000 Subject: [PATCH] conn tracker wip --- .cargo/config | 1 + Cargo.Bazel.lock | 57 +- Cargo.lock | 437 ++- clash/tests/data/config/proxies.yaml | 3031 +++++++++++++++++ clash/tests/data/config/rules.yaml | 13 +- clash_lib/Cargo.toml | 9 +- clash_lib/src/app/api/handlers/provider.rs | 2 +- .../src/app/{ => dispatcher}/dispatcher.rs | 2 +- clash_lib/src/app/dispatcher/mod.rs | 6 + .../src/app/dispatcher/statitics_manager.rs | 146 + clash_lib/src/app/dispatcher/tracked_conn.rs | 107 + clash_lib/src/app/dispatcher/tracker.rs | 0 clash_lib/src/app/mod.rs | 2 - clash_lib/src/app/outbound/manager.rs | 12 +- .../src/app/proxy_manager/healthcheck.rs | 6 +- clash_lib/src/app/proxy_manager/mod.rs | 25 +- .../providers/proxy_set_provider.rs | 6 +- clash_lib/src/lib.rs | 12 +- clash_lib/src/proxy/fallback/mod.rs | 8 +- clash_lib/src/proxy/urltest/mod.rs | 8 +- clash_lib/src/proxy/utils/socket_helpers.rs | 45 + clash_lib/src/session.rs | 6 +- 22 files changed, 3858 insertions(+), 83 deletions(-) create mode 100644 clash/tests/data/config/proxies.yaml rename clash_lib/src/app/{ => dispatcher}/dispatcher.rs (99%) create mode 100644 clash_lib/src/app/dispatcher/mod.rs create mode 100644 clash_lib/src/app/dispatcher/statitics_manager.rs create mode 100644 clash_lib/src/app/dispatcher/tracked_conn.rs create mode 100644 clash_lib/src/app/dispatcher/tracker.rs diff --git a/.cargo/config b/.cargo/config index 05d3b376..243c527a 100644 --- a/.cargo/config +++ b/.cargo/config @@ -1,5 +1,6 @@ [build] target-dir = "target" +rustflags = ["--cfg", "tokio_unstable"] [env] BORING_BSSL_SOURCE_PATH = { value = "./deps/boringssl/src", relative = true} \ No newline at end of file diff --git a/Cargo.Bazel.lock b/Cargo.Bazel.lock index 32f27361..f68b9c11 100644 --- a/Cargo.Bazel.lock +++ b/Cargo.Bazel.lock @@ -1,5 +1,5 @@ { - "checksum": "768ad301a2943def9ac3944c23c1d3600965319cde69050c1901a9273298005d", + "checksum": "17e17bfb7bf5ea2717ccb6c562de6bf702f44b7ab3e5587737bbea7e547b5ba1", "crates": { "addr2line 0.20.0": { "name": "addr2line", @@ -17200,9 +17200,12 @@ "name": "trust-dns-client", "version": "0.23.0", "repository": { - "Http": { - "url": "https://crates.io/api/v1/crates/trust-dns-client/0.23.0/download", - "sha256": "8e1bcca49cb7115ce70857db94ebff3f2903b50e3e5c20b1def5cf9b1273455f" + "Git": { + "remote": "https://github.com/Watfaq/trust-dns.git", + "commitish": { + "Rev": "ca798f2" + }, + "strip_prefix": "crates/client" } }, "targets": [ @@ -17498,9 +17501,12 @@ "name": "trust-dns-proto", "version": "0.23.0", "repository": { - "Http": { - "url": "https://crates.io/api/v1/crates/trust-dns-proto/0.23.0/download", - "sha256": "0dc775440033cb114085f6f2437682b194fa7546466024b1037e82a48a052a69" + "Git": { + "remote": "https://github.com/Watfaq/trust-dns.git", + "commitish": { + "Rev": "ca798f2" + }, + "strip_prefix": "crates/proto" } }, "targets": [ @@ -17539,9 +17545,7 @@ "text-parsing", "tokio", "tokio-runtime", - "tokio-rustls", - "webpki", - "webpki-roots" + "tokio-rustls" ], "selects": {} }, @@ -17607,10 +17611,6 @@ "id": "rustls-pemfile 1.0.3", "target": "rustls_pemfile" }, - { - "id": "rustls-webpki 0.101.4", - "target": "webpki" - }, { "id": "serde 1.0.185", "target": "serde" @@ -17642,10 +17642,6 @@ { "id": "url 2.4.0", "target": "url" - }, - { - "id": "webpki-roots 0.25.2", - "target": "webpki_roots" } ], "selects": {} @@ -17769,9 +17765,12 @@ "name": "trust-dns-resolver", "version": "0.23.0", "repository": { - "Http": { - "url": "https://crates.io/api/v1/crates/trust-dns-resolver/0.23.0/download", - "sha256": "2dff7aed33ef3e8bf2c9966fccdfed93f93d46f432282ea875cd66faabc6ef2f" + "Git": { + "remote": "https://github.com/Watfaq/trust-dns.git", + "commitish": { + "Rev": "ca798f2" + }, + "strip_prefix": "crates/resolver" } }, "targets": [ @@ -17807,8 +17806,7 @@ "system-config", "tokio", "tokio-runtime", - "tokio-rustls", - "webpki-roots" + "tokio-rustls" ], "selects": {} }, @@ -17873,10 +17871,6 @@ { "id": "trust-dns-proto 0.23.0", "target": "trust_dns_proto" - }, - { - "id": "webpki-roots 0.25.2", - "target": "webpki_roots" } ], "selects": { @@ -17897,9 +17891,12 @@ "name": "trust-dns-server", "version": "0.23.0", "repository": { - "Http": { - "url": "https://crates.io/api/v1/crates/trust-dns-server/0.23.0/download", - "sha256": "0f2863cefc06d1d5605ea937bfd8939e23687bb44dd5d136217ad9378582f9cc" + "Git": { + "remote": "https://github.com/Watfaq/trust-dns.git", + "commitish": { + "Rev": "ca798f2" + }, + "strip_prefix": "crates/server" } }, "targets": [ diff --git a/Cargo.lock b/Cargo.lock index 894922e9..f66ae6b5 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -127,6 +127,12 @@ dependencies = [ "libc", ] +[[package]] +name = "anes" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b46cbb362ab8752921c97e041f5e366ee6297bd428a31275b9fcf1e380f7299" + [[package]] name = "ansi_term" version = "0.12.1" @@ -519,6 +525,12 @@ version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "89b2fd2a0dcf38d7971e2194b6b6eebab45ae01067456a7fd93d5547a61b70be" +[[package]] +name = "cast" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5" + [[package]] name = "cc" version = "1.0.79" @@ -605,6 +617,33 @@ dependencies = [ "winapi", ] +[[package]] +name = "ciborium" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "effd91f6c78e5a4ace8a5d3c0b6bfaec9e2baaef55f3efc00e45fb2e477ee926" +dependencies = [ + "ciborium-io", + "ciborium-ll", + "serde", +] + +[[package]] +name = "ciborium-io" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdf919175532b369853f5d5e20b26b43112613fd6fe7aee757e35f7a44642656" + +[[package]] +name = "ciborium-ll" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "defaa24ecc093c77630e6c15e17c51f5e187bf35ee514f4e2d67baaa96dae22b" +dependencies = [ + "ciborium-io", + "half", +] + [[package]] name = "cipher" version = "0.3.0" @@ -646,11 +685,23 @@ dependencies = [ "atty", "bitflags 1.3.2", "strsim 0.8.0", - "textwrap", + "textwrap 0.11.0", "unicode-width", "vec_map", ] +[[package]] +name = "clap" +version = "3.2.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ea181bf566f71cb9a5d17a59e1871af638180a18fb0035c92ae62b705207123" +dependencies = [ + "bitflags 1.3.2", + "clap_lex 0.2.4", + "indexmap 1.9.3", + "textwrap 0.16.0", +] + [[package]] name = "clap" version = "4.3.19" @@ -670,7 +721,7 @@ checksum = "01c6a3f08f1fe5662a35cfe393aec09c4df95f60ee93b7556505260f75eee9e1" dependencies = [ "anstream", "anstyle", - "clap_lex", + "clap_lex 0.5.0", "strsim 0.10.0", ] @@ -686,6 +737,15 @@ dependencies = [ "syn 2.0.28", ] +[[package]] +name = "clap_lex" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2850f2f5a82cbf437dd5af4d49848fbdfc27c157c3d010345776f952765261c5" +dependencies = [ + "os_str_bytes", +] + [[package]] name = "clap_lex" version = "0.5.0" @@ -725,7 +785,9 @@ dependencies = [ "bytes", "chacha20poly1305 0.10.1", "chrono", + "console-subscriber", "crc32fast", + "criterion", "ctor", "dhcproto", "erased-serde", @@ -772,6 +834,7 @@ dependencies = [ "tower-http", "tracing", "tracing-subscriber", + "tracing-timing", "trust-dns-client", "trust-dns-proto 0.23.0", "trust-dns-resolver 0.23.0", @@ -797,6 +860,42 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7" +[[package]] +name = "console-api" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2895653b4d9f1538a83970077cb01dfc77a4810524e51a110944688e916b18e" +dependencies = [ + "prost", + "prost-types", + "tonic", + "tracing-core", +] + +[[package]] +name = "console-subscriber" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4cf42660ac07fcebed809cfe561dd8730bcd35b075215e6479c516bcd0d11cb" +dependencies = [ + "console-api", + "crossbeam-channel", + "crossbeam-utils", + "futures", + "hdrhistogram", + "humantime", + "prost-types", + "serde", + "serde_json", + "thread_local", + "tokio", + "tokio-stream", + "tonic", + "tracing", + "tracing-core", + "tracing-subscriber", +] + [[package]] name = "const-oid" version = "0.7.1" @@ -843,6 +942,58 @@ dependencies = [ "cfg-if", ] +[[package]] +name = "criterion" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7c76e09c1aae2bc52b3d2f29e13c6572553b30c4aa1b8a49fd70de6412654cb" +dependencies = [ + "anes", + "atty", + "cast", + "ciborium", + "clap 3.2.25", + "criterion-plot", + "futures", + "itertools", + "lazy_static", + "num-traits", + "oorandom", + "plotters", + "rayon", + "regex", + "serde", + "serde_derive", + "serde_json", + "tinytemplate", + "tokio", + "walkdir", +] + +[[package]] +name = "criterion-plot" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b50826342786a51a89e2da3a28f1c32b06e387201bc2d19791f622c673706b1" +dependencies = [ + "cast", + "itertools", +] + +[[package]] +name = "crossbeam" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2801af0d36612ae591caa9568261fddce32ce6e08a7275ea334a06a4ad021a2c" +dependencies = [ + "cfg-if", + "crossbeam-channel", + "crossbeam-deque", + "crossbeam-epoch", + "crossbeam-queue", + "crossbeam-utils", +] + [[package]] name = "crossbeam-channel" version = "0.5.8" @@ -853,6 +1004,40 @@ dependencies = [ "crossbeam-utils", ] +[[package]] +name = "crossbeam-deque" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce6fd6f855243022dcecf8702fef0c297d4338e226845fe067f6341ad9fa0cef" +dependencies = [ + "cfg-if", + "crossbeam-epoch", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-epoch" +version = "0.9.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae211234986c545741a7dc064309f67ee1e5ad243d0e48335adc0484d960bcc7" +dependencies = [ + "autocfg", + "cfg-if", + "crossbeam-utils", + "memoffset", + "scopeguard", +] + +[[package]] +name = "crossbeam-queue" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d1cfb3ea8a53f37c40dea2c7bedcbd88bdfae54f5e2175d6ecaff1c988353add" +dependencies = [ + "cfg-if", + "crossbeam-utils", +] + [[package]] name = "crossbeam-utils" version = "0.8.16" @@ -982,6 +1167,12 @@ dependencies = [ "subtle", ] +[[package]] +name = "doc-comment" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fea41bba32d969b513997752735605054bc0dfa92b4c56bf1189f2e174be7a10" + [[package]] name = "downcast" version = "0.11.0" @@ -1148,6 +1339,16 @@ dependencies = [ "windows-sys 0.48.0", ] +[[package]] +name = "flate2" +version = "1.0.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6c98ee8095e9d1dcbf2fcc6d95acccb90d1c81db1e44725c6a984b1dbdfb010" +dependencies = [ + "crc32fast", + "miniz_oxide", +] + [[package]] name = "float-cmp" version = "0.9.0" @@ -1319,6 +1520,15 @@ dependencies = [ "slab", ] +[[package]] +name = "fxhash" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c" +dependencies = [ + "byteorder", +] + [[package]] name = "generator" version = "0.7.5" @@ -1404,6 +1614,12 @@ dependencies = [ "tracing", ] +[[package]] +name = "half" +version = "1.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eabb4a44450da02c90444cf74558da904edde8fb4e9035a9a6a4e15445af0bd7" + [[package]] name = "hashbrown" version = "0.12.3" @@ -1416,6 +1632,20 @@ version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2c6201b9ff9fd90a5a3bac2e56a830d0caa509576f0e503818ee82c181b3437a" +[[package]] +name = "hdrhistogram" +version = "7.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f19b9f54f7c7f55e31401bb647626ce0cf0f67b0004982ce815b3ee72a02aa8" +dependencies = [ + "base64 0.13.1", + "byteorder", + "crossbeam-channel", + "flate2", + "nom", + "num-traits", +] + [[package]] name = "heck" version = "0.4.1" @@ -1558,6 +1788,18 @@ dependencies = [ "tower-layer", ] +[[package]] +name = "hyper-timeout" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbb958482e8c7be4bc3cf272a766a2b0bf1a6755e7a6ae777f017a31d11b13b1" +dependencies = [ + "hyper", + "pin-project-lite", + "tokio", + "tokio-io-timeout", +] + [[package]] name = "iana-time-zone" version = "0.1.57" @@ -1834,6 +2076,15 @@ version = "0.11.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9106e1d747ffd48e6be5bb2d97fa706ed25b144fbee4d5c02eae110cd8d6badd" +[[package]] +name = "mach" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b823e83b2affd8f40a9ee8c29dbc56404c1e34cd2710921f2801e2cf29527afa" +dependencies = [ + "libc", +] + [[package]] name = "match_cfg" version = "0.1.0" @@ -1888,6 +2139,15 @@ version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" +[[package]] +name = "memoffset" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a634b1c61a95585bd15607c6ab0c4e5b226e695ff2800ba0cdccddf208c406c" +dependencies = [ + "autocfg", +] + [[package]] name = "mime" version = "0.3.17" @@ -2078,12 +2338,24 @@ version = "1.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d" +[[package]] +name = "oorandom" +version = "11.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ab1bc2a289d34bd04a330323ac98a1b4bc82c9d9fcb1e66b63caa84da26b575" + [[package]] name = "opaque-debug" version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" +[[package]] +name = "os_str_bytes" +version = "6.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d5d9eb14b174ee9aa2ef96dc2b94637a2d4b6e7cb873c7e171f0c20c6cf3eac" + [[package]] name = "overload" version = "0.1.1" @@ -2179,6 +2451,34 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" +[[package]] +name = "plotters" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2c224ba00d7cadd4d5c660deaf2098e5e80e07846537c51f9cfa4be50c1fd45" +dependencies = [ + "num-traits", + "plotters-backend", + "plotters-svg", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "plotters-backend" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e76628b4d3a7581389a35d5b6e2139607ad7c75b17aed325f210aa91f4a9609" + +[[package]] +name = "plotters-svg" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38f6d39893cca0701371e3c27294f09797214b86f1fb951b89ade8ec04e2abab" +dependencies = [ + "plotters-backend", +] + [[package]] name = "poly1305" version = "0.7.2" @@ -2293,12 +2593,37 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "prost-types" +version = "0.11.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "213622a1460818959ac1181aaeb2dc9c7f63df720db7d788b3e24eacd1983e13" +dependencies = [ + "prost", +] + [[package]] name = "public-suffix" version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "78d9b181eb5a605445d04200022ead096987ea51978485b7280b79c6a3945343" +[[package]] +name = "quanta" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20afe714292d5e879d8b12740aa223c6a88f118af41870e8b6196e39a02238a8" +dependencies = [ + "crossbeam-utils", + "libc", + "mach", + "once_cell", + "raw-cpuid", + "wasi 0.10.0+wasi-snapshot-preview1", + "web-sys", + "winapi", +] + [[package]] name = "quick-error" version = "1.2.3" @@ -2354,6 +2679,37 @@ dependencies = [ "getrandom", ] +[[package]] +name = "raw-cpuid" +version = "10.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c297679cb867470fa8c9f67dbba74a78d78e3e98d7cf2b08d6d71540f797332" +dependencies = [ + "bitflags 1.3.2", +] + +[[package]] +name = "rayon" +version = "1.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d2df5196e37bcc87abebc0053e20787d73847bb33134a69841207dd0a47f03b" +dependencies = [ + "either", + "rayon-core", +] + +[[package]] +name = "rayon-core" +version = "1.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b8f95bd6966f5c87776639160a66bd8ab9895d9d4ab01ddba9fc60661aebe8d" +dependencies = [ + "crossbeam-channel", + "crossbeam-deque", + "crossbeam-utils", + "num_cpus", +] + [[package]] name = "redox_syscall" version = "0.2.16" @@ -2930,6 +3286,12 @@ dependencies = [ "unicode-width", ] +[[package]] +name = "textwrap" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "222a222a5bfe1bba4a77b45ec488a741b3cb8872e5e499451fd7d0129c9c7c3d" + [[package]] name = "thiserror" version = "1.0.44" @@ -2988,6 +3350,16 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7300fbefb4dadc1af235a9cef3737cea692a9d97e1b9cbcd4ebdae6f8868e6fb" +[[package]] +name = "tinytemplate" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be4d6b5f19ff7664e8c98d03e2139cb510db9b0a60b55f8e8709b689d939b6bc" +dependencies = [ + "serde", + "serde_json", +] + [[package]] name = "tinyvec" version = "1.6.0" @@ -3020,6 +3392,7 @@ dependencies = [ "signal-hook-registry", "socket2 0.4.9", "tokio-macros", + "tracing", "windows-sys 0.48.0", ] @@ -3033,6 +3406,16 @@ dependencies = [ "tokio", ] +[[package]] +name = "tokio-io-timeout" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30b74022ada614a1b4834de765f9bb43877f910cc8ce4be40e89042c9223a8bf" +dependencies = [ + "pin-project-lite", + "tokio", +] + [[package]] name = "tokio-macros" version = "2.1.0" @@ -3169,6 +3552,34 @@ dependencies = [ "winnow", ] +[[package]] +name = "tonic" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3082666a3a6433f7f511c7192923fa1fe07c69332d3c6a2e6bb040b569199d5a" +dependencies = [ + "async-trait", + "axum", + "base64 0.21.2", + "bytes", + "futures-core", + "futures-util", + "h2", + "http", + "http-body", + "hyper", + "hyper-timeout", + "percent-encoding", + "pin-project", + "prost", + "tokio", + "tokio-stream", + "tower", + "tower-layer", + "tower-service", + "tracing", +] + [[package]] name = "tower" version = "0.4.13" @@ -3177,9 +3588,13 @@ checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c" dependencies = [ "futures-core", "futures-util", + "indexmap 1.9.3", "pin-project", "pin-project-lite", + "rand", + "slab", "tokio", + "tokio-util 0.7.8", "tower-layer", "tower-service", "tracing", @@ -3285,6 +3700,23 @@ dependencies = [ "tracing-log", ] +[[package]] +name = "tracing-timing" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fbe4966d7b6ae25201de6ff9fa822afb0c9e933809187d5b82ad846ec108771b" +dependencies = [ + "crossbeam", + "doc-comment", + "fxhash", + "hdrhistogram", + "indexmap 1.9.3", + "quanta", + "slab", + "tracing-core", + "tracing-subscriber", +] + [[package]] name = "trust-dns-client" version = "0.23.0" @@ -3600,6 +4032,7 @@ checksum = "79daa5ed5740825c40b389c5e50312b9c86df53fccd33f281df655642b43869d" dependencies = [ "getrandom", "rand", + "serde", "uuid-macro-internal", ] diff --git a/clash/tests/data/config/proxies.yaml b/clash/tests/data/config/proxies.yaml new file mode 100644 index 00000000..d4f7c87a --- /dev/null +++ b/clash/tests/data/config/proxies.yaml @@ -0,0 +1,3031 @@ +--- +port: 8888 +socks-port: 8889 +mixed-port: 8899 +allow-lan: true +mode: Rule +log-level: info +external-controller: 127.0.0.1:6170 +secret: dler +experimental: + ignore-resolve-fail: true +cfw-latency-url: http://cp.cloudflare.com/generate_204 +cfw-latency-timeout: 3000 +cfw-latency-type: 1 +cfw-conn-break-strategy: true +clash-for-android: + ui-subtitle-pattern: '[一-龥]{2,4}' +url-rewrite: +- ^https?:\/\/(www.)?(g|google)\.cn https://www.google.com 302 +- ^https?:\/\/(ditu|maps).google\.cn https://maps.google.com 302 +proxies: +- name: "\U0001F1F7\U0001F1FA 俄罗斯 Edge" + type: vmess + server: ru1.qiangdong.xyz + port: 153 + uuid: 209bec05-a6bf-37e0-a6a9-9c3ab5c22134 + alterId: 64 + cipher: auto + udp: true + network: ws + ws-opts: + path: /api/v3/download.getFile + headers: + Host: 5607b9d187e655736f563fee87d7283994721.laowanxiang.com +- name: "\U0001F1E8\U0001F1E6 加拿大 Edge" + type: vmess + server: ca1.qiangdong.xyz + port: 153 + uuid: 65ec19f1-285c-37e8-8b9e-e93089a47403 + alterId: 64 + cipher: auto + udp: true + network: ws + ws-opts: + path: /api/v3/download.getFile + headers: + Host: 5607b9d187e655736f563fee87d7283994721.laowanxiang.com +- name: "\U0001F1EE\U0001F1F3 印度 Edge" + type: vmess + server: in1.qiangdong.xyz + port: 153 + uuid: 200fe564-ba41-3c4c-a4ce-e94c08e9b225 + alterId: 64 + cipher: auto + udp: true + network: ws + ws-opts: + path: /api/v3/download.getFile + headers: + Host: 5607b9d187e655736f563fee87d7283994721.laowanxiang.com +- name: "\U0001F1E8\U0001F1F3 台湾 AC" + type: vmess + server: tw-1.ac.laowanxiang.com + port: 153 + uuid: 46dd0dd3-2cc0-3f55-907c-d94e54877687 + alterId: 64 + cipher: auto + udp: true + network: ws + ws-opts: + path: /api/v3/download.getFile + headers: + Host: 5607b9d187e655736f563fee87d7283994721.laowanxiang.com +- name: "\U0001F1E8\U0001F1F3 台湾 CHT [01]" + type: vmess + server: cht1.qiangdong.xyz + port: 153 + uuid: 09e2b227-e05c-3bc9-9ad6-89f17405ad57 + alterId: 64 + cipher: auto + udp: true + network: ws + ws-opts: + path: /api/v3/download.getFile + headers: + Host: 5607b9d187e655736f563fee87d7283994721.laowanxiang.com +- name: "\U0001F1E8\U0001F1F3 台湾 CHT [02]" + type: vmess + server: cht2.qiangdong.xyz + port: 153 + uuid: 2c84d7bc-a1fc-37dd-b9db-fcd0b4709dc8 + alterId: 64 + cipher: auto + udp: true + network: ws + ws-opts: + path: /api/v3/download.getFile + headers: + Host: 5607b9d187e655736f563fee87d7283994721.laowanxiang.com +- name: "\U0001F1E8\U0001F1F3 台湾 CHT [03]" + type: vmess + server: cht3.qiangdong.xyz + port: 153 + uuid: 80ef6c0f-fa4c-3618-b23a-e45775bfbde8 + alterId: 64 + cipher: auto + udp: true + network: ws + ws-opts: + path: /api/v3/download.getFile + headers: + Host: 5607b9d187e655736f563fee87d7283994721.laowanxiang.com +- name: "\U0001F1E8\U0001F1F3 台湾 Edge" + type: vmess + server: tw1.qiangdong.xyz + port: 153 + uuid: 48d30600-fb6d-3c1b-b8e5-9b780bd9b71f + alterId: 64 + cipher: auto + udp: true + network: ws + ws-opts: + path: /api/v3/download.getFile + headers: + Host: 5607b9d187e655736f563fee87d7283994721.laowanxiang.com +- name: "\U0001F1E8\U0001F1F3 台湾 IEPL [05] [Std]" + type: vmess + server: 183.240.221.206 + port: 153 + uuid: 7281fdb8-ff4a-3fab-8186-16f628574b8a + alterId: 64 + cipher: auto + udp: true + network: ws + ws-opts: + path: /api/v3/download.getFile + headers: + Host: 5607b9d187e655736f563fee87d7283994721.laowanxiang.com +- name: "\U0001F1E8\U0001F1F3 台湾 IEPL [06] [Premium]" + type: vmess + server: 183.240.221.207 + port: 153 + uuid: 32822ce3-901b-3eba-9a29-2e7e9cacbbb1 + alterId: 64 + cipher: auto + udp: true + network: ws + ws-opts: + path: /api/v3/download.getFile + headers: + Host: 5607b9d187e655736f563fee87d7283994721.laowanxiang.com +- name: "\U0001F1F9\U0001F1F7 土耳其 Edge" + type: vmess + server: tr1.qiangdong.xyz + port: 153 + uuid: 2271cd99-d330-3d25-a4db-2c5b716ea9e3 + alterId: 64 + cipher: auto + udp: true + network: ws + ws-opts: + path: /api/v3/download.getFile + headers: + Host: 5607b9d187e655736f563fee87d7283994721.laowanxiang.com +- name: "\U0001F1E7\U0001F1F7 巴西 Edge" + type: vmess + server: br1.qiangdong.xyz + port: 153 + uuid: f24e5e4b-957e-37e1-bc19-51c42d74eac8 + alterId: 64 + cipher: auto + udp: true + network: ws + ws-opts: + path: /api/v3/download.getFile + headers: + Host: 5607b9d187e655736f563fee87d7283994721.laowanxiang.com +- name: "\U0001F1E9\U0001F1EA 德国 Edge" + type: vmess + server: de1.qiangdong.xyz + port: 153 + uuid: 52c223dd-c6cc-3a0c-b865-9e5e0ddfe10a + alterId: 64 + cipher: auto + udp: true + network: ws + ws-opts: + path: /api/v3/download.getFile + headers: + Host: 5607b9d187e655736f563fee87d7283994721.laowanxiang.com +- name: "\U0001F1F8\U0001F1EC 新加坡 AC" + type: vmess + server: sg-1.ac.laowanxiang.com + port: 153 + uuid: 12e4c99e-9f62-3a0c-8e40-297d681d7592 + alterId: 64 + cipher: auto + udp: true + network: ws + ws-opts: + path: /api/v3/download.getFile + headers: + Host: 5607b9d187e655736f563fee87d7283994721.laowanxiang.com +- name: "\U0001F1F8\U0001F1EC 新加坡 Azure" + type: vmess + server: azure_sg1.qiangdong.xyz + port: 153 + uuid: e2fc1db6-96af-330f-8ad6-10c21ea5243c + alterId: 64 + cipher: auto + udp: true + network: ws + ws-opts: + path: /api/v3/download.getFile + headers: + Host: 5607b9d187e655736f563fee87d7283994721.laowanxiang.com +- name: "\U0001F1F8\U0001F1EC 新加坡 Edge [01]" + type: vmess + server: sg1.qiangdong.xyz + port: 153 + uuid: bdf5e7db-8132-3c4f-8098-de4e88e889de + alterId: 64 + cipher: auto + udp: true + network: ws + ws-opts: + path: /api/v3/download.getFile + headers: + Host: 5607b9d187e655736f563fee87d7283994721.laowanxiang.com +- name: "\U0001F1F8\U0001F1EC 新加坡 Edge [02]" + type: vmess + server: sg2.qiangdong.xyz + port: 153 + uuid: f7280e4c-015d-348b-89b4-56fef3050bb5 + alterId: 64 + cipher: auto + udp: true + network: ws + ws-opts: + path: /api/v3/download.getFile + headers: + Host: 5607b9d187e655736f563fee87d7283994721.laowanxiang.com +- name: "\U0001F1F8\U0001F1EC 新加坡 IEPL [05] [Std]" + type: vmess + server: 183.240.221.204 + port: 153 + uuid: 5b5653f1-16df-3cd7-b7cf-f203a7c13529 + alterId: 64 + cipher: auto + udp: true + network: ws + ws-opts: + path: /api/v3/download.getFile + headers: + Host: 5607b9d187e655736f563fee87d7283994721.laowanxiang.com +- name: "\U0001F1F8\U0001F1EC 新加坡 IEPL [06] [Premium]" + type: vmess + server: 183.240.221.205 + port: 153 + uuid: 0de567a1-056a-3557-b82e-183bb8becf6e + alterId: 64 + cipher: auto + udp: true + network: ws + ws-opts: + path: /api/v3/download.getFile + headers: + Host: 5607b9d187e655736f563fee87d7283994721.laowanxiang.com +- name: "\U0001F1EF\U0001F1F5 日本 BBTEC [01]" + type: vmess + server: 37.128.246.33 + port: 153 + uuid: b2093298-fd17-350e-ad6c-12fa0205a133 + alterId: 64 + cipher: auto + udp: true + network: ws + ws-opts: + path: /api/v3/download.getFile + headers: + Host: 5607b9d187e655736f563fee87d7283994721.laowanxiang.com +- name: "\U0001F1EF\U0001F1F5 日本 BBTEC [02]" + type: vmess + server: 37.128.246.34 + port: 153 + uuid: 2d0e8ba4-5ec0-3b91-a2c3-d3c1aa936c54 + alterId: 64 + cipher: auto + udp: true + network: ws + ws-opts: + path: /api/v3/download.getFile + headers: + Host: 5607b9d187e655736f563fee87d7283994721.laowanxiang.com +- name: "\U0001F1EF\U0001F1F5 日本 Edge [01]" + type: vmess + server: jp1.qiangdong.xyz + port: 153 + uuid: 7c407771-1fc0-3808-9232-4173aae527f2 + alterId: 64 + cipher: auto + udp: true + network: ws + ws-opts: + path: /api/v3/download.getFile + headers: + Host: 5607b9d187e655736f563fee87d7283994721.laowanxiang.com +- name: "\U0001F1EF\U0001F1F5 日本 Edge [02]" + type: vmess + server: jp2.qiangdong.xyz + port: 153 + uuid: 4fa70066-6acc-37b6-9dff-384be2cf6994 + alterId: 64 + cipher: auto + udp: true + network: ws + ws-opts: + path: /api/v3/download.getFile + headers: + Host: 5607b9d187e655736f563fee87d7283994721.laowanxiang.com +- name: "\U0001F1EF\U0001F1F5 日本 Edge [03]" + type: vmess + server: jp3.qiangdong.xyz + port: 153 + uuid: 7d55546b-dad7-37a8-bd44-9ce27d25ea2a + alterId: 64 + cipher: auto + udp: true + network: ws + ws-opts: + path: /api/v3/download.getFile + headers: + Host: 5607b9d187e655736f563fee87d7283994721.laowanxiang.com +- name: "\U0001F1EB\U0001F1F7 法国 Edge" + type: vmess + server: fr1.qiangdong.xyz + port: 153 + uuid: f6540c53-ef64-3e5b-b00f-d95e1248478d + alterId: 64 + cipher: auto + udp: true + network: ws + ws-opts: + path: /api/v3/download.getFile + headers: + Host: 5607b9d187e655736f563fee87d7283994721.laowanxiang.com +- name: "\U0001F1F9\U0001F1ED 泰国 Edge" + type: vmess + server: th1.qiangdong.xyz + port: 153 + uuid: bd8baa03-2fc7-3d89-97e6-850b75ea13d9 + alterId: 64 + cipher: auto + udp: true + network: ws + ws-opts: + path: /api/v3/download.getFile + headers: + Host: 5607b9d187e655736f563fee87d7283994721.laowanxiang.com +- name: "\U0001F1E6\U0001F1FA 澳大利亚 Edge" + type: vmess + server: au1.qiangdong.xyz + port: 153 + uuid: 81ebe818-5eb2-3f4a-aece-425f7db5e6bc + alterId: 64 + cipher: auto + udp: true + network: ws + ws-opts: + path: /api/v3/download.getFile + headers: + Host: 5607b9d187e655736f563fee87d7283994721.laowanxiang.com +- name: "\U0001F1FA\U0001F1F8 美国 Azure" + type: vmess + server: azure_us1.qiangdong.xyz + port: 153 + uuid: 4267dbed-7c03-392c-8f05-ca885ad89af0 + alterId: 64 + cipher: auto + udp: true + network: ws + ws-opts: + path: /api/v3/download.getFile + headers: + Host: 5607b9d187e655736f563fee87d7283994721.laowanxiang.com +- name: "\U0001F1FA\U0001F1F8 美国 DMIT [01]" + type: vmess + server: dmit_us1.qiangdong.xyz + port: 153 + uuid: 5f2aca80-79a6-3e5b-805e-4e3ff80fc2f9 + alterId: 64 + cipher: auto + udp: true + network: ws + ws-opts: + path: /api/v3/download.getFile + headers: + Host: 5607b9d187e655736f563fee87d7283994721.laowanxiang.com +- name: "\U0001F1FA\U0001F1F8 美国 DMIT [02]" + type: vmess + server: dmit_us2.qiangdong.xyz + port: 153 + uuid: 1f95a5da-e3b8-38f1-970f-099a847c488f + alterId: 64 + cipher: auto + udp: true + network: ws + ws-opts: + path: /api/v3/download.getFile + headers: + Host: 5607b9d187e655736f563fee87d7283994721.laowanxiang.com +- name: "\U0001F1FA\U0001F1F8 美国 Edge" + type: vmess + server: us1.qiangdong.xyz + port: 153 + uuid: ac5ac51c-5c46-39f5-8155-703cf5646635 + alterId: 64 + cipher: auto + udp: true + network: ws + ws-opts: + path: /api/v3/download.getFile + headers: + Host: 5607b9d187e655736f563fee87d7283994721.laowanxiang.com +- name: "\U0001F1FA\U0001F1F8 美国 GIA [01]" + type: vmess + server: gia_us1.qiangdong.xyz + port: 153 + uuid: d813e7c5-41da-3d9d-aa6b-08304e8365e5 + alterId: 64 + cipher: auto + udp: true + network: ws + ws-opts: + path: /api/v3/download.getFile + headers: + Host: 5607b9d187e655736f563fee87d7283994721.laowanxiang.com +- name: "\U0001F1FA\U0001F1F8 美国 GIA [02]" + type: vmess + server: gia_us2.qiangdong.xyz + port: 153 + uuid: 83c5a337-d036-317a-a55a-7e057a886e05 + alterId: 64 + cipher: auto + udp: true + network: ws + ws-opts: + path: /api/v3/download.getFile + headers: + Host: 5607b9d187e655736f563fee87d7283994721.laowanxiang.com +- name: "\U0001F1EC\U0001F1E7 英国 Edge" + type: vmess + server: uk1.qiangdong.xyz + port: 153 + uuid: 6a29b9a0-46b1-3469-8c7a-a1adc8f2f07f + alterId: 64 + cipher: auto + udp: true + network: ws + ws-opts: + path: /api/v3/download.getFile + headers: + Host: 5607b9d187e655736f563fee87d7283994721.laowanxiang.com +- name: "\U0001F1F5\U0001F1ED 菲律宾 Edge" + type: vmess + server: ph1.qiangdong.xyz + port: 153 + uuid: cb3e79fe-cf2b-31ea-ada7-4c70d086187e + alterId: 64 + cipher: auto + udp: true + network: ws + ws-opts: + path: /api/v3/download.getFile + headers: + Host: 5607b9d187e655736f563fee87d7283994721.laowanxiang.com +- name: "\U0001F1E6\U0001F1F7 阿根廷 Edge" + type: vmess + server: ar1.qiangdong.xyz + port: 153 + uuid: 551569da-0cbb-3e9a-9d64-593796f0b758 + alterId: 64 + cipher: auto + udp: true + network: ws + ws-opts: + path: /api/v3/download.getFile + headers: + Host: 5607b9d187e655736f563fee87d7283994721.laowanxiang.com +- name: "\U0001F1F0\U0001F1F7 韩国 Azure" + type: vmess + server: azure_kr1.qiangdong.xyz + port: 153 + uuid: 2151e733-79e4-3006-b7fa-ba4b57cd8e8d + alterId: 64 + cipher: auto + udp: true + network: ws + ws-opts: + path: /api/v3/download.getFile + headers: + Host: 5607b9d187e655736f563fee87d7283994721.laowanxiang.com +- name: "\U0001F1F0\U0001F1F7 韩国 Edge" + type: vmess + server: kr1.qiangdong.xyz + port: 153 + uuid: 8f0a00a1-a6ee-3d3e-96d2-685486858a9e + alterId: 64 + cipher: auto + udp: true + network: ws + ws-opts: + path: /api/v3/download.getFile + headers: + Host: 5607b9d187e655736f563fee87d7283994721.laowanxiang.com +- name: "\U0001F1ED\U0001F1F0 香港 AC [01]" + type: vmess + server: hk-1.ac.laowanxiang.com + port: 153 + uuid: 16eeb7f2-1d99-328f-ba86-4eebb66a8a37 + alterId: 64 + cipher: auto + udp: true + network: ws + ws-opts: + path: /api/v3/download.getFile + headers: + Host: 5607b9d187e655736f563fee87d7283994721.laowanxiang.com +- name: "\U0001F1ED\U0001F1F0 香港 AC [02]" + type: vmess + server: hk-2.ac.laowanxiang.com + port: 153 + uuid: 75be0e5d-12f0-343f-b2f6-774d0ac73373 + alterId: 64 + cipher: auto + udp: true + network: ws + ws-opts: + path: /api/v3/download.getFile + headers: + Host: 5607b9d187e655736f563fee87d7283994721.laowanxiang.com +- name: "\U0001F1ED\U0001F1F0 香港 DMIT [01]" + type: vmess + server: dmit_hk1.qiangdong.xyz + port: 153 + uuid: f00c9fef-7d74-37aa-b5a7-6436826a610e + alterId: 64 + cipher: auto + udp: true + network: ws + ws-opts: + path: /api/v3/download.getFile + headers: + Host: 5607b9d187e655736f563fee87d7283994721.laowanxiang.com +- name: "\U0001F1ED\U0001F1F0 香港 DMIT [02]" + type: vmess + server: dmit_hk2.qiangdong.xyz + port: 153 + uuid: cd93c530-a7fe-3f44-985d-5f0836f5e83b + alterId: 64 + cipher: auto + udp: true + network: ws + ws-opts: + path: /api/v3/download.getFile + headers: + Host: 5607b9d187e655736f563fee87d7283994721.laowanxiang.com +- name: "\U0001F1ED\U0001F1F0 香港 DMIT [03]" + type: vmess + server: dmit_hk3.qiangdong.xyz + port: 153 + uuid: 08ba8d87-1377-345f-a181-57919ff5559a + alterId: 64 + cipher: auto + udp: true + network: ws + ws-opts: + path: /api/v3/download.getFile + headers: + Host: 5607b9d187e655736f563fee87d7283994721.laowanxiang.com +- name: "\U0001F1ED\U0001F1F0 香港 DMIT [04]" + type: vmess + server: dmit_hk4.qiangdong.xyz + port: 153 + uuid: c56e75d0-a9b6-323a-8b44-b9cf09d96813 + alterId: 64 + cipher: auto + udp: true + network: ws + ws-opts: + path: /api/v3/download.getFile + headers: + Host: 5607b9d187e655736f563fee87d7283994721.laowanxiang.com +- name: "\U0001F1ED\U0001F1F0 香港 DMIT [05]" + type: vmess + server: dmit_hk5.qiangdong.xyz + port: 153 + uuid: cf592b0f-e007-368b-b2c3-83a28e811541 + alterId: 64 + cipher: auto + udp: true + network: ws + ws-opts: + path: /api/v3/download.getFile + headers: + Host: 5607b9d187e655736f563fee87d7283994721.laowanxiang.com +- name: "\U0001F1ED\U0001F1F0 香港 Edge [01]" + type: vmess + server: hk1.qiangdong.xyz + port: 153 + uuid: f830d4b3-2bec-31f9-8119-c09b7baa4815 + alterId: 64 + cipher: auto + udp: true + network: ws + ws-opts: + path: /api/v3/download.getFile + headers: + Host: 5607b9d187e655736f563fee87d7283994721.laowanxiang.com +- name: "\U0001F1ED\U0001F1F0 香港 Edge [02]" + type: vmess + server: hk2.qiangdong.xyz + port: 153 + uuid: 96df2746-ba30-35c8-806a-7f0c1a586d2d + alterId: 64 + cipher: auto + udp: true + network: ws + ws-opts: + path: /api/v3/download.getFile + headers: + Host: 5607b9d187e655736f563fee87d7283994721.laowanxiang.com +- name: "\U0001F1ED\U0001F1F0 香港 Edge [03]" + type: vmess + server: hk3.qiangdong.xyz + port: 153 + uuid: a36e0a0f-337c-3b8a-92d2-96a7c0d5cb4b + alterId: 64 + cipher: auto + udp: true + network: ws + ws-opts: + path: /api/v3/download.getFile + headers: + Host: 5607b9d187e655736f563fee87d7283994721.laowanxiang.com +- name: "\U0001F1ED\U0001F1F0 香港 Edge [04]" + type: vmess + server: hk4.qiangdong.xyz + port: 153 + uuid: 05c79247-c97b-3e80-be0d-1fb4f8112af5 + alterId: 64 + cipher: auto + udp: true + network: ws + ws-opts: + path: /api/v3/download.getFile + headers: + Host: 5607b9d187e655736f563fee87d7283994721.laowanxiang.com +- name: "\U0001F1ED\U0001F1F0 香港 HKT [01]" + type: vmess + server: hkt1.qiangdong.xyz + port: 153 + uuid: ea90c104-4d4c-325e-a41d-18b57e046cbe + alterId: 64 + cipher: auto + udp: true + network: ws + ws-opts: + path: /api/v3/download.getFile + headers: + Host: 5607b9d187e655736f563fee87d7283994721.laowanxiang.com +- name: "\U0001F1ED\U0001F1F0 香港 HKT [02]" + type: vmess + server: hkt2.qiangdong.xyz + port: 153 + uuid: 207dbbe3-4ec5-392c-8135-78f9466144e5 + alterId: 64 + cipher: auto + udp: true + network: ws + ws-opts: + path: /api/v3/download.getFile + headers: + Host: 5607b9d187e655736f563fee87d7283994721.laowanxiang.com +- name: "\U0001F1ED\U0001F1F0 香港 HKT [03]" + type: vmess + server: hkt3.qiangdong.xyz + port: 153 + uuid: bec08504-426a-3de2-b6b2-d4a80c03bfc8 + alterId: 64 + cipher: auto + udp: true + network: ws + ws-opts: + path: /api/v3/download.getFile + headers: + Host: 5607b9d187e655736f563fee87d7283994721.laowanxiang.com +- name: "\U0001F1ED\U0001F1F0 香港 HKT [04]" + type: vmess + server: hkt4.qiangdong.xyz + port: 153 + uuid: a7674bbc-4725-3333-bd53-297326397bfb + alterId: 64 + cipher: auto + udp: true + network: ws + ws-opts: + path: /api/v3/download.getFile + headers: + Host: 5607b9d187e655736f563fee87d7283994721.laowanxiang.com +- name: "\U0001F1ED\U0001F1F0 香港 HKT [05]" + type: vmess + server: hkt5.qiangdong.xyz + port: 153 + uuid: 7d75f2d6-4ed2-32cc-8a37-14558094a304 + alterId: 64 + cipher: auto + udp: true + network: ws + ws-opts: + path: /api/v3/download.getFile + headers: + Host: 5607b9d187e655736f563fee87d7283994721.laowanxiang.com +- name: "\U0001F1ED\U0001F1F0 香港 HKT [06]" + type: vmess + server: hkt6.qiangdong.xyz + port: 153 + uuid: c82c74d6-e754-3625-ac36-f1ce5002cfca + alterId: 64 + cipher: auto + udp: true + network: ws + ws-opts: + path: /api/v3/download.getFile + headers: + Host: 5607b9d187e655736f563fee87d7283994721.laowanxiang.com +- name: "\U0001F1ED\U0001F1F0 香港 HKT [07]" + type: vmess + server: hkt7.qiangdong.xyz + port: 153 + uuid: e94bf184-4d0f-3c97-a64e-fe9ac78be247 + alterId: 64 + cipher: auto + udp: true + network: ws + ws-opts: + path: /api/v3/download.getFile + headers: + Host: 5607b9d187e655736f563fee87d7283994721.laowanxiang.com +- name: "\U0001F1ED\U0001F1F0 香港 HKT [08]" + type: vmess + server: hkt8.qiangdong.xyz + port: 153 + uuid: 3be3be2c-26c8-3270-bfab-ba6592e1a7b4 + alterId: 64 + cipher: auto + udp: true + network: ws + ws-opts: + path: /api/v3/download.getFile + headers: + Host: 5607b9d187e655736f563fee87d7283994721.laowanxiang.com +- name: "\U0001F1ED\U0001F1F0 香港 IEPL [05] [Std]" + type: vmess + server: 183.240.221.196 + port: 153 + uuid: a6fd5483-ea08-32c7-b385-3c9ace746ec6 + alterId: 64 + cipher: auto + udp: true + network: ws + ws-opts: + path: /api/v3/download.getFile + headers: + Host: 5607b9d187e655736f563fee87d7283994721.laowanxiang.com +- name: "\U0001F1ED\U0001F1F0 香港 IEPL [06] [Std]" + type: vmess + server: 183.240.221.197 + port: 153 + uuid: fda582bd-8b48-3b25-a857-06f560975af7 + alterId: 64 + cipher: auto + udp: true + network: ws + ws-opts: + path: /api/v3/download.getFile + headers: + Host: 5607b9d187e655736f563fee87d7283994721.laowanxiang.com +- name: "\U0001F1ED\U0001F1F0 香港 IEPL [07] [Std]" + type: vmess + server: 183.240.221.198 + port: 153 + uuid: 6c8ac970-2950-3d04-a4c1-c32326a43124 + alterId: 64 + cipher: auto + udp: true + network: ws + ws-opts: + path: /api/v3/download.getFile + headers: + Host: 5607b9d187e655736f563fee87d7283994721.laowanxiang.com +- name: "\U0001F1ED\U0001F1F0 香港 IEPL [08] [Std]" + type: vmess + server: 183.240.221.199 + port: 153 + uuid: 678b90c5-a99b-3187-9cc1-10c28b49fbfd + alterId: 64 + cipher: auto + udp: true + network: ws + ws-opts: + path: /api/v3/download.getFile + headers: + Host: 5607b9d187e655736f563fee87d7283994721.laowanxiang.com +- name: "\U0001F1ED\U0001F1F0 香港 IEPL [09] [Premium]" + type: vmess + server: 183.240.221.200 + port: 153 + uuid: a79a1748-bb9c-3c3e-8fb2-7fe81af0fe12 + alterId: 64 + cipher: auto + udp: true + network: ws + ws-opts: + path: /api/v3/download.getFile + headers: + Host: 5607b9d187e655736f563fee87d7283994721.laowanxiang.com +- name: "\U0001F1ED\U0001F1F0 香港 IEPL [10] [Premium]" + type: vmess + server: 183.240.221.201 + port: 153 + uuid: 4e7ded3d-5286-380b-be22-8054c99ae511 + alterId: 64 + cipher: auto + udp: true + network: ws + ws-opts: + path: /api/v3/download.getFile + headers: + Host: 5607b9d187e655736f563fee87d7283994721.laowanxiang.com +- name: "\U0001F1ED\U0001F1F0 香港 IEPL [11] [Premium]" + type: vmess + server: 183.240.221.202 + port: 153 + uuid: 31040946-aea3-36c7-a78d-7346f61c0a25 + alterId: 64 + cipher: auto + udp: true + network: ws + ws-opts: + path: /api/v3/download.getFile + headers: + Host: 5607b9d187e655736f563fee87d7283994721.laowanxiang.com +- name: "\U0001F1ED\U0001F1F0 香港 IEPL [12] [Premium]" + type: vmess + server: 183.240.221.203 + port: 153 + uuid: ed8a1878-4794-36e5-ab6b-eee2cf7b9071 + alterId: 64 + cipher: auto + udp: true + network: ws + ws-opts: + path: /api/v3/download.getFile + headers: + Host: 5607b9d187e655736f563fee87d7283994721.laowanxiang.com +proxy-groups: +- name: Proxy + type: select + proxies: + - Auto - UrlTest + - DIRECT + - "\U0001F1F7\U0001F1FA 俄罗斯 Edge" + - "\U0001F1E8\U0001F1E6 加拿大 Edge" + - "\U0001F1EE\U0001F1F3 印度 Edge" + - "\U0001F1E8\U0001F1F3 台湾 AC" + - "\U0001F1E8\U0001F1F3 台湾 CHT [01]" + - "\U0001F1E8\U0001F1F3 台湾 CHT [02]" + - "\U0001F1E8\U0001F1F3 台湾 CHT [03]" + - "\U0001F1E8\U0001F1F3 台湾 Edge" + - "\U0001F1E8\U0001F1F3 台湾 IEPL [05] [Std]" + - "\U0001F1E8\U0001F1F3 台湾 IEPL [06] [Premium]" + - "\U0001F1F9\U0001F1F7 土耳其 Edge" + - "\U0001F1E7\U0001F1F7 巴西 Edge" + - "\U0001F1E9\U0001F1EA 德国 Edge" + - "\U0001F1F8\U0001F1EC 新加坡 AC" + - "\U0001F1F8\U0001F1EC 新加坡 Azure" + - "\U0001F1F8\U0001F1EC 新加坡 Edge [01]" + - "\U0001F1F8\U0001F1EC 新加坡 Edge [02]" + - "\U0001F1F8\U0001F1EC 新加坡 IEPL [05] [Std]" + - "\U0001F1F8\U0001F1EC 新加坡 IEPL [06] [Premium]" + - "\U0001F1EF\U0001F1F5 日本 BBTEC [01]" + - "\U0001F1EF\U0001F1F5 日本 BBTEC [02]" + - "\U0001F1EF\U0001F1F5 日本 Edge [01]" + - "\U0001F1EF\U0001F1F5 日本 Edge [02]" + - "\U0001F1EF\U0001F1F5 日本 Edge [03]" + - "\U0001F1EB\U0001F1F7 法国 Edge" + - "\U0001F1F9\U0001F1ED 泰国 Edge" + - "\U0001F1E6\U0001F1FA 澳大利亚 Edge" + - "\U0001F1FA\U0001F1F8 美国 Azure" + - "\U0001F1FA\U0001F1F8 美国 DMIT [01]" + - "\U0001F1FA\U0001F1F8 美国 DMIT [02]" + - "\U0001F1FA\U0001F1F8 美国 Edge" + - "\U0001F1FA\U0001F1F8 美国 GIA [01]" + - "\U0001F1FA\U0001F1F8 美国 GIA [02]" + - "\U0001F1EC\U0001F1E7 英国 Edge" + - "\U0001F1F5\U0001F1ED 菲律宾 Edge" + - "\U0001F1E6\U0001F1F7 阿根廷 Edge" + - "\U0001F1F0\U0001F1F7 韩国 Azure" + - "\U0001F1F0\U0001F1F7 韩国 Edge" + - "\U0001F1ED\U0001F1F0 香港 AC [01]" + - "\U0001F1ED\U0001F1F0 香港 AC [02]" + - "\U0001F1ED\U0001F1F0 香港 DMIT [01]" + - "\U0001F1ED\U0001F1F0 香港 DMIT [02]" + - "\U0001F1ED\U0001F1F0 香港 DMIT [03]" + - "\U0001F1ED\U0001F1F0 香港 DMIT [04]" + - "\U0001F1ED\U0001F1F0 香港 DMIT [05]" + - "\U0001F1ED\U0001F1F0 香港 Edge [01]" + - "\U0001F1ED\U0001F1F0 香港 Edge [02]" + - "\U0001F1ED\U0001F1F0 香港 Edge [03]" + - "\U0001F1ED\U0001F1F0 香港 Edge [04]" + - "\U0001F1ED\U0001F1F0 香港 HKT [01]" + - "\U0001F1ED\U0001F1F0 香港 HKT [02]" + - "\U0001F1ED\U0001F1F0 香港 HKT [03]" + - "\U0001F1ED\U0001F1F0 香港 HKT [04]" + - "\U0001F1ED\U0001F1F0 香港 HKT [05]" + - "\U0001F1ED\U0001F1F0 香港 HKT [06]" + - "\U0001F1ED\U0001F1F0 香港 HKT [07]" + - "\U0001F1ED\U0001F1F0 香港 HKT [08]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [05] [Std]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [06] [Std]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [07] [Std]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [08] [Std]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [09] [Premium]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [10] [Premium]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [11] [Premium]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [12] [Premium]" +- name: Domestic + type: select + proxies: + - DIRECT + - Proxy + - "\U0001F1F7\U0001F1FA 俄罗斯 Edge" + - "\U0001F1E8\U0001F1E6 加拿大 Edge" + - "\U0001F1EE\U0001F1F3 印度 Edge" + - "\U0001F1E8\U0001F1F3 台湾 AC" + - "\U0001F1E8\U0001F1F3 台湾 CHT [01]" + - "\U0001F1E8\U0001F1F3 台湾 CHT [02]" + - "\U0001F1E8\U0001F1F3 台湾 CHT [03]" + - "\U0001F1E8\U0001F1F3 台湾 Edge" + - "\U0001F1E8\U0001F1F3 台湾 IEPL [05] [Std]" + - "\U0001F1E8\U0001F1F3 台湾 IEPL [06] [Premium]" + - "\U0001F1F9\U0001F1F7 土耳其 Edge" + - "\U0001F1E7\U0001F1F7 巴西 Edge" + - "\U0001F1E9\U0001F1EA 德国 Edge" + - "\U0001F1F8\U0001F1EC 新加坡 AC" + - "\U0001F1F8\U0001F1EC 新加坡 Azure" + - "\U0001F1F8\U0001F1EC 新加坡 Edge [01]" + - "\U0001F1F8\U0001F1EC 新加坡 Edge [02]" + - "\U0001F1F8\U0001F1EC 新加坡 IEPL [05] [Std]" + - "\U0001F1F8\U0001F1EC 新加坡 IEPL [06] [Premium]" + - "\U0001F1EF\U0001F1F5 日本 BBTEC [01]" + - "\U0001F1EF\U0001F1F5 日本 BBTEC [02]" + - "\U0001F1EF\U0001F1F5 日本 Edge [01]" + - "\U0001F1EF\U0001F1F5 日本 Edge [02]" + - "\U0001F1EF\U0001F1F5 日本 Edge [03]" + - "\U0001F1EB\U0001F1F7 法国 Edge" + - "\U0001F1F9\U0001F1ED 泰国 Edge" + - "\U0001F1E6\U0001F1FA 澳大利亚 Edge" + - "\U0001F1FA\U0001F1F8 美国 Azure" + - "\U0001F1FA\U0001F1F8 美国 DMIT [01]" + - "\U0001F1FA\U0001F1F8 美国 DMIT [02]" + - "\U0001F1FA\U0001F1F8 美国 Edge" + - "\U0001F1FA\U0001F1F8 美国 GIA [01]" + - "\U0001F1FA\U0001F1F8 美国 GIA [02]" + - "\U0001F1EC\U0001F1E7 英国 Edge" + - "\U0001F1F5\U0001F1ED 菲律宾 Edge" + - "\U0001F1E6\U0001F1F7 阿根廷 Edge" + - "\U0001F1F0\U0001F1F7 韩国 Azure" + - "\U0001F1F0\U0001F1F7 韩国 Edge" + - "\U0001F1ED\U0001F1F0 香港 AC [01]" + - "\U0001F1ED\U0001F1F0 香港 AC [02]" + - "\U0001F1ED\U0001F1F0 香港 DMIT [01]" + - "\U0001F1ED\U0001F1F0 香港 DMIT [02]" + - "\U0001F1ED\U0001F1F0 香港 DMIT [03]" + - "\U0001F1ED\U0001F1F0 香港 DMIT [04]" + - "\U0001F1ED\U0001F1F0 香港 DMIT [05]" + - "\U0001F1ED\U0001F1F0 香港 Edge [01]" + - "\U0001F1ED\U0001F1F0 香港 Edge [02]" + - "\U0001F1ED\U0001F1F0 香港 Edge [03]" + - "\U0001F1ED\U0001F1F0 香港 Edge [04]" + - "\U0001F1ED\U0001F1F0 香港 HKT [01]" + - "\U0001F1ED\U0001F1F0 香港 HKT [02]" + - "\U0001F1ED\U0001F1F0 香港 HKT [03]" + - "\U0001F1ED\U0001F1F0 香港 HKT [04]" + - "\U0001F1ED\U0001F1F0 香港 HKT [05]" + - "\U0001F1ED\U0001F1F0 香港 HKT [06]" + - "\U0001F1ED\U0001F1F0 香港 HKT [07]" + - "\U0001F1ED\U0001F1F0 香港 HKT [08]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [05] [Std]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [06] [Std]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [07] [Std]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [08] [Std]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [09] [Premium]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [10] [Premium]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [11] [Premium]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [12] [Premium]" +- name: Others + type: select + proxies: + - Proxy + - DIRECT + - "\U0001F1F7\U0001F1FA 俄罗斯 Edge" + - "\U0001F1E8\U0001F1E6 加拿大 Edge" + - "\U0001F1EE\U0001F1F3 印度 Edge" + - "\U0001F1E8\U0001F1F3 台湾 AC" + - "\U0001F1E8\U0001F1F3 台湾 CHT [01]" + - "\U0001F1E8\U0001F1F3 台湾 CHT [02]" + - "\U0001F1E8\U0001F1F3 台湾 CHT [03]" + - "\U0001F1E8\U0001F1F3 台湾 Edge" + - "\U0001F1E8\U0001F1F3 台湾 IEPL [05] [Std]" + - "\U0001F1E8\U0001F1F3 台湾 IEPL [06] [Premium]" + - "\U0001F1F9\U0001F1F7 土耳其 Edge" + - "\U0001F1E7\U0001F1F7 巴西 Edge" + - "\U0001F1E9\U0001F1EA 德国 Edge" + - "\U0001F1F8\U0001F1EC 新加坡 AC" + - "\U0001F1F8\U0001F1EC 新加坡 Azure" + - "\U0001F1F8\U0001F1EC 新加坡 Edge [01]" + - "\U0001F1F8\U0001F1EC 新加坡 Edge [02]" + - "\U0001F1F8\U0001F1EC 新加坡 IEPL [05] [Std]" + - "\U0001F1F8\U0001F1EC 新加坡 IEPL [06] [Premium]" + - "\U0001F1EF\U0001F1F5 日本 BBTEC [01]" + - "\U0001F1EF\U0001F1F5 日本 BBTEC [02]" + - "\U0001F1EF\U0001F1F5 日本 Edge [01]" + - "\U0001F1EF\U0001F1F5 日本 Edge [02]" + - "\U0001F1EF\U0001F1F5 日本 Edge [03]" + - "\U0001F1EB\U0001F1F7 法国 Edge" + - "\U0001F1F9\U0001F1ED 泰国 Edge" + - "\U0001F1E6\U0001F1FA 澳大利亚 Edge" + - "\U0001F1FA\U0001F1F8 美国 Azure" + - "\U0001F1FA\U0001F1F8 美国 DMIT [01]" + - "\U0001F1FA\U0001F1F8 美国 DMIT [02]" + - "\U0001F1FA\U0001F1F8 美国 Edge" + - "\U0001F1FA\U0001F1F8 美国 GIA [01]" + - "\U0001F1FA\U0001F1F8 美国 GIA [02]" + - "\U0001F1EC\U0001F1E7 英国 Edge" + - "\U0001F1F5\U0001F1ED 菲律宾 Edge" + - "\U0001F1E6\U0001F1F7 阿根廷 Edge" + - "\U0001F1F0\U0001F1F7 韩国 Azure" + - "\U0001F1F0\U0001F1F7 韩国 Edge" + - "\U0001F1ED\U0001F1F0 香港 AC [01]" + - "\U0001F1ED\U0001F1F0 香港 AC [02]" + - "\U0001F1ED\U0001F1F0 香港 DMIT [01]" + - "\U0001F1ED\U0001F1F0 香港 DMIT [02]" + - "\U0001F1ED\U0001F1F0 香港 DMIT [03]" + - "\U0001F1ED\U0001F1F0 香港 DMIT [04]" + - "\U0001F1ED\U0001F1F0 香港 DMIT [05]" + - "\U0001F1ED\U0001F1F0 香港 Edge [01]" + - "\U0001F1ED\U0001F1F0 香港 Edge [02]" + - "\U0001F1ED\U0001F1F0 香港 Edge [03]" + - "\U0001F1ED\U0001F1F0 香港 Edge [04]" + - "\U0001F1ED\U0001F1F0 香港 HKT [01]" + - "\U0001F1ED\U0001F1F0 香港 HKT [02]" + - "\U0001F1ED\U0001F1F0 香港 HKT [03]" + - "\U0001F1ED\U0001F1F0 香港 HKT [04]" + - "\U0001F1ED\U0001F1F0 香港 HKT [05]" + - "\U0001F1ED\U0001F1F0 香港 HKT [06]" + - "\U0001F1ED\U0001F1F0 香港 HKT [07]" + - "\U0001F1ED\U0001F1F0 香港 HKT [08]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [05] [Std]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [06] [Std]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [07] [Std]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [08] [Std]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [09] [Premium]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [10] [Premium]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [11] [Premium]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [12] [Premium]" +- name: AdBlock + type: select + proxies: + - REJECT + - DIRECT + - Proxy +- name: Anti IP + type: select + proxies: + - DIRECT + - Proxy + - "\U0001F1F7\U0001F1FA 俄罗斯 Edge" + - "\U0001F1E8\U0001F1E6 加拿大 Edge" + - "\U0001F1EE\U0001F1F3 印度 Edge" + - "\U0001F1E8\U0001F1F3 台湾 AC" + - "\U0001F1E8\U0001F1F3 台湾 CHT [01]" + - "\U0001F1E8\U0001F1F3 台湾 CHT [02]" + - "\U0001F1E8\U0001F1F3 台湾 CHT [03]" + - "\U0001F1E8\U0001F1F3 台湾 Edge" + - "\U0001F1E8\U0001F1F3 台湾 IEPL [05] [Std]" + - "\U0001F1E8\U0001F1F3 台湾 IEPL [06] [Premium]" + - "\U0001F1F9\U0001F1F7 土耳其 Edge" + - "\U0001F1E7\U0001F1F7 巴西 Edge" + - "\U0001F1E9\U0001F1EA 德国 Edge" + - "\U0001F1F8\U0001F1EC 新加坡 AC" + - "\U0001F1F8\U0001F1EC 新加坡 Azure" + - "\U0001F1F8\U0001F1EC 新加坡 Edge [01]" + - "\U0001F1F8\U0001F1EC 新加坡 Edge [02]" + - "\U0001F1F8\U0001F1EC 新加坡 IEPL [05] [Std]" + - "\U0001F1F8\U0001F1EC 新加坡 IEPL [06] [Premium]" + - "\U0001F1EF\U0001F1F5 日本 BBTEC [01]" + - "\U0001F1EF\U0001F1F5 日本 BBTEC [02]" + - "\U0001F1EF\U0001F1F5 日本 Edge [01]" + - "\U0001F1EF\U0001F1F5 日本 Edge [02]" + - "\U0001F1EF\U0001F1F5 日本 Edge [03]" + - "\U0001F1EB\U0001F1F7 法国 Edge" + - "\U0001F1F9\U0001F1ED 泰国 Edge" + - "\U0001F1E6\U0001F1FA 澳大利亚 Edge" + - "\U0001F1FA\U0001F1F8 美国 Azure" + - "\U0001F1FA\U0001F1F8 美国 DMIT [01]" + - "\U0001F1FA\U0001F1F8 美国 DMIT [02]" + - "\U0001F1FA\U0001F1F8 美国 Edge" + - "\U0001F1FA\U0001F1F8 美国 GIA [01]" + - "\U0001F1FA\U0001F1F8 美国 GIA [02]" + - "\U0001F1EC\U0001F1E7 英国 Edge" + - "\U0001F1F5\U0001F1ED 菲律宾 Edge" + - "\U0001F1E6\U0001F1F7 阿根廷 Edge" + - "\U0001F1F0\U0001F1F7 韩国 Azure" + - "\U0001F1F0\U0001F1F7 韩国 Edge" + - "\U0001F1ED\U0001F1F0 香港 AC [01]" + - "\U0001F1ED\U0001F1F0 香港 AC [02]" + - "\U0001F1ED\U0001F1F0 香港 DMIT [01]" + - "\U0001F1ED\U0001F1F0 香港 DMIT [02]" + - "\U0001F1ED\U0001F1F0 香港 DMIT [03]" + - "\U0001F1ED\U0001F1F0 香港 DMIT [04]" + - "\U0001F1ED\U0001F1F0 香港 DMIT [05]" + - "\U0001F1ED\U0001F1F0 香港 Edge [01]" + - "\U0001F1ED\U0001F1F0 香港 Edge [02]" + - "\U0001F1ED\U0001F1F0 香港 Edge [03]" + - "\U0001F1ED\U0001F1F0 香港 Edge [04]" + - "\U0001F1ED\U0001F1F0 香港 HKT [01]" + - "\U0001F1ED\U0001F1F0 香港 HKT [02]" + - "\U0001F1ED\U0001F1F0 香港 HKT [03]" + - "\U0001F1ED\U0001F1F0 香港 HKT [04]" + - "\U0001F1ED\U0001F1F0 香港 HKT [05]" + - "\U0001F1ED\U0001F1F0 香港 HKT [06]" + - "\U0001F1ED\U0001F1F0 香港 HKT [07]" + - "\U0001F1ED\U0001F1F0 香港 HKT [08]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [05] [Std]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [06] [Std]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [07] [Std]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [08] [Std]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [09] [Premium]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [10] [Premium]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [11] [Premium]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [12] [Premium]" +- name: Netflix + type: select + proxies: + - Proxy + - DIRECT + - "\U0001F1F7\U0001F1FA 俄罗斯 Edge" + - "\U0001F1E8\U0001F1E6 加拿大 Edge" + - "\U0001F1EE\U0001F1F3 印度 Edge" + - "\U0001F1E8\U0001F1F3 台湾 AC" + - "\U0001F1E8\U0001F1F3 台湾 CHT [01]" + - "\U0001F1E8\U0001F1F3 台湾 CHT [02]" + - "\U0001F1E8\U0001F1F3 台湾 CHT [03]" + - "\U0001F1E8\U0001F1F3 台湾 Edge" + - "\U0001F1E8\U0001F1F3 台湾 IEPL [05] [Std]" + - "\U0001F1E8\U0001F1F3 台湾 IEPL [06] [Premium]" + - "\U0001F1F9\U0001F1F7 土耳其 Edge" + - "\U0001F1E7\U0001F1F7 巴西 Edge" + - "\U0001F1E9\U0001F1EA 德国 Edge" + - "\U0001F1F8\U0001F1EC 新加坡 AC" + - "\U0001F1F8\U0001F1EC 新加坡 Azure" + - "\U0001F1F8\U0001F1EC 新加坡 Edge [01]" + - "\U0001F1F8\U0001F1EC 新加坡 Edge [02]" + - "\U0001F1F8\U0001F1EC 新加坡 IEPL [05] [Std]" + - "\U0001F1F8\U0001F1EC 新加坡 IEPL [06] [Premium]" + - "\U0001F1EF\U0001F1F5 日本 BBTEC [01]" + - "\U0001F1EF\U0001F1F5 日本 BBTEC [02]" + - "\U0001F1EF\U0001F1F5 日本 Edge [01]" + - "\U0001F1EF\U0001F1F5 日本 Edge [02]" + - "\U0001F1EF\U0001F1F5 日本 Edge [03]" + - "\U0001F1EB\U0001F1F7 法国 Edge" + - "\U0001F1F9\U0001F1ED 泰国 Edge" + - "\U0001F1E6\U0001F1FA 澳大利亚 Edge" + - "\U0001F1FA\U0001F1F8 美国 Azure" + - "\U0001F1FA\U0001F1F8 美国 DMIT [01]" + - "\U0001F1FA\U0001F1F8 美国 DMIT [02]" + - "\U0001F1FA\U0001F1F8 美国 Edge" + - "\U0001F1FA\U0001F1F8 美国 GIA [01]" + - "\U0001F1FA\U0001F1F8 美国 GIA [02]" + - "\U0001F1EC\U0001F1E7 英国 Edge" + - "\U0001F1F5\U0001F1ED 菲律宾 Edge" + - "\U0001F1E6\U0001F1F7 阿根廷 Edge" + - "\U0001F1F0\U0001F1F7 韩国 Azure" + - "\U0001F1F0\U0001F1F7 韩国 Edge" + - "\U0001F1ED\U0001F1F0 香港 AC [01]" + - "\U0001F1ED\U0001F1F0 香港 AC [02]" + - "\U0001F1ED\U0001F1F0 香港 DMIT [01]" + - "\U0001F1ED\U0001F1F0 香港 DMIT [02]" + - "\U0001F1ED\U0001F1F0 香港 DMIT [03]" + - "\U0001F1ED\U0001F1F0 香港 DMIT [04]" + - "\U0001F1ED\U0001F1F0 香港 DMIT [05]" + - "\U0001F1ED\U0001F1F0 香港 Edge [01]" + - "\U0001F1ED\U0001F1F0 香港 Edge [02]" + - "\U0001F1ED\U0001F1F0 香港 Edge [03]" + - "\U0001F1ED\U0001F1F0 香港 Edge [04]" + - "\U0001F1ED\U0001F1F0 香港 HKT [01]" + - "\U0001F1ED\U0001F1F0 香港 HKT [02]" + - "\U0001F1ED\U0001F1F0 香港 HKT [03]" + - "\U0001F1ED\U0001F1F0 香港 HKT [04]" + - "\U0001F1ED\U0001F1F0 香港 HKT [05]" + - "\U0001F1ED\U0001F1F0 香港 HKT [06]" + - "\U0001F1ED\U0001F1F0 香港 HKT [07]" + - "\U0001F1ED\U0001F1F0 香港 HKT [08]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [05] [Std]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [06] [Std]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [07] [Std]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [08] [Std]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [09] [Premium]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [10] [Premium]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [11] [Premium]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [12] [Premium]" +- name: Disney + type: select + proxies: + - Proxy + - DIRECT + - "\U0001F1F7\U0001F1FA 俄罗斯 Edge" + - "\U0001F1E8\U0001F1E6 加拿大 Edge" + - "\U0001F1EE\U0001F1F3 印度 Edge" + - "\U0001F1E8\U0001F1F3 台湾 AC" + - "\U0001F1E8\U0001F1F3 台湾 CHT [01]" + - "\U0001F1E8\U0001F1F3 台湾 CHT [02]" + - "\U0001F1E8\U0001F1F3 台湾 CHT [03]" + - "\U0001F1E8\U0001F1F3 台湾 Edge" + - "\U0001F1E8\U0001F1F3 台湾 IEPL [05] [Std]" + - "\U0001F1E8\U0001F1F3 台湾 IEPL [06] [Premium]" + - "\U0001F1F9\U0001F1F7 土耳其 Edge" + - "\U0001F1E7\U0001F1F7 巴西 Edge" + - "\U0001F1E9\U0001F1EA 德国 Edge" + - "\U0001F1F8\U0001F1EC 新加坡 AC" + - "\U0001F1F8\U0001F1EC 新加坡 Azure" + - "\U0001F1F8\U0001F1EC 新加坡 Edge [01]" + - "\U0001F1F8\U0001F1EC 新加坡 Edge [02]" + - "\U0001F1F8\U0001F1EC 新加坡 IEPL [05] [Std]" + - "\U0001F1F8\U0001F1EC 新加坡 IEPL [06] [Premium]" + - "\U0001F1EF\U0001F1F5 日本 BBTEC [01]" + - "\U0001F1EF\U0001F1F5 日本 BBTEC [02]" + - "\U0001F1EF\U0001F1F5 日本 Edge [01]" + - "\U0001F1EF\U0001F1F5 日本 Edge [02]" + - "\U0001F1EF\U0001F1F5 日本 Edge [03]" + - "\U0001F1EB\U0001F1F7 法国 Edge" + - "\U0001F1F9\U0001F1ED 泰国 Edge" + - "\U0001F1E6\U0001F1FA 澳大利亚 Edge" + - "\U0001F1FA\U0001F1F8 美国 Azure" + - "\U0001F1FA\U0001F1F8 美国 DMIT [01]" + - "\U0001F1FA\U0001F1F8 美国 DMIT [02]" + - "\U0001F1FA\U0001F1F8 美国 Edge" + - "\U0001F1FA\U0001F1F8 美国 GIA [01]" + - "\U0001F1FA\U0001F1F8 美国 GIA [02]" + - "\U0001F1EC\U0001F1E7 英国 Edge" + - "\U0001F1F5\U0001F1ED 菲律宾 Edge" + - "\U0001F1E6\U0001F1F7 阿根廷 Edge" + - "\U0001F1F0\U0001F1F7 韩国 Azure" + - "\U0001F1F0\U0001F1F7 韩国 Edge" + - "\U0001F1ED\U0001F1F0 香港 AC [01]" + - "\U0001F1ED\U0001F1F0 香港 AC [02]" + - "\U0001F1ED\U0001F1F0 香港 DMIT [01]" + - "\U0001F1ED\U0001F1F0 香港 DMIT [02]" + - "\U0001F1ED\U0001F1F0 香港 DMIT [03]" + - "\U0001F1ED\U0001F1F0 香港 DMIT [04]" + - "\U0001F1ED\U0001F1F0 香港 DMIT [05]" + - "\U0001F1ED\U0001F1F0 香港 Edge [01]" + - "\U0001F1ED\U0001F1F0 香港 Edge [02]" + - "\U0001F1ED\U0001F1F0 香港 Edge [03]" + - "\U0001F1ED\U0001F1F0 香港 Edge [04]" + - "\U0001F1ED\U0001F1F0 香港 HKT [01]" + - "\U0001F1ED\U0001F1F0 香港 HKT [02]" + - "\U0001F1ED\U0001F1F0 香港 HKT [03]" + - "\U0001F1ED\U0001F1F0 香港 HKT [04]" + - "\U0001F1ED\U0001F1F0 香港 HKT [05]" + - "\U0001F1ED\U0001F1F0 香港 HKT [06]" + - "\U0001F1ED\U0001F1F0 香港 HKT [07]" + - "\U0001F1ED\U0001F1F0 香港 HKT [08]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [05] [Std]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [06] [Std]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [07] [Std]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [08] [Std]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [09] [Premium]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [10] [Premium]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [11] [Premium]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [12] [Premium]" +- name: YouTube + type: select + proxies: + - Proxy + - DIRECT + - "\U0001F1F7\U0001F1FA 俄罗斯 Edge" + - "\U0001F1E8\U0001F1E6 加拿大 Edge" + - "\U0001F1EE\U0001F1F3 印度 Edge" + - "\U0001F1E8\U0001F1F3 台湾 AC" + - "\U0001F1E8\U0001F1F3 台湾 CHT [01]" + - "\U0001F1E8\U0001F1F3 台湾 CHT [02]" + - "\U0001F1E8\U0001F1F3 台湾 CHT [03]" + - "\U0001F1E8\U0001F1F3 台湾 Edge" + - "\U0001F1E8\U0001F1F3 台湾 IEPL [05] [Std]" + - "\U0001F1E8\U0001F1F3 台湾 IEPL [06] [Premium]" + - "\U0001F1F9\U0001F1F7 土耳其 Edge" + - "\U0001F1E7\U0001F1F7 巴西 Edge" + - "\U0001F1E9\U0001F1EA 德国 Edge" + - "\U0001F1F8\U0001F1EC 新加坡 AC" + - "\U0001F1F8\U0001F1EC 新加坡 Azure" + - "\U0001F1F8\U0001F1EC 新加坡 Edge [01]" + - "\U0001F1F8\U0001F1EC 新加坡 Edge [02]" + - "\U0001F1F8\U0001F1EC 新加坡 IEPL [05] [Std]" + - "\U0001F1F8\U0001F1EC 新加坡 IEPL [06] [Premium]" + - "\U0001F1EF\U0001F1F5 日本 BBTEC [01]" + - "\U0001F1EF\U0001F1F5 日本 BBTEC [02]" + - "\U0001F1EF\U0001F1F5 日本 Edge [01]" + - "\U0001F1EF\U0001F1F5 日本 Edge [02]" + - "\U0001F1EF\U0001F1F5 日本 Edge [03]" + - "\U0001F1EB\U0001F1F7 法国 Edge" + - "\U0001F1F9\U0001F1ED 泰国 Edge" + - "\U0001F1E6\U0001F1FA 澳大利亚 Edge" + - "\U0001F1FA\U0001F1F8 美国 Azure" + - "\U0001F1FA\U0001F1F8 美国 DMIT [01]" + - "\U0001F1FA\U0001F1F8 美国 DMIT [02]" + - "\U0001F1FA\U0001F1F8 美国 Edge" + - "\U0001F1FA\U0001F1F8 美国 GIA [01]" + - "\U0001F1FA\U0001F1F8 美国 GIA [02]" + - "\U0001F1EC\U0001F1E7 英国 Edge" + - "\U0001F1F5\U0001F1ED 菲律宾 Edge" + - "\U0001F1E6\U0001F1F7 阿根廷 Edge" + - "\U0001F1F0\U0001F1F7 韩国 Azure" + - "\U0001F1F0\U0001F1F7 韩国 Edge" + - "\U0001F1ED\U0001F1F0 香港 AC [01]" + - "\U0001F1ED\U0001F1F0 香港 AC [02]" + - "\U0001F1ED\U0001F1F0 香港 DMIT [01]" + - "\U0001F1ED\U0001F1F0 香港 DMIT [02]" + - "\U0001F1ED\U0001F1F0 香港 DMIT [03]" + - "\U0001F1ED\U0001F1F0 香港 DMIT [04]" + - "\U0001F1ED\U0001F1F0 香港 DMIT [05]" + - "\U0001F1ED\U0001F1F0 香港 Edge [01]" + - "\U0001F1ED\U0001F1F0 香港 Edge [02]" + - "\U0001F1ED\U0001F1F0 香港 Edge [03]" + - "\U0001F1ED\U0001F1F0 香港 Edge [04]" + - "\U0001F1ED\U0001F1F0 香港 HKT [01]" + - "\U0001F1ED\U0001F1F0 香港 HKT [02]" + - "\U0001F1ED\U0001F1F0 香港 HKT [03]" + - "\U0001F1ED\U0001F1F0 香港 HKT [04]" + - "\U0001F1ED\U0001F1F0 香港 HKT [05]" + - "\U0001F1ED\U0001F1F0 香港 HKT [06]" + - "\U0001F1ED\U0001F1F0 香港 HKT [07]" + - "\U0001F1ED\U0001F1F0 香港 HKT [08]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [05] [Std]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [06] [Std]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [07] [Std]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [08] [Std]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [09] [Premium]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [10] [Premium]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [11] [Premium]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [12] [Premium]" +- name: Spotify + type: select + proxies: + - Proxy + - DIRECT + - "\U0001F1F7\U0001F1FA 俄罗斯 Edge" + - "\U0001F1E8\U0001F1E6 加拿大 Edge" + - "\U0001F1EE\U0001F1F3 印度 Edge" + - "\U0001F1E8\U0001F1F3 台湾 AC" + - "\U0001F1E8\U0001F1F3 台湾 CHT [01]" + - "\U0001F1E8\U0001F1F3 台湾 CHT [02]" + - "\U0001F1E8\U0001F1F3 台湾 CHT [03]" + - "\U0001F1E8\U0001F1F3 台湾 Edge" + - "\U0001F1E8\U0001F1F3 台湾 IEPL [05] [Std]" + - "\U0001F1E8\U0001F1F3 台湾 IEPL [06] [Premium]" + - "\U0001F1F9\U0001F1F7 土耳其 Edge" + - "\U0001F1E7\U0001F1F7 巴西 Edge" + - "\U0001F1E9\U0001F1EA 德国 Edge" + - "\U0001F1F8\U0001F1EC 新加坡 AC" + - "\U0001F1F8\U0001F1EC 新加坡 Azure" + - "\U0001F1F8\U0001F1EC 新加坡 Edge [01]" + - "\U0001F1F8\U0001F1EC 新加坡 Edge [02]" + - "\U0001F1F8\U0001F1EC 新加坡 IEPL [05] [Std]" + - "\U0001F1F8\U0001F1EC 新加坡 IEPL [06] [Premium]" + - "\U0001F1EF\U0001F1F5 日本 BBTEC [01]" + - "\U0001F1EF\U0001F1F5 日本 BBTEC [02]" + - "\U0001F1EF\U0001F1F5 日本 Edge [01]" + - "\U0001F1EF\U0001F1F5 日本 Edge [02]" + - "\U0001F1EF\U0001F1F5 日本 Edge [03]" + - "\U0001F1EB\U0001F1F7 法国 Edge" + - "\U0001F1F9\U0001F1ED 泰国 Edge" + - "\U0001F1E6\U0001F1FA 澳大利亚 Edge" + - "\U0001F1FA\U0001F1F8 美国 Azure" + - "\U0001F1FA\U0001F1F8 美国 DMIT [01]" + - "\U0001F1FA\U0001F1F8 美国 DMIT [02]" + - "\U0001F1FA\U0001F1F8 美国 Edge" + - "\U0001F1FA\U0001F1F8 美国 GIA [01]" + - "\U0001F1FA\U0001F1F8 美国 GIA [02]" + - "\U0001F1EC\U0001F1E7 英国 Edge" + - "\U0001F1F5\U0001F1ED 菲律宾 Edge" + - "\U0001F1E6\U0001F1F7 阿根廷 Edge" + - "\U0001F1F0\U0001F1F7 韩国 Azure" + - "\U0001F1F0\U0001F1F7 韩国 Edge" + - "\U0001F1ED\U0001F1F0 香港 AC [01]" + - "\U0001F1ED\U0001F1F0 香港 AC [02]" + - "\U0001F1ED\U0001F1F0 香港 DMIT [01]" + - "\U0001F1ED\U0001F1F0 香港 DMIT [02]" + - "\U0001F1ED\U0001F1F0 香港 DMIT [03]" + - "\U0001F1ED\U0001F1F0 香港 DMIT [04]" + - "\U0001F1ED\U0001F1F0 香港 DMIT [05]" + - "\U0001F1ED\U0001F1F0 香港 Edge [01]" + - "\U0001F1ED\U0001F1F0 香港 Edge [02]" + - "\U0001F1ED\U0001F1F0 香港 Edge [03]" + - "\U0001F1ED\U0001F1F0 香港 Edge [04]" + - "\U0001F1ED\U0001F1F0 香港 HKT [01]" + - "\U0001F1ED\U0001F1F0 香港 HKT [02]" + - "\U0001F1ED\U0001F1F0 香港 HKT [03]" + - "\U0001F1ED\U0001F1F0 香港 HKT [04]" + - "\U0001F1ED\U0001F1F0 香港 HKT [05]" + - "\U0001F1ED\U0001F1F0 香港 HKT [06]" + - "\U0001F1ED\U0001F1F0 香港 HKT [07]" + - "\U0001F1ED\U0001F1F0 香港 HKT [08]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [05] [Std]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [06] [Std]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [07] [Std]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [08] [Std]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [09] [Premium]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [10] [Premium]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [11] [Premium]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [12] [Premium]" +- name: Asian TV + type: select + proxies: + - DIRECT + - Proxy + - "\U0001F1F7\U0001F1FA 俄罗斯 Edge" + - "\U0001F1E8\U0001F1E6 加拿大 Edge" + - "\U0001F1EE\U0001F1F3 印度 Edge" + - "\U0001F1E8\U0001F1F3 台湾 AC" + - "\U0001F1E8\U0001F1F3 台湾 CHT [01]" + - "\U0001F1E8\U0001F1F3 台湾 CHT [02]" + - "\U0001F1E8\U0001F1F3 台湾 CHT [03]" + - "\U0001F1E8\U0001F1F3 台湾 Edge" + - "\U0001F1E8\U0001F1F3 台湾 IEPL [05] [Std]" + - "\U0001F1E8\U0001F1F3 台湾 IEPL [06] [Premium]" + - "\U0001F1F9\U0001F1F7 土耳其 Edge" + - "\U0001F1E7\U0001F1F7 巴西 Edge" + - "\U0001F1E9\U0001F1EA 德国 Edge" + - "\U0001F1F8\U0001F1EC 新加坡 AC" + - "\U0001F1F8\U0001F1EC 新加坡 Azure" + - "\U0001F1F8\U0001F1EC 新加坡 Edge [01]" + - "\U0001F1F8\U0001F1EC 新加坡 Edge [02]" + - "\U0001F1F8\U0001F1EC 新加坡 IEPL [05] [Std]" + - "\U0001F1F8\U0001F1EC 新加坡 IEPL [06] [Premium]" + - "\U0001F1EF\U0001F1F5 日本 BBTEC [01]" + - "\U0001F1EF\U0001F1F5 日本 BBTEC [02]" + - "\U0001F1EF\U0001F1F5 日本 Edge [01]" + - "\U0001F1EF\U0001F1F5 日本 Edge [02]" + - "\U0001F1EF\U0001F1F5 日本 Edge [03]" + - "\U0001F1EB\U0001F1F7 法国 Edge" + - "\U0001F1F9\U0001F1ED 泰国 Edge" + - "\U0001F1E6\U0001F1FA 澳大利亚 Edge" + - "\U0001F1FA\U0001F1F8 美国 Azure" + - "\U0001F1FA\U0001F1F8 美国 DMIT [01]" + - "\U0001F1FA\U0001F1F8 美国 DMIT [02]" + - "\U0001F1FA\U0001F1F8 美国 Edge" + - "\U0001F1FA\U0001F1F8 美国 GIA [01]" + - "\U0001F1FA\U0001F1F8 美国 GIA [02]" + - "\U0001F1EC\U0001F1E7 英国 Edge" + - "\U0001F1F5\U0001F1ED 菲律宾 Edge" + - "\U0001F1E6\U0001F1F7 阿根廷 Edge" + - "\U0001F1F0\U0001F1F7 韩国 Azure" + - "\U0001F1F0\U0001F1F7 韩国 Edge" + - "\U0001F1ED\U0001F1F0 香港 AC [01]" + - "\U0001F1ED\U0001F1F0 香港 AC [02]" + - "\U0001F1ED\U0001F1F0 香港 DMIT [01]" + - "\U0001F1ED\U0001F1F0 香港 DMIT [02]" + - "\U0001F1ED\U0001F1F0 香港 DMIT [03]" + - "\U0001F1ED\U0001F1F0 香港 DMIT [04]" + - "\U0001F1ED\U0001F1F0 香港 DMIT [05]" + - "\U0001F1ED\U0001F1F0 香港 Edge [01]" + - "\U0001F1ED\U0001F1F0 香港 Edge [02]" + - "\U0001F1ED\U0001F1F0 香港 Edge [03]" + - "\U0001F1ED\U0001F1F0 香港 Edge [04]" + - "\U0001F1ED\U0001F1F0 香港 HKT [01]" + - "\U0001F1ED\U0001F1F0 香港 HKT [02]" + - "\U0001F1ED\U0001F1F0 香港 HKT [03]" + - "\U0001F1ED\U0001F1F0 香港 HKT [04]" + - "\U0001F1ED\U0001F1F0 香港 HKT [05]" + - "\U0001F1ED\U0001F1F0 香港 HKT [06]" + - "\U0001F1ED\U0001F1F0 香港 HKT [07]" + - "\U0001F1ED\U0001F1F0 香港 HKT [08]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [05] [Std]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [06] [Std]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [07] [Std]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [08] [Std]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [09] [Premium]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [10] [Premium]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [11] [Premium]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [12] [Premium]" +- name: Global TV + type: select + proxies: + - Proxy + - DIRECT + - "\U0001F1F7\U0001F1FA 俄罗斯 Edge" + - "\U0001F1E8\U0001F1E6 加拿大 Edge" + - "\U0001F1EE\U0001F1F3 印度 Edge" + - "\U0001F1E8\U0001F1F3 台湾 AC" + - "\U0001F1E8\U0001F1F3 台湾 CHT [01]" + - "\U0001F1E8\U0001F1F3 台湾 CHT [02]" + - "\U0001F1E8\U0001F1F3 台湾 CHT [03]" + - "\U0001F1E8\U0001F1F3 台湾 Edge" + - "\U0001F1E8\U0001F1F3 台湾 IEPL [05] [Std]" + - "\U0001F1E8\U0001F1F3 台湾 IEPL [06] [Premium]" + - "\U0001F1F9\U0001F1F7 土耳其 Edge" + - "\U0001F1E7\U0001F1F7 巴西 Edge" + - "\U0001F1E9\U0001F1EA 德国 Edge" + - "\U0001F1F8\U0001F1EC 新加坡 AC" + - "\U0001F1F8\U0001F1EC 新加坡 Azure" + - "\U0001F1F8\U0001F1EC 新加坡 Edge [01]" + - "\U0001F1F8\U0001F1EC 新加坡 Edge [02]" + - "\U0001F1F8\U0001F1EC 新加坡 IEPL [05] [Std]" + - "\U0001F1F8\U0001F1EC 新加坡 IEPL [06] [Premium]" + - "\U0001F1EF\U0001F1F5 日本 BBTEC [01]" + - "\U0001F1EF\U0001F1F5 日本 BBTEC [02]" + - "\U0001F1EF\U0001F1F5 日本 Edge [01]" + - "\U0001F1EF\U0001F1F5 日本 Edge [02]" + - "\U0001F1EF\U0001F1F5 日本 Edge [03]" + - "\U0001F1EB\U0001F1F7 法国 Edge" + - "\U0001F1F9\U0001F1ED 泰国 Edge" + - "\U0001F1E6\U0001F1FA 澳大利亚 Edge" + - "\U0001F1FA\U0001F1F8 美国 Azure" + - "\U0001F1FA\U0001F1F8 美国 DMIT [01]" + - "\U0001F1FA\U0001F1F8 美国 DMIT [02]" + - "\U0001F1FA\U0001F1F8 美国 Edge" + - "\U0001F1FA\U0001F1F8 美国 GIA [01]" + - "\U0001F1FA\U0001F1F8 美国 GIA [02]" + - "\U0001F1EC\U0001F1E7 英国 Edge" + - "\U0001F1F5\U0001F1ED 菲律宾 Edge" + - "\U0001F1E6\U0001F1F7 阿根廷 Edge" + - "\U0001F1F0\U0001F1F7 韩国 Azure" + - "\U0001F1F0\U0001F1F7 韩国 Edge" + - "\U0001F1ED\U0001F1F0 香港 AC [01]" + - "\U0001F1ED\U0001F1F0 香港 AC [02]" + - "\U0001F1ED\U0001F1F0 香港 DMIT [01]" + - "\U0001F1ED\U0001F1F0 香港 DMIT [02]" + - "\U0001F1ED\U0001F1F0 香港 DMIT [03]" + - "\U0001F1ED\U0001F1F0 香港 DMIT [04]" + - "\U0001F1ED\U0001F1F0 香港 DMIT [05]" + - "\U0001F1ED\U0001F1F0 香港 Edge [01]" + - "\U0001F1ED\U0001F1F0 香港 Edge [02]" + - "\U0001F1ED\U0001F1F0 香港 Edge [03]" + - "\U0001F1ED\U0001F1F0 香港 Edge [04]" + - "\U0001F1ED\U0001F1F0 香港 HKT [01]" + - "\U0001F1ED\U0001F1F0 香港 HKT [02]" + - "\U0001F1ED\U0001F1F0 香港 HKT [03]" + - "\U0001F1ED\U0001F1F0 香港 HKT [04]" + - "\U0001F1ED\U0001F1F0 香港 HKT [05]" + - "\U0001F1ED\U0001F1F0 香港 HKT [06]" + - "\U0001F1ED\U0001F1F0 香港 HKT [07]" + - "\U0001F1ED\U0001F1F0 香港 HKT [08]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [05] [Std]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [06] [Std]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [07] [Std]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [08] [Std]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [09] [Premium]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [10] [Premium]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [11] [Premium]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [12] [Premium]" +- name: Apple + type: select + proxies: + - DIRECT + - Proxy + - "\U0001F1F7\U0001F1FA 俄罗斯 Edge" + - "\U0001F1E8\U0001F1E6 加拿大 Edge" + - "\U0001F1EE\U0001F1F3 印度 Edge" + - "\U0001F1E8\U0001F1F3 台湾 AC" + - "\U0001F1E8\U0001F1F3 台湾 CHT [01]" + - "\U0001F1E8\U0001F1F3 台湾 CHT [02]" + - "\U0001F1E8\U0001F1F3 台湾 CHT [03]" + - "\U0001F1E8\U0001F1F3 台湾 Edge" + - "\U0001F1E8\U0001F1F3 台湾 IEPL [05] [Std]" + - "\U0001F1E8\U0001F1F3 台湾 IEPL [06] [Premium]" + - "\U0001F1F9\U0001F1F7 土耳其 Edge" + - "\U0001F1E7\U0001F1F7 巴西 Edge" + - "\U0001F1E9\U0001F1EA 德国 Edge" + - "\U0001F1F8\U0001F1EC 新加坡 AC" + - "\U0001F1F8\U0001F1EC 新加坡 Azure" + - "\U0001F1F8\U0001F1EC 新加坡 Edge [01]" + - "\U0001F1F8\U0001F1EC 新加坡 Edge [02]" + - "\U0001F1F8\U0001F1EC 新加坡 IEPL [05] [Std]" + - "\U0001F1F8\U0001F1EC 新加坡 IEPL [06] [Premium]" + - "\U0001F1EF\U0001F1F5 日本 BBTEC [01]" + - "\U0001F1EF\U0001F1F5 日本 BBTEC [02]" + - "\U0001F1EF\U0001F1F5 日本 Edge [01]" + - "\U0001F1EF\U0001F1F5 日本 Edge [02]" + - "\U0001F1EF\U0001F1F5 日本 Edge [03]" + - "\U0001F1EB\U0001F1F7 法国 Edge" + - "\U0001F1F9\U0001F1ED 泰国 Edge" + - "\U0001F1E6\U0001F1FA 澳大利亚 Edge" + - "\U0001F1FA\U0001F1F8 美国 Azure" + - "\U0001F1FA\U0001F1F8 美国 DMIT [01]" + - "\U0001F1FA\U0001F1F8 美国 DMIT [02]" + - "\U0001F1FA\U0001F1F8 美国 Edge" + - "\U0001F1FA\U0001F1F8 美国 GIA [01]" + - "\U0001F1FA\U0001F1F8 美国 GIA [02]" + - "\U0001F1EC\U0001F1E7 英国 Edge" + - "\U0001F1F5\U0001F1ED 菲律宾 Edge" + - "\U0001F1E6\U0001F1F7 阿根廷 Edge" + - "\U0001F1F0\U0001F1F7 韩国 Azure" + - "\U0001F1F0\U0001F1F7 韩国 Edge" + - "\U0001F1ED\U0001F1F0 香港 AC [01]" + - "\U0001F1ED\U0001F1F0 香港 AC [02]" + - "\U0001F1ED\U0001F1F0 香港 DMIT [01]" + - "\U0001F1ED\U0001F1F0 香港 DMIT [02]" + - "\U0001F1ED\U0001F1F0 香港 DMIT [03]" + - "\U0001F1ED\U0001F1F0 香港 DMIT [04]" + - "\U0001F1ED\U0001F1F0 香港 DMIT [05]" + - "\U0001F1ED\U0001F1F0 香港 Edge [01]" + - "\U0001F1ED\U0001F1F0 香港 Edge [02]" + - "\U0001F1ED\U0001F1F0 香港 Edge [03]" + - "\U0001F1ED\U0001F1F0 香港 Edge [04]" + - "\U0001F1ED\U0001F1F0 香港 HKT [01]" + - "\U0001F1ED\U0001F1F0 香港 HKT [02]" + - "\U0001F1ED\U0001F1F0 香港 HKT [03]" + - "\U0001F1ED\U0001F1F0 香港 HKT [04]" + - "\U0001F1ED\U0001F1F0 香港 HKT [05]" + - "\U0001F1ED\U0001F1F0 香港 HKT [06]" + - "\U0001F1ED\U0001F1F0 香港 HKT [07]" + - "\U0001F1ED\U0001F1F0 香港 HKT [08]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [05] [Std]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [06] [Std]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [07] [Std]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [08] [Std]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [09] [Premium]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [10] [Premium]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [11] [Premium]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [12] [Premium]" +- name: Apple TV + type: select + proxies: + - Proxy + - DIRECT + - "\U0001F1F7\U0001F1FA 俄罗斯 Edge" + - "\U0001F1E8\U0001F1E6 加拿大 Edge" + - "\U0001F1EE\U0001F1F3 印度 Edge" + - "\U0001F1E8\U0001F1F3 台湾 AC" + - "\U0001F1E8\U0001F1F3 台湾 CHT [01]" + - "\U0001F1E8\U0001F1F3 台湾 CHT [02]" + - "\U0001F1E8\U0001F1F3 台湾 CHT [03]" + - "\U0001F1E8\U0001F1F3 台湾 Edge" + - "\U0001F1E8\U0001F1F3 台湾 IEPL [05] [Std]" + - "\U0001F1E8\U0001F1F3 台湾 IEPL [06] [Premium]" + - "\U0001F1F9\U0001F1F7 土耳其 Edge" + - "\U0001F1E7\U0001F1F7 巴西 Edge" + - "\U0001F1E9\U0001F1EA 德国 Edge" + - "\U0001F1F8\U0001F1EC 新加坡 AC" + - "\U0001F1F8\U0001F1EC 新加坡 Azure" + - "\U0001F1F8\U0001F1EC 新加坡 Edge [01]" + - "\U0001F1F8\U0001F1EC 新加坡 Edge [02]" + - "\U0001F1F8\U0001F1EC 新加坡 IEPL [05] [Std]" + - "\U0001F1F8\U0001F1EC 新加坡 IEPL [06] [Premium]" + - "\U0001F1EF\U0001F1F5 日本 BBTEC [01]" + - "\U0001F1EF\U0001F1F5 日本 BBTEC [02]" + - "\U0001F1EF\U0001F1F5 日本 Edge [01]" + - "\U0001F1EF\U0001F1F5 日本 Edge [02]" + - "\U0001F1EF\U0001F1F5 日本 Edge [03]" + - "\U0001F1EB\U0001F1F7 法国 Edge" + - "\U0001F1F9\U0001F1ED 泰国 Edge" + - "\U0001F1E6\U0001F1FA 澳大利亚 Edge" + - "\U0001F1FA\U0001F1F8 美国 Azure" + - "\U0001F1FA\U0001F1F8 美国 DMIT [01]" + - "\U0001F1FA\U0001F1F8 美国 DMIT [02]" + - "\U0001F1FA\U0001F1F8 美国 Edge" + - "\U0001F1FA\U0001F1F8 美国 GIA [01]" + - "\U0001F1FA\U0001F1F8 美国 GIA [02]" + - "\U0001F1EC\U0001F1E7 英国 Edge" + - "\U0001F1F5\U0001F1ED 菲律宾 Edge" + - "\U0001F1E6\U0001F1F7 阿根廷 Edge" + - "\U0001F1F0\U0001F1F7 韩国 Azure" + - "\U0001F1F0\U0001F1F7 韩国 Edge" + - "\U0001F1ED\U0001F1F0 香港 AC [01]" + - "\U0001F1ED\U0001F1F0 香港 AC [02]" + - "\U0001F1ED\U0001F1F0 香港 DMIT [01]" + - "\U0001F1ED\U0001F1F0 香港 DMIT [02]" + - "\U0001F1ED\U0001F1F0 香港 DMIT [03]" + - "\U0001F1ED\U0001F1F0 香港 DMIT [04]" + - "\U0001F1ED\U0001F1F0 香港 DMIT [05]" + - "\U0001F1ED\U0001F1F0 香港 Edge [01]" + - "\U0001F1ED\U0001F1F0 香港 Edge [02]" + - "\U0001F1ED\U0001F1F0 香港 Edge [03]" + - "\U0001F1ED\U0001F1F0 香港 Edge [04]" + - "\U0001F1ED\U0001F1F0 香港 HKT [01]" + - "\U0001F1ED\U0001F1F0 香港 HKT [02]" + - "\U0001F1ED\U0001F1F0 香港 HKT [03]" + - "\U0001F1ED\U0001F1F0 香港 HKT [04]" + - "\U0001F1ED\U0001F1F0 香港 HKT [05]" + - "\U0001F1ED\U0001F1F0 香港 HKT [06]" + - "\U0001F1ED\U0001F1F0 香港 HKT [07]" + - "\U0001F1ED\U0001F1F0 香港 HKT [08]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [05] [Std]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [06] [Std]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [07] [Std]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [08] [Std]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [09] [Premium]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [10] [Premium]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [11] [Premium]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [12] [Premium]" +- name: Telegram + type: select + proxies: + - Proxy + - DIRECT + - "\U0001F1F7\U0001F1FA 俄罗斯 Edge" + - "\U0001F1E8\U0001F1E6 加拿大 Edge" + - "\U0001F1EE\U0001F1F3 印度 Edge" + - "\U0001F1E8\U0001F1F3 台湾 AC" + - "\U0001F1E8\U0001F1F3 台湾 CHT [01]" + - "\U0001F1E8\U0001F1F3 台湾 CHT [02]" + - "\U0001F1E8\U0001F1F3 台湾 CHT [03]" + - "\U0001F1E8\U0001F1F3 台湾 Edge" + - "\U0001F1E8\U0001F1F3 台湾 IEPL [05] [Std]" + - "\U0001F1E8\U0001F1F3 台湾 IEPL [06] [Premium]" + - "\U0001F1F9\U0001F1F7 土耳其 Edge" + - "\U0001F1E7\U0001F1F7 巴西 Edge" + - "\U0001F1E9\U0001F1EA 德国 Edge" + - "\U0001F1F8\U0001F1EC 新加坡 AC" + - "\U0001F1F8\U0001F1EC 新加坡 Azure" + - "\U0001F1F8\U0001F1EC 新加坡 Edge [01]" + - "\U0001F1F8\U0001F1EC 新加坡 Edge [02]" + - "\U0001F1F8\U0001F1EC 新加坡 IEPL [05] [Std]" + - "\U0001F1F8\U0001F1EC 新加坡 IEPL [06] [Premium]" + - "\U0001F1EF\U0001F1F5 日本 BBTEC [01]" + - "\U0001F1EF\U0001F1F5 日本 BBTEC [02]" + - "\U0001F1EF\U0001F1F5 日本 Edge [01]" + - "\U0001F1EF\U0001F1F5 日本 Edge [02]" + - "\U0001F1EF\U0001F1F5 日本 Edge [03]" + - "\U0001F1EB\U0001F1F7 法国 Edge" + - "\U0001F1F9\U0001F1ED 泰国 Edge" + - "\U0001F1E6\U0001F1FA 澳大利亚 Edge" + - "\U0001F1FA\U0001F1F8 美国 Azure" + - "\U0001F1FA\U0001F1F8 美国 DMIT [01]" + - "\U0001F1FA\U0001F1F8 美国 DMIT [02]" + - "\U0001F1FA\U0001F1F8 美国 Edge" + - "\U0001F1FA\U0001F1F8 美国 GIA [01]" + - "\U0001F1FA\U0001F1F8 美国 GIA [02]" + - "\U0001F1EC\U0001F1E7 英国 Edge" + - "\U0001F1F5\U0001F1ED 菲律宾 Edge" + - "\U0001F1E6\U0001F1F7 阿根廷 Edge" + - "\U0001F1F0\U0001F1F7 韩国 Azure" + - "\U0001F1F0\U0001F1F7 韩国 Edge" + - "\U0001F1ED\U0001F1F0 香港 AC [01]" + - "\U0001F1ED\U0001F1F0 香港 AC [02]" + - "\U0001F1ED\U0001F1F0 香港 DMIT [01]" + - "\U0001F1ED\U0001F1F0 香港 DMIT [02]" + - "\U0001F1ED\U0001F1F0 香港 DMIT [03]" + - "\U0001F1ED\U0001F1F0 香港 DMIT [04]" + - "\U0001F1ED\U0001F1F0 香港 DMIT [05]" + - "\U0001F1ED\U0001F1F0 香港 Edge [01]" + - "\U0001F1ED\U0001F1F0 香港 Edge [02]" + - "\U0001F1ED\U0001F1F0 香港 Edge [03]" + - "\U0001F1ED\U0001F1F0 香港 Edge [04]" + - "\U0001F1ED\U0001F1F0 香港 HKT [01]" + - "\U0001F1ED\U0001F1F0 香港 HKT [02]" + - "\U0001F1ED\U0001F1F0 香港 HKT [03]" + - "\U0001F1ED\U0001F1F0 香港 HKT [04]" + - "\U0001F1ED\U0001F1F0 香港 HKT [05]" + - "\U0001F1ED\U0001F1F0 香港 HKT [06]" + - "\U0001F1ED\U0001F1F0 香港 HKT [07]" + - "\U0001F1ED\U0001F1F0 香港 HKT [08]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [05] [Std]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [06] [Std]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [07] [Std]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [08] [Std]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [09] [Premium]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [10] [Premium]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [11] [Premium]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [12] [Premium]" +- name: Google FCM + type: select + proxies: + - Proxy + - DIRECT + - "\U0001F1F7\U0001F1FA 俄罗斯 Edge" + - "\U0001F1E8\U0001F1E6 加拿大 Edge" + - "\U0001F1EE\U0001F1F3 印度 Edge" + - "\U0001F1E8\U0001F1F3 台湾 AC" + - "\U0001F1E8\U0001F1F3 台湾 CHT [01]" + - "\U0001F1E8\U0001F1F3 台湾 CHT [02]" + - "\U0001F1E8\U0001F1F3 台湾 CHT [03]" + - "\U0001F1E8\U0001F1F3 台湾 Edge" + - "\U0001F1E8\U0001F1F3 台湾 IEPL [05] [Std]" + - "\U0001F1E8\U0001F1F3 台湾 IEPL [06] [Premium]" + - "\U0001F1F9\U0001F1F7 土耳其 Edge" + - "\U0001F1E7\U0001F1F7 巴西 Edge" + - "\U0001F1E9\U0001F1EA 德国 Edge" + - "\U0001F1F8\U0001F1EC 新加坡 AC" + - "\U0001F1F8\U0001F1EC 新加坡 Azure" + - "\U0001F1F8\U0001F1EC 新加坡 Edge [01]" + - "\U0001F1F8\U0001F1EC 新加坡 Edge [02]" + - "\U0001F1F8\U0001F1EC 新加坡 IEPL [05] [Std]" + - "\U0001F1F8\U0001F1EC 新加坡 IEPL [06] [Premium]" + - "\U0001F1EF\U0001F1F5 日本 BBTEC [01]" + - "\U0001F1EF\U0001F1F5 日本 BBTEC [02]" + - "\U0001F1EF\U0001F1F5 日本 Edge [01]" + - "\U0001F1EF\U0001F1F5 日本 Edge [02]" + - "\U0001F1EF\U0001F1F5 日本 Edge [03]" + - "\U0001F1EB\U0001F1F7 法国 Edge" + - "\U0001F1F9\U0001F1ED 泰国 Edge" + - "\U0001F1E6\U0001F1FA 澳大利亚 Edge" + - "\U0001F1FA\U0001F1F8 美国 Azure" + - "\U0001F1FA\U0001F1F8 美国 DMIT [01]" + - "\U0001F1FA\U0001F1F8 美国 DMIT [02]" + - "\U0001F1FA\U0001F1F8 美国 Edge" + - "\U0001F1FA\U0001F1F8 美国 GIA [01]" + - "\U0001F1FA\U0001F1F8 美国 GIA [02]" + - "\U0001F1EC\U0001F1E7 英国 Edge" + - "\U0001F1F5\U0001F1ED 菲律宾 Edge" + - "\U0001F1E6\U0001F1F7 阿根廷 Edge" + - "\U0001F1F0\U0001F1F7 韩国 Azure" + - "\U0001F1F0\U0001F1F7 韩国 Edge" + - "\U0001F1ED\U0001F1F0 香港 AC [01]" + - "\U0001F1ED\U0001F1F0 香港 AC [02]" + - "\U0001F1ED\U0001F1F0 香港 DMIT [01]" + - "\U0001F1ED\U0001F1F0 香港 DMIT [02]" + - "\U0001F1ED\U0001F1F0 香港 DMIT [03]" + - "\U0001F1ED\U0001F1F0 香港 DMIT [04]" + - "\U0001F1ED\U0001F1F0 香港 DMIT [05]" + - "\U0001F1ED\U0001F1F0 香港 Edge [01]" + - "\U0001F1ED\U0001F1F0 香港 Edge [02]" + - "\U0001F1ED\U0001F1F0 香港 Edge [03]" + - "\U0001F1ED\U0001F1F0 香港 Edge [04]" + - "\U0001F1ED\U0001F1F0 香港 HKT [01]" + - "\U0001F1ED\U0001F1F0 香港 HKT [02]" + - "\U0001F1ED\U0001F1F0 香港 HKT [03]" + - "\U0001F1ED\U0001F1F0 香港 HKT [04]" + - "\U0001F1ED\U0001F1F0 香港 HKT [05]" + - "\U0001F1ED\U0001F1F0 香港 HKT [06]" + - "\U0001F1ED\U0001F1F0 香港 HKT [07]" + - "\U0001F1ED\U0001F1F0 香港 HKT [08]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [05] [Std]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [06] [Std]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [07] [Std]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [08] [Std]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [09] [Premium]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [10] [Premium]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [11] [Premium]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [12] [Premium]" +- name: Crypto + type: select + proxies: + - Proxy + - DIRECT + - "\U0001F1F7\U0001F1FA 俄罗斯 Edge" + - "\U0001F1E8\U0001F1E6 加拿大 Edge" + - "\U0001F1EE\U0001F1F3 印度 Edge" + - "\U0001F1E8\U0001F1F3 台湾 AC" + - "\U0001F1E8\U0001F1F3 台湾 CHT [01]" + - "\U0001F1E8\U0001F1F3 台湾 CHT [02]" + - "\U0001F1E8\U0001F1F3 台湾 CHT [03]" + - "\U0001F1E8\U0001F1F3 台湾 Edge" + - "\U0001F1E8\U0001F1F3 台湾 IEPL [05] [Std]" + - "\U0001F1E8\U0001F1F3 台湾 IEPL [06] [Premium]" + - "\U0001F1F9\U0001F1F7 土耳其 Edge" + - "\U0001F1E7\U0001F1F7 巴西 Edge" + - "\U0001F1E9\U0001F1EA 德国 Edge" + - "\U0001F1F8\U0001F1EC 新加坡 AC" + - "\U0001F1F8\U0001F1EC 新加坡 Azure" + - "\U0001F1F8\U0001F1EC 新加坡 Edge [01]" + - "\U0001F1F8\U0001F1EC 新加坡 Edge [02]" + - "\U0001F1F8\U0001F1EC 新加坡 IEPL [05] [Std]" + - "\U0001F1F8\U0001F1EC 新加坡 IEPL [06] [Premium]" + - "\U0001F1EF\U0001F1F5 日本 BBTEC [01]" + - "\U0001F1EF\U0001F1F5 日本 BBTEC [02]" + - "\U0001F1EF\U0001F1F5 日本 Edge [01]" + - "\U0001F1EF\U0001F1F5 日本 Edge [02]" + - "\U0001F1EF\U0001F1F5 日本 Edge [03]" + - "\U0001F1EB\U0001F1F7 法国 Edge" + - "\U0001F1F9\U0001F1ED 泰国 Edge" + - "\U0001F1E6\U0001F1FA 澳大利亚 Edge" + - "\U0001F1FA\U0001F1F8 美国 Azure" + - "\U0001F1FA\U0001F1F8 美国 DMIT [01]" + - "\U0001F1FA\U0001F1F8 美国 DMIT [02]" + - "\U0001F1FA\U0001F1F8 美国 Edge" + - "\U0001F1FA\U0001F1F8 美国 GIA [01]" + - "\U0001F1FA\U0001F1F8 美国 GIA [02]" + - "\U0001F1EC\U0001F1E7 英国 Edge" + - "\U0001F1F5\U0001F1ED 菲律宾 Edge" + - "\U0001F1E6\U0001F1F7 阿根廷 Edge" + - "\U0001F1F0\U0001F1F7 韩国 Azure" + - "\U0001F1F0\U0001F1F7 韩国 Edge" + - "\U0001F1ED\U0001F1F0 香港 AC [01]" + - "\U0001F1ED\U0001F1F0 香港 AC [02]" + - "\U0001F1ED\U0001F1F0 香港 DMIT [01]" + - "\U0001F1ED\U0001F1F0 香港 DMIT [02]" + - "\U0001F1ED\U0001F1F0 香港 DMIT [03]" + - "\U0001F1ED\U0001F1F0 香港 DMIT [04]" + - "\U0001F1ED\U0001F1F0 香港 DMIT [05]" + - "\U0001F1ED\U0001F1F0 香港 Edge [01]" + - "\U0001F1ED\U0001F1F0 香港 Edge [02]" + - "\U0001F1ED\U0001F1F0 香港 Edge [03]" + - "\U0001F1ED\U0001F1F0 香港 Edge [04]" + - "\U0001F1ED\U0001F1F0 香港 HKT [01]" + - "\U0001F1ED\U0001F1F0 香港 HKT [02]" + - "\U0001F1ED\U0001F1F0 香港 HKT [03]" + - "\U0001F1ED\U0001F1F0 香港 HKT [04]" + - "\U0001F1ED\U0001F1F0 香港 HKT [05]" + - "\U0001F1ED\U0001F1F0 香港 HKT [06]" + - "\U0001F1ED\U0001F1F0 香港 HKT [07]" + - "\U0001F1ED\U0001F1F0 香港 HKT [08]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [05] [Std]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [06] [Std]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [07] [Std]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [08] [Std]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [09] [Premium]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [10] [Premium]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [11] [Premium]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [12] [Premium]" +- name: Discord + type: select + proxies: + - Proxy + - DIRECT + - "\U0001F1F7\U0001F1FA 俄罗斯 Edge" + - "\U0001F1E8\U0001F1E6 加拿大 Edge" + - "\U0001F1EE\U0001F1F3 印度 Edge" + - "\U0001F1E8\U0001F1F3 台湾 AC" + - "\U0001F1E8\U0001F1F3 台湾 CHT [01]" + - "\U0001F1E8\U0001F1F3 台湾 CHT [02]" + - "\U0001F1E8\U0001F1F3 台湾 CHT [03]" + - "\U0001F1E8\U0001F1F3 台湾 Edge" + - "\U0001F1E8\U0001F1F3 台湾 IEPL [05] [Std]" + - "\U0001F1E8\U0001F1F3 台湾 IEPL [06] [Premium]" + - "\U0001F1F9\U0001F1F7 土耳其 Edge" + - "\U0001F1E7\U0001F1F7 巴西 Edge" + - "\U0001F1E9\U0001F1EA 德国 Edge" + - "\U0001F1F8\U0001F1EC 新加坡 AC" + - "\U0001F1F8\U0001F1EC 新加坡 Azure" + - "\U0001F1F8\U0001F1EC 新加坡 Edge [01]" + - "\U0001F1F8\U0001F1EC 新加坡 Edge [02]" + - "\U0001F1F8\U0001F1EC 新加坡 IEPL [05] [Std]" + - "\U0001F1F8\U0001F1EC 新加坡 IEPL [06] [Premium]" + - "\U0001F1EF\U0001F1F5 日本 BBTEC [01]" + - "\U0001F1EF\U0001F1F5 日本 BBTEC [02]" + - "\U0001F1EF\U0001F1F5 日本 Edge [01]" + - "\U0001F1EF\U0001F1F5 日本 Edge [02]" + - "\U0001F1EF\U0001F1F5 日本 Edge [03]" + - "\U0001F1EB\U0001F1F7 法国 Edge" + - "\U0001F1F9\U0001F1ED 泰国 Edge" + - "\U0001F1E6\U0001F1FA 澳大利亚 Edge" + - "\U0001F1FA\U0001F1F8 美国 Azure" + - "\U0001F1FA\U0001F1F8 美国 DMIT [01]" + - "\U0001F1FA\U0001F1F8 美国 DMIT [02]" + - "\U0001F1FA\U0001F1F8 美国 Edge" + - "\U0001F1FA\U0001F1F8 美国 GIA [01]" + - "\U0001F1FA\U0001F1F8 美国 GIA [02]" + - "\U0001F1EC\U0001F1E7 英国 Edge" + - "\U0001F1F5\U0001F1ED 菲律宾 Edge" + - "\U0001F1E6\U0001F1F7 阿根廷 Edge" + - "\U0001F1F0\U0001F1F7 韩国 Azure" + - "\U0001F1F0\U0001F1F7 韩国 Edge" + - "\U0001F1ED\U0001F1F0 香港 AC [01]" + - "\U0001F1ED\U0001F1F0 香港 AC [02]" + - "\U0001F1ED\U0001F1F0 香港 DMIT [01]" + - "\U0001F1ED\U0001F1F0 香港 DMIT [02]" + - "\U0001F1ED\U0001F1F0 香港 DMIT [03]" + - "\U0001F1ED\U0001F1F0 香港 DMIT [04]" + - "\U0001F1ED\U0001F1F0 香港 DMIT [05]" + - "\U0001F1ED\U0001F1F0 香港 Edge [01]" + - "\U0001F1ED\U0001F1F0 香港 Edge [02]" + - "\U0001F1ED\U0001F1F0 香港 Edge [03]" + - "\U0001F1ED\U0001F1F0 香港 Edge [04]" + - "\U0001F1ED\U0001F1F0 香港 HKT [01]" + - "\U0001F1ED\U0001F1F0 香港 HKT [02]" + - "\U0001F1ED\U0001F1F0 香港 HKT [03]" + - "\U0001F1ED\U0001F1F0 香港 HKT [04]" + - "\U0001F1ED\U0001F1F0 香港 HKT [05]" + - "\U0001F1ED\U0001F1F0 香港 HKT [06]" + - "\U0001F1ED\U0001F1F0 香港 HKT [07]" + - "\U0001F1ED\U0001F1F0 香港 HKT [08]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [05] [Std]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [06] [Std]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [07] [Std]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [08] [Std]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [09] [Premium]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [10] [Premium]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [11] [Premium]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [12] [Premium]" +- name: Microsoft + type: select + proxies: + - Proxy + - DIRECT + - "\U0001F1F7\U0001F1FA 俄罗斯 Edge" + - "\U0001F1E8\U0001F1E6 加拿大 Edge" + - "\U0001F1EE\U0001F1F3 印度 Edge" + - "\U0001F1E8\U0001F1F3 台湾 AC" + - "\U0001F1E8\U0001F1F3 台湾 CHT [01]" + - "\U0001F1E8\U0001F1F3 台湾 CHT [02]" + - "\U0001F1E8\U0001F1F3 台湾 CHT [03]" + - "\U0001F1E8\U0001F1F3 台湾 Edge" + - "\U0001F1E8\U0001F1F3 台湾 IEPL [05] [Std]" + - "\U0001F1E8\U0001F1F3 台湾 IEPL [06] [Premium]" + - "\U0001F1F9\U0001F1F7 土耳其 Edge" + - "\U0001F1E7\U0001F1F7 巴西 Edge" + - "\U0001F1E9\U0001F1EA 德国 Edge" + - "\U0001F1F8\U0001F1EC 新加坡 AC" + - "\U0001F1F8\U0001F1EC 新加坡 Azure" + - "\U0001F1F8\U0001F1EC 新加坡 Edge [01]" + - "\U0001F1F8\U0001F1EC 新加坡 Edge [02]" + - "\U0001F1F8\U0001F1EC 新加坡 IEPL [05] [Std]" + - "\U0001F1F8\U0001F1EC 新加坡 IEPL [06] [Premium]" + - "\U0001F1EF\U0001F1F5 日本 BBTEC [01]" + - "\U0001F1EF\U0001F1F5 日本 BBTEC [02]" + - "\U0001F1EF\U0001F1F5 日本 Edge [01]" + - "\U0001F1EF\U0001F1F5 日本 Edge [02]" + - "\U0001F1EF\U0001F1F5 日本 Edge [03]" + - "\U0001F1EB\U0001F1F7 法国 Edge" + - "\U0001F1F9\U0001F1ED 泰国 Edge" + - "\U0001F1E6\U0001F1FA 澳大利亚 Edge" + - "\U0001F1FA\U0001F1F8 美国 Azure" + - "\U0001F1FA\U0001F1F8 美国 DMIT [01]" + - "\U0001F1FA\U0001F1F8 美国 DMIT [02]" + - "\U0001F1FA\U0001F1F8 美国 Edge" + - "\U0001F1FA\U0001F1F8 美国 GIA [01]" + - "\U0001F1FA\U0001F1F8 美国 GIA [02]" + - "\U0001F1EC\U0001F1E7 英国 Edge" + - "\U0001F1F5\U0001F1ED 菲律宾 Edge" + - "\U0001F1E6\U0001F1F7 阿根廷 Edge" + - "\U0001F1F0\U0001F1F7 韩国 Azure" + - "\U0001F1F0\U0001F1F7 韩国 Edge" + - "\U0001F1ED\U0001F1F0 香港 AC [01]" + - "\U0001F1ED\U0001F1F0 香港 AC [02]" + - "\U0001F1ED\U0001F1F0 香港 DMIT [01]" + - "\U0001F1ED\U0001F1F0 香港 DMIT [02]" + - "\U0001F1ED\U0001F1F0 香港 DMIT [03]" + - "\U0001F1ED\U0001F1F0 香港 DMIT [04]" + - "\U0001F1ED\U0001F1F0 香港 DMIT [05]" + - "\U0001F1ED\U0001F1F0 香港 Edge [01]" + - "\U0001F1ED\U0001F1F0 香港 Edge [02]" + - "\U0001F1ED\U0001F1F0 香港 Edge [03]" + - "\U0001F1ED\U0001F1F0 香港 Edge [04]" + - "\U0001F1ED\U0001F1F0 香港 HKT [01]" + - "\U0001F1ED\U0001F1F0 香港 HKT [02]" + - "\U0001F1ED\U0001F1F0 香港 HKT [03]" + - "\U0001F1ED\U0001F1F0 香港 HKT [04]" + - "\U0001F1ED\U0001F1F0 香港 HKT [05]" + - "\U0001F1ED\U0001F1F0 香港 HKT [06]" + - "\U0001F1ED\U0001F1F0 香港 HKT [07]" + - "\U0001F1ED\U0001F1F0 香港 HKT [08]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [05] [Std]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [06] [Std]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [07] [Std]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [08] [Std]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [09] [Premium]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [10] [Premium]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [11] [Premium]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [12] [Premium]" +- name: OpenAI + type: select + proxies: + - Proxy + - DIRECT + - "\U0001F1F7\U0001F1FA 俄罗斯 Edge" + - "\U0001F1E8\U0001F1E6 加拿大 Edge" + - "\U0001F1EE\U0001F1F3 印度 Edge" + - "\U0001F1E8\U0001F1F3 台湾 AC" + - "\U0001F1E8\U0001F1F3 台湾 CHT [01]" + - "\U0001F1E8\U0001F1F3 台湾 CHT [02]" + - "\U0001F1E8\U0001F1F3 台湾 CHT [03]" + - "\U0001F1E8\U0001F1F3 台湾 Edge" + - "\U0001F1E8\U0001F1F3 台湾 IEPL [05] [Std]" + - "\U0001F1E8\U0001F1F3 台湾 IEPL [06] [Premium]" + - "\U0001F1F9\U0001F1F7 土耳其 Edge" + - "\U0001F1E7\U0001F1F7 巴西 Edge" + - "\U0001F1E9\U0001F1EA 德国 Edge" + - "\U0001F1F8\U0001F1EC 新加坡 AC" + - "\U0001F1F8\U0001F1EC 新加坡 Azure" + - "\U0001F1F8\U0001F1EC 新加坡 Edge [01]" + - "\U0001F1F8\U0001F1EC 新加坡 Edge [02]" + - "\U0001F1F8\U0001F1EC 新加坡 IEPL [05] [Std]" + - "\U0001F1F8\U0001F1EC 新加坡 IEPL [06] [Premium]" + - "\U0001F1EF\U0001F1F5 日本 BBTEC [01]" + - "\U0001F1EF\U0001F1F5 日本 BBTEC [02]" + - "\U0001F1EF\U0001F1F5 日本 Edge [01]" + - "\U0001F1EF\U0001F1F5 日本 Edge [02]" + - "\U0001F1EF\U0001F1F5 日本 Edge [03]" + - "\U0001F1EB\U0001F1F7 法国 Edge" + - "\U0001F1F9\U0001F1ED 泰国 Edge" + - "\U0001F1E6\U0001F1FA 澳大利亚 Edge" + - "\U0001F1FA\U0001F1F8 美国 Azure" + - "\U0001F1FA\U0001F1F8 美国 DMIT [01]" + - "\U0001F1FA\U0001F1F8 美国 DMIT [02]" + - "\U0001F1FA\U0001F1F8 美国 Edge" + - "\U0001F1FA\U0001F1F8 美国 GIA [01]" + - "\U0001F1FA\U0001F1F8 美国 GIA [02]" + - "\U0001F1EC\U0001F1E7 英国 Edge" + - "\U0001F1F5\U0001F1ED 菲律宾 Edge" + - "\U0001F1E6\U0001F1F7 阿根廷 Edge" + - "\U0001F1F0\U0001F1F7 韩国 Azure" + - "\U0001F1F0\U0001F1F7 韩国 Edge" + - "\U0001F1ED\U0001F1F0 香港 AC [01]" + - "\U0001F1ED\U0001F1F0 香港 AC [02]" + - "\U0001F1ED\U0001F1F0 香港 DMIT [01]" + - "\U0001F1ED\U0001F1F0 香港 DMIT [02]" + - "\U0001F1ED\U0001F1F0 香港 DMIT [03]" + - "\U0001F1ED\U0001F1F0 香港 DMIT [04]" + - "\U0001F1ED\U0001F1F0 香港 DMIT [05]" + - "\U0001F1ED\U0001F1F0 香港 Edge [01]" + - "\U0001F1ED\U0001F1F0 香港 Edge [02]" + - "\U0001F1ED\U0001F1F0 香港 Edge [03]" + - "\U0001F1ED\U0001F1F0 香港 Edge [04]" + - "\U0001F1ED\U0001F1F0 香港 HKT [01]" + - "\U0001F1ED\U0001F1F0 香港 HKT [02]" + - "\U0001F1ED\U0001F1F0 香港 HKT [03]" + - "\U0001F1ED\U0001F1F0 香港 HKT [04]" + - "\U0001F1ED\U0001F1F0 香港 HKT [05]" + - "\U0001F1ED\U0001F1F0 香港 HKT [06]" + - "\U0001F1ED\U0001F1F0 香港 HKT [07]" + - "\U0001F1ED\U0001F1F0 香港 HKT [08]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [05] [Std]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [06] [Std]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [07] [Std]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [08] [Std]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [09] [Premium]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [10] [Premium]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [11] [Premium]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [12] [Premium]" +- name: PayPal + type: select + proxies: + - DIRECT + - Proxy + - "\U0001F1F7\U0001F1FA 俄罗斯 Edge" + - "\U0001F1E8\U0001F1E6 加拿大 Edge" + - "\U0001F1EE\U0001F1F3 印度 Edge" + - "\U0001F1E8\U0001F1F3 台湾 AC" + - "\U0001F1E8\U0001F1F3 台湾 CHT [01]" + - "\U0001F1E8\U0001F1F3 台湾 CHT [02]" + - "\U0001F1E8\U0001F1F3 台湾 CHT [03]" + - "\U0001F1E8\U0001F1F3 台湾 Edge" + - "\U0001F1E8\U0001F1F3 台湾 IEPL [05] [Std]" + - "\U0001F1E8\U0001F1F3 台湾 IEPL [06] [Premium]" + - "\U0001F1F9\U0001F1F7 土耳其 Edge" + - "\U0001F1E7\U0001F1F7 巴西 Edge" + - "\U0001F1E9\U0001F1EA 德国 Edge" + - "\U0001F1F8\U0001F1EC 新加坡 AC" + - "\U0001F1F8\U0001F1EC 新加坡 Azure" + - "\U0001F1F8\U0001F1EC 新加坡 Edge [01]" + - "\U0001F1F8\U0001F1EC 新加坡 Edge [02]" + - "\U0001F1F8\U0001F1EC 新加坡 IEPL [05] [Std]" + - "\U0001F1F8\U0001F1EC 新加坡 IEPL [06] [Premium]" + - "\U0001F1EF\U0001F1F5 日本 BBTEC [01]" + - "\U0001F1EF\U0001F1F5 日本 BBTEC [02]" + - "\U0001F1EF\U0001F1F5 日本 Edge [01]" + - "\U0001F1EF\U0001F1F5 日本 Edge [02]" + - "\U0001F1EF\U0001F1F5 日本 Edge [03]" + - "\U0001F1EB\U0001F1F7 法国 Edge" + - "\U0001F1F9\U0001F1ED 泰国 Edge" + - "\U0001F1E6\U0001F1FA 澳大利亚 Edge" + - "\U0001F1FA\U0001F1F8 美国 Azure" + - "\U0001F1FA\U0001F1F8 美国 DMIT [01]" + - "\U0001F1FA\U0001F1F8 美国 DMIT [02]" + - "\U0001F1FA\U0001F1F8 美国 Edge" + - "\U0001F1FA\U0001F1F8 美国 GIA [01]" + - "\U0001F1FA\U0001F1F8 美国 GIA [02]" + - "\U0001F1EC\U0001F1E7 英国 Edge" + - "\U0001F1F5\U0001F1ED 菲律宾 Edge" + - "\U0001F1E6\U0001F1F7 阿根廷 Edge" + - "\U0001F1F0\U0001F1F7 韩国 Azure" + - "\U0001F1F0\U0001F1F7 韩国 Edge" + - "\U0001F1ED\U0001F1F0 香港 AC [01]" + - "\U0001F1ED\U0001F1F0 香港 AC [02]" + - "\U0001F1ED\U0001F1F0 香港 DMIT [01]" + - "\U0001F1ED\U0001F1F0 香港 DMIT [02]" + - "\U0001F1ED\U0001F1F0 香港 DMIT [03]" + - "\U0001F1ED\U0001F1F0 香港 DMIT [04]" + - "\U0001F1ED\U0001F1F0 香港 DMIT [05]" + - "\U0001F1ED\U0001F1F0 香港 Edge [01]" + - "\U0001F1ED\U0001F1F0 香港 Edge [02]" + - "\U0001F1ED\U0001F1F0 香港 Edge [03]" + - "\U0001F1ED\U0001F1F0 香港 Edge [04]" + - "\U0001F1ED\U0001F1F0 香港 HKT [01]" + - "\U0001F1ED\U0001F1F0 香港 HKT [02]" + - "\U0001F1ED\U0001F1F0 香港 HKT [03]" + - "\U0001F1ED\U0001F1F0 香港 HKT [04]" + - "\U0001F1ED\U0001F1F0 香港 HKT [05]" + - "\U0001F1ED\U0001F1F0 香港 HKT [06]" + - "\U0001F1ED\U0001F1F0 香港 HKT [07]" + - "\U0001F1ED\U0001F1F0 香港 HKT [08]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [05] [Std]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [06] [Std]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [07] [Std]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [08] [Std]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [09] [Premium]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [10] [Premium]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [11] [Premium]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [12] [Premium]" +- name: Scholar + type: select + proxies: + - DIRECT + - Proxy + - "\U0001F1F7\U0001F1FA 俄罗斯 Edge" + - "\U0001F1E8\U0001F1E6 加拿大 Edge" + - "\U0001F1EE\U0001F1F3 印度 Edge" + - "\U0001F1E8\U0001F1F3 台湾 AC" + - "\U0001F1E8\U0001F1F3 台湾 CHT [01]" + - "\U0001F1E8\U0001F1F3 台湾 CHT [02]" + - "\U0001F1E8\U0001F1F3 台湾 CHT [03]" + - "\U0001F1E8\U0001F1F3 台湾 Edge" + - "\U0001F1E8\U0001F1F3 台湾 IEPL [05] [Std]" + - "\U0001F1E8\U0001F1F3 台湾 IEPL [06] [Premium]" + - "\U0001F1F9\U0001F1F7 土耳其 Edge" + - "\U0001F1E7\U0001F1F7 巴西 Edge" + - "\U0001F1E9\U0001F1EA 德国 Edge" + - "\U0001F1F8\U0001F1EC 新加坡 AC" + - "\U0001F1F8\U0001F1EC 新加坡 Azure" + - "\U0001F1F8\U0001F1EC 新加坡 Edge [01]" + - "\U0001F1F8\U0001F1EC 新加坡 Edge [02]" + - "\U0001F1F8\U0001F1EC 新加坡 IEPL [05] [Std]" + - "\U0001F1F8\U0001F1EC 新加坡 IEPL [06] [Premium]" + - "\U0001F1EF\U0001F1F5 日本 BBTEC [01]" + - "\U0001F1EF\U0001F1F5 日本 BBTEC [02]" + - "\U0001F1EF\U0001F1F5 日本 Edge [01]" + - "\U0001F1EF\U0001F1F5 日本 Edge [02]" + - "\U0001F1EF\U0001F1F5 日本 Edge [03]" + - "\U0001F1EB\U0001F1F7 法国 Edge" + - "\U0001F1F9\U0001F1ED 泰国 Edge" + - "\U0001F1E6\U0001F1FA 澳大利亚 Edge" + - "\U0001F1FA\U0001F1F8 美国 Azure" + - "\U0001F1FA\U0001F1F8 美国 DMIT [01]" + - "\U0001F1FA\U0001F1F8 美国 DMIT [02]" + - "\U0001F1FA\U0001F1F8 美国 Edge" + - "\U0001F1FA\U0001F1F8 美国 GIA [01]" + - "\U0001F1FA\U0001F1F8 美国 GIA [02]" + - "\U0001F1EC\U0001F1E7 英国 Edge" + - "\U0001F1F5\U0001F1ED 菲律宾 Edge" + - "\U0001F1E6\U0001F1F7 阿根廷 Edge" + - "\U0001F1F0\U0001F1F7 韩国 Azure" + - "\U0001F1F0\U0001F1F7 韩国 Edge" + - "\U0001F1ED\U0001F1F0 香港 AC [01]" + - "\U0001F1ED\U0001F1F0 香港 AC [02]" + - "\U0001F1ED\U0001F1F0 香港 DMIT [01]" + - "\U0001F1ED\U0001F1F0 香港 DMIT [02]" + - "\U0001F1ED\U0001F1F0 香港 DMIT [03]" + - "\U0001F1ED\U0001F1F0 香港 DMIT [04]" + - "\U0001F1ED\U0001F1F0 香港 DMIT [05]" + - "\U0001F1ED\U0001F1F0 香港 Edge [01]" + - "\U0001F1ED\U0001F1F0 香港 Edge [02]" + - "\U0001F1ED\U0001F1F0 香港 Edge [03]" + - "\U0001F1ED\U0001F1F0 香港 Edge [04]" + - "\U0001F1ED\U0001F1F0 香港 HKT [01]" + - "\U0001F1ED\U0001F1F0 香港 HKT [02]" + - "\U0001F1ED\U0001F1F0 香港 HKT [03]" + - "\U0001F1ED\U0001F1F0 香港 HKT [04]" + - "\U0001F1ED\U0001F1F0 香港 HKT [05]" + - "\U0001F1ED\U0001F1F0 香港 HKT [06]" + - "\U0001F1ED\U0001F1F0 香港 HKT [07]" + - "\U0001F1ED\U0001F1F0 香港 HKT [08]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [05] [Std]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [06] [Std]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [07] [Std]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [08] [Std]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [09] [Premium]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [10] [Premium]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [11] [Premium]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [12] [Premium]" +- name: Speedtest + type: select + proxies: + - Proxy + - DIRECT + - "\U0001F1F7\U0001F1FA 俄罗斯 Edge" + - "\U0001F1E8\U0001F1E6 加拿大 Edge" + - "\U0001F1EE\U0001F1F3 印度 Edge" + - "\U0001F1E8\U0001F1F3 台湾 AC" + - "\U0001F1E8\U0001F1F3 台湾 CHT [01]" + - "\U0001F1E8\U0001F1F3 台湾 CHT [02]" + - "\U0001F1E8\U0001F1F3 台湾 CHT [03]" + - "\U0001F1E8\U0001F1F3 台湾 Edge" + - "\U0001F1E8\U0001F1F3 台湾 IEPL [05] [Std]" + - "\U0001F1E8\U0001F1F3 台湾 IEPL [06] [Premium]" + - "\U0001F1F9\U0001F1F7 土耳其 Edge" + - "\U0001F1E7\U0001F1F7 巴西 Edge" + - "\U0001F1E9\U0001F1EA 德国 Edge" + - "\U0001F1F8\U0001F1EC 新加坡 AC" + - "\U0001F1F8\U0001F1EC 新加坡 Azure" + - "\U0001F1F8\U0001F1EC 新加坡 Edge [01]" + - "\U0001F1F8\U0001F1EC 新加坡 Edge [02]" + - "\U0001F1F8\U0001F1EC 新加坡 IEPL [05] [Std]" + - "\U0001F1F8\U0001F1EC 新加坡 IEPL [06] [Premium]" + - "\U0001F1EF\U0001F1F5 日本 BBTEC [01]" + - "\U0001F1EF\U0001F1F5 日本 BBTEC [02]" + - "\U0001F1EF\U0001F1F5 日本 Edge [01]" + - "\U0001F1EF\U0001F1F5 日本 Edge [02]" + - "\U0001F1EF\U0001F1F5 日本 Edge [03]" + - "\U0001F1EB\U0001F1F7 法国 Edge" + - "\U0001F1F9\U0001F1ED 泰国 Edge" + - "\U0001F1E6\U0001F1FA 澳大利亚 Edge" + - "\U0001F1FA\U0001F1F8 美国 Azure" + - "\U0001F1FA\U0001F1F8 美国 DMIT [01]" + - "\U0001F1FA\U0001F1F8 美国 DMIT [02]" + - "\U0001F1FA\U0001F1F8 美国 Edge" + - "\U0001F1FA\U0001F1F8 美国 GIA [01]" + - "\U0001F1FA\U0001F1F8 美国 GIA [02]" + - "\U0001F1EC\U0001F1E7 英国 Edge" + - "\U0001F1F5\U0001F1ED 菲律宾 Edge" + - "\U0001F1E6\U0001F1F7 阿根廷 Edge" + - "\U0001F1F0\U0001F1F7 韩国 Azure" + - "\U0001F1F0\U0001F1F7 韩国 Edge" + - "\U0001F1ED\U0001F1F0 香港 AC [01]" + - "\U0001F1ED\U0001F1F0 香港 AC [02]" + - "\U0001F1ED\U0001F1F0 香港 DMIT [01]" + - "\U0001F1ED\U0001F1F0 香港 DMIT [02]" + - "\U0001F1ED\U0001F1F0 香港 DMIT [03]" + - "\U0001F1ED\U0001F1F0 香港 DMIT [04]" + - "\U0001F1ED\U0001F1F0 香港 DMIT [05]" + - "\U0001F1ED\U0001F1F0 香港 Edge [01]" + - "\U0001F1ED\U0001F1F0 香港 Edge [02]" + - "\U0001F1ED\U0001F1F0 香港 Edge [03]" + - "\U0001F1ED\U0001F1F0 香港 Edge [04]" + - "\U0001F1ED\U0001F1F0 香港 HKT [01]" + - "\U0001F1ED\U0001F1F0 香港 HKT [02]" + - "\U0001F1ED\U0001F1F0 香港 HKT [03]" + - "\U0001F1ED\U0001F1F0 香港 HKT [04]" + - "\U0001F1ED\U0001F1F0 香港 HKT [05]" + - "\U0001F1ED\U0001F1F0 香港 HKT [06]" + - "\U0001F1ED\U0001F1F0 香港 HKT [07]" + - "\U0001F1ED\U0001F1F0 香港 HKT [08]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [05] [Std]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [06] [Std]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [07] [Std]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [08] [Std]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [09] [Premium]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [10] [Premium]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [11] [Premium]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [12] [Premium]" +- name: Steam + type: select + proxies: + - Proxy + - DIRECT + - "\U0001F1F7\U0001F1FA 俄罗斯 Edge" + - "\U0001F1E8\U0001F1E6 加拿大 Edge" + - "\U0001F1EE\U0001F1F3 印度 Edge" + - "\U0001F1E8\U0001F1F3 台湾 AC" + - "\U0001F1E8\U0001F1F3 台湾 CHT [01]" + - "\U0001F1E8\U0001F1F3 台湾 CHT [02]" + - "\U0001F1E8\U0001F1F3 台湾 CHT [03]" + - "\U0001F1E8\U0001F1F3 台湾 Edge" + - "\U0001F1E8\U0001F1F3 台湾 IEPL [05] [Std]" + - "\U0001F1E8\U0001F1F3 台湾 IEPL [06] [Premium]" + - "\U0001F1F9\U0001F1F7 土耳其 Edge" + - "\U0001F1E7\U0001F1F7 巴西 Edge" + - "\U0001F1E9\U0001F1EA 德国 Edge" + - "\U0001F1F8\U0001F1EC 新加坡 AC" + - "\U0001F1F8\U0001F1EC 新加坡 Azure" + - "\U0001F1F8\U0001F1EC 新加坡 Edge [01]" + - "\U0001F1F8\U0001F1EC 新加坡 Edge [02]" + - "\U0001F1F8\U0001F1EC 新加坡 IEPL [05] [Std]" + - "\U0001F1F8\U0001F1EC 新加坡 IEPL [06] [Premium]" + - "\U0001F1EF\U0001F1F5 日本 BBTEC [01]" + - "\U0001F1EF\U0001F1F5 日本 BBTEC [02]" + - "\U0001F1EF\U0001F1F5 日本 Edge [01]" + - "\U0001F1EF\U0001F1F5 日本 Edge [02]" + - "\U0001F1EF\U0001F1F5 日本 Edge [03]" + - "\U0001F1EB\U0001F1F7 法国 Edge" + - "\U0001F1F9\U0001F1ED 泰国 Edge" + - "\U0001F1E6\U0001F1FA 澳大利亚 Edge" + - "\U0001F1FA\U0001F1F8 美国 Azure" + - "\U0001F1FA\U0001F1F8 美国 DMIT [01]" + - "\U0001F1FA\U0001F1F8 美国 DMIT [02]" + - "\U0001F1FA\U0001F1F8 美国 Edge" + - "\U0001F1FA\U0001F1F8 美国 GIA [01]" + - "\U0001F1FA\U0001F1F8 美国 GIA [02]" + - "\U0001F1EC\U0001F1E7 英国 Edge" + - "\U0001F1F5\U0001F1ED 菲律宾 Edge" + - "\U0001F1E6\U0001F1F7 阿根廷 Edge" + - "\U0001F1F0\U0001F1F7 韩国 Azure" + - "\U0001F1F0\U0001F1F7 韩国 Edge" + - "\U0001F1ED\U0001F1F0 香港 AC [01]" + - "\U0001F1ED\U0001F1F0 香港 AC [02]" + - "\U0001F1ED\U0001F1F0 香港 DMIT [01]" + - "\U0001F1ED\U0001F1F0 香港 DMIT [02]" + - "\U0001F1ED\U0001F1F0 香港 DMIT [03]" + - "\U0001F1ED\U0001F1F0 香港 DMIT [04]" + - "\U0001F1ED\U0001F1F0 香港 DMIT [05]" + - "\U0001F1ED\U0001F1F0 香港 Edge [01]" + - "\U0001F1ED\U0001F1F0 香港 Edge [02]" + - "\U0001F1ED\U0001F1F0 香港 Edge [03]" + - "\U0001F1ED\U0001F1F0 香港 Edge [04]" + - "\U0001F1ED\U0001F1F0 香港 HKT [01]" + - "\U0001F1ED\U0001F1F0 香港 HKT [02]" + - "\U0001F1ED\U0001F1F0 香港 HKT [03]" + - "\U0001F1ED\U0001F1F0 香港 HKT [04]" + - "\U0001F1ED\U0001F1F0 香港 HKT [05]" + - "\U0001F1ED\U0001F1F0 香港 HKT [06]" + - "\U0001F1ED\U0001F1F0 香港 HKT [07]" + - "\U0001F1ED\U0001F1F0 香港 HKT [08]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [05] [Std]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [06] [Std]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [07] [Std]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [08] [Std]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [09] [Premium]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [10] [Premium]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [11] [Premium]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [12] [Premium]" +- name: miHoYo + type: select + proxies: + - DIRECT + - Proxy + - "\U0001F1F7\U0001F1FA 俄罗斯 Edge" + - "\U0001F1E8\U0001F1E6 加拿大 Edge" + - "\U0001F1EE\U0001F1F3 印度 Edge" + - "\U0001F1E8\U0001F1F3 台湾 AC" + - "\U0001F1E8\U0001F1F3 台湾 CHT [01]" + - "\U0001F1E8\U0001F1F3 台湾 CHT [02]" + - "\U0001F1E8\U0001F1F3 台湾 CHT [03]" + - "\U0001F1E8\U0001F1F3 台湾 Edge" + - "\U0001F1E8\U0001F1F3 台湾 IEPL [05] [Std]" + - "\U0001F1E8\U0001F1F3 台湾 IEPL [06] [Premium]" + - "\U0001F1F9\U0001F1F7 土耳其 Edge" + - "\U0001F1E7\U0001F1F7 巴西 Edge" + - "\U0001F1E9\U0001F1EA 德国 Edge" + - "\U0001F1F8\U0001F1EC 新加坡 AC" + - "\U0001F1F8\U0001F1EC 新加坡 Azure" + - "\U0001F1F8\U0001F1EC 新加坡 Edge [01]" + - "\U0001F1F8\U0001F1EC 新加坡 Edge [02]" + - "\U0001F1F8\U0001F1EC 新加坡 IEPL [05] [Std]" + - "\U0001F1F8\U0001F1EC 新加坡 IEPL [06] [Premium]" + - "\U0001F1EF\U0001F1F5 日本 BBTEC [01]" + - "\U0001F1EF\U0001F1F5 日本 BBTEC [02]" + - "\U0001F1EF\U0001F1F5 日本 Edge [01]" + - "\U0001F1EF\U0001F1F5 日本 Edge [02]" + - "\U0001F1EF\U0001F1F5 日本 Edge [03]" + - "\U0001F1EB\U0001F1F7 法国 Edge" + - "\U0001F1F9\U0001F1ED 泰国 Edge" + - "\U0001F1E6\U0001F1FA 澳大利亚 Edge" + - "\U0001F1FA\U0001F1F8 美国 Azure" + - "\U0001F1FA\U0001F1F8 美国 DMIT [01]" + - "\U0001F1FA\U0001F1F8 美国 DMIT [02]" + - "\U0001F1FA\U0001F1F8 美国 Edge" + - "\U0001F1FA\U0001F1F8 美国 GIA [01]" + - "\U0001F1FA\U0001F1F8 美国 GIA [02]" + - "\U0001F1EC\U0001F1E7 英国 Edge" + - "\U0001F1F5\U0001F1ED 菲律宾 Edge" + - "\U0001F1E6\U0001F1F7 阿根廷 Edge" + - "\U0001F1F0\U0001F1F7 韩国 Azure" + - "\U0001F1F0\U0001F1F7 韩国 Edge" + - "\U0001F1ED\U0001F1F0 香港 AC [01]" + - "\U0001F1ED\U0001F1F0 香港 AC [02]" + - "\U0001F1ED\U0001F1F0 香港 DMIT [01]" + - "\U0001F1ED\U0001F1F0 香港 DMIT [02]" + - "\U0001F1ED\U0001F1F0 香港 DMIT [03]" + - "\U0001F1ED\U0001F1F0 香港 DMIT [04]" + - "\U0001F1ED\U0001F1F0 香港 DMIT [05]" + - "\U0001F1ED\U0001F1F0 香港 Edge [01]" + - "\U0001F1ED\U0001F1F0 香港 Edge [02]" + - "\U0001F1ED\U0001F1F0 香港 Edge [03]" + - "\U0001F1ED\U0001F1F0 香港 Edge [04]" + - "\U0001F1ED\U0001F1F0 香港 HKT [01]" + - "\U0001F1ED\U0001F1F0 香港 HKT [02]" + - "\U0001F1ED\U0001F1F0 香港 HKT [03]" + - "\U0001F1ED\U0001F1F0 香港 HKT [04]" + - "\U0001F1ED\U0001F1F0 香港 HKT [05]" + - "\U0001F1ED\U0001F1F0 香港 HKT [06]" + - "\U0001F1ED\U0001F1F0 香港 HKT [07]" + - "\U0001F1ED\U0001F1F0 香港 HKT [08]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [05] [Std]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [06] [Std]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [07] [Std]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [08] [Std]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [09] [Premium]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [10] [Premium]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [11] [Premium]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [12] [Premium]" +- name: Auto - UrlTest + type: url-test + proxies: + - "\U0001F1E8\U0001F1F3 台湾 AC" + - "\U0001F1E8\U0001F1F3 台湾 IEPL [05] [Std]" + - "\U0001F1E8\U0001F1F3 台湾 IEPL [06] [Premium]" + - "\U0001F1F8\U0001F1EC 新加坡 AC" + - "\U0001F1F8\U0001F1EC 新加坡 IEPL [05] [Std]" + - "\U0001F1F8\U0001F1EC 新加坡 IEPL [06] [Premium]" + - "\U0001F1EF\U0001F1F5 日本 BBTEC [01]" + - "\U0001F1EF\U0001F1F5 日本 BBTEC [02]" + - "\U0001F1ED\U0001F1F0 香港 AC [01]" + - "\U0001F1ED\U0001F1F0 香港 AC [02]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [05] [Std]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [06] [Std]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [07] [Std]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [08] [Std]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [09] [Premium]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [10] [Premium]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [11] [Premium]" + - "\U0001F1ED\U0001F1F0 香港 IEPL [12] [Premium]" + url: http://cp.cloudflare.com/generate_204 + interval: "3600" +rules: +- RULE-SET, Reject, AdBlock +- RULE-SET, Special, DIRECT +- RULE-SET, Anti IP, Anti IP +- RULE-SET, Netflix, Netflix +- RULE-SET, Disney Plus, Disney +- RULE-SET, YouTube, YouTube +- RULE-SET, Spotify, Spotify +- RULE-SET, Bilibili, Asian TV +- RULE-SET, IQ, Asian TV +- RULE-SET, IQIYI, Asian TV +- RULE-SET, Letv, Asian TV +- RULE-SET, Netease Music, Asian TV +- RULE-SET, Tencent Video, Asian TV +- RULE-SET, Youku, Asian TV +- RULE-SET, WeTV, Asian TV +- RULE-SET, ABC, Global TV +- RULE-SET, Abema TV, Global TV +- RULE-SET, Amazon, Global TV +- RULE-SET, Bahamut, Global TV +- RULE-SET, BBC iPlayer, Global TV +- RULE-SET, DAZN, Global TV +- RULE-SET, Discovery Plus, Global TV +- RULE-SET, encoreTVB, Global TV +- RULE-SET, F1 TV, Global TV +- RULE-SET, Fox Now, Global TV +- RULE-SET, Fox+, Global TV +- RULE-SET, HBO Go, Global TV +- RULE-SET, HBO Max, Global TV +- RULE-SET, Hulu Japan, Global TV +- RULE-SET, Hulu, Global TV +- RULE-SET, Japonx, Global TV +- RULE-SET, JOOX, Global TV +- RULE-SET, KKBOX, Global TV +- RULE-SET, KKTV, Global TV +- RULE-SET, Line TV, Global TV +- RULE-SET, myTV SUPER, Global TV +- RULE-SET, Niconico, Global TV +- RULE-SET, Pandora, Global TV +- RULE-SET, PBS, Global TV +- RULE-SET, Pornhub, Global TV +- RULE-SET, Soundcloud, Global TV +- RULE-SET, ViuTV, Global TV +- RULE-SET, Apple Music, Apple TV +- RULE-SET, Apple News, Apple TV +- RULE-SET, Apple TV, Apple TV +- RULE-SET, Apple, Apple +- RULE-SET, Telegram, Telegram +- RULE-SET, Crypto, Crypto +- RULE-SET, Discord, Discord +- RULE-SET, Google FCM, Google FCM +- RULE-SET, Microsoft, Microsoft +- RULE-SET, OpenAI, OpenAI +- RULE-SET, PayPal, PayPal +- RULE-SET, Scholar, Scholar +- RULE-SET, Speedtest, Speedtest +- RULE-SET, Steam, Steam +- RULE-SET, miHoYo, miHoYo +- RULE-SET, PROXY, Proxy +- RULE-SET, Domestic, Domestic +- RULE-SET, Domestic IPs, Domestic +- RULE-SET, LAN, DIRECT +- GEOIP, CN, Domestic +- MATCH, Others +script: + code: | + def main(ctx, metadata): + ruleset_action = { + 'Reject': 'AdBlock', + 'Special': 'DIRECT', + 'Anti IP': 'Anti IP', + 'Netflix': 'Netflix', + 'Disney Plus': 'Disney', + 'YouTube': 'YouTube', + 'Spotify': 'Spotify', + 'Bilibili': 'Asian TV', + 'IQ': 'Asian TV', + 'IQIYI': 'Asian TV', + 'Letv': 'Asian TV', + 'Netease Music': 'Asian TV', + 'Tencent Video': 'Asian TV', + 'Youku': 'Asian TV', + 'WeTV': 'Asian TV', + 'ABC': 'Global TV', + 'Abema TV': 'Global TV', + 'Amazon': 'Global TV', + 'Bahamut': 'Global TV', + 'BBC iPlayer': 'Global TV', + 'DAZN': 'Global TV', + 'Discovery Plus': 'Global TV', + 'encoreTVB': 'Global TV', + 'F1 TV': 'Global TV', + 'Fox Now': 'Global TV', + 'Fox+': 'Global TV', + 'HBO Go': 'Global TV', + 'HBO Max': 'Global TV', + 'Hulu Japan': 'Global TV', + 'Hulu': 'Global TV', + 'Japonx': 'Global TV', + 'JOOX': 'Global TV', + 'KKBOX': 'Global TV', + 'KKTV': 'Global TV', + 'Line TV': 'Global TV', + 'myTV SUPER': 'Global TV', + 'Niconico': 'Global TV', + 'Pandora': 'Global TV', + 'PBS': 'Global TV', + 'Pornhub': 'Global TV', + 'Soundcloud': 'Global TV', + 'ViuTV': 'Global TV', + 'Apple Music': 'Apple TV', + 'Apple News': 'Apple TV', + 'Apple TV': 'Apple TV', + 'Apple': 'Apple', + 'Telegram': 'Telegram', + 'Crypto': 'Crypto', + 'Discord': 'Discord', + 'Google FCM': 'Google FCM', + 'Microsoft': 'Microsoft', + 'OpenAI': 'OpenAI', + 'PayPal': 'PayPal', + 'Scholar': 'Scholar', + 'Speedtest': 'Speedtest', + 'Steam': 'Steam', + 'miHoYo': 'miHoYo', + 'PROXY': 'Proxy', + 'Domestic': 'Domestic', + 'Domestic IPs': 'Domestic', + 'LAN': 'DIRECT' + } + + port = int(metadata['dst_port']) + + if metadata['network'] == 'UDP' and port == 443: + ctx.log('[Script] matched QUIC traffic use reject') + return 'REJECT' + + port_list = [21, 22, 23, 53, 80, 123, 143, 194, 443, 465, 587, 853, 993, 995, 998, 2052, 2053, 2082, 2083, 2086, 2095, 2096, 3389, 5222, 5228, 5229, 5230, 8080, 8443, 8880, 8888, 8889] + if port not in port_list: + ctx.log('[Script] not common port use direct') + return 'DIRECT' + + if metadata['dst_ip'] == '': + metadata['dst_ip'] = ctx.resolve_ip(metadata['host']) + + for ruleset in ruleset_action: + if ctx.rule_providers[ruleset].match(metadata): + return ruleset_action[ruleset] + + if metadata['dst_ip'] != '': + code = ctx.geoip(metadata['dst_ip']) + if code == 'CN': + ctx.log('[Script] Geoip CN') + return 'Domestic' + + ctx.log('[Script] FINAL') + return 'Others' +rule-providers: + Reject: + type: http + behavior: classical + url: https://1a135efb-1e6c-4e3c-9d3d-a331bf6a6ee3.oss-cn-hangzhou.aliyuncs.com/Provider/Reject.yaml + path: ./Rules/Reject + interval: 86400 + Special: + type: http + behavior: classical + url: https://1a135efb-1e6c-4e3c-9d3d-a331bf6a6ee3.oss-cn-hangzhou.aliyuncs.com/Provider/Special.yaml + path: ./Rules/Special + interval: 86400 + PROXY: + type: http + behavior: classical + url: https://1a135efb-1e6c-4e3c-9d3d-a331bf6a6ee3.oss-cn-hangzhou.aliyuncs.com/Provider/Proxy.yaml + path: ./Rules/Proxy + interval: 86400 + Domestic: + type: http + behavior: classical + url: https://1a135efb-1e6c-4e3c-9d3d-a331bf6a6ee3.oss-cn-hangzhou.aliyuncs.com/Provider/Domestic.yaml + path: ./Rules/Domestic + interval: 86400 + Domestic IPs: + type: http + behavior: ipcidr + url: https://1a135efb-1e6c-4e3c-9d3d-a331bf6a6ee3.oss-cn-hangzhou.aliyuncs.com/Provider/Domestic%20IPs.yaml + path: ./Rules/Domestic_IPs + interval: 86400 + LAN: + type: http + behavior: classical + url: https://1a135efb-1e6c-4e3c-9d3d-a331bf6a6ee3.oss-cn-hangzhou.aliyuncs.com/Provider/LAN.yaml + path: ./Rules/LAN + interval: 86400 + Anti IP: + type: http + behavior: classical + url: https://1a135efb-1e6c-4e3c-9d3d-a331bf6a6ee3.oss-cn-hangzhou.aliyuncs.com/Provider/Anti.yaml + path: ./Rules/Anti_IP + interval: 86400 + Netflix: + type: http + behavior: classical + url: https://1a135efb-1e6c-4e3c-9d3d-a331bf6a6ee3.oss-cn-hangzhou.aliyuncs.com/Provider/Media/Netflix.yaml + path: ./Rules/Media/Netflix + interval: 86400 + Spotify: + type: http + behavior: classical + url: https://1a135efb-1e6c-4e3c-9d3d-a331bf6a6ee3.oss-cn-hangzhou.aliyuncs.com/Provider/Media/Spotify.yaml + path: ./Rules/Media/Spotify + interval: 86400 + YouTube: + type: http + behavior: classical + url: https://1a135efb-1e6c-4e3c-9d3d-a331bf6a6ee3.oss-cn-hangzhou.aliyuncs.com/Provider/Media/YouTube.yaml + path: ./Rules/Media/YouTube + interval: 86400 + Bilibili: + type: http + behavior: classical + url: https://1a135efb-1e6c-4e3c-9d3d-a331bf6a6ee3.oss-cn-hangzhou.aliyuncs.com/Provider/Media/Bilibili.yaml + path: ./Rules/Media/Bilibili + interval: 86400 + IQ: + type: http + behavior: classical + url: https://1a135efb-1e6c-4e3c-9d3d-a331bf6a6ee3.oss-cn-hangzhou.aliyuncs.com/Provider/Media/IQ.yaml + path: ./Rules/Media/IQI + interval: 86400 + IQIYI: + type: http + behavior: classical + url: https://1a135efb-1e6c-4e3c-9d3d-a331bf6a6ee3.oss-cn-hangzhou.aliyuncs.com/Provider/Media/IQIYI.yaml + path: ./Rules/Media/IQYI + interval: 86400 + Letv: + type: http + behavior: classical + url: https://1a135efb-1e6c-4e3c-9d3d-a331bf6a6ee3.oss-cn-hangzhou.aliyuncs.com/Provider/Media/Letv.yaml + path: ./Rules/Media/Letv + interval: 86400 + Netease Music: + type: http + behavior: classical + url: https://1a135efb-1e6c-4e3c-9d3d-a331bf6a6ee3.oss-cn-hangzhou.aliyuncs.com/Provider/Media/Netease%20Music.yaml + path: ./Rules/Media/Netease_Music + interval: 86400 + Tencent Video: + type: http + behavior: classical + url: https://1a135efb-1e6c-4e3c-9d3d-a331bf6a6ee3.oss-cn-hangzhou.aliyuncs.com/Provider/Media/Tencent%20Video.yaml + path: ./Rules/Media/Tencent_Video + interval: 86400 + Youku: + type: http + behavior: classical + url: https://1a135efb-1e6c-4e3c-9d3d-a331bf6a6ee3.oss-cn-hangzhou.aliyuncs.com/Provider/Media/Youku.yaml + path: ./Rules/Media/Youku + interval: 86400 + WeTV: + type: http + behavior: classical + url: https://1a135efb-1e6c-4e3c-9d3d-a331bf6a6ee3.oss-cn-hangzhou.aliyuncs.com/Provider/Media/WeTV.yaml + path: ./Rules/Media/WeTV + interval: 86400 + ABC: + type: http + behavior: classical + url: https://1a135efb-1e6c-4e3c-9d3d-a331bf6a6ee3.oss-cn-hangzhou.aliyuncs.com/Provider/Media/ABC.yaml + path: ./Rules/Media/ABC + interval: 86400 + Abema TV: + type: http + behavior: classical + url: https://1a135efb-1e6c-4e3c-9d3d-a331bf6a6ee3.oss-cn-hangzhou.aliyuncs.com/Provider/Media/Abema%20TV.yaml + path: ./Rules/Media/Abema_TV + interval: 86400 + Amazon: + type: http + behavior: classical + url: https://1a135efb-1e6c-4e3c-9d3d-a331bf6a6ee3.oss-cn-hangzhou.aliyuncs.com/Provider/Media/Amazon.yaml + path: ./Rules/Media/Amazon + interval: 86400 + Apple Music: + type: http + behavior: classical + url: https://1a135efb-1e6c-4e3c-9d3d-a331bf6a6ee3.oss-cn-hangzhou.aliyuncs.com/Provider/Media/Apple%20Music.yaml + path: ./Rules/Media/Apple_Music + interval: 86400 + Apple News: + type: http + behavior: classical + url: https://1a135efb-1e6c-4e3c-9d3d-a331bf6a6ee3.oss-cn-hangzhou.aliyuncs.com/Provider/Media/Apple%20News.yaml + path: ./Rules/Media/Apple_News + interval: 86400 + Apple TV: + type: http + behavior: classical + url: https://1a135efb-1e6c-4e3c-9d3d-a331bf6a6ee3.oss-cn-hangzhou.aliyuncs.com/Provider/Media/Apple%20TV.yaml + path: ./Rules/Media/Apple_TV + interval: 86400 + Bahamut: + type: http + behavior: classical + url: https://1a135efb-1e6c-4e3c-9d3d-a331bf6a6ee3.oss-cn-hangzhou.aliyuncs.com/Provider/Media/Bahamut.yaml + path: ./Rules/Media/Bahamut + interval: 86400 + BBC iPlayer: + type: http + behavior: classical + url: https://1a135efb-1e6c-4e3c-9d3d-a331bf6a6ee3.oss-cn-hangzhou.aliyuncs.com/Provider/Media/BBC%20iPlayer.yaml + path: ./Rules/Media/BBC_iPlayer + interval: 86400 + DAZN: + type: http + behavior: classical + url: https://1a135efb-1e6c-4e3c-9d3d-a331bf6a6ee3.oss-cn-hangzhou.aliyuncs.com/Provider/Media/DAZN.yaml + path: ./Rules/Media/DAZN + interval: 86400 + Discovery Plus: + type: http + behavior: classical + url: https://1a135efb-1e6c-4e3c-9d3d-a331bf6a6ee3.oss-cn-hangzhou.aliyuncs.com/Provider/Media/Discovery%20Plus.yaml + path: ./Rules/Media/Discovery_Plus + interval: 86400 + Disney Plus: + type: http + behavior: classical + url: https://1a135efb-1e6c-4e3c-9d3d-a331bf6a6ee3.oss-cn-hangzhou.aliyuncs.com/Provider/Media/Disney%20Plus.yaml + path: ./Rules/Media/Disney_Plus + interval: 86400 + encoreTVB: + type: http + behavior: classical + url: https://1a135efb-1e6c-4e3c-9d3d-a331bf6a6ee3.oss-cn-hangzhou.aliyuncs.com/Provider/Media/encoreTVB.yaml + path: ./Rules/Media/encoreTVB + interval: 86400 + F1 TV: + type: http + behavior: classical + url: https://1a135efb-1e6c-4e3c-9d3d-a331bf6a6ee3.oss-cn-hangzhou.aliyuncs.com/Provider/Media/F1%20TV.yaml + path: ./Rules/Media/F1_TV + interval: 86400 + Fox Now: + type: http + behavior: classical + url: https://1a135efb-1e6c-4e3c-9d3d-a331bf6a6ee3.oss-cn-hangzhou.aliyuncs.com/Provider/Media/Fox%20Now.yaml + path: ./Rules/Media/Fox_Now + interval: 86400 + Fox+: + type: http + behavior: classical + url: https://1a135efb-1e6c-4e3c-9d3d-a331bf6a6ee3.oss-cn-hangzhou.aliyuncs.com/Provider/Media/Fox%2B.yaml + path: ./Rules/Media/Fox+ + interval: 86400 + HBO Go: + type: http + behavior: classical + url: https://1a135efb-1e6c-4e3c-9d3d-a331bf6a6ee3.oss-cn-hangzhou.aliyuncs.com/Provider/Media/HBO%20Go.yaml + path: ./Rules/Media/HBO_Go + interval: 86400 + HBO Max: + type: http + behavior: classical + url: https://1a135efb-1e6c-4e3c-9d3d-a331bf6a6ee3.oss-cn-hangzhou.aliyuncs.com/Provider/Media/HBO%20Max.yaml + path: ./Rules/Media/HBO_Max + interval: 86400 + Hulu Japan: + type: http + behavior: classical + url: https://1a135efb-1e6c-4e3c-9d3d-a331bf6a6ee3.oss-cn-hangzhou.aliyuncs.com/Provider/Media/Hulu%20Japan.yaml + path: ./Rules/Media/Hulu_Japan + interval: 86400 + Hulu: + type: http + behavior: classical + url: https://1a135efb-1e6c-4e3c-9d3d-a331bf6a6ee3.oss-cn-hangzhou.aliyuncs.com/Provider/Media/Hulu.yaml + path: ./Rules/Media/Hulu + interval: 86400 + Japonx: + type: http + behavior: classical + url: https://1a135efb-1e6c-4e3c-9d3d-a331bf6a6ee3.oss-cn-hangzhou.aliyuncs.com/Provider/Media/Japonx.yaml + path: ./Rules/Media/Japonx + interval: 86400 + JOOX: + type: http + behavior: classical + url: https://1a135efb-1e6c-4e3c-9d3d-a331bf6a6ee3.oss-cn-hangzhou.aliyuncs.com/Provider/Media/JOOX.yaml + path: ./Rules/Media/JOOX + interval: 86400 + KKBOX: + type: http + behavior: classical + url: https://1a135efb-1e6c-4e3c-9d3d-a331bf6a6ee3.oss-cn-hangzhou.aliyuncs.com/Provider/Media/KKBOX.yaml + path: ./Rules/Media/KKBOX + interval: 86400 + KKTV: + type: http + behavior: classical + url: https://1a135efb-1e6c-4e3c-9d3d-a331bf6a6ee3.oss-cn-hangzhou.aliyuncs.com/Provider/Media/KKTV.yaml + path: ./Rules/Media/KKTV + interval: 86400 + Line TV: + type: http + behavior: classical + url: https://1a135efb-1e6c-4e3c-9d3d-a331bf6a6ee3.oss-cn-hangzhou.aliyuncs.com/Provider/Media/Line%20TV.yaml + path: ./Rules/Media/Line_TV + interval: 86400 + myTV SUPER: + type: http + behavior: classical + url: https://1a135efb-1e6c-4e3c-9d3d-a331bf6a6ee3.oss-cn-hangzhou.aliyuncs.com/Provider/Media/myTV%20SUPER.yaml + path: ./Rules/Media/myTV_SUPER + interval: 86400 + Niconico: + type: http + behavior: classical + url: https://1a135efb-1e6c-4e3c-9d3d-a331bf6a6ee3.oss-cn-hangzhou.aliyuncs.com/Provider/Media/Niconico.yaml + path: ./Rules/Media/Niconico + interval: 86400 + Pandora: + type: http + behavior: classical + url: https://1a135efb-1e6c-4e3c-9d3d-a331bf6a6ee3.oss-cn-hangzhou.aliyuncs.com/Provider/Media/Pandora.yaml + path: ./Rules/Media/Pandora + interval: 86400 + PBS: + type: http + behavior: classical + url: https://1a135efb-1e6c-4e3c-9d3d-a331bf6a6ee3.oss-cn-hangzhou.aliyuncs.com/Provider/Media/PBS.yaml + path: ./Rules/Media/PBS + interval: 86400 + Pornhub: + type: http + behavior: classical + url: https://1a135efb-1e6c-4e3c-9d3d-a331bf6a6ee3.oss-cn-hangzhou.aliyuncs.com/Provider/Media/Pornhub.yaml + path: ./Rules/Media/Pornhub + interval: 86400 + Soundcloud: + type: http + behavior: classical + url: https://1a135efb-1e6c-4e3c-9d3d-a331bf6a6ee3.oss-cn-hangzhou.aliyuncs.com/Provider/Media/Soundcloud.yaml + path: ./Rules/Media/Soundcloud + interval: 86400 + ViuTV: + type: http + behavior: classical + url: https://1a135efb-1e6c-4e3c-9d3d-a331bf6a6ee3.oss-cn-hangzhou.aliyuncs.com/Provider/Media/ViuTV.yaml + path: ./Rules/Media/ViuTV + interval: 86400 + Telegram: + type: http + behavior: classical + url: https://1a135efb-1e6c-4e3c-9d3d-a331bf6a6ee3.oss-cn-hangzhou.aliyuncs.com/Provider/Telegram.yaml + path: ./Rules/Telegram + interval: 86400 + Crypto: + type: http + behavior: classical + url: https://1a135efb-1e6c-4e3c-9d3d-a331bf6a6ee3.oss-cn-hangzhou.aliyuncs.com/Provider/Crypto.yaml + path: ./Rules/Crypto + interval: 86400 + Discord: + type: http + behavior: classical + url: https://1a135efb-1e6c-4e3c-9d3d-a331bf6a6ee3.oss-cn-hangzhou.aliyuncs.com/Provider/Discord.yaml + path: ./Rules/Discord + interval: 86400 + Steam: + type: http + behavior: classical + url: https://1a135efb-1e6c-4e3c-9d3d-a331bf6a6ee3.oss-cn-hangzhou.aliyuncs.com/Provider/Steam.yaml + path: ./Rules/Steam + interval: 86400 + Speedtest: + type: http + behavior: classical + url: https://1a135efb-1e6c-4e3c-9d3d-a331bf6a6ee3.oss-cn-hangzhou.aliyuncs.com/Provider/Speedtest.yaml + path: ./Rules/Speedtest + interval: 86400 + PayPal: + type: http + behavior: classical + url: https://1a135efb-1e6c-4e3c-9d3d-a331bf6a6ee3.oss-cn-hangzhou.aliyuncs.com/Provider/PayPal.yaml + path: ./Rules/PayPal + interval: 86400 + Microsoft: + type: http + behavior: classical + url: https://1a135efb-1e6c-4e3c-9d3d-a331bf6a6ee3.oss-cn-hangzhou.aliyuncs.com/Provider/Microsoft.yaml + path: ./Rules/Microsoft + interval: 86400 + OpenAI: + type: http + behavior: classical + url: https://1a135efb-1e6c-4e3c-9d3d-a331bf6a6ee3.oss-cn-hangzhou.aliyuncs.com/Provider/OpenAI.yaml + path: ./Rules/OpenAI + interval: 86400 + Apple: + type: http + behavior: classical + url: https://1a135efb-1e6c-4e3c-9d3d-a331bf6a6ee3.oss-cn-hangzhou.aliyuncs.com/Provider/Apple.yaml + path: ./Rules/Apple + interval: 86400 + Google FCM: + type: http + behavior: classical + url: https://1a135efb-1e6c-4e3c-9d3d-a331bf6a6ee3.oss-cn-hangzhou.aliyuncs.com/Provider/Google%20FCM.yaml + path: ./Rules/Google FCM + interval: 86400 + Scholar: + type: http + behavior: classical + url: https://1a135efb-1e6c-4e3c-9d3d-a331bf6a6ee3.oss-cn-hangzhou.aliyuncs.com/Provider/Scholar.yaml + path: ./Rules/Scholar + interval: 86400 + miHoYo: + type: http + behavior: classical + url: https://1a135efb-1e6c-4e3c-9d3d-a331bf6a6ee3.oss-cn-hangzhou.aliyuncs.com/Provider/miHoYo.yaml + path: ./Rules/miHoYo + interval: 86400 +... diff --git a/clash/tests/data/config/rules.yaml b/clash/tests/data/config/rules.yaml index c6f2b71d..4cb0ecbb 100644 --- a/clash/tests/data/config/rules.yaml +++ b/clash/tests/data/config/rules.yaml @@ -40,7 +40,7 @@ dns: - 114.114.114.114 # default value - 8.8.8.8 # default value - tls://dns.google:853 # DNS over TLS - - https://dns.google/dns-query # DNS over HTTPS + - https://1.1.1.1/dns-query # DNS over HTTPS # - dhcp://en0 # dns from dhcp allow-lan: true @@ -150,16 +150,7 @@ proxies: proxy-providers: file-provider: type: file - path: ./ss-loop.yaml - health-check: - enable: true - url: http://www.gstatic.com/generate_204 - interval: 300 - remote-provider: - type: http - url: https://example.com/clash/proxies - interval: 300 - path: ./proxies.yaml + path: ./ss.yaml health-check: enable: true url: http://www.gstatic.com/generate_204 diff --git a/clash_lib/Cargo.toml b/clash_lib/Cargo.toml index 63d6bea0..8173a37c 100644 --- a/clash_lib/Cargo.toml +++ b/clash_lib/Cargo.toml @@ -5,6 +5,8 @@ edition = "2021" [features] default = ["shadowsocks"] +tracing = ["console-subscriber", "tracing-timing"] +bench = ["criterion"] [dependencies] tokio = { version = "1", features = ["full"] } @@ -32,7 +34,7 @@ libc = "0.2" foreign-types-shared = "0.3.1" network-interface = "1.0.3" base64 = "0.21" -uuid = { version = "1.2.1", features = ["v4", "fast-rng", "macro-diagnostics"] } +uuid = { version = "1.2.1", features = ["v4", "fast-rng", "macro-diagnostics", "serde"] } boring = { git = "https://github.com/Watfaq/boring.git", rev = "24c006f" } boring-sys = { git = "https://github.com/Watfaq/boring.git", rev = "24c006f" } hyper-boring = { git = "https://github.com/Watfaq/boring.git", rev = "24c006f" } @@ -85,6 +87,10 @@ maxminddb = "0.23.0" public-suffix = "0.1.0" murmur3 = "0.5.2" +console-subscriber = { version = "0.1.10", optional = true } +tracing-timing = { version = "0.6.0", optional = true } +criterion = { version = "0.4", features = ["html_reports", "async_tokio"], optional = true } + [dev-dependencies] tempfile = "3.3" ctor = "0.2" @@ -92,5 +98,6 @@ mockall = "0.11.4" tokio-test = "0.4.2" axum-macros = "0.3.8" + [target.'cfg(target_os = "macos")'.dependencies] security-framework = "2.8.0" diff --git a/clash_lib/src/app/api/handlers/provider.rs b/clash_lib/src/app/api/handlers/provider.rs index b425a565..3a51ea6c 100644 --- a/clash_lib/src/app/api/handlers/provider.rs +++ b/clash_lib/src/app/api/handlers/provider.rs @@ -120,7 +120,7 @@ async fn provider_healthcheck( let provider = provider.read().await; provider.healthcheck().await; - (StatusCode::ACCEPTED, "provider healthcheck done") + (StatusCode::ACCEPTED, "provider healthcheck") } async fn find_provider_proxy_by_name( diff --git a/clash_lib/src/app/dispatcher.rs b/clash_lib/src/app/dispatcher/dispatcher.rs similarity index 99% rename from clash_lib/src/app/dispatcher.rs rename to clash_lib/src/app/dispatcher/dispatcher.rs index c409f2ce..5bbf240c 100644 --- a/clash_lib/src/app/dispatcher.rs +++ b/clash_lib/src/app/dispatcher/dispatcher.rs @@ -17,7 +17,7 @@ use tokio::task::JoinHandle; use tracing::{debug, error, info, warn}; use tracing::{event, instrument}; -use super::dns::ThreadSafeDNSResolver; +use crate::app::dns::ThreadSafeDNSResolver; pub struct Dispatcher { outbound_manager: ThreadSafeOutboundManager, diff --git a/clash_lib/src/app/dispatcher/mod.rs b/clash_lib/src/app/dispatcher/mod.rs new file mode 100644 index 00000000..2d6b63d6 --- /dev/null +++ b/clash_lib/src/app/dispatcher/mod.rs @@ -0,0 +1,6 @@ +mod dispatcher; +mod statitics_manager; +mod tracked_conn; +mod tracker; + +pub use dispatcher::Dispatcher; diff --git a/clash_lib/src/app/dispatcher/statitics_manager.rs b/clash_lib/src/app/dispatcher/statitics_manager.rs new file mode 100644 index 00000000..76651eb9 --- /dev/null +++ b/clash_lib/src/app/dispatcher/statitics_manager.rs @@ -0,0 +1,146 @@ +use std::{ + collections::HashMap, + sync::{ + atomic::{AtomicI64, AtomicU64, Ordering}, + Arc, + }, +}; + +use chrono::Utc; +use serde::Serialize; +use tokio::sync::Mutex; + +use crate::session::Session; + +use super::tracked_conn::TrackedStream; + +#[derive(Serialize, Default)] +pub struct TrackerInfo { + pub uuid: uuid::Uuid, + pub session: Session, + pub upload_total: AtomicU64, + pub download_total: AtomicU64, + pub start_time: chrono::DateTime, + pub proxy_chain: Vec, + pub rule: String, + pub rule_payload: String, +} + +#[derive(Serialize)] +#[serde(rename_all = "camelCase")] +pub struct Snapshot { + download_total: i64, + upload_total: i64, + connections: Vec, +} + +pub struct Manager { + connections: Arc>>>, + upload_temp: AtomicI64, + download_temp: AtomicI64, + upload_blip: AtomicI64, + download_blip: AtomicI64, + upload_total: AtomicI64, + download_total: AtomicI64, +} + +impl Manager { + fn new() -> Arc { + let v = Arc::new(Self { + connections: Arc::new(Mutex::new(HashMap::new())), + upload_temp: AtomicI64::new(0), + download_temp: AtomicI64::new(0), + upload_blip: AtomicI64::new(0), + download_blip: AtomicI64::new(0), + upload_total: AtomicI64::new(0), + download_total: AtomicI64::new(0), + }); + let c = v.clone(); + tokio::spawn(async move { + c.kick_off().await; + }); + v + } + + pub async fn track(&self, stream: Arc) { + let mut connections = self.connections.lock().await; + connections.insert(stream.id(), stream); + } + + pub async fn untrack(&self, id: uuid::Uuid) { + let mut connections = self.connections.lock().await; + connections.remove(&id); + } + + pub fn push_uploaded(&self, n: usize) { + self.upload_temp + .fetch_add(n as i64, std::sync::atomic::Ordering::Relaxed); + self.upload_total + .fetch_add(n as i64, std::sync::atomic::Ordering::Relaxed); + } + + pub fn push_downloaded(&self, n: usize) { + self.download_temp + .fetch_add(n as i64, std::sync::atomic::Ordering::Relaxed); + self.download_total + .fetch_add(n as i64, std::sync::atomic::Ordering::Relaxed); + } + + pub fn now(&self) -> (i64, i64) { + ( + self.upload_blip.load(std::sync::atomic::Ordering::Relaxed), + self.download_blip + .load(std::sync::atomic::Ordering::Relaxed), + ) + } + + pub async fn snapshot(&self) -> Snapshot { + let mut connections = vec![]; + let conns = self.connections.lock().await; + for (_, v) in conns.iter() { + let t = v.tracker_info(); + connections.push(TrackerInfo { + uuid: t.uuid, + upload_total: AtomicU64::new(t.upload_total.load(Ordering::Relaxed)), + download_total: AtomicU64::new(t.download_total.load(Ordering::Relaxed)), + start_time: t.start_time, + proxy_chain: t.proxy_chain.clone(), + rule: t.rule.clone(), + rule_payload: t.rule_payload.clone(), + session: t.session.clone(), + }); + } + + Snapshot { + download_total: self + .download_total + .load(std::sync::atomic::Ordering::Relaxed), + upload_total: self.upload_total.load(std::sync::atomic::Ordering::Relaxed), + connections, + } + } + + pub fn reset_statistic(&self) { + self.upload_temp.store(0, Ordering::Relaxed); + self.upload_blip.store(0, Ordering::Relaxed); + self.upload_total.store(0, Ordering::Relaxed); + self.download_temp.store(0, Ordering::Relaxed); + self.download_blip.store(0, Ordering::Relaxed); + self.download_total.store(0, Ordering::Relaxed); + } + + async fn kick_off(&self) { + let mut ticker = tokio::time::interval(std::time::Duration::from_secs(1)); + loop { + ticker.tick().await; + self.upload_blip + .store(self.upload_temp.load(Ordering::Relaxed), Ordering::Relaxed); + self.upload_temp.store(0, Ordering::Relaxed); + self.download_blip.store( + self.download_temp.load(Ordering::Relaxed), + Ordering::Relaxed, + ); + self.download_temp.store(0, Ordering::Relaxed); + } + } +} diff --git a/clash_lib/src/app/dispatcher/tracked_conn.rs b/clash_lib/src/app/dispatcher/tracked_conn.rs new file mode 100644 index 00000000..ad8bbbe0 --- /dev/null +++ b/clash_lib/src/app/dispatcher/tracked_conn.rs @@ -0,0 +1,107 @@ +use std::{pin::Pin, sync::Arc, task::Poll}; + +use tokio::io::{AsyncRead, AsyncWrite}; +use tracing::debug; + +use crate::{config::internal::rule::RuleType, proxy::AnyStream, session::Session}; + +use super::statitics_manager::{Manager, TrackerInfo}; + +pub struct TrackedStream { + inner: AnyStream, + manager: Arc, + tracker: Arc, +} + +impl TrackedStream { + pub async fn new( + inner: AnyStream, + manager: Arc, + sess: Session, + rule: RuleType, + ) -> Arc { + let uuid = uuid::Uuid::new_v4(); + let s = Arc::new(Self { + inner, + manager: manager.clone(), + tracker: Arc::new(TrackerInfo { + uuid, + session: sess, + + start_time: chrono::Utc::now(), + rule: rule.to_string(), + rule_payload: rule.target().to_owned(), + ..Default::default() + }), + }); + + manager.track(s.clone()).await; + + s + } + + pub fn id(&self) -> uuid::Uuid { + self.tracker.uuid + } + + pub fn tracker_info(&self) -> Arc { + self.tracker.clone() + } +} + +impl Drop for TrackedStream { + fn drop(&mut self) { + debug!("untrack connection: {}", self.id()); + let _ = self.manager.untrack(self.id()); + } +} + +impl AsyncRead for TrackedStream { + fn poll_read( + mut self: std::pin::Pin<&mut Self>, + cx: &mut std::task::Context<'_>, + buf: &mut tokio::io::ReadBuf<'_>, + ) -> std::task::Poll> { + let v = Pin::new(&mut self.inner).poll_read(cx, buf); + let download = buf.filled().len(); + self.manager.push_downloaded(download); + self.tracker + .download_total + .fetch_add(download as u64, std::sync::atomic::Ordering::Relaxed); + v + } +} + +impl AsyncWrite for TrackedStream { + fn poll_write( + mut self: Pin<&mut Self>, + cx: &mut std::task::Context<'_>, + buf: &[u8], + ) -> std::task::Poll> { + let v = Pin::new(&mut self.inner).poll_write(cx, buf); + let upload = match v { + Poll::Ready(Ok(n)) => n, + _ => return v, + }; + self.manager.push_uploaded(upload); + self.tracker + .upload_total + .fetch_add(upload as u64, std::sync::atomic::Ordering::Relaxed); + + v + } + + fn poll_flush( + mut self: Pin<&mut Self>, + cx: &mut std::task::Context<'_>, + ) -> std::task::Poll> { + Pin::new(&mut self.as_mut().inner).poll_flush(cx) + } + + fn poll_shutdown( + self: Pin<&mut Self>, + cx: &mut std::task::Context<'_>, + ) -> std::task::Poll> { + Pin::new(&mut self.get_mut().inner).poll_shutdown(cx) + } +} diff --git a/clash_lib/src/app/dispatcher/tracker.rs b/clash_lib/src/app/dispatcher/tracker.rs new file mode 100644 index 00000000..e69de29b diff --git a/clash_lib/src/app/mod.rs b/clash_lib/src/app/mod.rs index b24e9854..5e99463d 100644 --- a/clash_lib/src/app/mod.rs +++ b/clash_lib/src/app/mod.rs @@ -1,5 +1,3 @@ -use std::sync::Arc; - pub mod api; pub mod dispatcher; pub mod dns; diff --git a/clash_lib/src/app/outbound/manager.rs b/clash_lib/src/app/outbound/manager.rs index 1f510b64..94bb9e11 100644 --- a/clash_lib/src/app/outbound/manager.rs +++ b/clash_lib/src/app/outbound/manager.rs @@ -15,7 +15,7 @@ use crate::app::proxy_manager::providers::plain_provider::PlainProvider; use crate::app::proxy_manager::providers::proxy_provider::ThreadSafeProxyProvider; use crate::app::proxy_manager::providers::proxy_set_provider::ProxySetProvider; use crate::app::proxy_manager::ProxyManager; -use crate::app::proxy_manager::ThreadSafeProxyManager; + use crate::config::internal::proxy::PROXY_GLOBAL; use crate::config::internal::proxy::{OutboundProxyProvider, PROXY_DIRECT, PROXY_REJECT}; use crate::proxy::fallback; @@ -38,7 +38,7 @@ static RESERVED_PROVIDER_NAME: &str = "default"; pub struct OutboundManager { handlers: HashMap, proxy_providers: HashMap, - proxy_manager: ThreadSafeProxyManager, + proxy_manager: ProxyManager, selector_control: HashMap, } @@ -57,7 +57,7 @@ impl OutboundManager { let mut handlers = HashMap::new(); let mut provider_registry = HashMap::new(); let mut selector_control = HashMap::new(); - let proxy_manager = Arc::new(ProxyManager::new(dns_resolver.clone())); + let proxy_manager = ProxyManager::new(dns_resolver.clone()); Self::load_proxy_providers( proxy_providers, @@ -165,7 +165,7 @@ impl OutboundManager { outbounds: Vec, outbound_groups: Vec, proxy_names: Vec, - proxy_manager: ThreadSafeProxyManager, + proxy_manager: ProxyManager, provider_registry: &mut HashMap, handlers: &mut HashMap, selector_control: &mut HashMap, @@ -206,7 +206,7 @@ impl OutboundManager { interval: u64, lazy: bool, handlers: &HashMap, - proxy_manager: ThreadSafeProxyManager, + proxy_manager: ProxyManager, proxy_providers: &mut Vec, provider_registry: &mut HashMap, ) -> Result { @@ -536,7 +536,7 @@ impl OutboundManager { async fn load_proxy_providers( proxy_providers: HashMap, - proxy_manager: ThreadSafeProxyManager, + proxy_manager: ProxyManager, resolver: ThreadSafeDNSResolver, provider_registry: &mut HashMap, ) -> Result<(), Error> { diff --git a/clash_lib/src/app/proxy_manager/healthcheck.rs b/clash_lib/src/app/proxy_manager/healthcheck.rs index 22d9e4ec..f10d7f25 100644 --- a/clash_lib/src/app/proxy_manager/healthcheck.rs +++ b/clash_lib/src/app/proxy_manager/healthcheck.rs @@ -5,7 +5,7 @@ use tracing::debug; use crate::{pm_debug, proxy::AnyOutboundHandler}; -use super::ThreadSafeProxyManager; +use super::ProxyManager; struct HealCheckInner { last_check: Instant, @@ -17,7 +17,7 @@ pub struct HealthCheck { url: String, interval: u64, lazy: bool, - proxy_manager: ThreadSafeProxyManager, + proxy_manager: ProxyManager, inner: Arc>, } @@ -27,7 +27,7 @@ impl HealthCheck { url: String, interval: u64, lazy: bool, - proxy_manager: ThreadSafeProxyManager, + proxy_manager: ProxyManager, ) -> anyhow::Result { let health_check = Self { url, diff --git a/clash_lib/src/app/proxy_manager/mod.rs b/clash_lib/src/app/proxy_manager/mod.rs index 8604a257..048e97b2 100644 --- a/clash_lib/src/app/proxy_manager/mod.rs +++ b/clash_lib/src/app/proxy_manager/mod.rs @@ -11,7 +11,7 @@ use boring::ssl::{SslConnector, SslMethod}; use chrono::{DateTime, Utc}; use futures::StreamExt; -use http::Request; +use http::{Request, Version}; use hyper_boring::HttpsConnector; use serde::Serialize; use tokio::sync::RwLock; @@ -65,8 +65,6 @@ pub struct ProxyManager { dns_resolver: ThreadSafeDNSResolver, } -pub type ThreadSafeProxyManager = std::sync::Arc; - impl ProxyManager { pub fn new(dns_resolver: ThreadSafeDNSResolver) -> Self { Self { @@ -166,10 +164,14 @@ impl ProxyManager { let connector = HttpsConnector::with_connector(connector, ssl).map_err(map_io_error)?; let client = hyper::Client::builder().build::<_, hyper::Body>(connector); - let now = Instant::now(); - let req = Request::get(url).body(hyper::Body::empty()).unwrap(); + let req = Request::get(url) + .header("Connection", "Close") + .version(Version::HTTP_11) + .body(hyper::Body::empty()) + .unwrap(); let resp = client.request(req); + let now = Instant::now(); let delay: u16 = match tokio::time::timeout(timeout.unwrap_or(default_timeout), resp).await { Ok(res) => match res { @@ -196,13 +198,16 @@ impl ProxyManager { Err(_) => Err(new_io_error(format!("timeout for {}", url).as_str())), }?; - let req2 = Request::get(url).body(hyper::Body::empty()).unwrap(); + let req2 = Request::get(url) + .header("Connection", "Close") + .version(Version::HTTP_11) + .body(hyper::Body::empty()) + .unwrap(); let resp2 = client.request(req2); + let mean_delay: u16 = match tokio::time::timeout(timeout.unwrap_or(default_timeout), resp2).await { - Ok(_) => now - .elapsed() - .as_millis() + Ok(_) => (now.elapsed().as_millis() / 2) .try_into() .expect("delay is too large"), Err(_) => 0, @@ -212,7 +217,9 @@ impl ProxyManager { }; let result = tester.await; + self.report_alive(&name, result.is_ok()).await; + let ins = DelayHistory { time: Utc::now(), delay: result.as_ref().map(|x| x.0).unwrap_or(0), diff --git a/clash_lib/src/app/proxy_manager/providers/proxy_set_provider.rs b/clash_lib/src/app/proxy_manager/providers/proxy_set_provider.rs index c35f59ad..4020316e 100644 --- a/clash_lib/src/app/proxy_manager/providers/proxy_set_provider.rs +++ b/clash_lib/src/app/proxy_manager/providers/proxy_set_provider.rs @@ -80,7 +80,9 @@ impl ProxySetProvider { dyn Fn(&[u8]) -> anyhow::Result> + Send + Sync + 'static, > = Box::new( move |input: &[u8]| -> anyhow::Result> { - let scheme: ProviderScheme = serde_yaml::from_slice(input)?; + let scheme: ProviderScheme = serde_yaml::from_slice(input).map_err(|x| { + Error::InvalidConfig(format!("proxy provider parse error {}: {}", n, x)) + })?; let proxies = scheme.proxies; if let Some(proxies) = proxies { let proxies = proxies @@ -226,7 +228,7 @@ proxies: let mock_resolver = MockClashResolver::new(); - let latency_manager = Arc::new(ProxyManager::new(Arc::new(mock_resolver))); + let latency_manager = ProxyManager::new(Arc::new(mock_resolver)); let hc = HealthCheck::new( vec![], "http://www.google.com".to_owned(), diff --git a/clash_lib/src/lib.rs b/clash_lib/src/lib.rs index ecd5777a..55c5e8ae 100644 --- a/clash_lib/src/lib.rs +++ b/clash_lib/src/lib.rs @@ -95,6 +95,9 @@ pub fn shutdown() -> bool { } async fn start_async(opts: Options) -> Result<(), Error> { + #[cfg(feature = "tracing")] + console_subscriber::init(); + let (shutdown_tx, mut shutdown_rx) = mpsc::channel(1); RUNTIME_CONTROLLER.set(std::sync::RwLock::new(RuntimeController { shutdown_tx })); @@ -114,10 +117,13 @@ async fn start_async(opts: Options) -> Result<(), Error> { let (log_tx, _) = broadcast::channel(100); - let log_collector = app::logging::EventCollector::new(vec![log_tx.clone()]); + #[cfg(not(feature = "tracing"))] + { + let log_collector = app::logging::EventCollector::new(vec![log_tx.clone()]); - app::logging::setup_logging(config.general.log_level, log_collector) - .expect("failed to setup logging"); + app::logging::setup_logging(config.general.log_level, log_collector) + .expect("failed to setup logging"); + } let mut tasks = Vec::::new(); let mut runners = Vec::new(); diff --git a/clash_lib/src/proxy/fallback/mod.rs b/clash_lib/src/proxy/fallback/mod.rs index 6925ac5f..c606fd29 100644 --- a/clash_lib/src/proxy/fallback/mod.rs +++ b/clash_lib/src/proxy/fallback/mod.rs @@ -6,9 +6,7 @@ use tracing::debug; use crate::{ app::{ dns::ThreadSafeDNSResolver, - proxy_manager::{ - providers::proxy_provider::ThreadSafeProxyProvider, ThreadSafeProxyManager, - }, + proxy_manager::{providers::proxy_provider::ThreadSafeProxyProvider, ProxyManager}, }, session::{Session, SocksAddr}, }; @@ -29,14 +27,14 @@ pub struct HandlerOptions { pub struct Handler { opts: HandlerOptions, providers: Vec, - proxy_manager: ThreadSafeProxyManager, + proxy_manager: ProxyManager, } impl Handler { pub fn new( opts: HandlerOptions, providers: Vec, - proxy_manager: ThreadSafeProxyManager, + proxy_manager: ProxyManager, ) -> Self { Self { opts, diff --git a/clash_lib/src/proxy/urltest/mod.rs b/clash_lib/src/proxy/urltest/mod.rs index 8c3e98ca..7a1328d7 100644 --- a/clash_lib/src/proxy/urltest/mod.rs +++ b/clash_lib/src/proxy/urltest/mod.rs @@ -7,9 +7,7 @@ use tracing::debug; use crate::{ app::{ dns::ThreadSafeDNSResolver, - proxy_manager::{ - providers::proxy_provider::ThreadSafeProxyProvider, ThreadSafeProxyManager, - }, + proxy_manager::{providers::proxy_provider::ThreadSafeProxyProvider, ProxyManager}, }, p_debug, session::{Session, SocksAddr}, @@ -37,7 +35,7 @@ pub struct Handler { tolerance: u16, providers: Vec, - proxy_manager: ThreadSafeProxyManager, + proxy_manager: ProxyManager, inner: Arc>, } @@ -47,7 +45,7 @@ impl Handler { opts: HandlerOptions, tolerance: u16, providers: Vec, - proxy_manager: ThreadSafeProxyManager, + proxy_manager: ProxyManager, ) -> Self { Self { opts, diff --git a/clash_lib/src/proxy/utils/socket_helpers.rs b/clash_lib/src/proxy/utils/socket_helpers.rs index a12d7dcb..aebaa6c6 100644 --- a/clash_lib/src/proxy/utils/socket_helpers.rs +++ b/clash_lib/src/proxy/utils/socket_helpers.rs @@ -9,6 +9,7 @@ use tokio::{ net::{TcpSocket, TcpStream, UdpSocket}, time::timeout, }; +use tracing::debug; use super::Interface; use crate::{app::dns::ThreadSafeDNSResolver, proxy::AnyStream}; @@ -81,12 +82,21 @@ pub async fn new_tcp_stream<'a>( socket.set_nodelay(true)?; socket.set_nonblocking(true)?; + let now = std::time::Instant::now(); + let stream = timeout( Duration::from_secs(10), TcpSocket::from_std_stream(socket.into()).connect((dial_addr, port).into()), ) .await??; + debug!( + "connect to stream {}:{}: took {:?}", + address, + port, + now.elapsed().as_millis(), + ); + Ok(Box::new(stream)) } @@ -124,3 +134,38 @@ pub async fn new_udp_socket( UdpSocket::from_std(socket.into()) } + +#[cfg(test)] +mod tests { + use std::{net::IpAddr, time::Duration}; + + use tokio::{net::TcpSocket, time::timeout}; + + #[tokio::test] + #[ignore = "not a real test"] + async fn test_connect_tcp() { + let mut futs = vec![]; + + for i in 0..100 { + futs.push(tokio::spawn(async move { + let now = std::time::Instant::now(); + let socket = + socket2::Socket::new(socket2::Domain::IPV4, socket2::Type::DGRAM, None) + .unwrap(); + + timeout( + Duration::from_secs(10), + TcpSocket::from_std_stream(socket.into()) + .connect(("1.1.1.1".parse::().unwrap(), 443).into()), + ) + .await + .unwrap() + .unwrap(); + + println!("fut {} took {:?}", i, now.elapsed().as_millis()); + })); + } + + futures::future::join_all(futs).await; + } +} diff --git a/clash_lib/src/session.rs b/clash_lib/src/session.rs index 07dfd2ac..83b8479f 100644 --- a/clash_lib/src/session.rs +++ b/clash_lib/src/session.rs @@ -6,9 +6,10 @@ use std::{ use crate::proxy::utils::Interface; use bytes::{Buf, BufMut}; +use serde::Serialize; use tokio::io::{AsyncRead, AsyncReadExt}; -#[derive(Debug, PartialEq, Eq)] +#[derive(Debug, PartialEq, Eq, Serialize)] pub enum SocksAddr { Ip(SocketAddr), Domain(String, u16), @@ -338,7 +339,7 @@ impl TryFrom for SocketAddr { } } -#[derive(PartialEq, Eq, Hash, Clone, Copy, Debug)] +#[derive(PartialEq, Eq, Hash, Clone, Copy, Debug, Serialize)] pub enum Network { Tcp, Udp, @@ -359,6 +360,7 @@ impl Display for Network { } } +#[derive(Serialize)] pub struct Session { /// The network type, representing either TCP or UDP. pub network: Network,