From cc56a95ca083d8932493a9ccecc199be1babb95c Mon Sep 17 00:00:00 2001 From: JegoVPN <154394132+JegoVPN@users.noreply.github.com> Date: Wed, 8 Jul 2026 14:13:06 +0800 Subject: [PATCH 1/4] feat(fixtures): scoped --repo/--append ingest mode + per-source caps MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Adding one upstream no longer forces a full ~70-repo corpus rebuild: --append keeps every other repo's fixtures/manifest/rejected entries verbatim and re-ingests only the named --repo(s). Sources may carry maxFixtures to override the per-repo cap (legit large curated collections). Raw fetches move to the authenticated contents API — ~50 anonymous raw.githubusercontent fetches tripped 429s. Total cap 240->320 so a full refresh cannot silently truncate the committed corpus. Co-Authored-By: Claude Opus 4.8 (1M context) --- scripts/update-external-fixtures.mjs | 74 ++++++++++++++++++++++++---- 1 file changed, 65 insertions(+), 9 deletions(-) diff --git a/scripts/update-external-fixtures.mjs b/scripts/update-external-fixtures.mjs index 017cb04e..c510984e 100644 --- a/scripts/update-external-fixtures.mjs +++ b/scripts/update-external-fixtures.mjs @@ -1,5 +1,5 @@ import { createHash } from "node:crypto"; -import { mkdirSync, readdirSync, rmSync, writeFileSync } from "node:fs"; +import { existsSync, mkdirSync, readdirSync, readFileSync, rmSync, writeFileSync } from "node:fs"; import { dirname, join } from "node:path"; import { fileURLToPath } from "node:url"; @@ -7,11 +7,26 @@ const root = dirname(fileURLToPath(import.meta.url)); const repoRoot = join(root, ".."); const outputDir = join(repoRoot, "fixtures", "external"); const fetchTimeoutMs = 15_000; -const maxAcceptedFixtures = Number(process.env.MAX_EXTERNAL_FIXTURES ?? 240); +// 320 comfortably covers the checked-in corpus (282 after the pk-box ingest) — a FULL refresh with a +// cap below the committed manifest size would silently truncate the corpus back down. +const maxAcceptedFixtures = Number(process.env.MAX_EXTERNAL_FIXTURES ?? 320); const maxAcceptedPerRepo = Number(process.env.MAX_EXTERNAL_FIXTURES_PER_REPO ?? 30); +// CLI: +// node scripts/update-external-fixtures.mjs # full corpus rebuild +// node scripts/update-external-fixtures.mjs --append --repo owner/name # scoped: re-ingest ONLY +// the named repo(s), keeping every other repo's fixtures + manifest entries untouched. Use this to +// add or refresh a single source without churning the other ~70 upstreams (which may have moved). +// A source may carry `maxFixtures` to override the per-repo cap (legit large curated collections). +const cliArgs = process.argv.slice(2); +const appendMode = cliArgs.includes("--append"); +const targetRepoNames = cliArgs.filter((arg, index) => cliArgs[index - 1] === "--repo"); + const sourceRepos = [ { repo: "Toperlock/sing-box-subscribe", include: /^config_template\/.*\.json$/, exclude: /sb-config-1\.12\.json$/ }, + // Curated per-release template collection (1.11 → 1.13.x → every 1.14 alpha, several variants each) — + // the per-repo cap would drop the newest alphas, so it carries an explicit higher cap. + { repo: "huixiao666/pk-box", include: /\.json$/, maxFixtures: 80 }, { repo: "kj163kj/singbox_proxy_config", include: /\.json$/ }, { repo: "CHIZI-0618/box4magisk", include: /\.json$/ }, { repo: "malikshi/sing-box-examples", include: /\.json$/ }, @@ -132,8 +147,12 @@ function encodePath(path) { } async function fetchRaw(repo, commit, path) { - const url = `https://raw.githubusercontent.com/${repo}/${commit}/${encodePath(path)}`; - const response = await fetchWithTimeout(url, { headers: { "user-agent": "sbc-external-fixture-ingest" } }); + // The contents API honors the auth token (raw.githubusercontent.com does not), so bulk ingests + // stop tripping the anonymous rate limit (observed 429s at ~50 unauthenticated raw fetches). + const url = `https://api.github.com/repos/${repo}/contents/${encodePath(path)}?ref=${commit}`; + const response = await fetchWithTimeout(url, { + headers: { ...authHeaders(), accept: "application/vnd.github.raw" }, + }); if (!response.ok) throw new Error(`Raw fetch failed ${response.status}: ${repo}/${path}`); return response.text(); } @@ -302,16 +321,53 @@ async function collectCandidates(source) { } async function main() { - rmSync(outputDir, { recursive: true, force: true }); - mkdirSync(outputDir, { recursive: true }); + const activeSources = targetRepoNames.length + ? sourceRepos.filter((source) => targetRepoNames.includes(source.repo)) + : sourceRepos; + if (targetRepoNames.length && activeSources.length !== targetRepoNames.length) { + const known = new Set(sourceRepos.map((source) => source.repo)); + const unknown = targetRepoNames.filter((name) => !known.has(name)); + throw new Error(`--repo names not registered in sourceRepos: ${unknown.join(", ")} — register them first.`); + } + if (appendMode && targetRepoNames.length === 0) { + throw new Error("--append requires at least one --repo; a full rebuild must not run in append mode."); + } const manifest = []; const rejected = []; - const seenHashes = new Set(); + if (appendMode) { + // Scoped refresh: keep every non-targeted repo's fixtures + manifest/rejected entries verbatim, + // drop the targeted repos' old outputs, and re-ingest only those repos below. + const targeted = new Set(targetRepoNames); + const existingManifest = JSON.parse(readFileSync(join(outputDir, "manifest.json"), "utf8")); + for (const item of existingManifest) { + if (targeted.has(item.source_repo)) { + rmSync(join(repoRoot, item.fixture_path), { force: true }); + } else { + manifest.push(item); + } + } + const rejectedPath = join(outputDir, "rejected.json"); + if (existsSync(rejectedPath)) { + for (const item of JSON.parse(readFileSync(rejectedPath, "utf8"))) { + const repo = item.source_repo ?? String(item.source ?? "").split("/").slice(0, 2).join("/"); + if (!targeted.has(repo)) rejected.push(item); + } + } + } else { + rmSync(outputDir, { recursive: true, force: true }); + mkdirSync(outputDir, { recursive: true }); + } + + const seenHashes = new Set(manifest.map((item) => item.normalized_hash)); const acceptedByRepo = new Map(); + for (const item of manifest) { + acceptedByRepo.set(item.source_repo, (acceptedByRepo.get(item.source_repo) ?? 0) + 1); + } - sourceLoop: for (const source of sourceRepos) { + sourceLoop: for (const source of activeSources) { if (manifest.length >= maxAcceptedFixtures) break; + const repoCap = source.maxFixtures ?? maxAcceptedPerRepo; let candidates = []; try { candidates = await collectCandidates(source); @@ -323,7 +379,7 @@ async function main() { for (const candidate of candidates) { if (manifest.length >= maxAcceptedFixtures) break sourceLoop; const repoAcceptedCount = acceptedByRepo.get(candidate.repo) ?? 0; - if (repoAcceptedCount >= maxAcceptedPerRepo) { + if (repoAcceptedCount >= repoCap) { rejected.push({ source: `${candidate.repo}/${candidate.path}`, reason: "repo-fixture-cap" }); continue; } From 511118d6018b7da6465ed6d5b92dca453dea2541 Mon Sep 17 00:00:00 2001 From: JegoVPN <154394132+JegoVPN@users.noreply.github.com> Date: Wed, 8 Jul 2026 14:13:06 +0800 Subject: [PATCH 2/4] test(fixtures): ingest huixiao666/pk-box corpus (17 fixtures, 1.13-1.14a31) Curated per-release template collection: 8 pass the matched real binary (1.13.10-11 + alphas 12-20), 9 are display-class (reF1nd-fork extensions vanilla sing-box rejects; one 1.14-removed legacy field). 77 sibling files are JSONC/placeholder teaching templates and land in rejected.json by design. Official gates re-ran over the full corpus with the 1.13.14/alpha.40 pins (pass 34->42; no old-fixture verdict flipped). Co-Authored-By: Claude Opus 4.8 (1M context) --- fixtures/external/compatibility-report.md | 16 +- ...1.14.0-alpha.21.ref1nd-.json-3fe87d44.json | 1 + ...1.14.0-alpha.21.ref1nd-.json-9c3d1b11.json | 1 + ...1.14.0-alpha.21.ref1nd-.json-b34f25f1.json | 1 + ...-1.14.0-alpha.21.refnd-.json-949a0750.json | 1 + ...box-1.13.xx-1.13.10-11-.json-798c77ac.json | 1 + ...14.0-alpha.12-16-ref1nd.json-3f43b8d5.json | 1 + ...-1.14.0-alpha.17.ref1nd.json-586fb594.json | 1 + ...-1.14.0-alpha.27.ref1nd.json-c126df18.json | 1 + ...-1.14.0-alpha.31.ref1nd.json-eea67696.json | 1 + ...ha.xxx-1.14.0-alpha.12-.json-2eeb05f0.json | 1 + ...ha.xxx-1.14.0-alpha.14-.json-8c2a908f.json | 1 + ...xxx-1.14.0-alpha.16-17-.json-1150bc0b.json | 1 + ...ha.xxx-1.14.0-alpha.18-.json-36630bef.json | 1 + ...ha.xxx-1.14.0-alpha.18-.json-3a97d11a.json | 1 + ...ha.xxx-1.14.0-alpha.18-.json-5f068761.json | 1 + ...ha.xxx-1.14.0-alpha.20-.json-1a52beb4.json | 1 + ...ha.xxx-1.14.0-alpha.39-.json-f8d3f44a.json | 1 + fixtures/external/manifest.json | 534 +++++++++++++++++- fixtures/external/rejected.json | 385 +++++++++++++ 20 files changed, 921 insertions(+), 31 deletions(-) create mode 100644 fixtures/external/huixiao666-pk-box--1.14.0-alpha.21.ref1nd-.json-3fe87d44.json create mode 100644 fixtures/external/huixiao666-pk-box--1.14.0-alpha.21.ref1nd-.json-9c3d1b11.json create mode 100644 fixtures/external/huixiao666-pk-box--1.14.0-alpha.21.ref1nd-.json-b34f25f1.json create mode 100644 fixtures/external/huixiao666-pk-box--1.14.0-alpha.21.refnd-.json-949a0750.json create mode 100644 fixtures/external/huixiao666-pk-box-1.13.xx-1.13.10-11-.json-798c77ac.json create mode 100644 fixtures/external/huixiao666-pk-box-1.14.0-alpha.ref1nd-1.14.0-alpha.12-16-ref1nd.json-3f43b8d5.json create mode 100644 fixtures/external/huixiao666-pk-box-1.14.0-alpha.ref1nd-1.14.0-alpha.17.ref1nd.json-586fb594.json create mode 100644 fixtures/external/huixiao666-pk-box-1.14.0-alpha.ref1nd-1.14.0-alpha.27.ref1nd.json-c126df18.json create mode 100644 fixtures/external/huixiao666-pk-box-1.14.0-alpha.ref1nd-1.14.0-alpha.31.ref1nd.json-eea67696.json create mode 100644 fixtures/external/huixiao666-pk-box-1.14.0-alpha.xxx-1.14.0-alpha.12-.json-2eeb05f0.json create mode 100644 fixtures/external/huixiao666-pk-box-1.14.0-alpha.xxx-1.14.0-alpha.14-.json-8c2a908f.json create mode 100644 fixtures/external/huixiao666-pk-box-1.14.0-alpha.xxx-1.14.0-alpha.16-17-.json-1150bc0b.json create mode 100644 fixtures/external/huixiao666-pk-box-1.14.0-alpha.xxx-1.14.0-alpha.18-.json-36630bef.json create mode 100644 fixtures/external/huixiao666-pk-box-1.14.0-alpha.xxx-1.14.0-alpha.18-.json-3a97d11a.json create mode 100644 fixtures/external/huixiao666-pk-box-1.14.0-alpha.xxx-1.14.0-alpha.18-.json-5f068761.json create mode 100644 fixtures/external/huixiao666-pk-box-1.14.0-alpha.xxx-1.14.0-alpha.20-.json-1a52beb4.json create mode 100644 fixtures/external/huixiao666-pk-box-1.14.0-alpha.xxx-1.14.0-alpha.39-.json-f8d3f44a.json diff --git a/fixtures/external/compatibility-report.md b/fixtures/external/compatibility-report.md index f93b0ff8..4857aa11 100644 --- a/fixtures/external/compatibility-report.md +++ b/fixtures/external/compatibility-report.md @@ -1,9 +1,9 @@ # External Fixture Compatibility Report -Accepted fixtures: 220 -Official binary pass: 34 +Accepted fixtures: 237 +Official binary pass: 42 Official binary warning and treated as display/template-compatible: 2 -Official binary failed and treated as display/template-compatible: 40 +Official binary failed and treated as display/template-compatible: 49 Official binary not applicable: 144 Official binary missing during report generation: 0 @@ -12,24 +12,24 @@ Official binary missing during report generation: 0 - display: 73 - display-extension: 29 - legacy: 87 -- stable: 13 +- stable: 14 - stable-extension: 1 -- testing: 1 +- testing: 17 - testing-extension: 16 ## Accepted By Detected Version - 1.11: 42 - 1.12: 45 -- 1.13: 14 -- 1.14: 17 +- 1.13: 15 +- 1.14: 33 - unknown: 102 ## Official Check Failures By Version - 1.12: 22 - 1.13: 4 -- 1.14: 16 +- 1.14: 25 ## Notes diff --git a/fixtures/external/huixiao666-pk-box--1.14.0-alpha.21.ref1nd-.json-3fe87d44.json b/fixtures/external/huixiao666-pk-box--1.14.0-alpha.21.ref1nd-.json-3fe87d44.json new file mode 100644 index 00000000..88e10288 --- /dev/null +++ b/fixtures/external/huixiao666-pk-box--1.14.0-alpha.21.ref1nd-.json-3fe87d44.json @@ -0,0 +1 @@ +{"log":{"level":"trace","output":"/dev/null","timestamp":true},"dns":{"servers":[{"type":"hosts","tag":"dns_hosts","predefined":{"mtalk.google.com":["2404:6800:4008:c07::bc","2404:6800:4008:c1b::bc","2404:6800:4008:c15::bc","2404:6800:4008:c05::bc","2404:6800:4008:c19::bc","2404:6800:4008:c01::bc","2607:f8b0:4023:1c05::bc","2607:f8b0:400e:c09::bc","142.250.107.188","142.251.170.188","108.177.125.188","142.251.10.188","64.233.186.188","74.125.206.188"],"alt1-mtalk.google.com":["2607:f8b0:4023:1c05::bc","2a00:1450:400b:c02::bc","74.125.200.188"],"alt2-mtalk.google.com":"192.178.220.188","alt3-mtalk.google.com":["2607:f8b0:4023:2009::bc","2607:f8b0:4023:100f::bc","74.125.131.188"],"alt4-mtalk.google.com":"209.85.144.188","alt5-mtalk.google.com":["2607:f8b0:4003:c0a::bc","2a00:1450:4025:c01::bc","74.125.126.188"],"alt6-mtalk.google.com":"142.250.115.188","alt7-mtalk.google.com":["2607:f8b0:4024:c0d::bc","2404:6800:4003:c06::bc","192.178.131.188"],"alt8-mtalk.google.com":"172.253.132.188","dl.google.com":"180.163.151.161","dl.l.google.com":"180.163.150.33","dns.alidns.com":["223.5.5.5","223.6.6.6"],"doh.pub":["1.12.12.21","120.53.53.53"],"dns.google":["8.8.8.8","8.8.4.4"],"dns.quad9.net":["149.112.112.112","9.9.9.9"],"cloudflare-dns.com":["104.16.248.249","104.16.249.249"],"raw.githubusercontent.com":["185.199.108.133","185.199.109.133","185.199.110.133","185.199.111.133"],"cdn.jsdelivr.net":["104.16.89.20","104.16.90.20"]}},{"type":"https","tag":"tx_dns","domain_resolver":"dns_hosts","server":"1.1.1.1"},{"type":"quic","tag":"ali_dns","domain_resolver":"dns_hosts","server":"1.1.1.1"},{"type":"https","tag":"google_dns","detour":"📦 CATCH_ALL","domain_resolver":"dns_hosts","server":"1.1.1.1"},{"type":"https","tag":"quad9_dns","detour":"📦 CATCH_ALL","domain_resolver":"dns_hosts","server":"1.1.1.1"},{"type":"h3","tag":"cloudflare_dns","detour":"📦 CATCH_ALL","domain_resolver":"dns_hosts","server":"1.1.1.1"},{"type":"group","tag":"direct_server","servers":["ali_dns","tx_dns"]},{"type":"group","tag":"proxy_server","servers":["google_dns","quad9_dns","cloudflare_dns"]},{"type":"fakeip","tag":"fakeip_server","inet4_range":"198.18.0.0/15","inet6_range":"fc00::/18"}],"rules":[{"domain":["mtalk.google.com","alt1-mtalk.google.com","alt2-mtalk.google.com","alt3-mtalk.google.com","alt4-mtalk.google.com","alt5-mtalk.google.com","alt6-mtalk.google.com","alt7-mtalk.google.com","alt8-mtalk.google.com","dl.google.com","dl.l.google.com"],"server":"dns_hosts"},{"clash_mode":"Global","server":"proxy_server"},{"clash_mode":"Direct","server":"direct_server"},{"query_type":["SVCB","HTTPS","PTR"],"action":"predefined","rcode":"NOERROR"},{"type":"logical","mode":"and","rules":[{"clash_mode":"AllowAds","invert":true},{"domain":["a0.app.xiaomi.com","appversion.115.com"],"rule_set":"geosite-category-ads-all"}],"action":"predefined","rcode":"NOERROR"},{"domain_suffix":["market.xiaomi.com","lancache.steamcontent.com","tracking.miui.com","steamserver.net"],"rule_set":["cn","private"],"server":"direct_server"},{"action":"evaluate","server":"proxy_server"},{"match_response":true,"action":"respond"}],"final":"proxy_server","strategy":"prefer_ipv4","cache_capacity":4096,"optimistic":{"enabled":true,"timeout":"120h0m0s"}},"http_clients":[{"tag":"direct_client","version":2,"stream_receive_window":0,"connection_receive_window":0},{"tag":"proxy_client","version":2,"detour":"📦 CATCH_ALL","stream_receive_window":0,"connection_receive_window":0}],"inbounds":[{"type":"redirect","tag":"redirect-in","listen":"::","listen_port":7897},{"type":"mixed","tag":"mixed-in","listen":"::","listen_port":7890},{"type":"tun","tag":"tun-in","interface_name":"tun0","mtu":9000,"address":["172.19.0.1/30","fdfe:dcba:9876::1/126"],"auto_route":true,"auto_redirect":true,"strict_route":true,"stack":"system"}],"outbounds":[{"type":"selector","tag":"📦 CATCH_ALL","outbounds":["🇨🇳 All Nodes"],"interrupt_exist_connections":true},{"type":"selector","tag":"🧭 Google Services","outbounds":["🇨🇳 All Nodes"],"interrupt_exist_connections":true},{"type":"selector","tag":"📬 Google FCM","outbounds":["direct","🧭 Google Services"]},{"type":"selector","tag":"🍎 Apple","outbounds":["direct","🇨🇳 All Nodes"],"interrupt_exist_connections":true},{"type":"selector","tag":"📺 StreamingME","outbounds":["direct","🇨🇳 All Nodes"],"interrupt_exist_connections":true},{"type":"selector","tag":"🪟 Microsoft","outbounds":["direct","🇨🇳 All Nodes"],"interrupt_exist_connections":true},{"type":"selector","tag":"📠 Telegram","outbounds":["🇨🇳 All Nodes"],"default":"🇨🇳 All Nodes","interrupt_exist_connections":true},{"type":"selector","tag":"🇨🇳 All Nodes","use_all_providers":true,"outbounds":["mock-hk-01","mock-jp-01","mock-sg-01"],"interrupt_exist_connections":true},{"type":"selector","tag":"GLOBAL","outbounds":["📦 CATCH_ALL","🇨🇳 All Nodes"]},{"type":"direct","tag":"direct","domain_resolver":"direct_server"},{"type":"socks","tag":"mock-hk-01","server":"203.0.113.11","server_port":1080},{"type":"socks","tag":"mock-jp-01","server":"203.0.113.12","server_port":1080},{"type":"socks","tag":"mock-sg-01","server":"203.0.113.13","server_port":1080}],"providers":[{"type":"local","tag":"local_nodes","path":"./providers/config.json","health_check":{"enabled":true,"url":"https://www.gstatic.com/generate_204","interval":"1h0m0s","timeout":"3s"}}],"route":{"rules":[{"action":"sniff"},{"ip_cidr":"127.0.0.0/8","port":[7897,7898],"action":"bypass"},{"network":"icmp","outbound":"direct"},{"type":"logical","mode":"and","rules":[{"ip_version":6},{"default_interface_address":"2000::/3","invert":true}],"action":"reject"},{"protocol":"dns","action":"hijack-dns"},{"clash_mode":"Global","outbound":"GLOBAL"},{"clash_mode":"Direct","outbound":"direct"},{"rule_set":"geosite-category-ads-all","domain":["abyss.cyapi.cn","ad.cyapi.cn","gather.colorfulclouds.net"],"action":"reject","method":"drop"},{"rule_set":["cn","private"],"domain_suffix":["market.xiaomi.com","lancache.steamcontent.com","tracking.miui.com","steamserver.net"],"outbound":"direct"},{"rule_set":["google","twitter","!cn","youtube","github","microsoft","apple","telegram","bahamut"],"outbound":"📦 CATCH_ALL"},{"type":"logical","mode":"or","rules":[{"domain_keyword":["mtalk.google.com","dl.google","dl.l.google"]},{"port":5228}],"outbound":"📬 Google FCM"},{"action":"resolve"},{"rule_set":"cn_ip","outbound":"direct"},{"rule_set":"geosite-geolocation-!cn","outbound":"📦 CATCH_ALL"}],"rule_set":[{"type":"remote","tag":"geosite-category-ads-all","url":"https://cdn.jsdelivr.net/gh/SagerNet/sing-geosite@rule-set/geosite-category-ads-all.srs"},{"type":"remote","tag":"private","url":"https://cdn.jsdelivr.net/gh/SagerNet/sing-geosite@rule-set/geosite-private.srs"},{"type":"remote","tag":"cn","url":"https://cdn.jsdelivr.net/gh/SagerNet/sing-geosite@rule-set/geosite-cn.srs"},{"type":"remote","tag":"google","url":"https://cdn.jsdelivr.net/gh/SagerNet/sing-geosite@rule-set/geosite-google.srs"},{"type":"remote","tag":"twitter","url":"https://cdn.jsdelivr.net/gh/SagerNet/sing-geosite@rule-set/geosite-twitter.srs"},{"type":"remote","tag":"!cn","url":"https://cdn.jsdelivr.net/gh/SagerNet/sing-geosite@rule-set/geosite-geolocation-!cn.srs"},{"type":"remote","tag":"youtube","url":"https://cdn.jsdelivr.net/gh/SagerNet/sing-geosite@rule-set/geosite-youtube.srs"},{"type":"remote","tag":"github","url":"https://cdn.jsdelivr.net/gh/SagerNet/sing-geosite@rule-set/geosite-github.srs"},{"type":"remote","tag":"microsoft","url":"https://cdn.jsdelivr.net/gh/SagerNet/sing-geosite@rule-set/geosite-microsoft.srs"},{"type":"remote","tag":"apple","url":"https://cdn.jsdelivr.net/gh/SagerNet/sing-geosite@rule-set/geosite-apple.srs"},{"type":"remote","tag":"telegram","url":"https://cdn.jsdelivr.net/gh/SagerNet/sing-geosite@rule-set/geosite-telegram.srs"},{"type":"remote","tag":"bahamut","url":"https://cdn.jsdelivr.net/gh/SagerNet/sing-geosite@rule-set/geosite-bahamut.srs"},{"type":"remote","tag":"cn_ip","url":"https://github.com/DustinWin/ruleset_geodata/releases/download/sing-box-ruleset/cnip.srs"},{"type":"remote","tag":"geosite-geolocation-!cn","url":"https://cdn.jsdelivr.net/gh/SagerNet/sing-geosite@rule-set/geosite-geolocation-!cn.srs"}],"final":"📦 CATCH_ALL","find_process":true,"auto_detect_interface":true,"default_domain_resolver":"direct_server","default_http_client":"direct_client","default_domain_match_strategy":"prefer_fqdn"},"experimental":{"cache_file":{"enabled":true,"path":"./cache.db","store_fakeip":true,"store_dns":true},"clash_api":{"external_controller":"[::]:9090","external_ui":"ui"},"debug":{"gc_percent":100,"memory_limit":"200MB"},"urltest_unified_delay":true}} diff --git a/fixtures/external/huixiao666-pk-box--1.14.0-alpha.21.ref1nd-.json-9c3d1b11.json b/fixtures/external/huixiao666-pk-box--1.14.0-alpha.21.ref1nd-.json-9c3d1b11.json new file mode 100644 index 00000000..540a0984 --- /dev/null +++ b/fixtures/external/huixiao666-pk-box--1.14.0-alpha.21.ref1nd-.json-9c3d1b11.json @@ -0,0 +1 @@ +{"log":{"level":"trace","output":"/dev/null","timestamp":true},"dns":{"servers":[{"type":"hosts","tag":"dns_hosts","predefined":{"mtalk.google.com":["2404:6800:4008:c07::bc","2404:6800:4008:c1b::bc","2404:6800:4008:c15::bc","2404:6800:4008:c05::bc","2404:6800:4008:c19::bc","2404:6800:4008:c01::bc","2607:f8b0:4023:1c05::bc","2607:f8b0:400e:c09::bc","142.250.107.188","142.251.170.188","108.177.125.188","142.251.10.188","64.233.186.188","74.125.206.188"],"alt1-mtalk.google.com":["2607:f8b0:4023:1c05::bc","2a00:1450:400b:c02::bc","74.125.200.188"],"alt2-mtalk.google.com":"192.178.220.188","alt3-mtalk.google.com":["2607:f8b0:4023:2009::bc","2607:f8b0:4023:100f::bc","74.125.131.188"],"alt4-mtalk.google.com":"209.85.144.188","alt5-mtalk.google.com":["2607:f8b0:4003:c0a::bc","2a00:1450:4025:c01::bc","74.125.126.188"],"alt6-mtalk.google.com":"142.250.115.188","alt7-mtalk.google.com":["2607:f8b0:4024:c0d::bc","2404:6800:4003:c06::bc","192.178.131.188"],"alt8-mtalk.google.com":"172.253.132.188","dl.google.com":"180.163.151.161","dl.l.google.com":"180.163.150.33","dns.alidns.com":["223.5.5.5","223.6.6.6"],"doh.pub":["1.12.12.21","120.53.53.53"],"dns.google":["8.8.8.8","8.8.4.4"],"dns.quad9.net":["149.112.112.112","9.9.9.9"],"cloudflare-dns.com":["104.16.248.249","104.16.249.249"],"raw.githubusercontent.com":["185.199.108.133","185.199.109.133","185.199.110.133","185.199.111.133"],"cdn.jsdelivr.net":["104.16.89.20","104.16.90.20"]}},{"type":"https","tag":"tx_dns","domain_resolver":"dns_hosts","server":"1.1.1.1"},{"type":"quic","tag":"ali_dns","domain_resolver":"dns_hosts","server":"1.1.1.1"},{"type":"https","tag":"google_dns","detour":"📦 sing-box","domain_resolver":"dns_hosts","server":"1.1.1.1"},{"type":"https","tag":"quad9_dns","detour":"📦 sing-box","domain_resolver":"dns_hosts","server":"1.1.1.1"},{"type":"h3","tag":"cloudflare_dns","detour":"📦 sing-box","domain_resolver":"dns_hosts","server":"1.1.1.1"},{"type":"udp","tag":"adguard-dns","detour":"📦 sing-box","domain_resolver":"dns_hosts","server":"1.1.1.1","server_port":53},{"type":"group","tag":"direct_server","servers":["ali_dns","tx_dns"]},{"type":"group","tag":"proxy_server","servers":["google_dns","quad9_dns","cloudflare_dns"]},{"type":"fakeip","tag":"fakeip_server","inet4_range":"198.18.0.0/15","inet6_range":"fc00::/18"}],"rules":[{"rule_set":["geosite-category-ads-all","geosite_adguard"],"action":"predefined","rcode":"NOERROR"},{"domain":["mtalk.google.com","alt1-mtalk.google.com","alt2-mtalk.google.com","alt3-mtalk.google.com","alt4-mtalk.google.com","alt5-mtalk.google.com","alt6-mtalk.google.com","alt7-mtalk.google.com","alt8-mtalk.google.com","dl.google.com","dl.l.google.com"],"server":"dns_hosts"},{"domain_suffix":"connectivitycheck.gstatic.com","server":"fakeip_server"},{"clash_mode":"Global","server":"proxy_server"},{"clash_mode":"Direct","server":"direct_server"},{"query_type":["SVCB","HTTPS","PTR"],"action":"predefined","rcode":"NOERROR"},{"domain_suffix":["market.xiaomi.com","lancache.steamcontent.com","tracking.miui.com","steamserver.net"],"rule_set":["cn","private"],"server":"direct_server"},{"rule_set":["geosite-google","geosite-youtube","geosite-telegram","geosite-twitter","geosite-github","geosite-microsoft","geosite-apple","geosite-bahamut","Proxy","gfw"],"server":"proxy_server"},{"action":"evaluate","server":"direct_server"},{"match_response":true,"action":"respond"}],"final":"adguard-dns","strategy":"prefer_ipv4","cache_capacity":65536,"optimistic":{"enabled":true,"timeout":"120h0m0s"}},"http_clients":[{"tag":"direct_client","version":2,"stream_receive_window":0,"connection_receive_window":0},{"tag":"proxy_client","version":2,"detour":"📦 sing-box","stream_receive_window":0,"connection_receive_window":0}],"inbounds":[{"type":"redirect","tag":"redirect-in","listen":"::","listen_port":7897},{"type":"mixed","tag":"mixed-in","listen":"::","listen_port":7890},{"type":"tun","tag":"tun-in","interface_name":"tun0","mtu":9000,"address":["172.19.0.1/30","fdfe:dcba:9876::1/126"],"auto_route":true,"auto_redirect":true,"strict_route":true,"stack":"system"}],"outbounds":[{"type":"selector","tag":"🚦 FINAL","outbounds":["📦 sing-box","🇨🇳 DIRECT","❌ REJECT-DROP"],"providers":null,"default":"❌ REJECT-DROP","interrupt_exist_connections":true},{"type":"block","tag":"❌ REJECT-DROP"},{"type":"selector","tag":"📦 sing-box","outbounds":["🇨🇳 DIRECT"],"providers":null,"interrupt_exist_connections":true},{"type":"selector","tag":"🧭 Google Services","outbounds":["🇨🇳 DIRECT"],"providers":null,"interrupt_exist_connections":true},{"type":"selector","tag":"📬 Google FCM","outbounds":["📦 sing-box","🇨🇳 DIRECT","🧭 Google Services"],"providers":null,"default":"📦 sing-box","interrupt_exist_connections":true},{"type":"selector","tag":"🍎 Apple","outbounds":["🇨🇳 DIRECT","📦 sing-box"],"providers":null,"default":"🇨🇳 DIRECT","interrupt_exist_connections":true},{"type":"selector","tag":"📺 StreamingME","outbounds":["🇨🇳 DIRECT","📦 sing-box"],"providers":null,"interrupt_exist_connections":true},{"type":"selector","tag":"🪟 Microsoft","outbounds":["🇨🇳 DIRECT","📦 sing-box"],"providers":null,"interrupt_exist_connections":true},{"type":"selector","tag":"📠 Telegram","outbounds":["📦 sing-box"],"providers":null,"default":"📦 sing-box","interrupt_exist_connections":true},{"type":"selector","tag":"🇨🇳 DIRECT","outbounds":["mock-hk-01","mock-jp-01","mock-sg-01"],"providers":null,"use_all_providers":true,"interrupt_exist_connections":true},{"type":"selector","tag":"GLOBAL","outbounds":["📦 sing-box","🇨🇳 DIRECT"],"providers":null,"default":"📦 sing-box"},{"type":"direct","tag":"direct","domain_resolver":"direct_server"},{"type":"socks","tag":"mock-hk-01","server":"203.0.113.11","server_port":1080},{"type":"socks","tag":"mock-jp-01","server":"203.0.113.12","server_port":1080},{"type":"socks","tag":"mock-sg-01","server":"203.0.113.13","server_port":1080}],"providers":[{"type":"remote","tag":"my_nodes","url":"你的订阅链接","path":"./providers/my_nodes.json","http_client":"direct_client","update_interval":"24h0m0s","health_check":{"enabled":true,"url":"https://www.gstatic.com/generate_204","interval":"1h0m0s","timeout":"3s"}}],"route":{"rules":[{"action":"sniff"},{"ip_cidr":"127.0.0.0/8","port":[7897,7898],"action":"bypass"},{"network":"icmp","outbound":"direct"},{"protocol":"dns","action":"hijack-dns"},{"package_name":["com.tencent.mm","com.tencent.mobileqq","com.alibaba.android.rimet","com.eg.android.AlipayGphone","com.netease.cloudmusic"],"outbound":"direct"},{"domain":"dns.weixin.qq.com.cn","outbound":"direct"},{"domain_suffix":["market.xiaomi.com","lancache.steamcontent.com","tracking.miui.com","steamserver.net"],"rule_set":["cn","private","cnip","apple-cn","microsoft-cn","google-cn","games-cn"],"outbound":"direct"},{"clash_mode":"Global","outbound":"GLOBAL"},{"clash_mode":"Direct","outbound":"direct"},{"rule_set":["geosite-category-ads-all","geosite_adguard","Ads","DNSreject"],"action":"reject","method":"drop"},{"domain":["abyss.cyapi.cn","ad.cyapi.cn"],"action":"reject","method":"drop"},{"domain_suffix":"connectivitycheck.gstatic.com","outbound":"📦 sing-box"},{"domain":"gather.colorfulclouds.net","outbound":"📦 sing-box"},{"ip_cidr":"198.18.0.0/15","outbound":"📦 sing-box"},{"rule_set":["geosite-google","geosite-youtube","geosite-twitter","geosite-github","geosite-microsoft","geosite-apple","geosite-telegram","geosite-bahamut","Proxy","gfw","telegramip","telegram_ip"],"outbound":"📦 sing-box"},{"package_name":["org.telegram.group","org.telegram.messenger","org.telegram.messenger.beta","com.google.android.youtube","app.revanced.android.youtube"],"outbound":"📦 sing-box"},{"type":"logical","mode":"and","rules":[{"ip_version":6},{"default_interface_address":"2000::/3","invert":true}],"action":"reject"},{"type":"logical","mode":"or","rules":[{"domain_keyword":["mtalk.google.com","dl.google","dl.l.google"]},{"port":5228}],"outbound":"📬 Google FCM"},{"action":"resolve"},{"rule_set":"cnip","outbound":"direct"},{"rule_set":"Proxy","outbound":"📦 sing-box"}],"rule_set":[{"type":"remote","tag":"geosite-category-ads-all","url":"https://cdn.jsdelivr.net/gh/SagerNet/sing-geosite@rule-set/geosite-category-ads-all.srs","http_client":"direct_client","update_interval":"48h0m0s"},{"type":"remote","tag":"geosite_adguard","url":"https://cdn.jsdelivr.net/gh/217heidai/adblockfilters@main/rules/adblocksingbox.srs","http_client":"direct_client","update_interval":"48h0m0s"},{"type":"remote","tag":"Ads","url":"https://github.com/DustinWin/ruleset_geodata/releases/download/sing-box-ruleset/ads.srs","http_client":"direct_client","update_interval":"48h0m0s"},{"type":"remote","tag":"DNSreject","url":"https://raw.githubusercontent.com/senshinya/singbox_ruleset/main/rule/AdGuardSDNSFilter/AdGuardSDNSFilter.srs","http_client":"direct_client","update_interval":"48h0m0s"},{"type":"remote","tag":"private","url":"https://cdn.jsdelivr.net/gh/SagerNet/sing-geosite@rule-set/geosite-private.srs","http_client":"direct_client","update_interval":"48h0m0s"},{"type":"remote","tag":"cn","url":"https://cdn.jsdelivr.net/gh/SagerNet/sing-geosite@rule-set/geosite-cn.srs","http_client":"direct_client","update_interval":"48h0m0s"},{"type":"remote","tag":"cnip","url":"https://cdn.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/cnip.srs","http_client":"direct_client","update_interval":"48h0m0s"},{"type":"remote","tag":"apple-cn","url":"https://cdn.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/apple-cn.srs","http_client":"direct_client","update_interval":"48h0m0s"},{"type":"remote","tag":"microsoft-cn","url":"https://cdn.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/microsoft-cn.srs","http_client":"direct_client","update_interval":"48h0m0s"},{"type":"remote","tag":"google-cn","url":"https://cdn.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/google-cn.srs","http_client":"direct_client","update_interval":"48h0m0s"},{"type":"remote","tag":"games-cn","url":"https://cdn.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/games-cn.srs","http_client":"direct_client","update_interval":"48h0m0s"},{"type":"remote","tag":"geosite-google","url":"https://cdn.jsdelivr.net/gh/SagerNet/sing-geosite@rule-set/geosite-google.srs","http_client":"direct_client","update_interval":"48h0m0s"},{"type":"remote","tag":"geosite-youtube","url":"https://cdn.jsdelivr.net/gh/SagerNet/sing-geosite@rule-set/geosite-youtube.srs","http_client":"direct_client","update_interval":"48h0m0s"},{"type":"remote","tag":"geosite-twitter","url":"https://cdn.jsdelivr.net/gh/SagerNet/sing-geosite@rule-set/geosite-twitter.srs","http_client":"direct_client","update_interval":"48h0m0s"},{"type":"remote","tag":"geosite-github","url":"https://cdn.jsdelivr.net/gh/SagerNet/sing-geosite@rule-set/geosite-github.srs","http_client":"direct_client","update_interval":"48h0m0s"},{"type":"remote","tag":"geosite-microsoft","url":"https://cdn.jsdelivr.net/gh/SagerNet/sing-geosite@rule-set/geosite-microsoft.srs","http_client":"direct_client","update_interval":"48h0m0s"},{"type":"remote","tag":"geosite-apple","url":"https://cdn.jsdelivr.net/gh/SagerNet/sing-geosite@rule-set/geosite-apple.srs","http_client":"direct_client","update_interval":"48h0m0s"},{"type":"remote","tag":"geosite-telegram","url":"https://cdn.jsdelivr.net/gh/SagerNet/sing-geosite@rule-set/geosite-telegram.srs","http_client":"direct_client","update_interval":"48h0m0s"},{"type":"remote","tag":"geosite-bahamut","url":"https://cdn.jsdelivr.net/gh/SagerNet/sing-geosite@rule-set/geosite-bahamut.srs","http_client":"direct_client","update_interval":"48h0m0s"},{"type":"remote","tag":"Proxy","url":"https://raw.githubusercontent.com/SagerNet/sing-geosite/rule-set/geosite-geolocation-!cn.srs","http_client":"direct_client","update_interval":"48h0m0s"},{"type":"remote","tag":"gfw","url":"https://raw.githubusercontent.com/MetaCubeX/meta-rules-dat/sing/geo/geosite/gfw.srs","http_client":"direct_client","update_interval":"48h0m0s"},{"type":"remote","tag":"telegramip","url":"https://cdn.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/telegramip.srs","http_client":"direct_client","update_interval":"48h0m0s"},{"type":"remote","tag":"telegram_ip","url":"https://raw.githubusercontent.com/MetaCubeX/meta-rules-dat/sing/geo/geoip/telegram.srs","http_client":"direct_client","update_interval":"48h0m0s"}],"final":"🚦 FINAL","find_process":true,"auto_detect_interface":true,"default_domain_resolver":"direct_server","default_http_client":"direct_client","default_domain_match_strategy":"prefer_fqdn"},"experimental":{"cache_file":{"enabled":true,"path":"./cache.db","store_fakeip":true,"store_dns":true},"clash_api":{"external_controller":"[::]:9090","external_ui":"ui"},"debug":{"gc_percent":100,"memory_limit":"200MB"},"urltest_unified_delay":true}} diff --git a/fixtures/external/huixiao666-pk-box--1.14.0-alpha.21.ref1nd-.json-b34f25f1.json b/fixtures/external/huixiao666-pk-box--1.14.0-alpha.21.ref1nd-.json-b34f25f1.json new file mode 100644 index 00000000..f57bbd8e --- /dev/null +++ b/fixtures/external/huixiao666-pk-box--1.14.0-alpha.21.ref1nd-.json-b34f25f1.json @@ -0,0 +1 @@ +{"log":{"level":"trace","output":"/dev/null","timestamp":true},"dns":{"servers":[{"type":"hosts","tag":"dns_hosts","predefined":{"mtalk.google.com":["2404:6800:4008:c07::bc","2404:6800:4008:c1b::bc","2404:6800:4008:c15::bc","2404:6800:4008:c05::bc","2404:6800:4008:c19::bc","2404:6800:4008:c01::bc","2607:f8b0:4023:1c05::bc","2607:f8b0:400e:c09::bc","142.250.107.188","142.251.170.188","108.177.125.188","142.251.10.188","64.233.186.188","74.125.206.188"],"alt1-mtalk.google.com":["2607:f8b0:4023:1c05::bc","2a00:1450:400b:c02::bc","74.125.200.188"],"alt2-mtalk.google.com":"192.178.220.188","alt3-mtalk.google.com":["2607:f8b0:4023:2009::bc","2607:f8b0:4023:100f::bc","74.125.131.188"],"alt4-mtalk.google.com":"209.85.144.188","alt5-mtalk.google.com":["2607:f8b0:4003:c0a::bc","2a00:1450:4025:c01::bc","74.125.126.188"],"alt6-mtalk.google.com":"142.250.115.188","alt7-mtalk.google.com":["2607:f8b0:4024:c0d::bc","2404:6800:4003:c06::bc","192.178.131.188"],"alt8-mtalk.google.com":"172.253.132.188","dl.google.com":"180.163.151.161","dl.l.google.com":"180.163.150.33","dns.alidns.com":["223.5.5.5","223.6.6.6"],"doh.pub":["1.12.12.21","120.53.53.53"],"dns.google":["8.8.8.8","8.8.4.4"],"dns.quad9.net":["149.112.112.112","9.9.9.9"],"cloudflare-dns.com":["104.16.248.249","104.16.249.249"],"raw.githubusercontent.com":["185.199.108.133","185.199.109.133","185.199.110.133","185.199.111.133"],"cdn.jsdelivr.net":["104.16.89.20","104.16.90.20"]}},{"type":"https","tag":"tx_dns","domain_resolver":"dns_hosts","server":"1.1.1.1"},{"type":"quic","tag":"ali_dns","domain_resolver":"dns_hosts","server":"1.1.1.1"},{"type":"https","tag":"google_dns","detour":"📦 sing-box","domain_resolver":"dns_hosts","server":"1.1.1.1"},{"type":"https","tag":"quad9_dns","detour":"📦 sing-box","domain_resolver":"dns_hosts","server":"1.1.1.1"},{"type":"h3","tag":"cloudflare_dns","detour":"📦 sing-box","domain_resolver":"dns_hosts","server":"1.1.1.1"},{"type":"group","tag":"direct_server","servers":["ali_dns","tx_dns"]},{"type":"group","tag":"proxy_server","servers":["google_dns","quad9_dns","cloudflare_dns"]},{"type":"fakeip","tag":"fakeip_server","inet4_range":"198.18.0.0/15","inet6_range":"fc00::/18"}],"rules":[{"rule_set":["geosite-category-ads-all","geosite_adguard"],"action":"predefined","rcode":"NOERROR"},{"domain":["mtalk.google.com","alt1-mtalk.google.com","alt2-mtalk.google.com","alt3-mtalk.google.com","alt4-mtalk.google.com","alt5-mtalk.google.com","alt6-mtalk.google.com","alt7-mtalk.google.com","alt8-mtalk.google.com","dl.google.com","dl.l.google.com"],"server":"dns_hosts"},{"clash_mode":"Global","server":"proxy_server"},{"clash_mode":"Direct","server":"direct_server"},{"query_type":["SVCB","HTTPS","PTR"],"action":"predefined","rcode":"NOERROR"},{"domain_suffix":["market.xiaomi.com","lancache.steamcontent.com","tracking.miui.com","steamserver.net"],"rule_set":["cn","private"],"server":"direct_server"},{"rule_set":["geosite-google","geosite-youtube","geosite-telegram","geosite-twitter","geosite-github","geosite-microsoft","geosite-apple","geosite-bahamut","Proxy","gfw"],"server":"fakeip_server"},{"action":"evaluate","server":"proxy_server"},{"match_response":true,"action":"respond"}],"final":"proxy_server","strategy":"prefer_ipv4","cache_capacity":65536,"optimistic":{"enabled":true,"timeout":"120h0m0s"}},"http_clients":[{"tag":"direct_client","version":2,"stream_receive_window":0,"connection_receive_window":0},{"tag":"proxy_client","version":2,"detour":"📦 sing-box","stream_receive_window":0,"connection_receive_window":0}],"inbounds":[{"type":"redirect","tag":"redirect-in","listen":"::","listen_port":7897},{"type":"mixed","tag":"mixed-in","listen":"::","listen_port":7890},{"type":"tun","tag":"tun-in","interface_name":"tun0","mtu":9000,"address":["172.19.0.1/30","fdfe:dcba:9876::1/126"],"auto_route":true,"auto_redirect":true,"strict_route":true,"stack":"system"}],"outbounds":[{"type":"selector","tag":"🚦 FINAL","outbounds":["📦 sing-box","🇨🇳 DIRECT","❌ REJECT-DROP"],"providers":null,"default":"❌ REJECT-DROP","interrupt_exist_connections":true},{"type":"block","tag":"❌ REJECT-DROP"},{"type":"selector","tag":"📦 sing-box","outbounds":["🇨🇳 DIRECT"],"providers":null,"interrupt_exist_connections":true},{"type":"selector","tag":"🧭 Google Services","outbounds":["🇨🇳 DIRECT"],"providers":null,"interrupt_exist_connections":true},{"type":"selector","tag":"📬 Google FCM","outbounds":["🇨🇳 DIRECT","🧭 Google Services"],"providers":null,"interrupt_exist_connections":true},{"type":"selector","tag":"🍎 Apple","outbounds":["🇨🇳 DIRECT","📦 sing-box"],"providers":null,"interrupt_exist_connections":true},{"type":"selector","tag":"📺 StreamingME","outbounds":["🇨🇳 DIRECT","📦 sing-box"],"providers":null,"interrupt_exist_connections":true},{"type":"selector","tag":"🪟 Microsoft","outbounds":["🇨🇳 DIRECT","📦 sing-box"],"providers":null,"interrupt_exist_connections":true},{"type":"selector","tag":"📠 Telegram","outbounds":["📦 sing-box"],"providers":null,"default":"📦 sing-box","interrupt_exist_connections":true},{"type":"selector","tag":"🇨🇳 DIRECT","outbounds":["mock-hk-01","mock-jp-01","mock-sg-01"],"providers":null,"use_all_providers":true,"interrupt_exist_connections":true},{"type":"selector","tag":"GLOBAL","outbounds":["📦 sing-box","🇨🇳 DIRECT"],"providers":null,"default":"📦 sing-box"},{"type":"direct","tag":"direct","domain_resolver":"direct_server"},{"type":"socks","tag":"mock-hk-01","server":"203.0.113.11","server_port":1080},{"type":"socks","tag":"mock-jp-01","server":"203.0.113.12","server_port":1080},{"type":"socks","tag":"mock-sg-01","server":"203.0.113.13","server_port":1080}],"providers":[{"type":"remote","tag":"my_nodes","url":"你的订阅链接","path":"./providers/my_nodes.json","http_client":"direct_client","update_interval":"24h0m0s","health_check":{"enabled":true,"url":"https://www.gstatic.com/generate_204","interval":"1h0m0s","timeout":"3s"}}],"route":{"rules":[{"action":"sniff"},{"ip_cidr":"127.0.0.0/8","port":[7897,7898],"action":"bypass"},{"network":"icmp","outbound":"direct"},{"protocol":"dns","action":"hijack-dns"},{"clash_mode":"Global","outbound":"GLOBAL"},{"clash_mode":"Direct","outbound":"direct"},{"domain":["abyss.cyapi.cn","ad.cyapi.cn","gather.colorfulclouds.net"],"rule_set":["geosite-category-ads-all","geosite_adguard","Ads","DNSreject"],"action":"reject","method":"drop"},{"ip_cidr":"198.18.0.0/15","outbound":"📦 sing-box"},{"domain_suffix":["market.xiaomi.com","lancache.steamcontent.com","tracking.miui.com","steamserver.net"],"rule_set":["cn","private","cnip","apple-cn","microsoft-cn","google-cn","games-cn"],"outbound":"direct"},{"package_name":["com.tencent.mm","com.tencent.mobileqq","com.alibaba.android.rimet","com.eg.android.AlipayGphone","com.netease.cloudmusic"],"outbound":"direct"},{"domain":"dns.weixin.qq.com.cn","outbound":"direct"},{"rule_set":["geosite-google","geosite-youtube","geosite-twitter","geosite-github","geosite-microsoft","geosite-apple","geosite-telegram","geosite-bahamut","Proxy","gfw","telegramip","telegram_ip"],"outbound":"📦 sing-box"},{"package_name":["org.telegram.group","org.telegram.messenger","org.telegram.messenger.beta","com.google.android.youtube","app.revanced.android.youtube"],"outbound":"📦 sing-box"},{"type":"logical","mode":"and","rules":[{"ip_version":6},{"default_interface_address":"2000::/3","invert":true}],"action":"reject"},{"type":"logical","mode":"or","rules":[{"domain_keyword":["mtalk.google.com","dl.google","dl.l.google"]},{"port":5228}],"outbound":"📬 Google FCM"},{"action":"resolve"},{"rule_set":"cnip","outbound":"direct"},{"rule_set":"Proxy","outbound":"📦 sing-box"}],"rule_set":[{"type":"remote","tag":"geosite-category-ads-all","url":"https://cdn.jsdelivr.net/gh/SagerNet/sing-geosite@rule-set/geosite-category-ads-all.srs","http_client":"direct_client","update_interval":"48h0m0s"},{"type":"remote","tag":"geosite_adguard","url":"https://cdn.jsdelivr.net/gh/217heidai/adblockfilters@main/rules/adblocksingbox.srs","http_client":"direct_client","update_interval":"48h0m0s"},{"type":"remote","tag":"Ads","url":"https://github.com/DustinWin/ruleset_geodata/releases/download/sing-box-ruleset/ads.srs","http_client":"direct_client","update_interval":"48h0m0s"},{"type":"remote","tag":"DNSreject","url":"https://raw.githubusercontent.com/senshinya/singbox_ruleset/main/rule/AdGuardSDNSFilter/AdGuardSDNSFilter.srs","http_client":"direct_client","update_interval":"48h0m0s"},{"type":"remote","tag":"private","url":"https://cdn.jsdelivr.net/gh/SagerNet/sing-geosite@rule-set/geosite-private.srs","http_client":"direct_client","update_interval":"48h0m0s"},{"type":"remote","tag":"cn","url":"https://cdn.jsdelivr.net/gh/SagerNet/sing-geosite@rule-set/geosite-cn.srs","http_client":"direct_client","update_interval":"48h0m0s"},{"type":"remote","tag":"cnip","url":"https://cdn.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/cnip.srs","http_client":"direct_client","update_interval":"48h0m0s"},{"type":"remote","tag":"apple-cn","url":"https://cdn.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/apple-cn.srs","http_client":"direct_client","update_interval":"48h0m0s"},{"type":"remote","tag":"microsoft-cn","url":"https://cdn.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/microsoft-cn.srs","http_client":"direct_client","update_interval":"48h0m0s"},{"type":"remote","tag":"google-cn","url":"https://cdn.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/google-cn.srs","http_client":"direct_client","update_interval":"48h0m0s"},{"type":"remote","tag":"games-cn","url":"https://cdn.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/games-cn.srs","http_client":"direct_client","update_interval":"48h0m0s"},{"type":"remote","tag":"geosite-google","url":"https://cdn.jsdelivr.net/gh/SagerNet/sing-geosite@rule-set/geosite-google.srs","http_client":"direct_client","update_interval":"48h0m0s"},{"type":"remote","tag":"geosite-youtube","url":"https://cdn.jsdelivr.net/gh/SagerNet/sing-geosite@rule-set/geosite-youtube.srs","http_client":"direct_client","update_interval":"48h0m0s"},{"type":"remote","tag":"geosite-twitter","url":"https://cdn.jsdelivr.net/gh/SagerNet/sing-geosite@rule-set/geosite-twitter.srs","http_client":"direct_client","update_interval":"48h0m0s"},{"type":"remote","tag":"geosite-github","url":"https://cdn.jsdelivr.net/gh/SagerNet/sing-geosite@rule-set/geosite-github.srs","http_client":"direct_client","update_interval":"48h0m0s"},{"type":"remote","tag":"geosite-microsoft","url":"https://cdn.jsdelivr.net/gh/SagerNet/sing-geosite@rule-set/geosite-microsoft.srs","http_client":"direct_client","update_interval":"48h0m0s"},{"type":"remote","tag":"geosite-apple","url":"https://cdn.jsdelivr.net/gh/SagerNet/sing-geosite@rule-set/geosite-apple.srs","http_client":"direct_client","update_interval":"48h0m0s"},{"type":"remote","tag":"geosite-telegram","url":"https://cdn.jsdelivr.net/gh/SagerNet/sing-geosite@rule-set/geosite-telegram.srs","http_client":"direct_client","update_interval":"48h0m0s"},{"type":"remote","tag":"geosite-bahamut","url":"https://cdn.jsdelivr.net/gh/SagerNet/sing-geosite@rule-set/geosite-bahamut.srs","http_client":"direct_client","update_interval":"48h0m0s"},{"type":"remote","tag":"Proxy","url":"https://raw.githubusercontent.com/SagerNet/sing-geosite/rule-set/geosite-geolocation-!cn.srs","http_client":"direct_client","update_interval":"48h0m0s"},{"type":"remote","tag":"gfw","url":"https://raw.githubusercontent.com/MetaCubeX/meta-rules-dat/sing/geo/geosite/gfw.srs","http_client":"direct_client","update_interval":"48h0m0s"},{"type":"remote","tag":"telegramip","url":"https://cdn.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/telegramip.srs","http_client":"direct_client","update_interval":"48h0m0s"},{"type":"remote","tag":"telegram_ip","url":"https://raw.githubusercontent.com/MetaCubeX/meta-rules-dat/sing/geo/geoip/telegram.srs","http_client":"direct_client","update_interval":"48h0m0s"}],"final":"🚦 FINAL","find_process":true,"auto_detect_interface":true,"default_domain_resolver":"direct_server","default_http_client":"direct_client","default_domain_match_strategy":"prefer_fqdn"},"experimental":{"cache_file":{"enabled":true,"path":"./cache.db","store_fakeip":true,"store_dns":true},"clash_api":{"external_controller":"[::]:9090","external_ui":"ui"},"debug":{"gc_percent":100,"memory_limit":"200MB"},"urltest_unified_delay":true}} diff --git a/fixtures/external/huixiao666-pk-box--1.14.0-alpha.21.refnd-.json-949a0750.json b/fixtures/external/huixiao666-pk-box--1.14.0-alpha.21.refnd-.json-949a0750.json new file mode 100644 index 00000000..28852a0d --- /dev/null +++ b/fixtures/external/huixiao666-pk-box--1.14.0-alpha.21.refnd-.json-949a0750.json @@ -0,0 +1 @@ +{"log":{"level":"trace","output":"/dev/null","timestamp":true},"dns":{"servers":[{"type":"hosts","tag":"dns_hosts","predefined":{"mtalk.google.com":["2404:6800:4008:c07::bc","2404:6800:4008:c1b::bc","2404:6800:4008:c15::bc","2404:6800:4008:c05::bc","2404:6800:4008:c19::bc","2404:6800:4008:c01::bc","2607:f8b0:4023:1c05::bc","2607:f8b0:400e:c09::bc","142.250.107.188","142.251.170.188","108.177.125.188","142.251.10.188","64.233.186.188","74.125.206.188"],"alt1-mtalk.google.com":["2607:f8b0:4023:1c05::bc","2a00:1450:400b:c02::bc","74.125.200.188"],"alt2-mtalk.google.com":"192.178.220.188","alt3-mtalk.google.com":["2607:f8b0:4023:2009::bc","2607:f8b0:4023:100f::bc","74.125.131.188"],"alt4-mtalk.google.com":"209.85.144.188","alt5-mtalk.google.com":["2607:f8b0:4003:c0a::bc","2a00:1450:4025:c01::bc","74.125.126.188"],"alt6-mtalk.google.com":"142.250.115.188","alt7-mtalk.google.com":["2607:f8b0:4024:c0d::bc","2404:6800:4003:c06::bc","192.178.131.188"],"alt8-mtalk.google.com":"172.253.132.188","dl.google.com":"180.163.151.161","dl.l.google.com":"180.163.150.33","dns.alidns.com":["223.5.5.5","223.6.6.6"],"doh.pub":["1.12.12.21","120.53.53.53"],"dns.google":["8.8.8.8","8.8.4.4"],"dns.quad9.net":["149.112.112.112","9.9.9.9"],"cloudflare-dns.com":["104.16.248.249","104.16.249.249"],"raw.githubusercontent.com":["185.199.108.133","185.199.109.133","185.199.110.133","185.199.111.133"],"cdn.jsdelivr.net":["104.16.89.20","104.16.90.20"]}},{"type":"https","tag":"tx_dns","domain_resolver":"dns_hosts","server":"1.1.1.1"},{"type":"quic","tag":"ali_dns","domain_resolver":"dns_hosts","server":"1.1.1.1"},{"type":"https","tag":"google_dns","detour":"📦 CATCH_ALL","domain_resolver":"dns_hosts","server":"1.1.1.1"},{"type":"https","tag":"quad9_dns","detour":"📦 CATCH_ALL","domain_resolver":"dns_hosts","server":"1.1.1.1"},{"type":"h3","tag":"cloudflare_dns","detour":"📦 CATCH_ALL","domain_resolver":"dns_hosts","server":"1.1.1.1"},{"type":"group","tag":"direct_server","servers":["ali_dns","tx_dns"]},{"type":"group","tag":"proxy_server","servers":["google_dns","quad9_dns","cloudflare_dns"]},{"type":"fakeip","tag":"fakeip_server","inet4_range":"198.18.0.0/15","inet6_range":"fc00::/18"}],"rules":[{"domain":["mtalk.google.com","alt1-mtalk.google.com","alt2-mtalk.google.com","alt3-mtalk.google.com","alt4-mtalk.google.com","alt5-mtalk.google.com","alt6-mtalk.google.com","alt7-mtalk.google.com","alt8-mtalk.google.com","dl.google.com","dl.l.google.com"],"server":"dns_hosts"},{"clash_mode":"Global","server":"proxy_server"},{"clash_mode":"Direct","server":"direct_server"},{"query_type":["SVCB","HTTPS","PTR"],"action":"predefined","rcode":"NOERROR"},{"type":"logical","mode":"and","rules":[{"clash_mode":"AllowAds","invert":true},{"domain":["a0.app.xiaomi.com","appversion.115.com"],"rule_set":"geosite-category-ads-all"}],"action":"predefined","rcode":"NOERROR"},{"domain_suffix":["market.xiaomi.com","lancache.steamcontent.com","tracking.miui.com","steamserver.net"],"rule_set":["cn","private"],"server":"direct_server"},{"action":"evaluate","server":"proxy_server"},{"match_response":true,"action":"respond"}],"final":"proxy_server","strategy":"prefer_ipv4","cache_capacity":4096,"optimistic":{"enabled":true,"timeout":"120h0m0s"}},"http_clients":[{"tag":"direct_client","version":2,"stream_receive_window":0,"connection_receive_window":0},{"tag":"proxy_client","version":2,"detour":"📦 CATCH_ALL","stream_receive_window":0,"connection_receive_window":0}],"inbounds":[{"type":"redirect","tag":"redirect-in","listen":"::","listen_port":7897},{"type":"mixed","tag":"mixed-in","listen":"::","listen_port":7890},{"type":"tun","tag":"tun-in","interface_name":"tun0","mtu":9000,"address":["172.19.0.1/30","fdfe:dcba:9876::1/126"],"auto_route":true,"auto_redirect":true,"strict_route":true,"stack":"system"}],"outbounds":[{"type":"selector","tag":"📦 CATCH_ALL","outbounds":["🇨🇳 All Nodes"],"interrupt_exist_connections":true},{"type":"selector","tag":"🧭 Google Services","outbounds":["🇨🇳 All Nodes"],"interrupt_exist_connections":true},{"type":"selector","tag":"📬 Google FCM","outbounds":["direct","🧭 Google Services"]},{"type":"selector","tag":"🍎 Apple","outbounds":["direct","🇨🇳 All Nodes"],"interrupt_exist_connections":true},{"type":"selector","tag":"📺 StreamingME","outbounds":["direct","🇨🇳 All Nodes"],"interrupt_exist_connections":true},{"type":"selector","tag":"🪟 Microsoft","outbounds":["direct","🇨🇳 All Nodes"],"interrupt_exist_connections":true},{"type":"selector","tag":"📠 Telegram","outbounds":["🇨🇳 All Nodes"],"default":"🇨🇳 All Nodes","interrupt_exist_connections":true},{"type":"selector","tag":"🇨🇳 All Nodes","use_all_providers":true,"outbounds":["mock-hk-01","mock-jp-01","mock-sg-01"],"interrupt_exist_connections":true},{"type":"selector","tag":"GLOBAL","outbounds":["📦 CATCH_ALL","🇨🇳 All Nodes"]},{"type":"direct","tag":"direct","domain_resolver":"direct_server"},{"type":"socks","tag":"mock-hk-01","server":"203.0.113.11","server_port":1080},{"type":"socks","tag":"mock-jp-01","server":"203.0.113.12","server_port":1080},{"type":"socks","tag":"mock-sg-01","server":"203.0.113.13","server_port":1080}],"providers":[{"type":"remote","tag":"my_nodes","url":"你的订阅链接","path":"./providers/config.json","http_client":"direct_client","update_interval":"24h0m0s","health_check":{"enabled":true,"url":"https://www.gstatic.com/generate_204","interval":"1h0m0s","timeout":"3s"}}],"route":{"rules":[{"action":"sniff"},{"ip_cidr":"127.0.0.0/8","port":[7897,7898],"action":"bypass"},{"network":"icmp","outbound":"direct"},{"type":"logical","mode":"and","rules":[{"ip_version":6},{"default_interface_address":"2000::/3","invert":true}],"action":"reject"},{"protocol":"dns","action":"hijack-dns"},{"clash_mode":"Global","outbound":"GLOBAL"},{"clash_mode":"Direct","outbound":"direct"},{"rule_set":"geosite-category-ads-all","domain":["abyss.cyapi.cn","ad.cyapi.cn","gather.colorfulclouds.net"],"action":"reject","method":"drop"},{"rule_set":["cn","private"],"domain_suffix":["market.xiaomi.com","lancache.steamcontent.com","tracking.miui.com","steamserver.net"],"outbound":"direct"},{"rule_set":["google","twitter","!cn","youtube","github","microsoft","apple","telegram","bahamut"],"outbound":"📦 CATCH_ALL"},{"type":"logical","mode":"or","rules":[{"domain_keyword":["mtalk.google.com","dl.google","dl.l.google"]},{"port":5228}],"outbound":"📬 Google FCM"},{"action":"resolve"},{"rule_set":"cn_ip","outbound":"direct"},{"rule_set":"geosite-geolocation-!cn","outbound":"📦 CATCH_ALL"}],"rule_set":[{"type":"remote","tag":"geosite-category-ads-all","url":"https://cdn.jsdelivr.net/gh/SagerNet/sing-geosite@rule-set/geosite-category-ads-all.srs"},{"type":"remote","tag":"private","url":"https://cdn.jsdelivr.net/gh/SagerNet/sing-geosite@rule-set/geosite-private.srs"},{"type":"remote","tag":"cn","url":"https://cdn.jsdelivr.net/gh/SagerNet/sing-geosite@rule-set/geosite-cn.srs"},{"type":"remote","tag":"google","url":"https://cdn.jsdelivr.net/gh/SagerNet/sing-geosite@rule-set/geosite-google.srs"},{"type":"remote","tag":"twitter","url":"https://cdn.jsdelivr.net/gh/SagerNet/sing-geosite@rule-set/geosite-twitter.srs"},{"type":"remote","tag":"!cn","url":"https://cdn.jsdelivr.net/gh/SagerNet/sing-geosite@rule-set/geosite-geolocation-!cn.srs"},{"type":"remote","tag":"youtube","url":"https://cdn.jsdelivr.net/gh/SagerNet/sing-geosite@rule-set/geosite-youtube.srs"},{"type":"remote","tag":"github","url":"https://cdn.jsdelivr.net/gh/SagerNet/sing-geosite@rule-set/geosite-github.srs"},{"type":"remote","tag":"microsoft","url":"https://cdn.jsdelivr.net/gh/SagerNet/sing-geosite@rule-set/geosite-microsoft.srs"},{"type":"remote","tag":"apple","url":"https://cdn.jsdelivr.net/gh/SagerNet/sing-geosite@rule-set/geosite-apple.srs"},{"type":"remote","tag":"telegram","url":"https://cdn.jsdelivr.net/gh/SagerNet/sing-geosite@rule-set/geosite-telegram.srs"},{"type":"remote","tag":"bahamut","url":"https://cdn.jsdelivr.net/gh/SagerNet/sing-geosite@rule-set/geosite-bahamut.srs"},{"type":"remote","tag":"cn_ip","url":"https://github.com/DustinWin/ruleset_geodata/releases/download/sing-box-ruleset/cnip.srs"},{"type":"remote","tag":"geosite-geolocation-!cn","url":"https://cdn.jsdelivr.net/gh/SagerNet/sing-geosite@rule-set/geosite-geolocation-!cn.srs"}],"final":"📦 CATCH_ALL","find_process":true,"auto_detect_interface":true,"default_domain_resolver":"direct_server","default_http_client":"direct_client","default_domain_match_strategy":"prefer_fqdn"},"experimental":{"cache_file":{"enabled":true,"path":"./cache.db","store_fakeip":true,"store_dns":true},"clash_api":{"external_controller":"[::]:9090","external_ui":"ui"},"debug":{"gc_percent":100,"memory_limit":"200MB"},"urltest_unified_delay":true}} diff --git a/fixtures/external/huixiao666-pk-box-1.13.xx-1.13.10-11-.json-798c77ac.json b/fixtures/external/huixiao666-pk-box-1.13.xx-1.13.10-11-.json-798c77ac.json new file mode 100644 index 00000000..266a3ee0 --- /dev/null +++ b/fixtures/external/huixiao666-pk-box-1.13.xx-1.13.10-11-.json-798c77ac.json @@ -0,0 +1 @@ +{"log":{"level":"trace","timestamp":true},"ntp":{"enabled":true,"server":"ntp.aliyun.com","server_port":123,"interval":"30m"},"dns":{"servers":[{"tag":"local","type":"local"},{"tag":"alidns_udp","type":"udp","server":"1.1.1.1"},{"tag":"ggdns_doh","type":"https","server":"1.1.1.1","detour":"PROXY"},{"tag":"fakeip","type":"fakeip","inet4_range":"198.18.0.0/15"}],"rules":[{"domain_suffix":[".local",".lan","miwifi.com","tplogin.cn","router.asus.com","tendawifi.com","tplinkwifi.net","app-measurement.com","hm.baidu.com","firebaselogging.googleapis.com","firebaselogging-pa.googleapis.com","beacons.gvt2.com","beacons2.gvt2.com","beacons3.gvt2.com","tracking.miui.com","market.xiaomi.com","lancache.steamcontent.com"],"server":"alidns_udp"},{"domain_suffix":["节点域名"],"server":"ggdns_doh"},{"rule_set":["geosite_adguard","geosite-category-ads-all"],"action":"reject"},{"query_type":["SVCB","HTTPS","PTR"],"action":"reject"},{"rule_set":["proxy","games","ai"],"query_type":["A","AAAA"],"server":"fakeip","rewrite_ttl":300,"client_subnet":"119.134.100.0/24"},{"domain_suffix":["play.google.com","ggpht.com","googleusercontent.com","android.com"],"server":"fakeip"},{"clash_mode":"direct","server":"alidns_udp"},{"clash_mode":"global","server":"fakeip"}],"final":"ggdns_doh","strategy":"ipv4_only","reverse_mapping":true,"cache_capacity":8000},"inbounds":[{"type":"tun","tag":"tun-in","address":["10.8.0.1/24"],"mtu":1500,"stack":"mixed","auto_route":true,"strict_route":true},{"type":"mixed","tag":"mixed-in","listen":"127.0.0.1","listen_port":7890}],"outbounds":[{"type":"direct","tag":"DIRECT"},{"type":"selector","tag":"PROXY","outbounds":["AUTO","🚀 CF-优选-Visa","🚀 CF-优选-DO","DIRECT"],"default":"AUTO","interrupt_exist_connections":false},{"type":"urltest","tag":"AUTO","outbounds":["🚀 CF-优选-Visa","🚀 CF-优选-DO"],"url":"http://cp.cloudflare.com/","interval":"10m","tolerance":50,"idle_timeout":"30m","interrupt_exist_connections":false},{"type":"selector","tag":"GLOBAL","outbounds":["PROXY","DIRECT"],"default":"PROXY","interrupt_exist_connections":false},{"type":"selector","tag":"CN","outbounds":["DIRECT","PROXY"],"default":"DIRECT","interrupt_exist_connections":false},{"tag":"🚀 CF-优选-Visa","server":"example.com","server_port":443,"type":"vless","uuid":"00000000-0000-4000-8000-000000000000","transport":{"type":"ws","path":"/路径","headers":{"Host":"节点域名"}},"tls":{"enabled":true,"server_name":"节点域名","utls":{"enabled":true,"fingerprint":"chrome"},"alpn":["http/1.1"]}},{"tag":"🚀 CF-优选-DO","server":"example.com","server_port":443,"type":"vless","uuid":"00000000-0000-4000-8000-000000000000","transport":{"type":"ws","path":"/路径","headers":{"Host":"节点域名"}},"tls":{"enabled":true,"server_name":"节点域名","utls":{"enabled":true,"fingerprint":"chrome"},"alpn":["http/1.1"]}}],"route":{"default_domain_resolver":"alidns_udp","rules":[{"type":"logical","mode":"or","rules":[{"port":53},{"protocol":"dns"}],"action":"hijack-dns"},{"action":"sniff"},{"domain_suffix":["miwifi.com"],"outbound":"DIRECT"},{"network_type":"cellular","outbound":"DIRECT"},{"clash_mode":"direct","outbound":"DIRECT"},{"clash_mode":"global","outbound":"GLOBAL"},{"ip_is_private":true,"outbound":"DIRECT"},{"ip_cidr":["198.18.0.0/15"],"outbound":"PROXY"},{"rule_set":["geosite_adguard","geosite-category-ads-all"],"action":"reject"},{"domain_suffix":["steamserver.net","zhihu.com","zhimg.com","jd.com","360buyimg.com","xfyun.cn"],"outbound":"DIRECT"},{"rule_set":["geosite-google","telegramip","proxy","games","ai"],"outbound":"PROXY"},{"rule_set":["private","cn","cnip","microsoft-cn","apple-cn","google-cn","games-cn","networktest"],"outbound":"DIRECT"},{"action":"resolve"},{"package_name":["com.google.android.youtube","app.revanced.android.youtube","org.telegram.messenger","org.telegram.messenger.beta"],"outbound":"PROXY"}],"rule_set":[{"tag":"geosite-category-ads-all","type":"remote","format":"binary","url":"https://cdn.jsdelivr.net/gh/SagerNet/sing-geosite@rule-set/geosite-category-ads-all.srs","download_detour":"PROXY","update_interval":"48h"},{"tag":"geosite_adguard","type":"remote","format":"binary","url":"https://cdn.jsdelivr.net/gh/217heidai/adblockfilters@main/rules/adblocksingbox.srs","download_detour":"PROXY","update_interval":"48h"},{"tag":"geosite-google","type":"remote","format":"binary","url":"https://cdn.jsdelivr.net/gh/SagerNet/sing-geosite@rule-set/geosite-google.srs","download_detour":"PROXY","update_interval":"48h"},{"tag":"proxy","type":"remote","format":"binary","url":"https://cdn.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/proxy.srs","download_detour":"PROXY","update_interval":"48h"},{"tag":"games","type":"remote","format":"binary","url":"https://cdn.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/games.srs","download_detour":"PROXY","update_interval":"48h"},{"tag":"ai","type":"remote","format":"binary","url":"https://cdn.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/ai.srs","download_detour":"PROXY","update_interval":"48h"},{"tag":"private","type":"remote","format":"binary","url":"https://cdn.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/private.srs","download_detour":"PROXY","update_interval":"48h"},{"tag":"cn","type":"remote","format":"binary","url":"https://cdn.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/cn.srs","download_detour":"PROXY","update_interval":"48h"},{"tag":"microsoft-cn","type":"remote","format":"binary","url":"https://cdn.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/microsoft-cn.srs","download_detour":"PROXY","update_interval":"48h"},{"tag":"apple-cn","type":"remote","format":"binary","url":"https://cdn.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/apple-cn.srs","download_detour":"PROXY","update_interval":"48h"},{"tag":"google-cn","type":"remote","format":"binary","url":"https://cdn.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/google-cn.srs","download_detour":"PROXY","update_interval":"48h"},{"tag":"games-cn","type":"remote","format":"binary","url":"https://cdn.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/games-cn.srs","download_detour":"PROXY","update_interval":"48h"},{"tag":"networktest","type":"remote","format":"binary","url":"https://cdn.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/networktest.srs","download_detour":"PROXY","update_interval":"48h"},{"tag":"telegramip","type":"remote","format":"binary","url":"https://cdn.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/telegramip.srs","download_detour":"PROXY","update_interval":"48h"},{"tag":"cnip","type":"remote","format":"binary","url":"https://cdn.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/cnip.srs","download_detour":"PROXY","update_interval":"48h"}],"final":"PROXY","auto_detect_interface":true},"experimental":{"clash_api":{"external_controller":"127.0.0.1:9090","external_ui":"ui","external_ui_download_url":"https://cdn.jsdelivr.net/gh/MetaCubeX/metacubexd@gh-pages/metacubexd.zip","external_ui_download_detour":"PROXY","secret":"sbc-test-token","default_mode":"rule"},"cache_file":{"enabled":true,"path":"cache.db","cache_id":"cinchov","store_fakeip":true}}} diff --git a/fixtures/external/huixiao666-pk-box-1.14.0-alpha.ref1nd-1.14.0-alpha.12-16-ref1nd.json-3f43b8d5.json b/fixtures/external/huixiao666-pk-box-1.14.0-alpha.ref1nd-1.14.0-alpha.12-16-ref1nd.json-3f43b8d5.json new file mode 100644 index 00000000..44c80d33 --- /dev/null +++ b/fixtures/external/huixiao666-pk-box-1.14.0-alpha.ref1nd-1.14.0-alpha.12-16-ref1nd.json-3f43b8d5.json @@ -0,0 +1 @@ +{"log":{"level":"trace","timestamp":true},"ntp":{"enabled":true,"server":"ntp.aliyun.com","server_port":123,"interval":"30m"},"dns":{"servers":[{"tag":"local","type":"local"},{"tag":"hosts_fix","type":"hosts","predefined":{"dns.alidns.com":["223.5.5.5","223.6.6.6"],"doh.pub":["1.12.12.21","120.53.53.53"],"dns.google":["8.8.8.8","8.8.4.4"],"cloudflare-dns.com":["104.16.248.249","104.16.249.249"]}},{"tag":"alidns","type":"quic","server":"1.1.1.1","domain_resolver":"hosts_fix","detour":"DIRECT"},{"tag":"ggdns","type":"https","server":"1.1.1.1","domain_resolver":"hosts_fix","detour":"PROXY"},{"tag":"fakeip","type":"fakeip","inet4_range":"198.18.0.0/15"}],"rules":[{"domain_suffix":[".local",".lan","miwifi.com","tplogin.cn","router.asus.com","tendawifi.com","tplinkwifi.net","app-measurement.com","hm.baidu.com","firebaselogging.googleapis.com","firebaselogging-pa.googleapis.com","beacons.gvt2.com","beacons2.gvt2.com","beacons3.gvt2.com","tracking.miui.com","market.xiaomi.com","lancache.steamcontent.com"],"server":"alidns"},{"rule_set":["geosite_adguard","geosite-category-ads-all"],"action":"reject"},{"query_type":["SVCB","HTTPS","PTR"],"action":"reject"},{"rule_set":["proxy","games","ai"],"query_type":["A","AAAA"],"server":"fakeip","rewrite_ttl":300,"client_subnet":"119.134.100.0/24"},{"domain_suffix":["play.google.com","ggpht.com","googleusercontent.com","android.com"],"server":"fakeip"},{"clash_mode":["direct"],"server":"alidns"},{"clash_mode":["global"],"server":"fakeip"}],"final":"ggdns","strategy":"prefer_ipv4","reverse_mapping":true,"cache_capacity":16000},"inbounds":[{"type":"tun","tag":"tun-in","address":["10.8.0.1/24"],"mtu":1500,"stack":"mixed","auto_route":true,"strict_route":true},{"type":"mixed","tag":"mixed-in","listen":"127.0.0.1","listen_port":7890}],"outbounds":[{"type":"direct","tag":"DIRECT","domain_resolver":"alidns"},{"type":"selector","tag":"PROXY","outbounds":["AUTO","🚀 CF-优选-Visa","🚀 CF-优选-DO","DIRECT"],"default":"AUTO","interrupt_exist_connections":false},{"type":"urltest","tag":"AUTO","outbounds":["🚀 CF-优选-Visa","🚀 CF-优选-DO"],"url":"http://www.gstatic.com/generate_204","interval":"10m","tolerance":50,"idle_timeout":"30m","interrupt_exist_connections":false},{"type":"selector","tag":"GLOBAL","outbounds":["PROXY","DIRECT"],"default":"PROXY","interrupt_exist_connections":false},{"type":"selector","tag":"CN","outbounds":["DIRECT","PROXY"],"default":"DIRECT","interrupt_exist_connections":false},{"tag":"🚀 CF-优选-Visa","server":"example.com","server_port":443,"type":"vless","uuid":"00000000-0000-4000-8000-000000000000","domain_resolver":"alidns","transport":{"type":"ws","path":"/路径","headers":{"Host":"节点域名"}},"tls":{"enabled":true,"server_name":"节点域名","utls":{"enabled":true,"fingerprint":"chrome"},"alpn":["http/1.1"]}},{"tag":"🚀 CF-优选-DO","server":"example.com","server_port":443,"type":"vless","uuid":"00000000-0000-4000-8000-000000000000","domain_resolver":"alidns","transport":{"type":"ws","path":"/路径","headers":{"Host":"节点域名"}},"tls":{"enabled":true,"server_name":"节点域名","utls":{"enabled":true,"fingerprint":"chrome"},"alpn":["http/1.1"]}}],"route":{"default_domain_resolver":"alidns","rules":[{"type":"logical","mode":"and","rules":[{"protocol":"quic"},{"port":443}],"action":"reject"},{"type":"logical","mode":"or","rules":[{"port":53},{"protocol":"dns"}],"action":"hijack-dns"},{"action":"sniff"},{"domain_suffix":["miwifi.com"],"outbound":"DIRECT"},{"clash_mode":["direct"],"outbound":"DIRECT"},{"clash_mode":["global"],"outbound":"GLOBAL"},{"ip_is_private":true,"outbound":"DIRECT"},{"ip_cidr":["198.18.0.0/15"],"outbound":"PROXY"},{"rule_set":["geosite_adguard","geosite-category-ads-all"],"action":"reject"},{"domain_suffix":["steamserver.net","zhihu.com","zhimg.com","jd.com","360buyimg.com","xfyun.cn"],"outbound":"DIRECT"},{"rule_set":["geosite-google","telegramip","proxy","games","ai"],"outbound":"PROXY"},{"rule_set":["private","cn","microsoft-cn","apple-cn","google-cn","games-cn","networktest"],"outbound":"DIRECT"},{"action":"resolve"},{"rule_set":"cnip","outbound":"DIRECT"},{"package_name":["com.google.android.youtube","app.revanced.android.youtube","org.telegram.messenger","org.telegram.messenger.beta"],"outbound":"PROXY"}],"rule_set":[{"tag":"geosite-category-ads-all","type":"remote","format":"binary","url":"https://cdn.jsdelivr.net/gh/SagerNet/sing-geosite@rule-set/geosite-category-ads-all.srs","download_detour":"PROXY","update_interval":"48h"},{"tag":"geosite_adguard","type":"remote","format":"binary","url":"https://cdn.jsdelivr.net/gh/217heidai/adblockfilters@main/rules/adblocksingbox.srs","download_detour":"PROXY","update_interval":"48h"},{"tag":"geosite-google","type":"remote","format":"binary","url":"https://cdn.jsdelivr.net/gh/SagerNet/sing-geosite@rule-set/geosite-google.srs","download_detour":"PROXY","update_interval":"48h"},{"tag":"geosite-youtube","type":"remote","format":"binary","url":"https://cdn.jsdelivr.net/gh/SagerNet/sing-geosite@rule-set/geosite-youtube.srs","download_detour":"PROXY","update_interval":"48h"},{"tag":"proxy","type":"remote","format":"binary","url":"https://cdn.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/proxy.srs","download_detour":"PROXY","update_interval":"48h"},{"tag":"games","type":"remote","format":"binary","url":"https://cdn.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/games.srs","download_detour":"PROXY","update_interval":"48h"},{"tag":"ai","type":"remote","format":"binary","url":"https://cdn.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/ai.srs","download_detour":"PROXY","update_interval":"48h"},{"tag":"private","type":"remote","format":"binary","url":"https://cdn.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/private.srs","download_detour":"PROXY","update_interval":"48h"},{"tag":"cn","type":"remote","format":"binary","url":"https://cdn.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/cn.srs","download_detour":"PROXY","update_interval":"48h"},{"tag":"microsoft-cn","type":"remote","format":"binary","url":"https://cdn.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/microsoft-cn.srs","download_detour":"PROXY","update_interval":"48h"},{"tag":"apple-cn","type":"remote","format":"binary","url":"https://cdn.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/apple-cn.srs","download_detour":"PROXY","update_interval":"48h"},{"tag":"google-cn","type":"remote","format":"binary","url":"https://cdn.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/google-cn.srs","download_detour":"PROXY","update_interval":"48h"},{"tag":"games-cn","type":"remote","format":"binary","url":"https://cdn.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/games-cn.srs","download_detour":"PROXY","update_interval":"48h"},{"tag":"networktest","type":"remote","format":"binary","url":"https://cdn.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/networktest.srs","download_detour":"PROXY","update_interval":"48h"},{"tag":"telegramip","type":"remote","format":"binary","url":"https://cdn.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/telegramip.srs","download_detour":"PROXY","update_interval":"48h"},{"tag":"cnip","type":"remote","format":"binary","url":"https://cdn.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/cnip.srs","download_detour":"PROXY","update_interval":"48h"}],"final":"PROXY","auto_detect_interface":true},"experimental":{"clash_api":{"external_controller":"127.0.0.1:9090","external_ui":"ui","external_ui_download_url":"https://cdn.jsdelivr.net/gh/MetaCubeX/metacubexd@gh-pages/metacubexd.zip","external_ui_download_detour":"PROXY","secret":"sbc-test-token","default_mode":"rule"},"cache_file":{"enabled":true,"path":"cache.db","cache_id":"cinchov","store_fakeip":true,"store_dns":true},"urltest_unified_delay":true}} diff --git a/fixtures/external/huixiao666-pk-box-1.14.0-alpha.ref1nd-1.14.0-alpha.17.ref1nd.json-586fb594.json b/fixtures/external/huixiao666-pk-box-1.14.0-alpha.ref1nd-1.14.0-alpha.17.ref1nd.json-586fb594.json new file mode 100644 index 00000000..12b07177 --- /dev/null +++ b/fixtures/external/huixiao666-pk-box-1.14.0-alpha.ref1nd-1.14.0-alpha.17.ref1nd.json-586fb594.json @@ -0,0 +1 @@ +{"log":{"level":"trace","timestamp":true},"ntp":{"enabled":true,"server":"ntp.aliyun.com","server_port":123,"interval":"30m"},"dns":{"servers":[{"tag":"local","type":"local"},{"tag":"hosts_fix","type":"hosts","predefined":{"dns.alidns.com":["223.5.5.5","223.6.6.6"],"doh.pub":["1.12.12.21","120.53.53.53"],"dns.google":["8.8.8.8","8.8.4.4"],"cloudflare-dns.com":["104.16.248.249","104.16.249.249"]}},{"tag":"alidns","type":"quic","server":"1.1.1.1","domain_resolver":"hosts_fix","detour":"DIRECT"},{"tag":"ggdns","type":"https","server":"1.1.1.1","domain_resolver":"hosts_fix","detour":"PROXY"},{"tag":"fakeip","type":"fakeip","inet4_range":"198.18.0.0/15"}],"rules":[{"domain_suffix":[".local",".lan","miwifi.com","tplogin.cn","router.asus.com","tendawifi.com","tplinkwifi.net","app-measurement.com","hm.baidu.com","firebaselogging.googleapis.com","firebaselogging-pa.googleapis.com","beacons.gvt2.com","beacons2.gvt2.com","beacons3.gvt2.com","tracking.miui.com","market.xiaomi.com","lancache.steamcontent.com"],"server":"alidns"},{"rule_set":["geosite_adguard","geosite-category-ads-all"],"action":"reject"},{"query_type":["SVCB","HTTPS","PTR"],"action":"reject"},{"rule_set":["proxy","games","ai"],"query_type":["A","AAAA"],"server":"fakeip","rewrite_ttl":300,"client_subnet":"119.134.100.0/24"},{"domain_suffix":["play.google.com","ggpht.com","googleusercontent.com","android.com"],"server":"fakeip"},{"clash_mode":["direct"],"server":"alidns"},{"clash_mode":["global"],"server":"fakeip"}],"final":"ggdns","strategy":"prefer_ipv4","reverse_mapping":true,"cache_capacity":16000},"inbounds":[{"type":"tun","tag":"tun-in","address":["10.8.0.1/24"],"mtu":1500,"stack":"mixed","auto_route":true,"strict_route":true},{"type":"mixed","tag":"mixed-in","listen":"127.0.0.1","listen_port":7890}],"outbounds":[{"type":"direct","tag":"DIRECT","domain_resolver":"alidns"},{"type":"selector","tag":"PROXY","outbounds":["AUTO","🚀 CF-优选-Visa","🚀 CF-优选-DO","DIRECT"],"default":"AUTO","interrupt_exist_connections":false},{"type":"urltest","tag":"AUTO","outbounds":["🚀 CF-优选-Visa","🚀 CF-优选-DO"],"url":"http://www.gstatic.com/generate_204","interval":"10m","tolerance":50,"idle_timeout":"30m","interrupt_exist_connections":false},{"type":"selector","tag":"GLOBAL","outbounds":["PROXY","DIRECT"],"default":"PROXY","interrupt_exist_connections":false},{"type":"selector","tag":"CN","outbounds":["DIRECT","PROXY"],"default":"DIRECT","interrupt_exist_connections":false},{"tag":"🚀 CF-优选-Visa","server":"example.com","server_port":443,"type":"vless","uuid":"00000000-0000-4000-8000-000000000000","domain_resolver":"alidns","transport":{"type":"ws","path":"/路径","headers":{"Host":"节点域名"}},"tls":{"enabled":true,"server_name":"节点域名","utls":{"enabled":true,"fingerprint":"chrome"},"alpn":["http/1.1"]}},{"tag":"🚀 CF-优选-DO","server":"example.com","server_port":443,"type":"vless","uuid":"00000000-0000-4000-8000-000000000000","domain_resolver":"alidns","transport":{"type":"ws","path":"/路径","headers":{"Host":"节点域名"}},"tls":{"enabled":true,"server_name":"节点域名","utls":{"enabled":true,"fingerprint":"chrome"},"alpn":["http/1.1"]}}],"route":{"default_domain_resolver":"alidns","rules":[{"type":"logical","mode":"and","rules":[{"protocol":"quic"},{"port":443}],"action":"reject"},{"type":"logical","mode":"or","rules":[{"port":53},{"protocol":"dns"}],"action":"hijack-dns"},{"action":"sniff"},{"domain_suffix":["miwifi.com"],"outbound":"DIRECT"},{"clash_mode":["direct"],"outbound":"DIRECT"},{"clash_mode":["global"],"outbound":"GLOBAL"},{"ip_is_private":true,"outbound":"DIRECT"},{"ip_cidr":["198.18.0.0/15"],"outbound":"PROXY"},{"rule_set":["geosite_adguard","geosite-category-ads-all"],"action":"reject"},{"domain_suffix":["steamserver.net","zhihu.com","zhimg.com","jd.com","360buyimg.com","xfyun.cn"],"outbound":"DIRECT"},{"rule_set":["geosite-google","telegramip","proxy","games","ai"],"outbound":"PROXY"},{"rule_set":["private","cn","cnip","microsoft-cn","apple-cn","google-cn","games-cn","networktest"],"outbound":"DIRECT"},{"action":"resolve"},{"package_name":["com.google.android.youtube","app.revanced.android.youtube","org.telegram.messenger","org.telegram.messenger.beta"],"outbound":"PROXY"}],"rule_set":[{"tag":"geosite-category-ads-all","type":"remote","format":"binary","url":"https://cdn.jsdelivr.net/gh/SagerNet/sing-geosite@rule-set/geosite-category-ads-all.srs","update_interval":"48h"},{"tag":"geosite_adguard","type":"remote","format":"binary","url":"https://cdn.jsdelivr.net/gh/217heidai/adblockfilters@main/rules/adblocksingbox.srs","update_interval":"48h"},{"tag":"geosite-google","type":"remote","format":"binary","url":"https://cdn.jsdelivr.net/gh/SagerNet/sing-geosite@rule-set/geosite-google.srs","update_interval":"48h"},{"tag":"geosite-youtube","type":"remote","format":"binary","url":"https://cdn.jsdelivr.net/gh/SagerNet/sing-geosite@rule-set/geosite-youtube.srs","update_interval":"48h"},{"tag":"proxy","type":"remote","format":"binary","url":"https://cdn.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/proxy.srs","update_interval":"48h"},{"tag":"games","type":"remote","format":"binary","url":"https://cdn.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/games.srs","update_interval":"48h"},{"tag":"ai","type":"remote","format":"binary","url":"https://cdn.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/ai.srs","update_interval":"48h"},{"tag":"private","type":"remote","format":"binary","url":"https://cdn.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/private.srs","update_interval":"48h"},{"tag":"cn","type":"remote","format":"binary","url":"https://cdn.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/cn.srs","update_interval":"48h"},{"tag":"microsoft-cn","type":"remote","format":"binary","url":"https://cdn.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/microsoft-cn.srs","update_interval":"48h"},{"tag":"apple-cn","type":"remote","format":"binary","url":"https://cdn.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/apple-cn.srs","update_interval":"48h"},{"tag":"google-cn","type":"remote","format":"binary","url":"https://cdn.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/google-cn.srs","update_interval":"48h"},{"tag":"games-cn","type":"remote","format":"binary","url":"https://cdn.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/games-cn.srs","update_interval":"48h"},{"tag":"networktest","type":"remote","format":"binary","url":"https://cdn.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/networktest.srs","update_interval":"48h"},{"tag":"telegramip","type":"remote","format":"binary","url":"https://cdn.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/telegramip.srs","update_interval":"48h"},{"tag":"cnip","type":"remote","format":"binary","url":"https://cdn.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/cnip.srs","update_interval":"48h"}],"final":"PROXY","auto_detect_interface":true},"experimental":{"clash_api":{"external_controller":"127.0.0.1:9090","external_ui":"ui","external_ui_download_url":"https://cdn.jsdelivr.net/gh/MetaCubeX/metacubexd@gh-pages/metacubexd.zip","secret":"sbc-test-token","default_mode":"rule"},"cache_file":{"enabled":true,"path":"cache.db","cache_id":"cinchov","store_fakeip":true,"store_dns":true},"urltest_unified_delay":true}} diff --git a/fixtures/external/huixiao666-pk-box-1.14.0-alpha.ref1nd-1.14.0-alpha.27.ref1nd.json-c126df18.json b/fixtures/external/huixiao666-pk-box-1.14.0-alpha.ref1nd-1.14.0-alpha.27.ref1nd.json-c126df18.json new file mode 100644 index 00000000..097f14eb --- /dev/null +++ b/fixtures/external/huixiao666-pk-box-1.14.0-alpha.ref1nd-1.14.0-alpha.27.ref1nd.json-c126df18.json @@ -0,0 +1 @@ +{"log":{"level":"trace","timestamp":true},"dns":{"servers":[{"type":"hosts","tag":"hosts_fix","predefined":{"dns.alidns.com":["223.5.5.5","223.6.6.6"],"dns.google":["8.8.8.8","8.8.4.4"],"mtalk.google.com":["2404:6800:4008:c07::bc","2404:6800:4008:c1b::bc","2404:6800:4008:c15::bc","2404:6800:4008:c05::bc","2404:6800:4008:c19::bc","2404:6800:4008:c01::bc","2607:f8b0:4023:1c05::bc","2607:f8b0:400e:c09::bc","142.250.107.188","142.251.170.188","108.177.125.188","142.251.10.188","64.233.186.188","74.125.206.188"],"alt1-mtalk.google.com":["2607:f8b0:4023:1c05::bc","2a00:1450:400b:c02::bc","74.125.200.188"],"alt2-mtalk.google.com":"192.178.220.188","alt3-mtalk.google.com":["2607:f8b0:4023:2009::bc","2607:f8b0:4023:100f::bc","74.125.131.188"],"alt4-mtalk.google.com":"209.85.144.188","alt5-mtalk.google.com":["2607:f8b0:4003:c0a::bc","2a00:1450:4025:c01::bc","74.125.126.188"],"alt6-mtalk.google.com":"142.250.115.188","alt7-mtalk.google.com":["2607:f8b0:4024:c0d::bc","2404:6800:4003:c06::bc","192.178.131.188"],"alt8-mtalk.google.com":"172.253.132.188","dl.google.com":"180.163.151.161","dl.l.google.com":"180.163.150.33","raw.githubusercontent.com":["185.199.108.133","185.199.109.133","185.199.110.133","185.199.111.133"],"cdn.jsdelivr.net":["104.16.89.20","104.16.90.20"]}},{"type":"quic","tag":"alidns-quic","detour":"direct","domain_resolver":"hosts_fix","server":"1.1.1.1"},{"type":"https","tag":"proxy-dns","detour":"📦 sing-box","domain_resolver":"hosts_fix","server":"1.1.1.1"},{"type":"fakeip","tag":"fakeip","inet4_range":"198.18.0.0/15","inet6_range":"fc00::/18"}],"rules":[{"domain":["mtalk.google.com","alt1-mtalk.google.com","alt2-mtalk.google.com","alt3-mtalk.google.com","alt4-mtalk.google.com","alt5-mtalk.google.com","alt6-mtalk.google.com","alt7-mtalk.google.com","alt8-mtalk.google.com","dl.google.com","dl.l.google.com"],"server":"hosts_fix"},{"rule_set":"Filter","server":"alidns-quic"},{"domain_suffix":[".cn",".xn--fiqs8s",".xn--55qx5d",".xn--io0a7i"],"server":"alidns-quic"},{"domain_suffix":["douyinvod.com","ibytedtos.com","pstatp.com","byteimg.com","bytecdn.com","snssdk.com","bytedance.com","toutiao.com","ixigua.com","volcengine.com","kuaishou.com","yximgs.com","bilivideo.com","hdslb.com","alicdn.com","aliyuncs.com","gtimg.com","360buyimg.com","pinduoduo.com"],"server":"alidns-quic"},{"rule_set":"cn","server":"alidns-quic"},{"query_type":["SVCB","HTTPS","PTR"],"action":"reject"},{"rule_set":["geosite_adguard","geosite-category-ads-all","DNSreject"],"action":"reject"},{"domain_suffix":".local","action":"reject"},{"domain_suffix":"372164885.xyz","server":"alidns-quic"},{"server":"fakeip"}],"final":"proxy-dns","reverse_mapping":true,"strategy":"prefer_ipv4","timeout":"3s","cache_capacity":256000,"optimistic":{"enabled":true,"timeout":"1h0m0s"}},"ntp":{"enabled":true,"interval":"30m0s","server":"ntp.aliyun.com","server_port":123,"detour":"direct"},"http_clients":[{"tag":"default","version":2,"detour":"direct","stream_receive_window":0,"connection_receive_window":0},{"tag":"proxy","version":2,"detour":"📦 sing-box","domain_resolver":"alidns-quic","stream_receive_window":0,"connection_receive_window":0},{"tag":"provider-dl","version":2,"detour":"direct","stream_receive_window":0,"connection_receive_window":0}],"inbounds":[{"type":"tun","tag":"tun-in","mtu":1500,"address":["10.8.0.1/24","fdfe:dcba:9876::1/126"],"dns_mode":"hijack","dns_address":["10.8.0.2","fdfe:dcba:9876::2"],"auto_route":true,"strict_route":true,"route_address_set":["cnip","private"],"stack":"system"},{"type":"mixed","tag":"mixed-in","listen":"127.0.0.1","listen_port":7890}],"outbounds":[{"type":"selector","tag":"🚦 FINAL","outbounds":["📦 sing-box","direct","❌ REJECT-DROP"],"providers":null,"default":"📦 sing-box","interrupt_exist_connections":true},{"type":"block","tag":"❌ REJECT-DROP"},{"type":"selector","tag":"📦 sing-box","outbounds":["🟢 自动-测速","🔵 自动-稳定"],"providers":null,"use_all_providers":true,"interrupt_exist_connections":true},{"type":"urltest","tag":"🟢 自动-测速","outbounds":["mock-hk-01","mock-jp-01","mock-sg-01"],"providers":null,"use_all_providers":true,"url":"http://www.gstatic.com/generate_204","interval":"10m0s","tolerance":100,"idle_timeout":"30m0s"},{"type":"urltest","tag":"🔵 自动-稳定","outbounds":["mock-hk-01","mock-jp-01","mock-sg-01"],"providers":null,"use_all_providers":true,"url":"http://www.gstatic.com/generate_204","interval":"15m0s","tolerance":30,"idle_timeout":"1h0m0s"},{"type":"selector","tag":"🧭 Google Services","outbounds":["direct"],"providers":null,"interrupt_exist_connections":true},{"type":"selector","tag":"📬 Google FCM","outbounds":["📦 sing-box","direct","🧭 Google Services"],"providers":null,"default":"📦 sing-box","interrupt_exist_connections":true},{"type":"selector","tag":"🍎 Apple","outbounds":["direct","📦 sing-box"],"providers":null,"default":"direct","interrupt_exist_connections":true},{"type":"selector","tag":"📺 StreamingME","outbounds":["direct","📦 sing-box"],"providers":null,"interrupt_exist_connections":true},{"type":"selector","tag":"🪟 Microsoft","outbounds":["direct","📦 sing-box"],"providers":null,"interrupt_exist_connections":true},{"type":"selector","tag":"📠 Telegram","outbounds":["📦 sing-box"],"providers":null,"default":"📦 sing-box","interrupt_exist_connections":true},{"type":"selector","tag":"🇨🇳 国内流量","outbounds":["direct","📦 sing-box"],"providers":null,"default":"direct","interrupt_exist_connections":true},{"type":"selector","tag":"GLOBAL","outbounds":["📦 sing-box","direct"],"providers":null,"default":"📦 sing-box"},{"type":"direct","tag":"direct","domain_resolver":"alidns-quic"},{"type":"socks","tag":"mock-hk-01","server":"203.0.113.11","server_port":1080},{"type":"socks","tag":"mock-jp-01","server":"203.0.113.12","server_port":1080},{"type":"socks","tag":"mock-sg-01","server":"203.0.113.13","server_port":1080}],"providers":[{"type":"remote","tag":"my_nodes","url":"https://ssb.372164885.xyz/LNB92RfZaScOVZO93kX9/download/%E7%9A%AE%E5%8D%A1%E7%9A%AE%E5%8D%A1?target=sing-box","path":"./providers/my_nodes.json","http_client":"provider-dl","update_interval":"24h0m0s","health_check":{"enabled":true,"url":"http://cp.cloudflare.com/generate_204","interval":"1h0m0s","timeout":"3s"}}],"route":{"rules":[{"domain_suffix":"cp.cloudflare.com","outbound":"direct"},{"action":"sniff"},{"type":"logical","mode":"or","rules":[{"port":53},{"protocol":"dns"}],"action":"hijack-dns"},{"port":[853,5353],"action":"reject"},{"type":"logical","mode":"and","rules":[{"ip_version":6},{"default_interface_address":"2000::/3","invert":true}],"action":"reject"},{"type":"logical","mode":"and","rules":[{"protocol":"quic"},{"type":"logical","mode":"or","rules":[{"rule_set":["geosite-google","geosite-youtube","instagram","telegram","Google","Proxy","gfw","ai","games","GlobalMedia"]},{"domain_suffix":["play.google.com","play.googleapis.com","play-fe.googleapis.com","play-lh.googleusercontent.com","android.clients.google.com","android.googleapis.com","dl.google.com","dl.l.google.com","gvt1.com","gvt2.com","gvt3.com","ggpht.com","googleusercontent.com","twitter.com","twimg.com","facebook.com","fbcdn.net","netflix.com","spotify.com","github.com","steampowered.com","discord.com","reddit.com","tiktok.com","amazon.com","paypal.com"]}]}],"outbound":"📦 sing-box"},{"type":"logical","mode":"and","rules":[{"domain_suffix":["mtalk.google.com","alt1-mtalk.google.com","alt2-mtalk.google.com","alt3-mtalk.google.com","alt4-mtalk.google.com","alt5-mtalk.google.com","alt6-mtalk.google.com","alt7-mtalk.google.com","alt8-mtalk.google.com"]},{"port":[443,5228]}],"outbound":"📦 sing-box"},{"protocol":["ntp","icmp"],"outbound":"direct"},{"domain_suffix":["google.cn","googleapis.cn"],"outbound":"📦 sing-box"},{"domain_suffix":["browserleaks.com","ipleak.net","dnsleaktest.com","whoer.net","whatleaks.com","ip.sb","ipinfo.io","ifconfig.me","ip-api.com"],"outbound":"📦 sing-box"},{"rule_set":["fcm","Android"],"outbound":"📦 sing-box"},{"rule_set":["geosite-google","geosite-youtube","telegram","instagram","Google","Proxy","gfw","ai","games","GlobalMedia","telegram_ip"],"outbound":"📦 sing-box"},{"domain_suffix":["play.google.com","play.googleapis.com","android.clients.google.com","android.googleapis.com","dl.google.com","dl.l.google.com","gvt1.com","gvt2.com","gvt3.com","services.googleapis.com","googleapis.com","gstatic.com","ggpht.com","googleusercontent.com","google.com","google.com.hk","youtube.com","ytimg.com","googlevideo.com","app-measurement.com","firebaselogging.googleapis.com","firebaselogging-pa.googleapis.com"],"outbound":"📦 sing-box"},{"domain_suffix":["netflix.com","spotify.com","github.com","steampowered.com","discord.com","reddit.com","tiktok.com","twitter.com","twimg.com","facebook.com","fbcdn.net","amazon.com","microsoft.com","paypal.com"],"outbound":"📦 sing-box"},{"package_name_regex":"^(com\\.google\\.android\\.(youtube|apps\\.(maps|docs|drive))|app\\.revanced\\.android\\.youtube|org\\.telegram\\.messenger(\\..*)?)$","outbound":"📦 sing-box"},{"action":"sniff"},{"domain_suffix":["douyinvod.com","ibytedtos.com","pstatp.com","byteimg.com","bytecdn.com","snssdk.com","bytedance.com","toutiao.com","ixigua.com","volcengine.com","kuaishou.com","yximgs.com","bilivideo.com","hdslb.com","alicdn.com","aliyuncs.com","gtimg.com","360buyimg.com","pinduoduo.com"],"outbound":"🇨🇳 国内流量"},{"domain_suffix":[".cn",".xn--fiqs8s",".xn--55qx5d",".xn--io0a7i"],"outbound":"🇨🇳 国内流量"},{"rule_set":["private","cn","cnip","microsoft-cn","apple-cn","games-cn","networktest"],"outbound":"🇨🇳 国内流量"},{"domain_suffix":"sponsor.ajay.app","outbound":"🇨🇳 国内流量"},{"package_name":["com.tencent.mm","com.eg.android.AlipayGphone","com.netease.cloudmusic","com.wwwscn.yuexingbao"],"outbound":"🇨🇳 国内流量"},{"rule_set":"Apple","outbound":"🇨🇳 国内流量"},{"clash_mode":"Direct","outbound":"🇨🇳 国内流量"},{"clash_mode":"Global","outbound":"GLOBAL"},{"ip_is_private":true,"outbound":"🇨🇳 国内流量"},{"ip_cidr":"198.18.0.0/15","outbound":"📦 sing-box"},{"ip_cidr":"fc00::/18","outbound":"📦 sing-box"},{"action":"route-options","udp_disable_domain_unmapping":true,"udp_connect":true},{"rule_set":["Ads","httpDNS","DNSreject","anti_fraud"],"action":"reject","method":"drop"},{"domain":["beacon.qq.com","abyss.cyapi.cn","ad.cyapi.cn","gather.colorfulclouds.net"],"action":"reject","method":"drop"},{"rule_set":["geosite_adguard","geosite-category-ads-all"],"action":"reject"},{"protocol":["stun","quic","dtls"],"action":"reject"},{"type":"logical","mode":"or","rules":[{"network":"udp","port":[3478,5349,5350,19302,10000]},{"domain_regex":"^stun\\..+"},{"domain_keyword":["stun","turn","httpdns"]}],"action":"reject"},{"action":"resolve"}],"rule_set":[{"type":"remote","tag":"geosite-category-ads-all","url":"https://cdn.jsdelivr.net/gh/SagerNet/sing-geosite@rule-set/geosite-category-ads-all.srs","http_client":"default","update_interval":"48h0m0s"},{"type":"remote","tag":"geosite_adguard","url":"https://cdn.jsdelivr.net/gh/217heidai/adblockfilters@main/rules/adblocksingbox.srs","http_client":"default","update_interval":"48h0m0s"},{"type":"remote","tag":"geosite-google","url":"https://cdn.jsdelivr.net/gh/SagerNet/sing-geosite@rule-set/geosite-google.srs","http_client":"default","update_interval":"48h0m0s"},{"type":"remote","tag":"geosite-youtube","url":"https://cdn.jsdelivr.net/gh/SagerNet/sing-geosite@rule-set/geosite-youtube.srs","http_client":"default","update_interval":"48h0m0s"},{"type":"remote","tag":"games","url":"https://cdn.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/games.srs","http_client":"default","update_interval":"48h0m0s"},{"type":"remote","tag":"ai","url":"https://cdn.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/ai.srs","http_client":"default","update_interval":"48h0m0s"},{"type":"remote","tag":"private","url":"https://cdn.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/private.srs","http_client":"default","update_interval":"48h0m0s"},{"type":"remote","tag":"anti_fraud","url":"https://cdn.jsdelivr.net/gh/hwsaya/nothing@main/rules/FuckFZ.json","http_client":"default","update_interval":"48h0m0s"},{"type":"remote","tag":"cn","url":"https://cdn.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/cn.srs","http_client":"default","update_interval":"48h0m0s"},{"type":"remote","tag":"microsoft-cn","url":"https://cdn.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/microsoft-cn.srs","http_client":"default","update_interval":"48h0m0s"},{"type":"remote","tag":"apple-cn","url":"https://cdn.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/apple-cn.srs","http_client":"default","update_interval":"48h0m0s"},{"type":"remote","tag":"games-cn","url":"https://cdn.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/games-cn.srs","http_client":"default","update_interval":"48h0m0s"},{"type":"remote","tag":"networktest","url":"https://cdn.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/networktest.srs","http_client":"default","update_interval":"48h0m0s"},{"type":"remote","tag":"telegram_ip","url":"https://cdn.jsdelivr.net/gh/MetaCubeX/meta-rules-dat@sing/geo/geoip/telegram.srs","http_client":"default","update_interval":"48h0m0s"},{"type":"remote","tag":"Proxy","url":"https://cdn.jsdelivr.net/gh/SagerNet/sing-geosite@rule-set/geosite-geolocation-!cn.srs","http_client":"default","update_interval":"48h0m0s"},{"type":"remote","tag":"gfw","url":"https://cdn.jsdelivr.net/gh/MetaCubeX/meta-rules-dat@sing/geo/geosite/gfw.srs","http_client":"default","update_interval":"48h0m0s"},{"type":"remote","tag":"cnip","url":"https://cdn.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/cnip.srs","http_client":"default","update_interval":"48h0m0s"},{"type":"remote","tag":"Filter","url":"https://cdn.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/fakeip-filter.srs","http_client":"default","update_interval":"48h0m0s"},{"type":"remote","tag":"DNSreject","url":"https://cdn.jsdelivr.net/gh/senshinya/singbox_ruleset@main/rule/AdGuardSDNSFilter/AdGuardSDNSFilter.srs","http_client":"default","update_interval":"48h0m0s"},{"type":"remote","tag":"httpDNS","url":"https://cdn.jsdelivr.net/gh/senshinya/singbox_ruleset@main/rule/BlockHttpDNS/BlockHttpDNS.srs","http_client":"default","update_interval":"48h0m0s"},{"type":"remote","tag":"Ads","url":"https://cdn.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/ads.srs","http_client":"default","update_interval":"48h0m0s"},{"type":"remote","tag":"Apple","url":"https://cdn.jsdelivr.net/gh/SagerNet/sing-geosite@rule-set/geosite-apple.srs","http_client":"default","update_interval":"48h0m0s"},{"type":"remote","tag":"fcm","url":"https://cdn.jsdelivr.net/gh/senshinya/singbox_ruleset@main/rule/GoogleFCM/GoogleFCM.srs","http_client":"default","update_interval":"48h0m0s"},{"type":"remote","tag":"Android","url":"https://cdn.jsdelivr.net/gh/senshinya/singbox_ruleset@main/rule/Android/Android.srs","http_client":"default","update_interval":"48h0m0s"},{"type":"remote","tag":"telegram","url":"https://cdn.jsdelivr.net/gh/SagerNet/sing-geosite@rule-set/geosite-telegram.srs","http_client":"default","update_interval":"48h0m0s"},{"type":"remote","tag":"instagram","url":"https://cdn.jsdelivr.net/gh/SagerNet/sing-geosite@rule-set/geosite-instagram.srs","http_client":"default","update_interval":"48h0m0s"},{"type":"remote","tag":"Google","url":"https://cdn.jsdelivr.net/gh/senshinya/singbox_ruleset@main/rule/Google/Google.srs","http_client":"default","update_interval":"48h0m0s"},{"type":"remote","tag":"GlobalMedia","url":"https://cdn.jsdelivr.net/gh/MetaCubeX/meta-rules-dat@sing/geo/geosite/category-entertainment.srs","http_client":"default","update_interval":"48h0m0s"}],"final":"🚦 FINAL","auto_detect_interface":true,"default_domain_resolver":"alidns-quic"},"experimental":{"cache_file":{"enabled":true,"path":"cache.db","cache_id":"reF1nd","store_fakeip":true,"store_dns":true},"clash_api":{"external_controller":"127.0.0.1:9090","external_ui":"ui","default_mode":"rule"},"debug":{"gc_percent":100,"memory_limit":"400MB"}}} diff --git a/fixtures/external/huixiao666-pk-box-1.14.0-alpha.ref1nd-1.14.0-alpha.31.ref1nd.json-eea67696.json b/fixtures/external/huixiao666-pk-box-1.14.0-alpha.ref1nd-1.14.0-alpha.31.ref1nd.json-eea67696.json new file mode 100644 index 00000000..432a66b3 --- /dev/null +++ b/fixtures/external/huixiao666-pk-box-1.14.0-alpha.ref1nd-1.14.0-alpha.31.ref1nd.json-eea67696.json @@ -0,0 +1 @@ +{"log":{"level":"trace","timestamp":true},"dns":{"servers":[{"type":"hosts","tag":"hosts_fix","predefined":{"dns.alidns.com":["223.5.5.5","223.6.6.6"],"dns.adguard-dns.com":["94.140.14.14","94.140.15.15"],"doh.pub":["1.12.12.21","120.53.53.53"],"cloudflare-dns.com":["104.16.248.249","104.16.249.249"],"dns.quad9.net":["9.9.9.9","149.112.112.112"],"dns.google":["8.8.8.8","8.8.4.4"],"mtalk.google.com":["2404:6800:4008:c07::bc","2404:6800:4008:c1b::bc","2404:6800:4008:c15::bc","2404:6800:4008:c05::bc","2404:6800:4008:c19::bc","2404:6800:4008:c01::bc","2607:f8b0:4023:1c05::bc","2607:f8b0:400e:c09::bc","142.250.107.188","142.251.170.188","108.177.125.188","142.251.10.188","64.233.186.188","74.125.206.188"],"alt1-mtalk.google.com":["2607:f8b0:4023:1c05::bc","2a00:1450:400b:c02::bc","74.125.200.188"],"alt2-mtalk.google.com":"192.178.220.188","alt3-mtalk.google.com":["2607:f8b0:4023:2009::bc","2607:f8b0:4023:100f::bc","74.125.131.188"],"alt4-mtalk.google.com":"209.85.144.188","alt5-mtalk.google.com":["2607:f8b0:4003:c0a::bc","2a00:1450:4025:c01::bc","74.125.126.188"],"alt6-mtalk.google.com":"142.250.115.188","alt7-mtalk.google.com":["2607:f8b0:4024:c0d::bc","2404:6800:4003:c06::bc","192.178.131.188"],"alt8-mtalk.google.com":"172.253.132.188","dl.google.com":"180.163.151.161","dl.l.google.com":"180.163.150.33","raw.githubusercontent.com":["185.199.108.133","185.199.109.133","185.199.110.133","185.199.111.133"],"ssb.372164885.xyz":["104.21.32.1","104.21.48.1"],"cdn.jsdelivr.net":["104.16.89.20","104.16.90.20"]}},{"type":"quic","tag":"alidns-quic","detour":"direct","domain_resolver":"hosts_fix","server":"1.1.1.1"},{"type":"https","tag":"proxy-dns","detour":"📦 sing-box","domain_resolver":"hosts_fix","server":"1.1.1.1"},{"type":"https","tag":"dnspub-doh","detour":"direct","domain_resolver":"hosts_fix","server":"1.1.1.1"},{"type":"https","tag":"cf-dot","detour":"📦 sing-box","domain_resolver":"hosts_fix","server":"1.1.1.1","path":"/dns-query"},{"type":"https","tag":"adguard-dns","detour":"📦 sing-box","domain_resolver":"hosts_fix","server":"1.1.1.1","path":"/dns-query"},{"type":"https","tag":"quad9-doh","detour":"📦 sing-box","domain_resolver":"hosts_fix","server":"1.1.1.1"},{"type":"fakeip","tag":"fakeip","inet4_range":"198.18.0.0/15","inet6_range":"fc00::/18"}],"rules":[{"rule_set":["geosite_adguard","geosite-category-ads-all"],"server":"adguard-dns"},{"ip_version":6,"action":"reject"},{"query_type":["SVCB","HTTPS","PTR"],"action":"reject"},{"rule_set":["httpDNS","DNSreject","Ads"],"action":"predefined","rcode":"NOERROR"},{"domain_suffix":["beacons.gvt2.com","beacons2.gvt2.com","beacons3.gvt2.com"],"action":"reject"},{"rule_set":"Filter","server":"alidns-quic"},{"domain":["mtalk.google.com","alt1-mtalk.google.com","alt2-mtalk.google.com","alt3-mtalk.google.com","alt4-mtalk.google.com","alt5-mtalk.google.com","alt6-mtalk.google.com","alt7-mtalk.google.com","alt8-mtalk.google.com","dl.google.com","dl.l.google.com"],"server":"hosts_fix"},{"domain_suffix":[".cn",".xn--fiqs8s",".xn--55qx5d",".xn--io0a7i"],"server":"alidns-quic"},{"domain_suffix":["douyinvod.com","ibytedtos.com","pstatp.com","byteimg.com","bytecdn.com","snssdk.com","bytedance.com","toutiao.com","ixigua.com","volcengine.com","kuaishou.com","yximgs.com","bilivideo.com","hdslb.com","alicdn.com","aliyuncs.com","gtimg.com","360buyimg.com","pinduoduo.com"],"server":"alidns-quic"},{"rule_set":"cn","server":"dnspub-doh"},{"domain_suffix":"372164885.xyz","server":"alidns-quic"},{"domain_suffix":[".local",".lan","local","lan","home","internal","corp"],"action":"reject"},{"rule_set":["Google","fcm","Android"],"server":"cf-dot"},{"query_type":["A","AAAA"],"invert":true,"action":"reject"},{"server":"fakeip"}],"final":"quad9-doh","reverse_mapping":true,"strategy":"prefer_ipv4","timeout":"3s","cache_capacity":256000,"optimistic":{"enabled":true,"timeout":"1h0m0s"}},"ntp":{"enabled":true,"interval":"30m0s","server":"ntp.aliyun.com","server_port":123,"detour":"direct"},"http_clients":[{"tag":"default","version":2,"detour":"direct","stream_receive_window":0,"connection_receive_window":0},{"tag":"proxy","version":2,"detour":"📦 sing-box","domain_resolver":"alidns-quic","stream_receive_window":0,"connection_receive_window":0},{"tag":"provider-dl","version":2,"detour":"direct","stream_receive_window":0,"connection_receive_window":0}],"inbounds":[{"type":"tun","tag":"tun-in","mtu":1500,"address":["10.8.0.1/24","fdfe:dcba:9876::1/126"],"dns_mode":"hijack","dns_address":["10.8.0.2","fdfe:dcba:9876::2"],"auto_route":true,"strict_route":true,"route_address_set":["cnip","private"],"stack":"system"},{"type":"mixed","tag":"mixed-in","listen":"127.0.0.1","listen_port":7890}],"outbounds":[{"type":"selector","tag":"🚦 FINAL","outbounds":["📦 sing-box","direct","❌ REJECT-DROP"],"providers":null,"default":"📦 sing-box","interrupt_exist_connections":true},{"type":"block","tag":"❌ REJECT-DROP"},{"type":"selector","tag":"📦 sing-box","outbounds":["🟢 自动-测速","🔵 自动-稳定"],"providers":null,"use_all_providers":true,"interrupt_exist_connections":true},{"type":"urltest","tag":"🟢 自动-测速","outbounds":["mock-hk-01","mock-jp-01","mock-sg-01"],"providers":null,"use_all_providers":true,"url":"http://www.gstatic.com/generate_204","interval":"10m0s","tolerance":100,"idle_timeout":"30m0s"},{"type":"urltest","tag":"🔵 自动-稳定","outbounds":["mock-hk-01","mock-jp-01","mock-sg-01"],"providers":null,"use_all_providers":true,"url":"http://www.gstatic.com/generate_204","interval":"15m0s","tolerance":30,"idle_timeout":"1h0m0s"},{"type":"selector","tag":"🧭 Google Services","outbounds":["direct"],"providers":null,"interrupt_exist_connections":true},{"type":"selector","tag":"📬 Google FCM","outbounds":["📦 sing-box","direct","🧭 Google Services"],"providers":null,"default":"📦 sing-box","interrupt_exist_connections":true},{"type":"selector","tag":"🍎 Apple","outbounds":["direct","📦 sing-box"],"providers":null,"default":"direct","interrupt_exist_connections":true},{"type":"selector","tag":"📺 StreamingME","outbounds":["direct","📦 sing-box"],"providers":null,"interrupt_exist_connections":true},{"type":"selector","tag":"🪟 Microsoft","outbounds":["direct","📦 sing-box"],"providers":null,"interrupt_exist_connections":true},{"type":"selector","tag":"📠 Telegram","outbounds":["📦 sing-box"],"providers":null,"default":"📦 sing-box","interrupt_exist_connections":true},{"type":"selector","tag":"🇨🇳 国内流量","outbounds":["direct","📦 sing-box"],"providers":null,"default":"direct","interrupt_exist_connections":true},{"type":"selector","tag":"GLOBAL","outbounds":["📦 sing-box","direct"],"providers":null,"default":"📦 sing-box"},{"type":"direct","tag":"direct","domain_resolver":"alidns-quic"},{"type":"socks","tag":"mock-hk-01","server":"203.0.113.11","server_port":1080},{"type":"socks","tag":"mock-jp-01","server":"203.0.113.12","server_port":1080},{"type":"socks","tag":"mock-sg-01","server":"203.0.113.13","server_port":1080}],"providers":[{"type":"remote","tag":"my_nodes","url":"//订阅链接","path":"./providers/my_nodes.json","http_client":"provider-dl","update_interval":"24h0m0s","health_check":{"enabled":true,"url":"http://cp.cloudflare.com/generate_204","interval":"1h0m0s","timeout":"3s"}}],"route":{"rules":[{"domain_suffix":"cp.cloudflare.com","outbound":"direct"},{"action":"sniff"},{"type":"logical","mode":"or","rules":[{"port":53},{"protocol":"dns"}],"action":"hijack-dns"},{"port":[853,5353],"action":"reject"},{"type":"logical","mode":"and","rules":[{"ip_version":6},{"default_interface_address":"2000::/3","invert":true}],"action":"reject"},{"type":"logical","mode":"and","rules":[{"protocol":"quic"},{"type":"logical","mode":"or","rules":[{"rule_set":["geosite-google","geosite-youtube","instagram","telegram","Google","Proxy","gfw","ai","games","GlobalMedia"]},{"domain_suffix":["play.google.com","play.googleapis.com","play-fe.googleapis.com","play-lh.googleusercontent.com","android.clients.google.com","android.googleapis.com","dl.google.com","dl.l.google.com","gvt1.com","gvt2.com","gvt3.com","ggpht.com","googleusercontent.com","twitter.com","twimg.com","facebook.com","fbcdn.net","netflix.com","spotify.com","github.com","steampowered.com","discord.com","reddit.com","tiktok.com","amazon.com","paypal.com"]}]}],"outbound":"📦 sing-box"},{"type":"logical","mode":"and","rules":[{"domain_suffix":["mtalk.google.com","alt1-mtalk.google.com","alt2-mtalk.google.com","alt3-mtalk.google.com","alt4-mtalk.google.com","alt5-mtalk.google.com","alt6-mtalk.google.com","alt7-mtalk.google.com","alt8-mtalk.google.com"]},{"port":[443,5228]}],"outbound":"📦 sing-box"},{"protocol":["ntp","icmp"],"outbound":"direct"},{"domain_suffix":["google.cn","googleapis.cn"],"outbound":"📦 sing-box"},{"domain_suffix":["browserleaks.com","ipleak.net","dnsleaktest.com","whoer.net","whatleaks.com","ip.sb","ipinfo.io","ifconfig.me","ip-api.com"],"outbound":"📦 sing-box"},{"rule_set":["fcm","Android"],"outbound":"📦 sing-box"},{"rule_set":["geosite-google","geosite-youtube","telegram","instagram","Google","Proxy","gfw","ai","games","GlobalMedia","telegram_ip"],"outbound":"📦 sing-box"},{"domain_suffix":["play.google.com","play.googleapis.com","android.clients.google.com","android.googleapis.com","dl.google.com","dl.l.google.com","gvt1.com","gvt2.com","gvt3.com","services.googleapis.com","googleapis.com","gstatic.com","ggpht.com","googleusercontent.com","google.com","google.com.hk","youtube.com","ytimg.com","googlevideo.com","app-measurement.com","firebaselogging.googleapis.com","firebaselogging-pa.googleapis.com"],"outbound":"📦 sing-box"},{"domain_suffix":["netflix.com","spotify.com","github.com","steampowered.com","discord.com","reddit.com","tiktok.com","twitter.com","twimg.com","facebook.com","fbcdn.net","amazon.com","microsoft.com","paypal.com"],"outbound":"📦 sing-box"},{"package_name_regex":"^(com\\.google\\.android\\.(youtube|apps\\.(maps|docs|drive))|app\\.revanced\\.android\\.youtube|org\\.telegram\\.messenger(\\..*)?)$","outbound":"📦 sing-box"},{"domain_suffix":["douyinvod.com","ibytedtos.com","pstatp.com","byteimg.com","bytecdn.com","snssdk.com","bytedance.com","toutiao.com","ixigua.com","volcengine.com","kuaishou.com","yximgs.com","bilivideo.com","hdslb.com","alicdn.com","aliyuncs.com","gtimg.com","360buyimg.com","pinduoduo.com"],"outbound":"🇨🇳 国内流量"},{"domain_suffix":[".cn",".xn--fiqs8s",".xn--55qx5d",".xn--io0a7i"],"outbound":"🇨🇳 国内流量"},{"rule_set":["private","cn","cnip","microsoft-cn","apple-cn","games-cn","networktest"],"outbound":"🇨🇳 国内流量"},{"domain_suffix":"sponsor.ajay.app","outbound":"🇨🇳 国内流量"},{"package_name":["com.tencent.mm","com.eg.android.AlipayGphone","com.netease.cloudmusic","com.wwwscn.yuexingbao"],"outbound":"🇨🇳 国内流量"},{"rule_set":"Apple","outbound":"🇨🇳 国内流量"},{"clash_mode":"Direct","outbound":"🇨🇳 国内流量"},{"clash_mode":"Global","outbound":"GLOBAL"},{"ip_is_private":true,"outbound":"🇨🇳 国内流量"},{"ip_cidr":"198.18.0.0/15","outbound":"📦 sing-box"},{"ip_cidr":"fc00::/18","outbound":"📦 sing-box"},{"action":"route-options","udp_disable_domain_unmapping":true,"udp_connect":true},{"rule_set":["Ads","httpDNS","DNSreject","anti_fraud"],"action":"reject","method":"drop"},{"domain":["beacon.qq.com","abyss.cyapi.cn","ad.cyapi.cn","gather.colorfulclouds.net"],"action":"reject","method":"drop"},{"rule_set":["geosite_adguard","geosite-category-ads-all"],"action":"reject"},{"protocol":["stun","quic","dtls"],"action":"reject"},{"type":"logical","mode":"or","rules":[{"network":"udp","port":[3478,5349,5350,19302,10000]},{"domain_regex":"^stun\\..+"},{"domain_keyword":["stun","turn","httpdns"]}],"action":"reject"},{"action":"resolve"}],"rule_set":[{"type":"remote","tag":"geosite-category-ads-all","url":"https://cdn.jsdelivr.net/gh/SagerNet/sing-geosite@rule-set/geosite-category-ads-all.srs","http_client":"default","update_interval":"48h0m0s"},{"type":"remote","tag":"geosite_adguard","url":"https://cdn.jsdelivr.net/gh/217heidai/adblockfilters@main/rules/adblocksingbox.srs","http_client":"default","update_interval":"48h0m0s"},{"type":"remote","tag":"geosite-google","url":"https://cdn.jsdelivr.net/gh/SagerNet/sing-geosite@rule-set/geosite-google.srs","http_client":"default","update_interval":"48h0m0s"},{"type":"remote","tag":"geosite-youtube","url":"https://cdn.jsdelivr.net/gh/SagerNet/sing-geosite@rule-set/geosite-youtube.srs","http_client":"default","update_interval":"48h0m0s"},{"type":"remote","tag":"games","url":"https://cdn.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/games.srs","http_client":"default","update_interval":"48h0m0s"},{"type":"remote","tag":"ai","url":"https://cdn.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/ai.srs","http_client":"default","update_interval":"48h0m0s"},{"type":"remote","tag":"private","url":"https://cdn.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/private.srs","http_client":"default","update_interval":"48h0m0s"},{"type":"remote","tag":"anti_fraud","url":"https://cdn.jsdelivr.net/gh/hwsaya/nothing@main/rules/FuckFZ.json","http_client":"default","update_interval":"48h0m0s"},{"type":"remote","tag":"cn","url":"https://cdn.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/cn.srs","http_client":"default","update_interval":"48h0m0s"},{"type":"remote","tag":"microsoft-cn","url":"https://cdn.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/microsoft-cn.srs","http_client":"default","update_interval":"48h0m0s"},{"type":"remote","tag":"apple-cn","url":"https://cdn.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/apple-cn.srs","http_client":"default","update_interval":"48h0m0s"},{"type":"remote","tag":"games-cn","url":"https://cdn.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/games-cn.srs","http_client":"default","update_interval":"48h0m0s"},{"type":"remote","tag":"networktest","url":"https://cdn.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/networktest.srs","http_client":"default","update_interval":"48h0m0s"},{"type":"remote","tag":"telegram_ip","url":"https://cdn.jsdelivr.net/gh/MetaCubeX/meta-rules-dat@sing/geo/geoip/telegram.srs","http_client":"default","update_interval":"48h0m0s"},{"type":"remote","tag":"Proxy","url":"https://cdn.jsdelivr.net/gh/SagerNet/sing-geosite@rule-set/geosite-geolocation-!cn.srs","http_client":"default","update_interval":"48h0m0s"},{"type":"remote","tag":"gfw","url":"https://cdn.jsdelivr.net/gh/MetaCubeX/meta-rules-dat@sing/geo/geosite/gfw.srs","http_client":"default","update_interval":"48h0m0s"},{"type":"remote","tag":"cnip","url":"https://cdn.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/cnip.srs","http_client":"default","update_interval":"48h0m0s"},{"type":"remote","tag":"Filter","url":"https://cdn.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/fakeip-filter.srs","http_client":"default","update_interval":"48h0m0s"},{"type":"remote","tag":"DNSreject","url":"https://cdn.jsdelivr.net/gh/senshinya/singbox_ruleset@main/rule/AdGuardSDNSFilter/AdGuardSDNSFilter.srs","http_client":"default","update_interval":"48h0m0s"},{"type":"remote","tag":"httpDNS","url":"https://cdn.jsdelivr.net/gh/senshinya/singbox_ruleset@main/rule/BlockHttpDNS/BlockHttpDNS.srs","http_client":"default","update_interval":"48h0m0s"},{"type":"remote","tag":"Ads","url":"https://cdn.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/ads.srs","http_client":"default","update_interval":"48h0m0s"},{"type":"remote","tag":"Apple","url":"https://cdn.jsdelivr.net/gh/SagerNet/sing-geosite@rule-set/geosite-apple.srs","http_client":"default","update_interval":"48h0m0s"},{"type":"remote","tag":"fcm","url":"https://cdn.jsdelivr.net/gh/senshinya/singbox_ruleset@main/rule/GoogleFCM/GoogleFCM.srs","http_client":"default","update_interval":"48h0m0s"},{"type":"remote","tag":"Android","url":"https://cdn.jsdelivr.net/gh/senshinya/singbox_ruleset@main/rule/Android/Android.srs","http_client":"default","update_interval":"48h0m0s"},{"type":"remote","tag":"telegram","url":"https://cdn.jsdelivr.net/gh/SagerNet/sing-geosite@rule-set/geosite-telegram.srs","http_client":"default","update_interval":"48h0m0s"},{"type":"remote","tag":"instagram","url":"https://cdn.jsdelivr.net/gh/SagerNet/sing-geosite@rule-set/geosite-instagram.srs","http_client":"default","update_interval":"48h0m0s"},{"type":"remote","tag":"Google","url":"https://cdn.jsdelivr.net/gh/senshinya/singbox_ruleset@main/rule/Google/Google.srs","http_client":"default","update_interval":"48h0m0s"},{"type":"remote","tag":"GlobalMedia","url":"https://cdn.jsdelivr.net/gh/MetaCubeX/meta-rules-dat@sing/geo/geosite/category-entertainment.srs","http_client":"default","update_interval":"48h0m0s"}],"final":"🚦 FINAL","auto_detect_interface":true,"default_domain_resolver":"alidns-quic"},"services":[{"type":"api","tag":"api","listen":"127.0.0.1","listen_port":9091,"access_control_allow_private_network":true}],"experimental":{"cache_file":{"enabled":true,"path":"cache.db","cache_id":"reF1nd","store_fakeip":true,"store_dns":true},"clash_api":{"external_controller":"127.0.0.1:9090","external_ui":"ui","default_mode":"rule","access_control_allow_private_network":true},"debug":{"gc_percent":100,"memory_limit":"400MB"}}} diff --git a/fixtures/external/huixiao666-pk-box-1.14.0-alpha.xxx-1.14.0-alpha.12-.json-2eeb05f0.json b/fixtures/external/huixiao666-pk-box-1.14.0-alpha.xxx-1.14.0-alpha.12-.json-2eeb05f0.json new file mode 100644 index 00000000..c60b61cf --- /dev/null +++ b/fixtures/external/huixiao666-pk-box-1.14.0-alpha.xxx-1.14.0-alpha.12-.json-2eeb05f0.json @@ -0,0 +1 @@ +{"log":{"level":"trace","timestamp":true},"ntp":{"enabled":true,"server":"ntp.aliyun.com","server_port":123,"interval":"30m"},"dns":{"servers":[{"tag":"local","type":"local"},{"tag":"hosts_fix","type":"hosts","predefined":{"dns.alidns.com":["223.5.5.5","223.6.6.6"],"doh.pub":["1.12.12.21","120.53.53.53"],"dns.google":["8.8.8.8","8.8.4.4"],"cloudflare-dns.com":["104.16.248.249","104.16.249.249"]}},{"tag":"alidns","type":"quic","server":"1.1.1.1","domain_resolver":"hosts_fix"},{"tag":"ggdns","type":"https","server":"1.1.1.1","domain_resolver":"hosts_fix"},{"tag":"fakeip","type":"fakeip","inet4_range":"198.18.0.0/15"}],"rules":[{"domain_suffix":["app-measurement.com","hm.baidu.com","firebaselogging.googleapis.com","firebaselogging-pa.googleapis.com","beacons.gvt2.com","beacons2.gvt2.com","beacons3.gvt2.com","tracking.miui.com"],"server":"alidns"},{"rule_set":["geosite_adguard","geosite-category-ads-all"],"action":"reject"},{"domain_suffix":[".local",".lan","miwifi.com","tplogin.cn","router.asus.com","tendawifi.com","tplinkwifi.net"],"server":"local"},{"query_type":["SVCB","HTTPS"],"action":"reject"},{"query_type":["PTR"],"action":"reject"},{"rule_set":["proxy","games","ai"],"query_type":["A","AAAA"],"server":"fakeip"},{"rule_set":["proxy","games","ai"],"query_type":["A","AAAA"],"server":"ggdns","client_subnet":"119.134.100.0/24"},{"domain_suffix":["market.xiaomi.com","lancache.steamcontent.com"],"server":"alidns"},{"domain_suffix":["play.google.com","ggpht.com","googleusercontent.com","android.com"],"server":"fakeip"},{"clash_mode":"direct","server":"alidns"},{"clash_mode":"global","server":"fakeip"},{"action":"evaluate","server":"alidns"},{"type":"logical","mode":"or","rules":[{"match_response":true,"ip_is_private":true}],"action":"respond"},{"match_response":true,"ip_accept_any":true,"action":"respond"}],"final":"alidns","strategy":"ipv4_only","reverse_mapping":true,"cache_capacity":16000,"optimistic":true},"inbounds":[{"type":"tun","tag":"tun-in","address":["10.8.0.1/24"],"mtu":1500,"stack":"mixed","auto_route":true,"strict_route":true},{"type":"mixed","tag":"mixed-in","listen":"127.0.0.1","listen_port":7890}],"outbounds":[{"type":"direct","tag":"DIRECT","domain_resolver":"alidns"},{"type":"selector","tag":"PROXY","outbounds":["AUTO","🚀 CF-优选-Visa","🚀 CF-优选-DO","DIRECT"],"default":"AUTO","interrupt_exist_connections":false},{"type":"urltest","tag":"AUTO","outbounds":["🚀 CF-优选-Visa","🚀 CF-优选-DO"],"url":"http://www.gstatic.com/generate_204","interval":"10m","tolerance":50,"idle_timeout":"30m","interrupt_exist_connections":false},{"type":"selector","tag":"GLOBAL","outbounds":["PROXY","DIRECT"],"default":"PROXY","interrupt_exist_connections":false},{"type":"selector","tag":"CN","outbounds":["DIRECT","PROXY"],"default":"DIRECT","interrupt_exist_connections":false},{"tag":"🚀 CF-优选-Visa","server":"example.com","server_port":443,"type":"vless","uuid":"00000000-0000-4000-8000-000000000000","domain_resolver":"alidns","transport":{"type":"ws","path":"/路径","headers":{"Host":"节点域名"}},"tls":{"enabled":true,"server_name":"cvb.372164885.xyz","utls":{"enabled":true,"fingerprint":"chrome"},"alpn":["http/1.1"]}},{"tag":"🚀 CF-优选-DO","server":"example.com","server_port":443,"type":"vless","uuid":"00000000-0000-4000-8000-000000000000","domain_resolver":"alidns","transport":{"type":"ws","path":"/路径","headers":{"Host":"节点域名"}},"tls":{"enabled":true,"server_name":"节点域名","utls":{"enabled":true,"fingerprint":"chrome"},"alpn":["http/1.1"]}}],"route":{"default_domain_resolver":"alidns","rules":[{"type":"logical","mode":"or","rules":[{"port":53},{"protocol":"dns"}],"action":"hijack-dns"},{"action":"sniff"},{"type":"logical","mode":"and","rules":[{"protocol":"quic"},{"port":443}],"action":"reject"},{"domain_suffix":["miwifi.com"],"outbound":"DIRECT"},{"clash_mode":"direct","outbound":"DIRECT"},{"clash_mode":"global","outbound":"GLOBAL"},{"ip_is_private":true,"outbound":"DIRECT"},{"ip_cidr":["198.18.0.0/15"],"outbound":"PROXY"},{"rule_set":["geosite_adguard","geosite-category-ads-all"],"action":"reject"},{"rule_set":"geosite-google","outbound":"PROXY"},{"domain_suffix":["steamserver.net","zhihu.com","zhimg.com","jd.com","360buyimg.com","xfyun.cn"],"outbound":"DIRECT"},{"rule_set":"proxy","outbound":"PROXY"},{"rule_set":"games","outbound":"PROXY"},{"rule_set":"ai","outbound":"PROXY"},{"rule_set":["private","cn","microsoft-cn","apple-cn","google-cn","games-cn","networktest"],"outbound":"DIRECT"},{"action":"resolve"},{"rule_set":"telegramip","outbound":"PROXY"},{"rule_set":"cnip","outbound":"DIRECT"},{"package_name":["com.google.android.youtube","app.revanced.android.youtube"],"outbound":"PROXY"},{"package_name":["org.telegram.messenger","org.telegram.messenger.beta"],"outbound":"PROXY"}],"rule_set":[{"tag":"geosite-category-ads-all","type":"remote","format":"binary","url":"https://cdn.jsdelivr.net/gh/SagerNet/sing-geosite@rule-set/geosite-category-ads-all.srs","download_detour":"PROXY","update_interval":"48h"},{"tag":"geosite_adguard","type":"remote","format":"binary","url":"https://cdn.jsdelivr.net/gh/217heidai/adblockfilters@main/rules/adblocksingbox.srs","download_detour":"PROXY","update_interval":"48h"},{"tag":"geosite-google","type":"remote","format":"binary","url":"https://cdn.jsdelivr.net/gh/SagerNet/sing-geosite@rule-set/geosite-google.srs","download_detour":"PROXY","update_interval":"48h"},{"tag":"geosite-youtube","type":"remote","format":"binary","url":"https://cdn.jsdelivr.net/gh/SagerNet/sing-geosite@rule-set/geosite-youtube.srs","download_detour":"PROXY","update_interval":"48h"},{"tag":"proxy","type":"remote","format":"binary","url":"https://cdn.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/proxy.srs","download_detour":"PROXY","update_interval":"48h"},{"tag":"games","type":"remote","format":"binary","url":"https://cdn.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/games.srs","download_detour":"PROXY","update_interval":"48h"},{"tag":"ai","type":"remote","format":"binary","url":"https://cdn.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/ai.srs","download_detour":"PROXY","update_interval":"48h"},{"tag":"private","type":"remote","format":"binary","url":"https://cdn.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/private.srs","download_detour":"PROXY","update_interval":"48h"},{"tag":"cn","type":"remote","format":"binary","url":"https://cdn.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/cn.srs","download_detour":"PROXY","update_interval":"48h"},{"tag":"microsoft-cn","type":"remote","format":"binary","url":"https://cdn.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/microsoft-cn.srs","download_detour":"PROXY","update_interval":"48h"},{"tag":"apple-cn","type":"remote","format":"binary","url":"https://cdn.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/apple-cn.srs","download_detour":"PROXY","update_interval":"48h"},{"tag":"google-cn","type":"remote","format":"binary","url":"https://cdn.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/google-cn.srs","download_detour":"PROXY","update_interval":"48h"},{"tag":"games-cn","type":"remote","format":"binary","url":"https://cdn.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/games-cn.srs","download_detour":"PROXY","update_interval":"48h"},{"tag":"networktest","type":"remote","format":"binary","url":"https://cdn.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/networktest.srs","download_detour":"PROXY","update_interval":"48h"},{"tag":"telegramip","type":"remote","format":"binary","url":"https://cdn.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/telegramip.srs","download_detour":"PROXY","update_interval":"48h"},{"tag":"cnip","type":"remote","format":"binary","url":"https://cdn.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/cnip.srs","download_detour":"PROXY","update_interval":"48h"}],"final":"PROXY","auto_detect_interface":true},"experimental":{"clash_api":{"external_controller":"127.0.0.1:9090","external_ui":"ui","external_ui_download_url":"https://cdn.jsdelivr.net/gh/MetaCubeX/metacubexd@gh-pages/metacubexd.zip","external_ui_download_detour":"PROXY","secret":"sbc-test-token","default_mode":"rule"},"cache_file":{"enabled":true,"path":"cache.db","cache_id":"cinchov","store_dns":true,"store_fakeip":true}}} diff --git a/fixtures/external/huixiao666-pk-box-1.14.0-alpha.xxx-1.14.0-alpha.14-.json-8c2a908f.json b/fixtures/external/huixiao666-pk-box-1.14.0-alpha.xxx-1.14.0-alpha.14-.json-8c2a908f.json new file mode 100644 index 00000000..7b6d90e4 --- /dev/null +++ b/fixtures/external/huixiao666-pk-box-1.14.0-alpha.xxx-1.14.0-alpha.14-.json-8c2a908f.json @@ -0,0 +1 @@ +{"log":{"level":"info","timestamp":true},"ntp":{"enabled":true,"server":"ntp.aliyun.com","server_port":123,"interval":"30m","detour":"PROXY"},"dns":{"servers":[{"tag":"local","type":"local"},{"tag":"hosts_fix","type":"hosts","predefined":{"dns.alidns.com":["223.5.5.5","223.6.6.6"],"doh.pub":["1.12.12.21","120.53.53.53"],"dns.google":["8.8.8.8","8.8.4.4"],"cloudflare-dns.com":["104.16.248.249","104.16.249.249"]}},{"tag":"alidns","type":"quic","server":"1.1.1.1","domain_resolver":"hosts_fix"},{"tag":"ggdns","type":"https","server":"1.1.1.1","domain_resolver":"hosts_fix"},{"tag":"fakeip","type":"fakeip","inet4_range":"198.18.0.0/15"},{"tag":"doh-ech","type":"https","server":"1.1.1.1","detour":"PROXY"}],"rules":[{"domain_suffix":["cvb.372164885.xyz"],"server":"doh-ech"},{"domain_suffix":["app-measurement.com","hm.baidu.com","firebaselogging.googleapis.com","firebaselogging-pa.googleapis.com","beacons.gvt2.com","beacons2.gvt2.com","beacons3.gvt2.com","tracking.miui.com"],"server":"alidns"},{"rule_set":["geosite_adguard","geosite-category-ads-all"],"action":"reject"},{"domain_suffix":[".local",".lan","miwifi.com","tplogin.cn","router.asus.com","tendawifi.com","tplinkwifi.net"],"server":"local"},{"query_type":["SVCB","HTTPS"],"action":"reject"},{"query_type":["PTR"],"action":"reject"},{"rule_set":["proxy","games","ai"],"query_type":["A","AAAA"],"server":"fakeip"},{"rule_set":["proxy","games","ai"],"query_type":["A","AAAA"],"server":"ggdns","client_subnet":"119.134.100.0/24"},{"domain_suffix":["market.xiaomi.com","lancache.steamcontent.com"],"server":"alidns"},{"domain_suffix":["play.google.com","ggpht.com","googleusercontent.com","android.com"],"server":"fakeip"},{"action":"evaluate","server":"alidns"},{"match_response":true,"rule_set":"cnip","action":"route","server":"local"},{"match_response":true,"action":"respond"}],"final":"alidns","strategy":"ipv4_only","reverse_mapping":true,"cache_capacity":16000,"optimistic":true},"inbounds":[{"type":"tun","tag":"tun-in","address":["10.8.0.1/24"],"mtu":1500,"stack":"mixed","auto_route":true,"strict_route":true},{"type":"mixed","tag":"mixed-in","listen":"127.0.0.1","listen_port":7890}],"outbounds":[{"type":"direct","tag":"DIRECT","domain_resolver":"alidns"},{"type":"selector","tag":"PROXY","outbounds":["AUTO","🚀 CF-优选-Visa","🚀 CF-优选-DO","DIRECT"],"default":"AUTO","interrupt_exist_connections":false},{"type":"urltest","tag":"AUTO","outbounds":["🚀 CF-优选-Visa","🚀 CF-优选-DO"],"url":"http://www.gstatic.com/generate_204","interval":"10m","tolerance":50,"idle_timeout":"30m","interrupt_exist_connections":false},{"type":"selector","tag":"GLOBAL","outbounds":["PROXY","DIRECT"],"default":"PROXY","interrupt_exist_connections":false},{"type":"selector","tag":"CN","outbounds":["DIRECT","PROXY"],"default":"DIRECT","interrupt_exist_connections":false},{"type":"vless","tag":"🚀 CF-优选-Visa","server":"example.com","server_port":443,"uuid":"00000000-0000-4000-8000-000000000000","transport":{"type":"ws","path":"/路径","headers":{"Host":"节点域名"}},"tls":{"enabled":true,"server_name":"节点域名","utls":{"enabled":true,"fingerprint":"chrome"},"alpn":["http/1.1"],"ech":{"enabled":false}}},{"type":"vless","tag":"🚀 CF-优选-DO","server":"example.com","server_port":443,"uuid":"00000000-0000-4000-8000-000000000000","transport":{"type":"ws","path":"/路径","headers":{"Host":"节点域名"}},"tls":{"enabled":true,"server_name":"节点域名","utls":{"enabled":true,"fingerprint":"chrome"},"alpn":["http/1.1"],"ech":{"enabled":false}}}],"http_clients":[{"tag":"default","detour":"PROXY"}],"route":{"default_domain_resolver":"alidns","rules":[{"wifi_ssid":["MyHomeWiFi"],"outbound":"PROXY"},{"wifi_bssid":["00:11:22:33:44:55"],"outbound":"DIRECT"},{"domain_suffix":["steamcontent.com"],"action":"bypass"},{"type":"logical","mode":"or","rules":[{"port":53},{"protocol":"dns"}],"action":"hijack-dns"},{"action":"sniff"},{"type":"logical","mode":"and","rules":[{"protocol":"quic"},{"port":443}],"action":"reject"},{"domain_suffix":["miwifi.com"],"outbound":"DIRECT"},{"ip_is_private":true,"outbound":"DIRECT"},{"ip_cidr":["198.18.0.0/15"],"outbound":"PROXY"},{"rule_set":["geosite_adguard","geosite-category-ads-all"],"action":"reject"},{"rule_set":"geosite-google","outbound":"PROXY"},{"domain_suffix":["steamserver.net","zhihu.com","zhimg.com","jd.com","360buyimg.com","xfyun.cn"],"outbound":"DIRECT"},{"rule_set":"proxy","outbound":"PROXY"},{"rule_set":"games","outbound":"PROXY"},{"rule_set":"ai","outbound":"PROXY"},{"rule_set":["private","cn","microsoft-cn","apple-cn","google-cn","games-cn","networktest"],"outbound":"DIRECT"},{"action":"resolve"},{"rule_set":"telegramip","outbound":"PROXY"},{"rule_set":"cnip","outbound":"DIRECT"},{"package_name":["com.google.android.youtube","app.revanced.android.youtube"],"outbound":"PROXY"},{"package_name":["org.telegram.messenger","org.telegram.messenger.beta"],"outbound":"PROXY"}],"rule_set":[{"tag":"geosite-category-ads-all","type":"remote","format":"binary","url":"https://cdn.jsdelivr.net/gh/SagerNet/sing-geosite@rule-set/geosite-category-ads-all.srs","http_client":"default","update_interval":"48h"},{"tag":"geosite_adguard","type":"remote","format":"binary","url":"https://cdn.jsdelivr.net/gh/217heidai/adblockfilters@main/rules/adblocksingbox.srs","http_client":"default","update_interval":"48h"},{"tag":"geosite-google","type":"remote","format":"binary","url":"https://cdn.jsdelivr.net/gh/SagerNet/sing-geosite@rule-set/geosite-google.srs","http_client":"default","update_interval":"48h"},{"tag":"geosite-youtube","type":"remote","format":"binary","url":"https://cdn.jsdelivr.net/gh/SagerNet/sing-geosite@rule-set/geosite-youtube.srs","http_client":"default","update_interval":"48h"},{"tag":"proxy","type":"remote","format":"binary","url":"https://cdn.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/proxy.srs","http_client":"default","update_interval":"48h"},{"tag":"games","type":"remote","format":"binary","url":"https://cdn.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/games.srs","http_client":"default","update_interval":"48h"},{"tag":"ai","type":"remote","format":"binary","url":"https://cdn.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/ai.srs","http_client":"default","update_interval":"48h"},{"tag":"private","type":"remote","format":"binary","url":"https://cdn.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/private.srs","http_client":"default","update_interval":"48h"},{"tag":"cn","type":"remote","format":"binary","url":"https://cdn.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/cn.srs","http_client":"default","update_interval":"48h"},{"tag":"microsoft-cn","type":"remote","format":"binary","url":"https://cdn.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/microsoft-cn.srs","http_client":"default","update_interval":"48h"},{"tag":"apple-cn","type":"remote","format":"binary","url":"https://cdn.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/apple-cn.srs","http_client":"default","update_interval":"48h"},{"tag":"google-cn","type":"remote","format":"binary","url":"https://cdn.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/google-cn.srs","http_client":"default","update_interval":"48h"},{"tag":"games-cn","type":"remote","format":"binary","url":"https://cdn.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/games-cn.srs","http_client":"default","update_interval":"48h"},{"tag":"networktest","type":"remote","format":"binary","url":"https://cdn.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/networktest.srs","http_client":"default","update_interval":"48h"},{"tag":"telegramip","type":"remote","format":"binary","url":"https://cdn.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/telegramip.srs","http_client":"default","update_interval":"48h"},{"tag":"cnip","type":"remote","format":"binary","url":"https://cdn.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/cnip.srs","http_client":"default","update_interval":"48h"}],"final":"PROXY","auto_detect_interface":true},"experimental":{"clash_api":{"external_controller":"127.0.0.1:9090","external_ui":"ui","external_ui_download_url":"https://cdn.jsdelivr.net/gh/MetaCubeX/metacubexd@gh-pages/metacubexd.zip","external_ui_download_detour":"PROXY","secret":"sbc-test-token","default_mode":"rule"},"cache_file":{"enabled":true,"path":"cache.db","cache_id":"cinchov","store_dns":true,"store_fakeip":true}}} diff --git a/fixtures/external/huixiao666-pk-box-1.14.0-alpha.xxx-1.14.0-alpha.16-17-.json-1150bc0b.json b/fixtures/external/huixiao666-pk-box-1.14.0-alpha.xxx-1.14.0-alpha.16-17-.json-1150bc0b.json new file mode 100644 index 00000000..4cf794c4 --- /dev/null +++ b/fixtures/external/huixiao666-pk-box-1.14.0-alpha.xxx-1.14.0-alpha.16-17-.json-1150bc0b.json @@ -0,0 +1 @@ +{"log":{"level":"trace","timestamp":true},"ntp":{"enabled":true,"server":"ntp.aliyun.com","server_port":123,"interval":"30m","detour":"DIRECT"},"dns":{"servers":[{"tag":"local","type":"local"},{"tag":"hosts_fix","type":"hosts","predefined":{"dns.huaweicloud.com":["180.163.150.33","180.163.151.33"],"dns.alidns.com":["223.5.5.5","223.6.6.6"],"doh.pub":["1.12.12.21","120.53.53.53"],"dns.google":["8.8.8.8","8.8.4.4"],"cloudflare-dns.com":["104.16.248.249","104.16.249.249"],"mtalk.google.com":["142.250.107.188","142.251.170.188","108.177.125.188"],"alt1-mtalk.google.com":["2607:f8b0:4023:1c05::bc","74.125.200.188"],"dl.google.com":["180.163.151.161"],"dl.l.google.com":["180.163.150.33"]}},{"tag":"alidns-dot","type":"tls","server":"1.1.1.1","server_port":853,"domain_resolver":"hosts_fix","detour":"DIRECT"},{"tag":"alidns-quic","type":"quic","server":"1.1.1.1","domain_resolver":"hosts_fix","detour":"DIRECT"},{"tag":"ggdns","type":"https","server":"1.1.1.1","domain_resolver":"hosts_fix","detour":"PROXY"},{"tag":"doh-ech","type":"https","server":"1.1.1.1","path":"/dns-query","detour":"PROXY"},{"tag":"fakeip","type":"fakeip","inet4_range":"198.18.0.0/15"}],"rules":[{"domain_suffix":[".local",".lan","miwifi.com","tplogin.cn","router.asus.com","tendawifi.com","tplinkwifi.net","hm.baidu.com","tracking.miui.com","douyinvod.com","douyincdn.com","ixigua.com","pstatp.com","bytecdn.com","volccdn.com","dl.delivery.mp.microsoft.com","update.microsoft.com","windowsupdate.com","speedtest.net","fast.com","zhihu.com","zhimg.com","jd.com","360buyimg.com","xfyun.cn","dashscope.aliyuncs.com","api.moonshot.cn","api.baichuan-ai.com","api.minimax.chat","api.sensenova.cn","api.iflytek.com","api.bilibili.com","www.bilibili.com","xinghuo.xfyun.cn","chatglm.cn","bigmodel.cn","volces.com","lingyiwanwu.com","stepfun.com","chat.deepseek.com","www.deepseek.com","zhipuai.cn","market.xiaomi.com"],"server":"alidns-quic"},{"domain_suffix":["lancache.steamcontent.com"],"server":"local"},{"domain_suffix":["steamcontent.com","steamserver.net","epicgames.com","gog.com","battle.net","blizzard.com","origin.com","ea.com","ubisoft.com","rockstargames.com","play.google.com","ggpht.com","googleusercontent.com","android.com","app-measurement.com","firebaselogging.googleapis.com","firebaselogging-pa.googleapis.com","beacons.gvt2.com","beacons2.gvt2.com","beacons3.gvt2.com"],"server":"fakeip"},{"domain_suffix":["节点域名"],"server":"doh-ech"},{"rule_set":["geosite_adguard","geosite-category-ads-all"],"action":"reject"},{"query_type":["SVCB","HTTPS"],"action":"reject"},{"query_type":["PTR"],"action":"reject"},{"rule_set":["proxy","games","ai"],"query_type":["A","AAAA"],"server":"fakeip","rewrite_ttl":300,"client_subnet":"119.134.100.0/24"},{"domain_suffix":[".cn",".com.cn"],"server":"alidns-dot"},{"action":"evaluate","server":"alidns-quic"},{"match_response":true,"rule_set":"cnip","action":"route","server":"local"},{"match_response":true,"action":"respond"}],"final":"alidns-dot","strategy":"prefer_ipv4","reverse_mapping":true,"cache_capacity":65536,"optimistic":true},"inbounds":[{"type":"tun","tag":"tun-in","address":["10.8.0.1/24"],"mtu":1500,"stack":"mixed","auto_route":true,"strict_route":true},{"type":"mixed","tag":"mixed-in","listen":"127.0.0.1","listen_port":7890}],"outbounds":[{"type":"direct","tag":"DIRECT","domain_resolver":"alidns-quic"},{"type":"selector","tag":"PROXY","outbounds":["AUTO","🚀 CF-优选-Visa","🚀 CF-优选-DO","DIRECT"],"default":"AUTO","interrupt_exist_connections":false},{"type":"urltest","tag":"AUTO","outbounds":["🚀 CF-优选-Visa","🚀 CF-优选-DO"],"url":"http://cp.cloudflare.com/","interval":"10m","tolerance":50,"idle_timeout":"30m","interrupt_exist_connections":false},{"type":"selector","tag":"GLOBAL","outbounds":["PROXY","DIRECT"],"default":"PROXY","interrupt_exist_connections":false},{"type":"selector","tag":"CN","outbounds":["DIRECT","PROXY"],"default":"DIRECT","interrupt_exist_connections":false},{"type":"vless","tag":"🚀 CF-优选-Visa","server":"example.com","server_port":443,"uuid":"00000000-0000-4000-8000-000000000000","domain_resolver":"alidns-quic","transport":{"type":"ws","path":"/路径","headers":{"Host":"节点域名"}},"tls":{"enabled":true,"server_name":"节点域名","utls":{"enabled":true,"fingerprint":"chrome"},"alpn":["http/1.1"],"ech":{"enabled":false}}},{"type":"vless","tag":"🚀 CF-优选-DO","server":"example.com","server_port":443,"uuid":"00000000-0000-4000-8000-000000000000","domain_resolver":"alidns-quic","transport":{"type":"ws","path":"/路径","headers":{"Host":"节点域名"}},"tls":{"enabled":true,"server_name":"节点域名","utls":{"enabled":true,"fingerprint":"chrome"},"alpn":["http/1.1"],"ech":{"enabled":false}}}],"http_clients":[{"tag":"default","detour":"PROXY"}],"route":{"default_domain_resolver":"alidns-quic","rules":[{"type":"logical","mode":"and","rules":[{"protocol":"quic"},{"port":443}],"action":"reject"},{"wifi_ssid":["MyHomeWiFi"],"outbound":"PROXY"},{"wifi_bssid":["00:11:22:33:44:55"],"outbound":"DIRECT"},{"type":"logical","mode":"or","rules":[{"port":53},{"protocol":"dns"}],"action":"hijack-dns"},{"action":"sniff"},{"type":"logical","mode":"or","rules":[{"network":"udp","port":[3478,5349,5350,19302,10000]},{"domain_regex":"^stun\\..+"},{"domain_keyword":["stun","turn","httpdns"]},{"protocol":"stun"}],"action":"reject"},{"domain_keyword":["ntp","time"],"network":"udp","port":123,"outbound":"DIRECT"},{"type":"logical","mode":"and","rules":[{"domain_suffix":["mtalk.google.com","alt1-mtalk.google.com","alt2-mtalk.google.com","alt3-mtalk.google.com","alt4-mtalk.google.com","alt5-mtalk.google.com","alt6-mtalk.google.com","alt7-mtalk.google.com","alt8-mtalk.google.com"]},{"port":[443,5228]}],"outbound":"PROXY"},{"rule_set":"anti_fraud","action":"reject"},{"ip_is_private":true,"outbound":"DIRECT"},{"ip_cidr":["198.18.0.0/15"],"outbound":"PROXY"},{"rule_set":["geosite_adguard","geosite-category-ads-all"],"action":"reject"},{"rule_set":"geosite-google","outbound":"PROXY"},{"rule_set":"proxy","outbound":"PROXY"},{"rule_set":"games","outbound":"PROXY"},{"rule_set":"ai","outbound":"PROXY"},{"rule_set":["private","cn","microsoft-cn","apple-cn","google-cn","games-cn","networktest"],"outbound":"DIRECT"},{"action":"resolve"},{"rule_set":"telegramip","outbound":"PROXY"},{"rule_set":"cnip","outbound":"DIRECT"},{"package_name":["com.google.android.youtube","app.revanced.android.youtube"],"outbound":"PROXY"},{"package_name":["org.telegram.messenger","org.telegram.messenger.beta"],"outbound":"PROXY"}],"rule_set":[{"tag":"geosite-category-ads-all","type":"remote","format":"binary","url":"https://cdn.jsdelivr.net/gh/SagerNet/sing-geosite@rule-set/geosite-category-ads-all.srs","http_client":"default","update_interval":"48h"},{"tag":"geosite_adguard","type":"remote","format":"binary","url":"https://cdn.jsdelivr.net/gh/217heidai/adblockfilters@main/rules/adblocksingbox.srs","http_client":"default","update_interval":"48h"},{"tag":"geosite-google","type":"remote","format":"binary","url":"https://cdn.jsdelivr.net/gh/SagerNet/sing-geosite@rule-set/geosite-google.srs","http_client":"default","update_interval":"48h"},{"tag":"geosite-youtube","type":"remote","format":"binary","url":"https://cdn.jsdelivr.net/gh/SagerNet/sing-geosite@rule-set/geosite-youtube.srs","http_client":"default","update_interval":"48h"},{"tag":"proxy","type":"remote","format":"binary","url":"https://cdn.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/proxy.srs","http_client":"default","update_interval":"48h"},{"tag":"games","type":"remote","format":"binary","url":"https://cdn.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/games.srs","http_client":"default","update_interval":"48h"},{"tag":"ai","type":"remote","format":"binary","url":"https://cdn.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/ai.srs","http_client":"default","update_interval":"48h"},{"tag":"private","type":"remote","format":"binary","url":"https://cdn.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/private.srs","http_client":"default","update_interval":"48h"},{"tag":"anti_fraud","type":"remote","format":"source","url":"https://raw.githubusercontent.com/hwsaya/nothing/refs/heads/main/rules/FuckFZ.json","update_interval":"48h"},{"tag":"cn","type":"remote","format":"binary","url":"https://cdn.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/cn.srs","http_client":"default","update_interval":"48h"},{"tag":"microsoft-cn","type":"remote","format":"binary","url":"https://cdn.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/microsoft-cn.srs","http_client":"default","update_interval":"48h"},{"tag":"apple-cn","type":"remote","format":"binary","url":"https://cdn.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/apple-cn.srs","http_client":"default","update_interval":"48h"},{"tag":"google-cn","type":"remote","format":"binary","url":"https://cdn.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/google-cn.srs","http_client":"default","update_interval":"48h"},{"tag":"games-cn","type":"remote","format":"binary","url":"https://cdn.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/games-cn.srs","http_client":"default","update_interval":"48h"},{"tag":"networktest","type":"remote","format":"binary","url":"https://cdn.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/networktest.srs","http_client":"default","update_interval":"48h"},{"tag":"telegramip","type":"remote","format":"binary","url":"https://cdn.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/telegramip.srs","http_client":"default","update_interval":"48h"},{"tag":"cnip","type":"remote","format":"binary","url":"https://cdn.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/cnip.srs","http_client":"default","update_interval":"48h"}],"final":"PROXY","auto_detect_interface":true},"experimental":{"clash_api":{"external_controller":"127.0.0.1:9090","external_ui":"ui","external_ui_download_url":"https://github.com/MetaCubeX/metacubexd/releases/latest/download/metacubexd.zip","external_ui_download_detour":"PROXY","secret":"sbc-test-token","default_mode":"rule"},"cache_file":{"enabled":true,"path":"cache.db","cache_id":"cinchov","store_dns":true,"store_fakeip":true},"debug":{"gc_percent":50,"memory_limit":"200MB"}}} diff --git a/fixtures/external/huixiao666-pk-box-1.14.0-alpha.xxx-1.14.0-alpha.18-.json-36630bef.json b/fixtures/external/huixiao666-pk-box-1.14.0-alpha.xxx-1.14.0-alpha.18-.json-36630bef.json new file mode 100644 index 00000000..fa839789 --- /dev/null +++ b/fixtures/external/huixiao666-pk-box-1.14.0-alpha.xxx-1.14.0-alpha.18-.json-36630bef.json @@ -0,0 +1 @@ +{"log":{"level":"warn","timestamp":true},"http_clients":[{"tag":"default","version":2,"detour":"♻️ 自动选择"}],"experimental":{"cache_file":{"enabled":true,"store_fakeip":true},"clash_api":{"external_controller":"127.0.0.1:9090","external_ui":"ui","default_mode":"rule"}},"ntp":{"enabled":true,"server":"time.apple.com","server_port":123,"interval":"60m"},"dns":{"servers":[{"type":"tls","tag":"google","detour":"♻️ 自动选择","server":"1.1.1.1"},{"type":"quic","tag":"local","server":"1.1.1.1"},{"type":"fakeip","tag":"fakeip","inet4_range":"198.18.0.0/15"}],"rules":[{"clash_mode":"Direct","server":"local"},{"clash_mode":"Global","server":"google"},{"query_type":["AAAA"],"server":"local"},{"rule_set":"geosite-cn","server":"local"},{"query_type":["A"],"server":"fakeip"}],"strategy":"prefer_ipv4"},"inbounds":[{"type":"tun","tag":"tun-in","address":"172.19.0.1/30","auto_route":true,"strict_route":true,"stack":"system","platform":{"http_proxy":{"enabled":true,"server":"127.0.0.1","server_port":7890}}},{"type":"mixed","tag":"mixed-in","listen":"127.0.0.1","listen_port":7890}],"outbounds":[{"type":"vless","tag":"🇺🇸 pkpk01","server":"example.com","server_port":443,"uuid":"00000000-0000-4000-8000-000000000000","tls":{"enabled":true,"server_name":"节点域名","utls":{"enabled":true,"fingerprint":"chrome"}},"transport":{"type":"ws","path":"/pkpk-vl","headers":{"Host":"节点域名"},"max_early_data":2560,"early_data_header_name":"Sec-WebSocket-Protocol"}},{"type":"vless","tag":"🇺🇸 pkpk02","server":"example.com","server_port":443,"uuid":"00000000-0000-4000-8000-000000000000","tls":{"enabled":true,"server_name":"节点域名","utls":{"enabled":true,"fingerprint":"chrome"}},"transport":{"type":"ws","path":"/pkpk-vl","headers":{"Host":"节点域名"},"max_early_data":2560,"early_data_header_name":"Sec-WebSocket-Protocol"}},{"type":"urltest","tag":"♻️ 自动选择","outbounds":["🇺🇸 pkpk01","🇺🇸 pkpk02"],"url":"http://www.gstatic.com/generate_204","interval":"5m0s","tolerance":50},{"type":"selector","tag":"🤖 AI","outbounds":["♻️ 自动选择","✈️ Proxy"]},{"type":"selector","tag":"▶️ YouTube","outbounds":["♻️ 自动选择","✈️ Proxy"]},{"type":"selector","tag":"📱 Telegram","outbounds":["♻️ 自动选择","✈️ Proxy"]},{"type":"selector","tag":"✈️ Proxy","outbounds":["♻️ 自动选择","🎯 direct"]},{"type":"direct","tag":"🎯 direct"},{"type":"block","tag":"block"}],"route":{"rules":[{"action":"sniff"},{"clash_mode":"Direct","outbound":"🎯 direct"},{"clash_mode":"Global","outbound":"✈️ Proxy"},{"protocol":"dns","action":"hijack-dns"},{"rule_set":"geosite-category-ads-all","action":"reject"},{"rule_set":["geosite-cn","geoip-cn"],"outbound":"🎯 direct"},{"ip_is_private":true,"outbound":"🎯 direct"},{"type":"logical","mode":"or","rules":[{"rule_set":["geosite-openai","geosite-anthropic","geosite-google-gemini"]},{"domain_suffix":["chatgpt.com","claude.ai","gateway.ai.cloudflare.com","grok.com","groq.com","meta.ai","openart.ai","openrouter.ai","perplexity.ai","x.ai"]}],"outbound":"🤖 AI"},{"rule_set":["geosite-youtube","geosite-netflix"],"outbound":"▶️ YouTube"},{"rule_set":"geosite-telegram","outbound":"📱 Telegram"},{"rule_set":"geosite-geolocation-!cn","outbound":"♻️ 自动选择"}],"rule_set":[{"type":"remote","tag":"geosite-category-ads-all","url":"https://gh-proxy.com/https://raw.githubusercontent.com/SagerNet/sing-geosite/rule-set/geosite-category-ads-all.srs","http_client":"default","update_interval":"24h0m0s"},{"type":"remote","tag":"geosite-cn","url":"https://gh-proxy.com/https://raw.githubusercontent.com/SagerNet/sing-geosite/rule-set/geosite-cn.srs","http_client":"default","update_interval":"24h0m0s"},{"type":"remote","tag":"geoip-cn","url":"https://gh-proxy.com/https://raw.githubusercontent.com/SagerNet/sing-geoip/rule-set/geoip-cn.srs","http_client":"default","update_interval":"24h0m0s"},{"type":"remote","tag":"geosite-openai","url":"https://gh-proxy.com/https://raw.githubusercontent.com/SagerNet/sing-geosite/rule-set/geosite-openai.srs","http_client":"default","update_interval":"24h0m0s"},{"type":"remote","tag":"geosite-anthropic","url":"https://gh-proxy.com/https://raw.githubusercontent.com/SagerNet/sing-geosite/rule-set/geosite-anthropic.srs","http_client":"default","update_interval":"24h0m0s"},{"type":"remote","tag":"geosite-google-gemini","url":"https://gh-proxy.com/https://raw.githubusercontent.com/SagerNet/sing-geosite/rule-set/geosite-google-gemini.srs","http_client":"default","update_interval":"24h0m0s"},{"type":"remote","tag":"geosite-youtube","url":"https://gh-proxy.com/https://raw.githubusercontent.com/SagerNet/sing-geosite/rule-set/geosite-youtube.srs","http_client":"default","update_interval":"24h0m0s"},{"type":"remote","tag":"geosite-netflix","url":"https://gh-proxy.com/https://raw.githubusercontent.com/SagerNet/sing-geosite/rule-set/geosite-netflix.srs","http_client":"default","update_interval":"24h0m0s"},{"type":"remote","tag":"geosite-telegram","url":"https://gh-proxy.com/https://raw.githubusercontent.com/SagerNet/sing-geosite/rule-set/geosite-telegram.srs","http_client":"default","update_interval":"24h0m0s"},{"type":"remote","tag":"geosite-geolocation-!cn","url":"https://gh-proxy.com/https://raw.githubusercontent.com/SagerNet/sing-geosite/rule-set/geosite-geolocation-!cn.srs","http_client":"default","update_interval":"24h0m0s"}],"final":"♻️ 自动选择","auto_detect_interface":true,"default_domain_resolver":"local"}} diff --git a/fixtures/external/huixiao666-pk-box-1.14.0-alpha.xxx-1.14.0-alpha.18-.json-3a97d11a.json b/fixtures/external/huixiao666-pk-box-1.14.0-alpha.xxx-1.14.0-alpha.18-.json-3a97d11a.json new file mode 100644 index 00000000..bdea619c --- /dev/null +++ b/fixtures/external/huixiao666-pk-box-1.14.0-alpha.xxx-1.14.0-alpha.18-.json-3a97d11a.json @@ -0,0 +1 @@ +{"log":{"level":"trace","timestamp":true},"ntp":{"enabled":true,"server":"ntp.aliyun.com","server_port":123,"interval":"30m","detour":"DIRECT"},"dns":{"servers":[{"tag":"local","type":"local"},{"tag":"hosts_fix","type":"hosts","predefined":{"dns.huaweicloud.com":["180.163.150.33","180.163.151.33"],"dns.alidns.com":["223.5.5.5","223.6.6.6"],"doh.pub":["1.12.12.21","120.53.53.53"],"dns.google":["8.8.8.8","8.8.4.4"],"cloudflare-dns.com":["104.16.248.249","104.16.249.249"],"mtalk.google.com":["142.250.107.188","142.251.170.188","108.177.125.188"],"alt1-mtalk.google.com":["2607:f8b0:4023:1c05::bc","74.125.200.188"],"dl.google.com":["180.163.151.161"],"dl.l.google.com":["180.163.150.33"]}},{"tag":"alidns-dot","type":"tls","server":"1.1.1.1","server_port":853,"domain_resolver":"hosts_fix","detour":"DIRECT"},{"tag":"alidns-quic","type":"quic","server":"1.1.1.1","domain_resolver":"hosts_fix","detour":"DIRECT"},{"tag":"ggdns","type":"https","server":"1.1.1.1","domain_resolver":"hosts_fix","detour":"PROXY"},{"tag":"doh-ech","type":"https","server":"1.1.1.1","path":"/dns-query","detour":"PROXY"},{"tag":"fakeip","type":"fakeip","inet4_range":"198.18.0.0/15"}],"rules":[{"domain_suffix":[".local",".lan","miwifi.com","tplogin.cn","router.asus.com","tendawifi.com","tplinkwifi.net","hm.baidu.com","tracking.miui.com","douyinvod.com","douyincdn.com","ixigua.com","pstatp.com","bytecdn.com","volccdn.com","dl.delivery.mp.microsoft.com","update.microsoft.com","windowsupdate.com","speedtest.net","fast.com","zhihu.com","zhimg.com","jd.com","360buyimg.com","xfyun.cn","dashscope.aliyuncs.com","api.moonshot.cn","api.baichuan-ai.com","api.minimax.chat","api.sensenova.cn","api.iflytek.com","api.bilibili.com","www.bilibili.com","xinghuo.xfyun.cn","chatglm.cn","bigmodel.cn","volces.com","lingyiwanwu.com","stepfun.com","chat.deepseek.com","www.deepseek.com","zhipuai.cn","market.xiaomi.com"],"server":"alidns-quic"},{"domain_suffix":["lancache.steamcontent.com"],"server":"local"},{"domain_suffix":["steamcontent.com","steamserver.net","epicgames.com","gog.com","battle.net","blizzard.com","origin.com","ea.com","ubisoft.com","rockstargames.com","play.google.com","ggpht.com","googleusercontent.com","android.com","app-measurement.com","firebaselogging.googleapis.com","firebaselogging-pa.googleapis.com","beacons.gvt2.com","beacons2.gvt2.com","beacons3.gvt2.com"],"server":"fakeip"},{"domain_suffix":["节点域名"],"server":"doh-ech"},{"rule_set":["geosite_adguard","geosite-category-ads-all"],"action":"reject"},{"query_type":["SVCB","HTTPS","PTR"],"action":"reject"},{"rule_set":["proxy","games","ai"],"query_type":["A","AAAA"],"server":"fakeip","rewrite_ttl":300,"client_subnet":"119.134.100.0/24"},{"domain_suffix":[".cn",".com.cn"],"action":"evaluate","server":"alidns-dot"},{"domain_suffix":[".cn",".com.cn"],"server":"alidns-quic"},{"match_response":true,"rule_set":"cnip","action":"route","server":"local"},{"match_response":true,"action":"respond"}],"final":"doh-ech","strategy":"prefer_ipv4","reverse_mapping":true,"cache_capacity":65536,"optimistic":true},"inbounds":[{"type":"tun","tag":"tun-in","address":["10.8.0.1/24"],"mtu":1500,"stack":"mixed","auto_route":true,"strict_route":true},{"type":"mixed","tag":"mixed-in","listen":"127.0.0.1","listen_port":7890}],"outbounds":[{"type":"direct","tag":"DIRECT","domain_resolver":"alidns-quic"},{"type":"selector","tag":"PROXY","outbounds":["AUTO","🚀 CF-优选-Visa","🚀 CF-优选-DO","DIRECT"],"default":"AUTO","interrupt_exist_connections":false},{"type":"urltest","tag":"AUTO","outbounds":["🚀 CF-优选-Visa","🚀 CF-优选-DO"],"url":"http://cp.cloudflare.com/","interval":"10m","tolerance":50,"idle_timeout":"30m","interrupt_exist_connections":false},{"type":"selector","tag":"GLOBAL","outbounds":["PROXY","DIRECT"],"default":"PROXY","interrupt_exist_connections":false},{"type":"selector","tag":"CN","outbounds":["DIRECT","PROXY"],"default":"DIRECT","interrupt_exist_connections":false},{"type":"selector","tag":"Final","outbounds":["PROXY","DIRECT","REJECT-DROP"],"default":"REJECT-DROP","interrupt_exist_connections":false},{"type":"block","tag":"REJECT-DROP"},{"type":"vless","tag":"🚀 CF-优选-Visa","server":"example.com","server_port":443,"uuid":"00000000-0000-4000-8000-000000000000","domain_resolver":"alidns-quic","transport":{"type":"ws","path":"/路径","headers":{"Host":"节点域名"}},"tls":{"enabled":true,"server_name":"节点域名","utls":{"enabled":true,"fingerprint":"chrome"},"alpn":["http/1.1"],"ech":{"enabled":false}}},{"type":"vless","tag":"🚀 CF-优选-DO","server":"example.com","server_port":443,"uuid":"00000000-0000-4000-8000-000000000000","domain_resolver":"alidns-quic","transport":{"type":"ws","path":"/路径","headers":{"Host":"节点域名"}},"tls":{"enabled":true,"server_name":"节点域名","utls":{"enabled":true,"fingerprint":"chrome"},"alpn":["http/1.1"],"ech":{"enabled":false}}}],"http_clients":[{"tag":"default","detour":"PROXY"}],"route":{"final":"Final","default_domain_resolver":"alidns-quic","rules":[{"type":"logical","mode":"and","rules":[{"protocol":"quic"},{"port":443}],"action":"reject"},{"wifi_ssid":["MyHomeWiFi"],"outbound":"PROXY"},{"wifi_bssid":["00:11:22:33:44:55"],"outbound":"DIRECT"},{"type":"logical","mode":"or","rules":[{"port":53},{"protocol":"dns"}],"action":"hijack-dns"},{"action":"sniff"},{"type":"logical","mode":"or","rules":[{"network":"udp","port":[3478,5349,5350,19302,10000]},{"domain_regex":"^stun\\..+"},{"domain_keyword":["stun","turn","httpdns"]},{"protocol":"stun"}],"action":"reject"},{"domain_keyword":["ntp","time"],"network":"udp","port":123,"outbound":"DIRECT"},{"type":"logical","mode":"and","rules":[{"domain_suffix":["mtalk.google.com","alt1-mtalk.google.com","alt2-mtalk.google.com","alt3-mtalk.google.com","alt4-mtalk.google.com","alt5-mtalk.google.com","alt6-mtalk.google.com","alt7-mtalk.google.com","alt8-mtalk.google.com"]},{"port":[443,5228]}],"outbound":"PROXY"},{"rule_set":"anti_fraud","action":"reject"},{"ip_is_private":true,"outbound":"DIRECT"},{"ip_cidr":["198.18.0.0/15"],"outbound":"PROXY"},{"rule_set":["geosite_adguard","geosite-category-ads-all"],"action":"reject"},{"rule_set":["telegramip","geosite-google","proxy","games","ai"],"outbound":"PROXY"},{"rule_set":["private","cn","cnip","microsoft-cn","apple-cn","google-cn","games-cn","networktest"],"outbound":"DIRECT"},{"action":"resolve"},{"package_name":["com.google.android.youtube","app.revanced.android.youtube","org.telegram.messenger","org.telegram.messenger.beta"],"outbound":"PROXY"}],"rule_set":[{"tag":"geosite-category-ads-all","type":"remote","format":"binary","url":"https://cdn.jsdelivr.net/gh/SagerNet/sing-geosite@rule-set/geosite-category-ads-all.srs","http_client":"default","update_interval":"48h"},{"tag":"geosite_adguard","type":"remote","format":"binary","url":"https://cdn.jsdelivr.net/gh/217heidai/adblockfilters@main/rules/adblocksingbox.srs","http_client":"default","update_interval":"48h"},{"tag":"geosite-google","type":"remote","format":"binary","url":"https://cdn.jsdelivr.net/gh/SagerNet/sing-geosite@rule-set/geosite-google.srs","http_client":"default","update_interval":"48h"},{"tag":"geosite-youtube","type":"remote","format":"binary","url":"https://cdn.jsdelivr.net/gh/SagerNet/sing-geosite@rule-set/geosite-youtube.srs","http_client":"default","update_interval":"48h"},{"tag":"proxy","type":"remote","format":"binary","url":"https://cdn.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/proxy.srs","http_client":"default","update_interval":"48h"},{"tag":"games","type":"remote","format":"binary","url":"https://cdn.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/games.srs","http_client":"default","update_interval":"48h"},{"tag":"ai","type":"remote","format":"binary","url":"https://cdn.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/ai.srs","http_client":"default","update_interval":"48h"},{"tag":"private","type":"remote","format":"binary","url":"https://cdn.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/private.srs","http_client":"default","update_interval":"48h"},{"tag":"anti_fraud","type":"remote","format":"source","url":"https://raw.githubusercontent.com/hwsaya/nothing/refs/heads/main/rules/FuckFZ.json","update_interval":"48h"},{"tag":"cn","type":"remote","format":"binary","url":"https://cdn.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/cn.srs","http_client":"default","update_interval":"48h"},{"tag":"microsoft-cn","type":"remote","format":"binary","url":"https://cdn.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/microsoft-cn.srs","http_client":"default","update_interval":"48h"},{"tag":"apple-cn","type":"remote","format":"binary","url":"https://cdn.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/apple-cn.srs","http_client":"default","update_interval":"48h"},{"tag":"google-cn","type":"remote","format":"binary","url":"https://cdn.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/google-cn.srs","http_client":"default","update_interval":"48h"},{"tag":"games-cn","type":"remote","format":"binary","url":"https://cdn.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/games-cn.srs","http_client":"default","update_interval":"48h"},{"tag":"networktest","type":"remote","format":"binary","url":"https://cdn.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/networktest.srs","http_client":"default","update_interval":"48h"},{"tag":"telegramip","type":"remote","format":"binary","url":"https://cdn.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/telegramip.srs","http_client":"default","update_interval":"48h"},{"tag":"cnip","type":"remote","format":"binary","url":"https://cdn.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/cnip.srs","http_client":"default","update_interval":"48h"}],"auto_detect_interface":true},"experimental":{"clash_api":{"external_controller":"127.0.0.1:9090","external_ui":"ui","external_ui_download_url":"https://github.com/MetaCubeX/metacubexd/releases/latest/download/metacubexd.zip","external_ui_download_detour":"PROXY","secret":"sbc-test-token","default_mode":"rule"},"cache_file":{"enabled":true,"path":"cache.db","cache_id":"cinchov","store_dns":true,"store_fakeip":true},"debug":{"gc_percent":50,"memory_limit":"200MB"}}} diff --git a/fixtures/external/huixiao666-pk-box-1.14.0-alpha.xxx-1.14.0-alpha.18-.json-5f068761.json b/fixtures/external/huixiao666-pk-box-1.14.0-alpha.xxx-1.14.0-alpha.18-.json-5f068761.json new file mode 100644 index 00000000..da5671af --- /dev/null +++ b/fixtures/external/huixiao666-pk-box-1.14.0-alpha.xxx-1.14.0-alpha.18-.json-5f068761.json @@ -0,0 +1 @@ +{"log":{"level":"trace","timestamp":true},"dns":{"servers":[{"type":"local","tag":"local"},{"type":"hosts","tag":"hosts_fix","predefined":{"dns.huaweicloud.com":["180.163.150.33","180.163.151.33"],"dns.alidns.com":["223.5.5.5","223.6.6.6"],"doh.pub":["1.12.12.21","120.53.53.53"],"dns.google":["8.8.8.8","8.8.4.4"],"cloudflare-dns.com":["104.16.248.249","104.16.249.249"],"mtalk.google.com":["142.250.107.188","142.251.170.188","108.177.125.188"],"alt1-mtalk.google.com":["2607:f8b0:4023:1c05::bc","74.125.200.188"],"dl.google.com":"180.163.151.161","dl.l.google.com":"180.163.150.33"}},{"type":"tls","tag":"alidns-dot","detour":"DIRECT","domain_resolver":"hosts_fix","server":"1.1.1.1","server_port":853},{"type":"quic","tag":"alidns-quic","detour":"DIRECT","domain_resolver":"hosts_fix","server":"1.1.1.1"},{"type":"https","tag":"ggdns","detour":"PROXY","domain_resolver":"hosts_fix","server":"1.1.1.1"},{"type":"fakeip","tag":"fakeip","inet4_range":"198.18.0.0/15"}],"rules":[{"domain_suffix":[".local",".lan","miwifi.com","tplogin.cn","router.asus.com","tendawifi.com","tplinkwifi.net","hm.baidu.com","tracking.miui.com","douyinvod.com","douyincdn.com","ixigua.com","pstatp.com","bytecdn.com","volccdn.com","dl.delivery.mp.microsoft.com","update.microsoft.com","windowsupdate.com","speedtest.net","fast.com","zhihu.com","zhimg.com","jd.com","360buyimg.com","xfyun.cn","dashscope.aliyuncs.com","api.moonshot.cn","api.baichuan-ai.com","api.minimax.chat","api.sensenova.cn","api.iflytek.com","api.bilibili.com","www.bilibili.com","xinghuo.xfyun.cn","chatglm.cn","bigmodel.cn","volces.com","lingyiwanwu.com","stepfun.com","chat.deepseek.com","www.deepseek.com","zhipuai.cn","market.xiaomi.com"],"server":"alidns-quic"},{"domain_suffix":"lancache.steamcontent.com","server":"local"},{"domain_suffix":["steamcontent.com","steamserver.net","epicgames.com","gog.com","battle.net","blizzard.com","origin.com","ea.com","ubisoft.com","rockstargames.com","play.google.com","ggpht.com","googleusercontent.com","android.com","app-measurement.com","firebaselogging.googleapis.com","firebaselogging-pa.googleapis.com","beacons.gvt2.com","beacons2.gvt2.com","beacons3.gvt2.com"],"server":"fakeip"},{"query_type":["A","AAAA"],"rule_set":["proxy","games","ai"],"server":"fakeip","rewrite_ttl":300},{"domain_suffix":[".cn",".com.cn"],"action":"evaluate","server":"alidns-dot"},{"domain_suffix":[".cn",".com.cn"],"server":"alidns-quic"},{"match_response":true,"rule_set":"cnip","action":"route","server":"local"},{"match_response":true,"action":"respond"},{"rule_set":["geosite_adguard","geosite-category-ads-all"],"action":"reject"},{"query_type":["SVCB","HTTPS","PTR"],"action":"reject"}],"final":"ggdns","reverse_mapping":true,"strategy":"prefer_ipv4","cache_capacity":65536,"optimistic":true},"ntp":{"enabled":true,"interval":"30m0s","server":"ntp.aliyun.com","server_port":123,"detour":"DIRECT"},"http_clients":[{"tag":"default","version":2,"detour":"PROXY","stream_receive_window":0,"connection_receive_window":0}],"inbounds":[{"type":"tun","tag":"tun-in","mtu":1500,"address":"10.8.0.1/24","auto_route":true,"strict_route":true,"stack":"mixed"},{"type":"mixed","tag":"mixed-in","listen":"127.0.0.1","listen_port":7890}],"outbounds":[{"type":"direct","tag":"DIRECT","domain_resolver":"alidns-quic"},{"type":"selector","tag":"PROXY","outbounds":["AUTO","🇺🇸 pkpk01","🇺🇸 pkpk02","DIRECT"],"default":"AUTO"},{"type":"urltest","tag":"AUTO","outbounds":["🇺🇸 pkpk01","🇺🇸 pkpk02"],"url":"http://www.gstatic.com/generate_204","interval":"10m0s","tolerance":50,"idle_timeout":"30m0s"},{"type":"selector","tag":"GLOBAL","outbounds":["PROXY","DIRECT"],"default":"PROXY"},{"type":"selector","tag":"CN","outbounds":["DIRECT","PROXY"],"default":"DIRECT"},{"type":"selector","tag":"Final","outbounds":["PROXY","DIRECT","REJECT-DROP"],"default":"PROXY"},{"type":"block","tag":"REJECT-DROP"},{"type":"vless","tag":"🇺🇸 pkpk01","server":"example.com","server_port":443,"uuid":"00000000-0000-4000-8000-000000000000","tls":{"enabled":true,"server_name":"节点域名","utls":{"enabled":true,"fingerprint":"chrome"}},"transport":{"type":"ws","path":"/pkpk-vl","headers":{"Host":"节点域名"},"max_early_data":2560,"early_data_header_name":"Sec-WebSocket-Protocol"}},{"type":"vless","tag":"🇺🇸 pkpk02","server":"example.com","server_port":443,"uuid":"00000000-0000-4000-8000-000000000000","tls":{"enabled":true,"server_name":"节点域名","utls":{"enabled":true,"fingerprint":"chrome"}},"transport":{"type":"ws","path":"/pkpk-vl","headers":{"Host":"节点域名"},"max_early_data":2560,"early_data_header_name":"Sec-WebSocket-Protocol"}}],"route":{"rules":[{"action":"sniff"},{"type":"logical","mode":"and","rules":[{"protocol":"quic"},{"port":443}],"action":"reject","method":"drop"},{"package_name":["com.google.android.youtube","app.revanced.android.youtube","org.telegram.messenger","org.telegram.messenger.beta"],"outbound":"PROXY"},{"type":"logical","mode":"and","rules":[{"domain_suffix":["mtalk.google.com","alt1-mtalk.google.com","alt2-mtalk.google.com","alt3-mtalk.google.com","alt4-mtalk.google.com","alt5-mtalk.google.com","alt6-mtalk.google.com","alt7-mtalk.google.com","alt8-mtalk.google.com"]},{"port":[443,5228]}],"outbound":"PROXY"},{"rule_set":["telegramip","geosite-google","proxy","games","ai"],"outbound":"PROXY"},{"ip_cidr":"198.18.0.0/15","outbound":"PROXY"},{"wifi_ssid":"MyHomeWiFi","outbound":"PROXY"},{"action":"sniff"},{"network":"udp","domain_keyword":["ntp","time"],"port":123,"outbound":"DIRECT"},{"rule_set":["private","cn","cnip","microsoft-cn","apple-cn","google-cn","games-cn","networktest"],"outbound":"DIRECT"},{"wifi_bssid":"00:11:22:33:44:55","outbound":"DIRECT"},{"type":"logical","mode":"or","rules":[{"port":53},{"protocol":"dns"}],"action":"hijack-dns"},{"ip_cidr":["1.1.1.1/32"],"outbound":"DIRECT"},{"domain":["www.google.com","www.apple.com"],"outbound":"DIRECT"},{"type":"logical","mode":"or","rules":[{"network":"udp","port":[3478,5349,5350,19302,10000]},{"domain_regex":"^stun\\..+"},{"domain_keyword":["stun","turn","httpdns"]},{"protocol":"stun"}],"action":"reject"},{"rule_set":"anti_fraud","action":"reject"},{"rule_set":["geosite_adguard","geosite-category-ads-all"],"action":"reject"},{"ip_is_private":true,"outbound":"DIRECT"},{"action":"resolve"}],"rule_set":[{"type":"remote","tag":"geosite-category-ads-all","url":"https://cdn.jsdelivr.net/gh/SagerNet/sing-geosite@rule-set/geosite-category-ads-all.srs","http_client":"default","update_interval":"48h0m0s"},{"type":"remote","tag":"geosite_adguard","url":"https://cdn.jsdelivr.net/gh/217heidai/adblockfilters@main/rules/adblocksingbox.srs","http_client":"default","update_interval":"48h0m0s"},{"type":"remote","tag":"geosite-google","url":"https://cdn.jsdelivr.net/gh/SagerNet/sing-geosite@rule-set/geosite-google.srs","http_client":"default","update_interval":"48h0m0s"},{"type":"remote","tag":"geosite-youtube","url":"https://cdn.jsdelivr.net/gh/SagerNet/sing-geosite@rule-set/geosite-youtube.srs","http_client":"default","update_interval":"48h0m0s"},{"type":"remote","tag":"proxy","url":"https://cdn.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/proxy.srs","http_client":"default","update_interval":"48h0m0s"},{"type":"remote","tag":"games","url":"https://cdn.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/games.srs","http_client":"default","update_interval":"48h0m0s"},{"type":"remote","tag":"ai","url":"https://cdn.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/ai.srs","http_client":"default","update_interval":"48h0m0s"},{"type":"remote","tag":"private","url":"https://cdn.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/private.srs","http_client":"default","update_interval":"48h0m0s"},{"type":"remote","tag":"anti_fraud","url":"https://raw.githubusercontent.com/hwsaya/nothing/refs/heads/main/rules/FuckFZ.json","update_interval":"48h0m0s"},{"type":"remote","tag":"cn","url":"https://cdn.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/cn.srs","http_client":"default","update_interval":"48h0m0s"},{"type":"remote","tag":"microsoft-cn","url":"https://cdn.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/microsoft-cn.srs","http_client":"default","update_interval":"48h0m0s"},{"type":"remote","tag":"apple-cn","url":"https://cdn.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/apple-cn.srs","http_client":"default","update_interval":"48h0m0s"},{"type":"remote","tag":"google-cn","url":"https://cdn.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/google-cn.srs","http_client":"default","update_interval":"48h0m0s"},{"type":"remote","tag":"games-cn","url":"https://cdn.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/games-cn.srs","http_client":"default","update_interval":"48h0m0s"},{"type":"remote","tag":"networktest","url":"https://cdn.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/networktest.srs","http_client":"default","update_interval":"48h0m0s"},{"type":"remote","tag":"telegramip","url":"https://cdn.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/telegramip.srs","http_client":"default","update_interval":"48h0m0s"},{"type":"remote","tag":"cnip","url":"https://cdn.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/cnip.srs","http_client":"default","update_interval":"48h0m0s"}],"final":"Final","auto_detect_interface":true,"default_domain_resolver":"alidns-quic"},"experimental":{"cache_file":{"enabled":true,"path":"cache.db","cache_id":"cinchov","store_fakeip":true,"store_dns":true},"clash_api":{"external_controller":"127.0.0.1:9090","external_ui":"ui","external_ui_download_url":"https://github.com/MetaCubeX/metacubexd/releases/latest/download/metacubexd.zip","external_ui_download_detour":"PROXY","secret":"sbc-test-token","default_mode":"rule"},"debug":{"gc_percent":50,"memory_limit":"200MB"}}} diff --git a/fixtures/external/huixiao666-pk-box-1.14.0-alpha.xxx-1.14.0-alpha.20-.json-1a52beb4.json b/fixtures/external/huixiao666-pk-box-1.14.0-alpha.xxx-1.14.0-alpha.20-.json-1a52beb4.json new file mode 100644 index 00000000..085a43ff --- /dev/null +++ b/fixtures/external/huixiao666-pk-box-1.14.0-alpha.xxx-1.14.0-alpha.20-.json-1a52beb4.json @@ -0,0 +1 @@ +{"log":{"level":"trace","timestamp":true},"dns":{"servers":[{"type":"local","tag":"local"},{"type":"hosts","tag":"hosts_fix","predefined":{"dns.huaweicloud.com":["180.163.150.33","180.163.151.33"],"dns.alidns.com":["223.5.5.5","223.6.6.6"],"dns.adguard.com":["94.140.14.15","94.140.15.16","2a10:50c0::ad1:ff","2a10:50c0::ad2:ff"],"doh.pub":["1.12.12.21","120.53.53.53"],"dns.google":["8.8.8.8","8.8.4.4"],"cloudflare-dns.com":["104.16.248.249","104.16.249.249"],"mtalk.google.com":["142.250.107.188","142.251.170.188","108.177.125.188"],"alt1-mtalk.google.com":["2607:f8b0:4023:1c05::bc","74.125.200.188"],"dl.google.com":"180.163.151.161","dl.l.google.com":"180.163.150.33"}},{"type":"tls","tag":"alidns-dot","detour":"DIRECT","domain_resolver":"hosts_fix","server":"1.1.1.1","server_port":853},{"type":"quic","tag":"alidns-quic","detour":"DIRECT","domain_resolver":"hosts_fix","server":"1.1.1.1"},{"type":"https","tag":"ggdns","detour":"PROXY","domain_resolver":"hosts_fix","server":"1.1.1.1"},{"type":"fakeip","tag":"fakeip","inet4_range":"198.18.0.0/15","inet6_range":"fc00::/18"},{"type":"tls","tag":"adguard-dns","detour":"PROXY","domain_resolver":"hosts_fix","server":"1.1.1.1","server_port":853}],"rules":[{"domain_suffix":["beacons.gvt2.com","beacons2.gvt2.com","beacons3.gvt2.com"],"action":"reject"},{"domain_suffix":[".local",".lan","miwifi.com","tplogin.cn","router.asus.com","tendawifi.com","tplinkwifi.net","hm.baidu.com","tracking.miui.com","douyinvod.com","douyincdn.com","ixigua.com","pstatp.com","bytecdn.com","volccdn.com","dl.delivery.mp.microsoft.com","update.microsoft.com","windowsupdate.com","speedtest.net","fast.com","zhihu.com","zhimg.com","jd.com","360buyimg.com","xfyun.cn","dashscope.aliyuncs.com","api.moonshot.cn","api.baichuan-ai.com","api.minimax.chat","api.sensenova.cn","api.iflytek.com","api.bilibili.com","www.bilibili.com","xinghuo.xfyun.cn","chatglm.cn","bigmodel.cn","volces.com","lingyiwanwu.com","stepfun.com","chat.deepseek.com","www.deepseek.com","zhipuai.cn","market.xiaomi.com"],"server":"alidns-quic"},{"domain_suffix":"lancache.steamcontent.com","server":"local"},{"domain_suffix":["steamcontent.com","steamserver.net","epicgames.com","gog.com","battle.net","blizzard.com","origin.com","ea.com","ubisoft.com","rockstargames.com","play.google.com","ggpht.com","googleusercontent.com","android.com","app-measurement.com","firebaselogging.googleapis.com","firebaselogging-pa.googleapis.com"],"server":"fakeip"},{"query_type":["A","AAAA"],"domain_suffix":"steamcontent.com","server":"fakeip"},{"query_type":["A","AAAA"],"rule_set":["proxy","games","ai"],"server":"adguard-dns"},{"query_type":["A","AAAA"],"rule_set":["proxy","games","ai"],"server":"fakeip","rewrite_ttl":300},{"domain_suffix":[".cn",".com.cn"],"action":"evaluate","server":"alidns-dot"},{"query_type":["A","AAAA"],"invert":true,"action":"predefined","rcode":"NOERROR"},{"rule_set":["httpDNS","DNSreject","Ads"],"action":"predefined","rcode":"NOERROR"},{"rule_set":["private","Filter"],"server":"alidns-quic"},{"domain_suffix":[".cn",".com.cn"],"server":"alidns-quic"},{"rule_set":"cnip","match_response":true,"server":"local"},{"match_response":true,"action":"respond"},{"rule_set":["geosite_adguard","geosite-category-ads-all"],"action":"reject"},{"query_type":["SVCB","HTTPS","PTR"],"action":"reject"}],"final":"ggdns","reverse_mapping":true,"strategy":"prefer_ipv4","timeout":"3s","cache_capacity":65536,"optimistic":true},"ntp":{"enabled":true,"interval":"30m0s","server":"ntp.aliyun.com","server_port":123,"detour":"DIRECT"},"http_clients":[{"tag":"default","version":2,"detour":"PROXY","stream_receive_window":0,"connection_receive_window":0}],"inbounds":[{"type":"tun","tag":"tun-in","mtu":1500,"address":"10.8.0.1/24","auto_route":true,"strict_route":true,"stack":"mixed"},{"type":"mixed","tag":"mixed-in","listen":"127.0.0.1","listen_port":7890}],"outbounds":[{"type":"direct","tag":"DIRECT","domain_resolver":"alidns-quic"},{"type":"selector","tag":"PROXY","outbounds":["AUTO","🇺🇸 pkpk01","🇺🇸 pkpk02","DIRECT"],"default":"AUTO"},{"type":"urltest","tag":"AUTO","outbounds":["🇺🇸 pkpk01","🇺🇸 pkpk02"],"url":"http://www.gstatic.com/generate_204","interval":"10m0s","tolerance":50,"idle_timeout":"30m0s"},{"type":"selector","tag":"GLOBAL","outbounds":["PROXY","DIRECT"],"default":"PROXY"},{"type":"selector","tag":"CN","outbounds":["DIRECT","PROXY"],"default":"DIRECT"},{"type":"selector","tag":"Final","outbounds":["PROXY","DIRECT","REJECT-DROP"],"default":"PROXY"},{"type":"block","tag":"REJECT-DROP"},{"type":"vless","tag":"🇺🇸 pkpk01","tcp_fast_open":true,"tcp_keep_alive":"30s","tcp_keep_alive_interval":"5s","udp_fragment":true,"domain_resolver":"alidns-quic","server":"example.com","server_port":443,"uuid":"00000000-0000-4000-8000-000000000000","tls":{"enabled":true,"server_name":"节点域名","utls":{"enabled":true,"fingerprint":"chrome"}},"transport":{"type":"ws","path":"/路径","headers":{"Host":"节点域名"},"max_early_data":2560,"early_data_header_name":"Sec-WebSocket-Protocol"},"packet_encoding":"xudp","connect_timeout":"5s"},{"type":"vless","tag":"🇺🇸 pkpk02","tcp_fast_open":true,"tcp_keep_alive":"30s","tcp_keep_alive_interval":"5s","udp_fragment":true,"domain_resolver":"alidns-quic","server":"example.com","server_port":443,"uuid":"00000000-0000-4000-8000-000000000000","tls":{"enabled":true,"server_name":"节点域名","utls":{"enabled":true,"fingerprint":"chrome"}},"transport":{"type":"ws","path":"/路径","headers":{"Host":"节点域名"},"max_early_data":2560,"early_data_header_name":"Sec-WebSocket-Protocol"},"packet_encoding":"xudp","connect_timeout":"5s"}],"route":{"rules":[{"action":"sniff"},{"type":"logical","mode":"or","rules":[{"port":53},{"protocol":"dns"}],"action":"hijack-dns"},{"action":"route-options","udp_disable_domain_unmapping":true,"udp_connect":true},{"rule_set":["Ads","adobe","httpDNS","DNSreject"],"action":"reject","method":"drop"},{"clash_mode":"Global","outbound":"PROXY"},{"clash_mode":"Direct","outbound":"DIRECT"},{"rule_set":"Apple","outbound":"DIRECT"},{"rule_set":["fcm","Android"],"outbound":"PROXY"},{"domain_suffix":["google.cn","googleapis.cn"],"outbound":"PROXY"},{"rule_set":["telegram","telegram_ip","youtube","instagram","Google","ai","GlobalMedia","Proxy","gfw"],"outbound":"PROXY"},{"package_name":"com.wwwscn.yuexingbao","outbound":"DIRECT"},{"protocol":["ntp","icmp"],"outbound":"DIRECT"},{"rule_set":["private","Applications","OnePlus"],"outbound":"DIRECT"},{"domain_suffix":["sponsor.ajay.app","ifbapp.com","allawnos.com","heytapmobi.com","steamserver.net"],"outbound":"DIRECT"},{"protocol":["stun","quic","dtls"],"action":"reject"},{"domain":["astrategy.beacon.qq.com","beacon.qq.com","abyss.cyapi.cn","ad.cyapi.cn","gather.colorfulclouds.net"],"action":"reject","method":"drop"},{"type":"logical","mode":"and","rules":[{"ip_version":6},{"default_interface_address":"2000::/3","invert":true}],"action":"reject"},{"package_name":["com.google.android.youtube","app.revanced.android.youtube","org.telegram.messenger","org.telegram.messenger.beta"],"outbound":"PROXY"},{"type":"logical","mode":"and","rules":[{"domain_suffix":["mtalk.google.com","alt1-mtalk.google.com","alt2-mtalk.google.com","alt3-mtalk.google.com","alt4-mtalk.google.com","alt5-mtalk.google.com","alt6-mtalk.google.com","alt7-mtalk.google.com","alt8-mtalk.google.com"]},{"port":[443,5228]}],"outbound":"PROXY"},{"rule_set":["telegramip","geosite-google","proxy","games","ai"],"outbound":"PROXY"},{"ip_cidr":"198.18.0.0/15","outbound":"PROXY"},{"rule_set":["private","cn","cnip","microsoft-cn","apple-cn","google-cn","games-cn","networktest"],"outbound":"DIRECT"},{"rule_set":["geosite_adguard","geosite-category-ads-all"],"action":"reject"},{"type":"logical","mode":"or","rules":[{"network":"udp","port":[3478,5349,5350,19302,10000]},{"domain_regex":"^stun\\..+"},{"domain_keyword":["stun","turn","httpdns"]},{"protocol":"stun"}],"action":"reject"},{"rule_set":"anti_fraud","action":"reject"},{"ip_is_private":true,"outbound":"DIRECT"},{"action":"resolve"}],"rule_set":[{"type":"remote","tag":"geosite-category-ads-all","url":"https://cdn.jsdelivr.net/gh/SagerNet/sing-geosite@rule-set/geosite-category-ads-all.srs","http_client":"default","update_interval":"48h0m0s"},{"type":"remote","tag":"geosite_adguard","url":"https://cdn.jsdelivr.net/gh/217heidai/adblockfilters@main/rules/adblocksingbox.srs","http_client":"default","update_interval":"48h0m0s"},{"type":"remote","tag":"geosite-google","url":"https://cdn.jsdelivr.net/gh/SagerNet/sing-geosite@rule-set/geosite-google.srs","http_client":"default","update_interval":"48h0m0s"},{"type":"remote","tag":"geosite-youtube","url":"https://cdn.jsdelivr.net/gh/SagerNet/sing-geosite@rule-set/geosite-youtube.srs","http_client":"default","update_interval":"48h0m0s"},{"type":"remote","tag":"proxy","url":"https://cdn.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/proxy.srs","http_client":"default","update_interval":"48h0m0s"},{"type":"remote","tag":"games","url":"https://cdn.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/games.srs","http_client":"default","update_interval":"48h0m0s"},{"type":"remote","tag":"ai","url":"https://cdn.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/ai.srs","http_client":"default","update_interval":"48h0m0s"},{"type":"remote","tag":"private","url":"https://cdn.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/private.srs","http_client":"default","update_interval":"48h0m0s"},{"type":"remote","tag":"anti_fraud","url":"https://raw.githubusercontent.com/hwsaya/nothing/refs/heads/main/rules/FuckFZ.json","update_interval":"48h0m0s"},{"type":"remote","tag":"cn","url":"https://cdn.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/cn.srs","http_client":"default","update_interval":"48h0m0s"},{"type":"remote","tag":"microsoft-cn","url":"https://cdn.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/microsoft-cn.srs","http_client":"default","update_interval":"48h0m0s"},{"type":"remote","tag":"apple-cn","url":"https://cdn.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/apple-cn.srs","http_client":"default","update_interval":"48h0m0s"},{"type":"remote","tag":"google-cn","url":"https://cdn.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/google-cn.srs","http_client":"default","update_interval":"48h0m0s"},{"type":"remote","tag":"games-cn","url":"https://cdn.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/games-cn.srs","http_client":"default","update_interval":"48h0m0s"},{"type":"remote","tag":"networktest","url":"https://cdn.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/networktest.srs","http_client":"default","update_interval":"48h0m0s"},{"type":"remote","tag":"telegramip","url":"https://cdn.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/telegramip.srs","http_client":"default","update_interval":"48h0m0s"},{"type":"remote","tag":"telegram_ip","url":"https://raw.githubusercontent.com/MetaCubeX/meta-rules-dat/sing/geo/geoip/telegram.srs","http_client":"default","update_interval":"48h0m0s"},{"type":"remote","tag":"Proxy","url":"https://raw.githubusercontent.com/SagerNet/sing-geosite/rule-set/geosite-geolocation-!cn.srs","http_client":"default","update_interval":"48h0m0s"},{"type":"remote","tag":"gfw","url":"https://raw.githubusercontent.com/MetaCubeX/meta-rules-dat/sing/geo/geosite/gfw.srs","http_client":"default","update_interval":"48h0m0s"},{"type":"remote","tag":"cnip","url":"https://cdn.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/cnip.srs","http_client":"default","update_interval":"48h0m0s"},{"type":"remote","tag":"Filter","url":"https://github.com/DustinWin/ruleset_geodata/releases/download/sing-box-ruleset/fakeip-filter.srs","http_client":"default","update_interval":"48h0m0s"},{"type":"remote","tag":"DNSreject","url":"https://raw.githubusercontent.com/senshinya/singbox_ruleset/main/rule/AdGuardSDNSFilter/AdGuardSDNSFilter.srs","http_client":"default","update_interval":"48h0m0s"},{"type":"remote","tag":"httpDNS","url":"https://raw.githubusercontent.com/senshinya/singbox_ruleset/main/rule/BlockHttpDNS/BlockHttpDNS.srs","http_client":"default","update_interval":"48h0m0s"},{"type":"remote","tag":"Ads","url":"https://github.com/DustinWin/ruleset_geodata/releases/download/sing-box-ruleset/ads.srs","http_client":"default","update_interval":"48h0m0s"},{"type":"remote","tag":"adobe","url":"https://raw.githubusercontent.com/MetaCubeX/meta-rules-dat/sing/geo/geosite/adobe.srs","http_client":"default","update_interval":"48h0m0s"},{"type":"remote","tag":"Apple","url":"https://raw.githubusercontent.com/SagerNet/sing-geosite/rule-set/geosite-apple.srs","http_client":"default","update_interval":"48h0m0s"},{"type":"remote","tag":"fcm","url":"https://raw.githubusercontent.com/senshinya/singbox_ruleset/main/rule/GoogleFCM/GoogleFCM.srs","http_client":"default","update_interval":"48h0m0s"},{"type":"remote","tag":"Android","url":"https://raw.githubusercontent.com/senshinya/singbox_ruleset/main/rule/Android/Android.srs","http_client":"default","update_interval":"48h0m0s"},{"type":"remote","tag":"telegram","url":"https://raw.githubusercontent.com/SagerNet/sing-geosite/rule-set/geosite-telegram.srs","http_client":"default","update_interval":"48h0m0s"},{"type":"remote","tag":"youtube","url":"https://raw.githubusercontent.com/SagerNet/sing-geosite/rule-set/geosite-youtube.srs","http_client":"default","update_interval":"48h0m0s"},{"type":"remote","tag":"instagram","url":"https://raw.githubusercontent.com/SagerNet/sing-geosite/rule-set/geosite-instagram.srs","http_client":"default","update_interval":"48h0m0s"},{"type":"remote","tag":"Google","url":"https://raw.githubusercontent.com/senshinya/singbox_ruleset/main/rule/Google/Google.srs","http_client":"default","update_interval":"48h0m0s"},{"type":"remote","tag":"GlobalMedia","url":"https://raw.githubusercontent.com/MetaCubeX/meta-rules-dat/sing/geo/geosite/category-entertainment.srs","http_client":"default","update_interval":"48h0m0s"},{"type":"remote","tag":"Applications","url":"https://github.com/DustinWin/ruleset_geodata/releases/download/sing-box-ruleset/applications.srs","http_client":"default","update_interval":"48h0m0s"},{"type":"remote","tag":"OnePlus","url":"https://raw.githubusercontent.com/senshinya/singbox_ruleset/main/rule/OnePlus/OnePlus.srs","http_client":"default","update_interval":"48h0m0s"}],"final":"Final","auto_detect_interface":true,"default_domain_resolver":"alidns-quic"},"experimental":{"cache_file":{"enabled":true,"path":"cache.db","cache_id":"cinchov","store_fakeip":true,"store_dns":true},"clash_api":{"external_controller":"127.0.0.1:9090","external_ui":"ui","external_ui_download_url":"https://github.com/MetaCubeX/metacubexd/releases/download/v1.245.1/compressed-dist.tgz","external_ui_download_detour":"PROXY","secret":"sbc-test-token","default_mode":"rule"},"debug":{"gc_percent":100,"memory_limit":"400MB"}}} diff --git a/fixtures/external/huixiao666-pk-box-1.14.0-alpha.xxx-1.14.0-alpha.39-.json-f8d3f44a.json b/fixtures/external/huixiao666-pk-box-1.14.0-alpha.xxx-1.14.0-alpha.39-.json-f8d3f44a.json new file mode 100644 index 00000000..5f0e3b0a --- /dev/null +++ b/fixtures/external/huixiao666-pk-box-1.14.0-alpha.xxx-1.14.0-alpha.39-.json-f8d3f44a.json @@ -0,0 +1 @@ +{"log":{"level":"trace","timestamp":true},"dns":{"servers":[{"type":"hosts","tag":"hosts_fix","predefined":{"dns.google":["8.8.8.8","8.8.4.4"]}},{"type":"local","tag":"local-dns"},{"type":"fakeip","tag":"fakeip","inet4_range":"198.18.0.0/15"},{"type":"https","tag":"ggdns","detour":"proxy","domain_resolver":"hosts_fix","server":"1.1.1.1"},{"type":"https","tag":"backup-dns","detour":"proxy","domain_resolver":"hosts_fix","server":"1.1.1.1"}],"rules":[{"ip_version":6,"action":"reject"},{"query_type":["SVCB","HTTPS","PTR"],"action":"reject"},{"rule_set":"private","server":"local-dns"},{"rule_set":["cn","microsoft-cn","apple-cn","games-cn"],"server":"local-dns"},{"rule_set":["Google","fcm","Android","proxy","gfw","ai"],"server":"fakeip","rewrite_ttl":300},{"rule_set":["httpDNS","DNSreject","ads"],"action":"reject"},{"rule_set":["games","networktest","fakeip-filter"],"action":"evaluate","server":"ggdns"},{"rule_set":["games","networktest","fakeip-filter"],"match_response":true,"ip_is_private":true,"action":"reject"},{"query_type":["A","AAAA"],"invert":true,"action":"reject"}],"final":"ggdns","timeout":"3s","cache_capacity":16384,"optimistic":{"enabled":true,"timeout":"5m0s"}},"http_clients":[{"tag":"default","version":2,"stream_receive_window":0,"connection_receive_window":0}],"inbounds":[{"type":"tun","tag":"tun-in","mtu":9000,"address":"10.8.0.1/24","auto_route":true,"strict_route":true,"udp_timeout":"1m0s","stack":"system","endpoint_independent_nat":true}],"outbounds":[{"type":"direct","tag":"DIRECT"},{"type":"selector","tag":"proxy","outbounds":["auto","CF电信优选1","CF电信优选2","CF电信优选3","CF电信优选4","CF电信优选5","CF电信优选6","CF电信优选7","CF电信优选8","CF电信优选9","CF电信优选10","CF电信优选11","CF电信优选12","CF电信优选13","CF电信优选14","CF电信优选15","CF电信优选16","DIRECT"],"default":"CF电信优选1"},{"type":"urltest","tag":"auto","outbounds":["CF电信优选1","CF电信优选2","CF电信优选3","CF电信优选4","CF电信优选5","CF电信优选6","CF电信优选7","CF电信优选8","CF电信优选9","CF电信优选10","CF电信优选11","CF电信优选12","CF电信优选13","CF电信优选14","CF电信优选15","CF电信优选16"],"url":"http://www.gstatic.com/generate_204","interval":"10m0s"},{"type":"vless","tag":"CF电信优选1","connect_timeout":"5s","tcp_fast_open":true,"tcp_keep_alive":"30s","tcp_keep_alive_interval":"5s","domain_strategy":"prefer_ipv4","server":"example.com","server_port":2053,"uuid":"00000000-0000-4000-8000-000000000000","tls":{"enabled":true,"server_name":"xn--hlra322yba.cc.cd","utls":{"enabled":true,"fingerprint":"chrome"}},"transport":{"type":"ws","path":"/","headers":{"Host":"xn--hlra322yba.cc.cd"}}},{"type":"vless","tag":"CF电信优选2","connect_timeout":"5s","tcp_fast_open":true,"tcp_keep_alive":"30s","tcp_keep_alive_interval":"5s","domain_strategy":"prefer_ipv4","server":"example.com","server_port":2083,"uuid":"00000000-0000-4000-8000-000000000000","tls":{"enabled":true,"server_name":"xn--hlra322yba.cc.cd","utls":{"enabled":true,"fingerprint":"chrome"}},"transport":{"type":"ws","path":"/","headers":{"Host":"xn--hlra322yba.cc.cd"}}},{"type":"vless","tag":"CF电信优选3","connect_timeout":"5s","tcp_fast_open":true,"tcp_keep_alive":"30s","tcp_keep_alive_interval":"5s","domain_strategy":"prefer_ipv4","server":"example.com","server_port":2087,"uuid":"00000000-0000-4000-8000-000000000000","tls":{"enabled":true,"server_name":"xn--hlra322yba.cc.cd","utls":{"enabled":true,"fingerprint":"chrome"}},"transport":{"type":"ws","path":"/","headers":{"Host":"xn--hlra322yba.cc.cd"}}},{"type":"vless","tag":"CF电信优选4","connect_timeout":"5s","tcp_fast_open":true,"tcp_keep_alive":"30s","tcp_keep_alive_interval":"5s","domain_strategy":"prefer_ipv4","server":"example.com","server_port":2087,"uuid":"00000000-0000-4000-8000-000000000000","tls":{"enabled":true,"server_name":"xn--hlra322yba.cc.cd","utls":{"enabled":true,"fingerprint":"chrome"}},"transport":{"type":"ws","path":"/","headers":{"Host":"xn--hlra322yba.cc.cd"}}},{"type":"vless","tag":"CF电信优选5","connect_timeout":"5s","tcp_fast_open":true,"tcp_keep_alive":"30s","tcp_keep_alive_interval":"5s","domain_strategy":"prefer_ipv4","server":"example.com","server_port":2096,"uuid":"00000000-0000-4000-8000-000000000000","tls":{"enabled":true,"server_name":"xn--hlra322yba.cc.cd","utls":{"enabled":true,"fingerprint":"chrome"}},"transport":{"type":"ws","path":"/","headers":{"Host":"xn--hlra322yba.cc.cd"}}},{"type":"vless","tag":"CF电信优选6","connect_timeout":"5s","tcp_fast_open":true,"tcp_keep_alive":"30s","tcp_keep_alive_interval":"5s","domain_strategy":"prefer_ipv4","server":"example.com","server_port":8443,"uuid":"00000000-0000-4000-8000-000000000000","tls":{"enabled":true,"server_name":"xn--hlra322yba.cc.cd","utls":{"enabled":true,"fingerprint":"chrome"}},"transport":{"type":"ws","path":"/","headers":{"Host":"xn--hlra322yba.cc.cd"}}},{"type":"vless","tag":"CF电信优选7","connect_timeout":"5s","tcp_fast_open":true,"tcp_keep_alive":"30s","tcp_keep_alive_interval":"5s","domain_strategy":"prefer_ipv4","server":"example.com","server_port":8443,"uuid":"00000000-0000-4000-8000-000000000000","tls":{"enabled":true,"server_name":"xn--hlra322yba.cc.cd","utls":{"enabled":true,"fingerprint":"chrome"}},"transport":{"type":"ws","path":"/","headers":{"Host":"xn--hlra322yba.cc.cd"}}},{"type":"vless","tag":"CF电信优选8","connect_timeout":"5s","tcp_fast_open":true,"tcp_keep_alive":"30s","tcp_keep_alive_interval":"5s","domain_strategy":"prefer_ipv4","server":"example.com","server_port":8443,"uuid":"00000000-0000-4000-8000-000000000000","tls":{"enabled":true,"server_name":"xn--hlra322yba.cc.cd","utls":{"enabled":true,"fingerprint":"chrome"}},"transport":{"type":"ws","path":"/","headers":{"Host":"xn--hlra322yba.cc.cd"}}},{"type":"vless","tag":"CF电信优选9","connect_timeout":"5s","tcp_fast_open":true,"tcp_keep_alive":"30s","tcp_keep_alive_interval":"5s","domain_strategy":"prefer_ipv4","server":"example.com","server_port":2083,"uuid":"00000000-0000-4000-8000-000000000000","tls":{"enabled":true,"server_name":"xn--hlra322yba.cc.cd","utls":{"enabled":true,"fingerprint":"chrome"}},"transport":{"type":"ws","path":"/","headers":{"Host":"xn--hlra322yba.cc.cd"}}},{"type":"vless","tag":"CF电信优选10","connect_timeout":"5s","tcp_fast_open":true,"tcp_keep_alive":"30s","tcp_keep_alive_interval":"5s","domain_strategy":"prefer_ipv4","server":"example.com","server_port":2053,"uuid":"00000000-0000-4000-8000-000000000000","tls":{"enabled":true,"server_name":"xn--hlra322yba.cc.cd","utls":{"enabled":true,"fingerprint":"chrome"}},"transport":{"type":"ws","path":"/","headers":{"Host":"xn--hlra322yba.cc.cd"}}},{"type":"vless","tag":"CF电信优选11","connect_timeout":"5s","tcp_fast_open":true,"tcp_keep_alive":"30s","tcp_keep_alive_interval":"5s","domain_strategy":"prefer_ipv4","server":"example.com","server_port":8443,"uuid":"00000000-0000-4000-8000-000000000000","tls":{"enabled":true,"server_name":"xn--hlra322yba.cc.cd","utls":{"enabled":true,"fingerprint":"chrome"}},"transport":{"type":"ws","path":"/","headers":{"Host":"xn--hlra322yba.cc.cd"}}},{"type":"vless","tag":"CF电信优选12","connect_timeout":"5s","tcp_fast_open":true,"tcp_keep_alive":"30s","tcp_keep_alive_interval":"5s","domain_strategy":"prefer_ipv4","server":"example.com","server_port":2053,"uuid":"00000000-0000-4000-8000-000000000000","tls":{"enabled":true,"server_name":"xn--hlra322yba.cc.cd","utls":{"enabled":true,"fingerprint":"chrome"}},"transport":{"type":"ws","path":"/","headers":{"Host":"xn--hlra322yba.cc.cd"}}},{"type":"vless","tag":"CF电信优选13","connect_timeout":"5s","tcp_fast_open":true,"tcp_keep_alive":"30s","tcp_keep_alive_interval":"5s","domain_strategy":"prefer_ipv4","server":"example.com","server_port":2083,"uuid":"00000000-0000-4000-8000-000000000000","tls":{"enabled":true,"server_name":"xn--hlra322yba.cc.cd","utls":{"enabled":true,"fingerprint":"chrome"}},"transport":{"type":"ws","path":"/","headers":{"Host":"xn--hlra322yba.cc.cd"}}},{"type":"vless","tag":"CF电信优选14","connect_timeout":"5s","tcp_fast_open":true,"tcp_keep_alive":"30s","tcp_keep_alive_interval":"5s","domain_strategy":"prefer_ipv4","server":"example.com","server_port":2053,"uuid":"00000000-0000-4000-8000-000000000000","tls":{"enabled":true,"server_name":"xn--hlra322yba.cc.cd","utls":{"enabled":true,"fingerprint":"chrome"}},"transport":{"type":"ws","path":"/","headers":{"Host":"xn--hlra322yba.cc.cd"}}},{"type":"vless","tag":"CF电信优选15","connect_timeout":"5s","tcp_fast_open":true,"tcp_keep_alive":"30s","tcp_keep_alive_interval":"5s","domain_strategy":"prefer_ipv4","server":"example.com","server_port":443,"uuid":"00000000-0000-4000-8000-000000000000","tls":{"enabled":true,"server_name":"xn--hlra322yba.cc.cd","utls":{"enabled":true,"fingerprint":"chrome"}},"transport":{"type":"ws","path":"/","headers":{"Host":"xn--hlra322yba.cc.cd"}}},{"type":"vless","tag":"CF电信优选16","connect_timeout":"5s","tcp_fast_open":true,"tcp_keep_alive":"30s","tcp_keep_alive_interval":"5s","domain_strategy":"prefer_ipv4","server":"example.com","server_port":2087,"uuid":"00000000-0000-4000-8000-000000000000","tls":{"enabled":true,"server_name":"xn--hlra322yba.cc.cd","utls":{"enabled":true,"fingerprint":"chrome"}},"transport":{"type":"ws","path":"/","headers":{"Host":"xn--hlra322yba.cc.cd"}}}],"route":{"rules":[{"action":"sniff"},{"domain_suffix":["googleapis.com","googleusercontent.com","www.gstatic.com","github.com","githubusercontent.com"],"outbound":"proxy"},{"protocol":"quic","action":"reject"},{"type":"logical","mode":"or","rules":[{"port":53},{"protocol":"dns"}],"action":"hijack-dns"},{"type":"logical","mode":"and","rules":[{"ip_version":6},{"default_interface_address":"2000::/3","invert":true}],"action":"reject"},{"port":[853,5353],"action":"reject"},{"ip_is_private":true,"outbound":"DIRECT"},{"rule_set":"ads","action":"reject"},{"ip_cidr":"198.18.0.0/15","outbound":"proxy"},{"rule_set":["Google","fcm","Android","proxy","gfw","ai","games","networktest"],"outbound":"proxy"},{"rule_set":["cn","cnip"],"outbound":"DIRECT"},{"rule_set":"private","outbound":"DIRECT"},{"rule_set":["microsoft-cn","apple-cn","games-cn"],"outbound":"DIRECT"},{"protocol":["stun","dtls"],"action":"reject"},{"type":"logical","mode":"or","rules":[{"network":"udp","port":[3478,5349,5350,19302,10000]},{"domain_regex":"^stun\\..+"},{"domain_keyword":["stun","turn"]}],"action":"reject"},{"action":"route-options","udp_disable_domain_unmapping":true,"udp_connect":true},{"action":"resolve"},{"outbound":"proxy"}],"rule_set":[{"type":"remote","tag":"cn","url":"https://cdn.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/cn.srs","update_interval":"48h0m0s"},{"type":"remote","tag":"cnip","url":"https://cdn.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/cnip.srs","update_interval":"48h0m0s"},{"type":"remote","tag":"private","url":"https://cdn.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/private.srs","update_interval":"48h0m0s"},{"type":"remote","tag":"ads","url":"https://cdn.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/ads.srs","update_interval":"48h0m0s"},{"type":"remote","tag":"proxy","url":"https://cdn.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/proxy.srs","update_interval":"48h0m0s"},{"type":"remote","tag":"gfw","url":"https://cdn.jsdelivr.net/gh/MetaCubeX/meta-rules-dat@sing/geo/geosite/gfw.srs","update_interval":"48h0m0s"},{"type":"remote","tag":"ai","url":"https://cdn.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/ai.srs","update_interval":"48h0m0s"},{"type":"remote","tag":"games","url":"https://cdn.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/games.srs","update_interval":"48h0m0s"},{"type":"remote","tag":"microsoft-cn","url":"https://cdn.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/microsoft-cn.srs","update_interval":"48h0m0s"},{"type":"remote","tag":"apple-cn","url":"https://cdn.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/apple-cn.srs","update_interval":"48h0m0s"},{"type":"remote","tag":"games-cn","url":"https://cdn.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/games-cn.srs","update_interval":"48h0m0s"},{"type":"remote","tag":"networktest","url":"https://cdn.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/networktest.srs","update_interval":"48h0m0s"},{"type":"remote","tag":"httpDNS","url":"https://cdn.jsdelivr.net/gh/senshinya/singbox_ruleset@main/rule/BlockHttpDNS/BlockHttpDNS.srs","update_interval":"48h0m0s"},{"type":"remote","tag":"DNSreject","url":"https://cdn.jsdelivr.net/gh/senshinya/singbox_ruleset@main/rule/AdGuardSDNSFilter/AdGuardSDNSFilter.srs","update_interval":"48h0m0s"},{"type":"remote","tag":"Google","url":"https://cdn.jsdelivr.net/gh/senshinya/singbox_ruleset@main/rule/Google/Google.srs","update_interval":"48h0m0s"},{"type":"remote","tag":"fcm","url":"https://cdn.jsdelivr.net/gh/senshinya/singbox_ruleset@main/rule/GoogleFCM/GoogleFCM.srs","update_interval":"48h0m0s"},{"type":"remote","tag":"Android","url":"https://cdn.jsdelivr.net/gh/senshinya/singbox_ruleset@main/rule/Android/Android.srs","update_interval":"48h0m0s"},{"type":"remote","tag":"fakeip-filter","url":"https://cdn.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/fakeip-filter.srs","update_interval":"48h0m0s"}],"final":"proxy","auto_detect_interface":true,"default_domain_resolver":"ggdns","default_http_client":"default"},"services":[{"type":"api","tag":"api","listen":"127.0.0.1","listen_port":9091,"access_control_allow_origin":"https://sing-box-dashboard.sagernet.org","access_control_allow_private_network":true,"dashboard":true}],"experimental":{"cache_file":{"enabled":true,"path":"cache.db","store_fakeip":true,"store_dns":true}}} diff --git a/fixtures/external/manifest.json b/fixtures/external/manifest.json index ac89840c..dcc80dfe 100644 --- a/fixtures/external/manifest.json +++ b/fixtures/external/manifest.json @@ -348,7 +348,7 @@ "official_check_result": { "status": "failed", "binary": "sing-box-stable", - "reason": "FATAL[0000] decode config at /var/folders/40/y5v_d1m548j9ytv981cn3bjc0000gn/T/sbc-external-official-7qUoDc/config.json: dns.servers[0].address_strategy: json: unknown field \"address_strategy\"" + "reason": "FATAL[0000] decode config at /var/folders/40/y5v_d1m548j9ytv981cn3bjc0000gn/T/sbc-external-official-agjXF1/config.json: dns.servers[0].address_strategy: json: unknown field \"address_strategy\"" } }, { @@ -1912,7 +1912,7 @@ "official_check_result": { "status": "failed", "binary": "sing-box-testing", - "reason": "FATAL[0000] decode config at /var/folders/40/y5v_d1m548j9ytv981cn3bjc0000gn/T/sbc-external-official-Hmotl4/config.json: dns.servers[0]: legacy DNS server formats are deprecated in sing-box 1.12.0 and removed in sing-box 1.14.0, checkout migration: https://sing-box.sagernet.org/migration/#migrate-to-new-dns-server-formats" + "reason": "FATAL[0000] decode config at /var/folders/40/y5v_d1m548j9ytv981cn3bjc0000gn/T/sbc-external-official-eLGypk/config.json: dns.servers[0]: legacy DNS server formats are deprecated in sing-box 1.12.0 and removed in sing-box 1.14.0, checkout migration: https://sing-box.sagernet.org/migration/#migrate-to-new-dns-server-formats" } }, { @@ -1942,7 +1942,7 @@ "official_check_result": { "status": "failed", "binary": "sing-box-testing", - "reason": "FATAL[0000] decode config at /var/folders/40/y5v_d1m548j9ytv981cn3bjc0000gn/T/sbc-external-official-RTwOmY/config.json: dns.servers[0]: legacy DNS server formats are deprecated in sing-box 1.12.0 and removed in sing-box 1.14.0, checkout migration: https://sing-box.sagernet.org/migration/#migrate-to-new-dns-server-formats" + "reason": "FATAL[0000] decode config at /var/folders/40/y5v_d1m548j9ytv981cn3bjc0000gn/T/sbc-external-official-ayR1Wt/config.json: dns.servers[0]: legacy DNS server formats are deprecated in sing-box 1.12.0 and removed in sing-box 1.14.0, checkout migration: https://sing-box.sagernet.org/migration/#migrate-to-new-dns-server-formats" } }, { @@ -1972,7 +1972,7 @@ "official_check_result": { "status": "failed", "binary": "sing-box-testing", - "reason": "FATAL[0000] decode config at /var/folders/40/y5v_d1m548j9ytv981cn3bjc0000gn/T/sbc-external-official-j7Xv0z/config.json: dns: legacy DNS fakeip options are deprecated in sing-box 1.12.0 and removed in sing-box 1.14.0, checkout migration: https://sing-box.sagernet.org/migration/#migrate-to-new-dns-server-formats" + "reason": "FATAL[0000] decode config at /var/folders/40/y5v_d1m548j9ytv981cn3bjc0000gn/T/sbc-external-official-SSP5Ui/config.json: dns: legacy DNS fakeip options are deprecated in sing-box 1.12.0 and removed in sing-box 1.14.0, checkout migration: https://sing-box.sagernet.org/migration/#migrate-to-new-dns-server-formats" } }, { @@ -2031,7 +2031,7 @@ "official_check_result": { "status": "failed", "binary": "sing-box-testing", - "reason": "FATAL[0000] decode config at /var/folders/40/y5v_d1m548j9ytv981cn3bjc0000gn/T/sbc-external-official-zSlL0m/config.json: dns: legacy DNS fakeip options are deprecated in sing-box 1.12.0 and removed in sing-box 1.14.0, checkout migration: https://sing-box.sagernet.org/migration/#migrate-to-new-dns-server-formats" + "reason": "FATAL[0000] decode config at /var/folders/40/y5v_d1m548j9ytv981cn3bjc0000gn/T/sbc-external-official-36gRJS/config.json: dns: legacy DNS fakeip options are deprecated in sing-box 1.12.0 and removed in sing-box 1.14.0, checkout migration: https://sing-box.sagernet.org/migration/#migrate-to-new-dns-server-formats" } }, { @@ -2061,7 +2061,7 @@ "official_check_result": { "status": "failed", "binary": "sing-box-testing", - "reason": "FATAL[0000] decode config at /var/folders/40/y5v_d1m548j9ytv981cn3bjc0000gn/T/sbc-external-official-7i1nnt/config.json: dns: legacy DNS fakeip options are deprecated in sing-box 1.12.0 and removed in sing-box 1.14.0, checkout migration: https://sing-box.sagernet.org/migration/#migrate-to-new-dns-server-formats" + "reason": "FATAL[0000] decode config at /var/folders/40/y5v_d1m548j9ytv981cn3bjc0000gn/T/sbc-external-official-sfdGWe/config.json: dns: legacy DNS fakeip options are deprecated in sing-box 1.12.0 and removed in sing-box 1.14.0, checkout migration: https://sing-box.sagernet.org/migration/#migrate-to-new-dns-server-formats" } }, { @@ -2091,7 +2091,7 @@ "official_check_result": { "status": "failed", "binary": "sing-box-testing", - "reason": "FATAL[0000] decode config at /var/folders/40/y5v_d1m548j9ytv981cn3bjc0000gn/T/sbc-external-official-2ChhvD/config.json: dns: legacy DNS fakeip options are deprecated in sing-box 1.12.0 and removed in sing-box 1.14.0, checkout migration: https://sing-box.sagernet.org/migration/#migrate-to-new-dns-server-formats" + "reason": "FATAL[0000] decode config at /var/folders/40/y5v_d1m548j9ytv981cn3bjc0000gn/T/sbc-external-official-T3phCL/config.json: dns: legacy DNS fakeip options are deprecated in sing-box 1.12.0 and removed in sing-box 1.14.0, checkout migration: https://sing-box.sagernet.org/migration/#migrate-to-new-dns-server-formats" } }, { @@ -2121,7 +2121,7 @@ "official_check_result": { "status": "failed", "binary": "sing-box-testing", - "reason": "FATAL[0000] decode config at /var/folders/40/y5v_d1m548j9ytv981cn3bjc0000gn/T/sbc-external-official-STdT6x/config.json: dns: legacy DNS fakeip options are deprecated in sing-box 1.12.0 and removed in sing-box 1.14.0, checkout migration: https://sing-box.sagernet.org/migration/#migrate-to-new-dns-server-formats" + "reason": "FATAL[0000] decode config at /var/folders/40/y5v_d1m548j9ytv981cn3bjc0000gn/T/sbc-external-official-Di329i/config.json: dns: legacy DNS fakeip options are deprecated in sing-box 1.12.0 and removed in sing-box 1.14.0, checkout migration: https://sing-box.sagernet.org/migration/#migrate-to-new-dns-server-formats" } }, { @@ -2209,7 +2209,7 @@ "official_check_result": { "status": "failed", "binary": "sing-box-testing", - "reason": "FATAL[0000] decode config at /var/folders/40/y5v_d1m548j9ytv981cn3bjc0000gn/T/sbc-external-official-68zR33/config.json: dns: legacy DNS fakeip options are deprecated in sing-box 1.12.0 and removed in sing-box 1.14.0, checkout migration: https://sing-box.sagernet.org/migration/#migrate-to-new-dns-server-formats" + "reason": "FATAL[0000] decode config at /var/folders/40/y5v_d1m548j9ytv981cn3bjc0000gn/T/sbc-external-official-LNfA44/config.json: dns: legacy DNS fakeip options are deprecated in sing-box 1.12.0 and removed in sing-box 1.14.0, checkout migration: https://sing-box.sagernet.org/migration/#migrate-to-new-dns-server-formats" } }, { @@ -2239,7 +2239,7 @@ "official_check_result": { "status": "failed", "binary": "sing-box-testing", - "reason": "FATAL[0000] decode config at /var/folders/40/y5v_d1m548j9ytv981cn3bjc0000gn/T/sbc-external-official-okkusC/config.json: dns: legacy DNS fakeip options are deprecated in sing-box 1.12.0 and removed in sing-box 1.14.0, checkout migration: https://sing-box.sagernet.org/migration/#migrate-to-new-dns-server-formats" + "reason": "FATAL[0000] decode config at /var/folders/40/y5v_d1m548j9ytv981cn3bjc0000gn/T/sbc-external-official-l96FQi/config.json: dns: legacy DNS fakeip options are deprecated in sing-box 1.12.0 and removed in sing-box 1.14.0, checkout migration: https://sing-box.sagernet.org/migration/#migrate-to-new-dns-server-formats" } }, { @@ -2269,7 +2269,7 @@ "official_check_result": { "status": "failed", "binary": "sing-box-testing", - "reason": "FATAL[0000] decode config at /var/folders/40/y5v_d1m548j9ytv981cn3bjc0000gn/T/sbc-external-official-330CcY/config.json: dns: legacy DNS fakeip options are deprecated in sing-box 1.12.0 and removed in sing-box 1.14.0, checkout migration: https://sing-box.sagernet.org/migration/#migrate-to-new-dns-server-formats" + "reason": "FATAL[0000] decode config at /var/folders/40/y5v_d1m548j9ytv981cn3bjc0000gn/T/sbc-external-official-tBc8u4/config.json: dns: legacy DNS fakeip options are deprecated in sing-box 1.12.0 and removed in sing-box 1.14.0, checkout migration: https://sing-box.sagernet.org/migration/#migrate-to-new-dns-server-formats" } }, { @@ -2708,7 +2708,7 @@ "official_check_result": { "status": "failed", "binary": "sing-box-1.12", - "reason": "FATAL[0000] decode config at /var/folders/40/y5v_d1m548j9ytv981cn3bjc0000gn/T/sbc-external-official-RYqGu4/config.json: providers: json: unknown field \"providers\"" + "reason": "FATAL[0000] decode config at /var/folders/40/y5v_d1m548j9ytv981cn3bjc0000gn/T/sbc-external-official-Mwc2y6/config.json: providers: json: unknown field \"providers\"" } }, { @@ -3647,6 +3647,494 @@ "reason": "FATAL[0000] initialize outbound[0]: decode public_key: illegal base64 data at input byte 43" } }, + { + "id": "huixiao666-pk-box--1.14.0-alpha.21.ref1nd-.json-3fe87d44", + "source_repo": "huixiao666/pk-box", + "source_path": "订阅链接/1.14.0-alpha.21.reF1nd本地文件.json", + "source_commit": "8d8f1631686d3f0de227312e7b2c9c84ed71d679", + "fixture_path": "fixtures/external/huixiao666-pk-box--1.14.0-alpha.21.ref1nd-.json-3fe87d44.json", + "normalized_hash": "3fe87d4472b5ee25dddb8c8556c6286e7d7688043e19ca12740421663e8b63fd", + "detected_version": "1.14", + "channel": "testing", + "fixture_class": "testing", + "transformations": [ + "fill-empty-selector-with-mock-outbounds" + ], + "expected_gates": [ + "json-parse", + "import", + "derive-graph", + "diagnostics", + "render", + "json-round-trip", + "export" + ], + "official_check": null, + "counts_toward_200": true, + "official_check_result": { + "status": "failed", + "binary": "sing-box-testing", + "reason": "FATAL[0000] decode config at /var/folders/40/y5v_d1m548j9ytv981cn3bjc0000gn/T/sbc-external-official-JzT2ub/config.json: dns.servers[6]: unknown transport type: group" + } + }, + { + "id": "huixiao666-pk-box--1.14.0-alpha.21.ref1nd-.json-9c3d1b11", + "source_repo": "huixiao666/pk-box", + "source_path": "订阅链接/1.14.0-alpha.21.reF1nd修复版.json", + "source_commit": "8d8f1631686d3f0de227312e7b2c9c84ed71d679", + "fixture_path": "fixtures/external/huixiao666-pk-box--1.14.0-alpha.21.ref1nd-.json-9c3d1b11.json", + "normalized_hash": "9c3d1b11d0aec86eba8952cc898a4baf0367cd7f4c0d95f433dff96bf44a75cf", + "detected_version": "1.14", + "channel": "testing", + "fixture_class": "testing", + "transformations": [ + "fill-empty-selector-with-mock-outbounds" + ], + "expected_gates": [ + "json-parse", + "import", + "derive-graph", + "diagnostics", + "render", + "json-round-trip", + "export" + ], + "official_check": null, + "counts_toward_200": true, + "official_check_result": { + "status": "failed", + "binary": "sing-box-testing", + "reason": "FATAL[0000] decode config at /var/folders/40/y5v_d1m548j9ytv981cn3bjc0000gn/T/sbc-external-official-QCiPsv/config.json: dns.servers[7]: unknown transport type: group" + } + }, + { + "id": "huixiao666-pk-box--1.14.0-alpha.21.ref1nd-.json-b34f25f1", + "source_repo": "huixiao666/pk-box", + "source_path": "订阅链接/1.14.0-alpha.21.reF1nd优化版.json", + "source_commit": "8d8f1631686d3f0de227312e7b2c9c84ed71d679", + "fixture_path": "fixtures/external/huixiao666-pk-box--1.14.0-alpha.21.ref1nd-.json-b34f25f1.json", + "normalized_hash": "b34f25f10dd134cfafce9be5ce575bba3f3043fdf956eaaa92a8ca5a8ece73cb", + "detected_version": "1.14", + "channel": "testing", + "fixture_class": "testing", + "transformations": [ + "fill-empty-selector-with-mock-outbounds" + ], + "expected_gates": [ + "json-parse", + "import", + "derive-graph", + "diagnostics", + "render", + "json-round-trip", + "export" + ], + "official_check": null, + "counts_toward_200": true, + "official_check_result": { + "status": "failed", + "binary": "sing-box-testing", + "reason": "FATAL[0000] decode config at /var/folders/40/y5v_d1m548j9ytv981cn3bjc0000gn/T/sbc-external-official-8Z7SdA/config.json: dns.servers[6]: unknown transport type: group" + } + }, + { + "id": "huixiao666-pk-box--1.14.0-alpha.21.refnd-.json-949a0750", + "source_repo": "huixiao666/pk-box", + "source_path": "订阅链接/1.14.0-alpha.21.reFnd订阅链接.json", + "source_commit": "8d8f1631686d3f0de227312e7b2c9c84ed71d679", + "fixture_path": "fixtures/external/huixiao666-pk-box--1.14.0-alpha.21.refnd-.json-949a0750.json", + "normalized_hash": "949a07505104d85ac378532ebf574f165549c4186a9375ac9ef31907db44f63a", + "detected_version": "1.14", + "channel": "testing", + "fixture_class": "testing", + "transformations": [ + "fill-empty-selector-with-mock-outbounds" + ], + "expected_gates": [ + "json-parse", + "import", + "derive-graph", + "diagnostics", + "render", + "json-round-trip", + "export" + ], + "official_check": null, + "counts_toward_200": true, + "official_check_result": { + "status": "failed", + "binary": "sing-box-testing", + "reason": "FATAL[0000] decode config at /var/folders/40/y5v_d1m548j9ytv981cn3bjc0000gn/T/sbc-external-official-w5OOQ2/config.json: dns.servers[6]: unknown transport type: group" + } + }, + { + "id": "huixiao666-pk-box-1.13.xx-1.13.10-11-.json-798c77ac", + "source_repo": "huixiao666/pk-box", + "source_path": "1.13.xx/1.13.10-11(不修改).json", + "source_commit": "8d8f1631686d3f0de227312e7b2c9c84ed71d679", + "fixture_path": "fixtures/external/huixiao666-pk-box-1.13.xx-1.13.10-11-.json-798c77ac.json", + "normalized_hash": "798c77ac6b5ca02aecf2ceb0a0addb5d60d161ec832f29550774a5bf1868d84e", + "detected_version": "1.13", + "channel": "stable", + "fixture_class": "stable", + "transformations": [], + "expected_gates": [ + "json-parse", + "import", + "derive-graph", + "diagnostics", + "render", + "json-round-trip", + "export", + "official-check" + ], + "official_check": "sing-box-stable", + "counts_toward_200": true, + "official_check_result": { + "status": "pass", + "binary": "sing-box-stable" + } + }, + { + "id": "huixiao666-pk-box-1.14.0-alpha.ref1nd-1.14.0-alpha.12-16-ref1nd.json-3f43b8d5", + "source_repo": "huixiao666/pk-box", + "source_path": "1.14.0-alpha.reF1nd/1.14.0-alpha.12-16-reF1nd.json", + "source_commit": "8d8f1631686d3f0de227312e7b2c9c84ed71d679", + "fixture_path": "fixtures/external/huixiao666-pk-box-1.14.0-alpha.ref1nd-1.14.0-alpha.12-16-ref1nd.json-3f43b8d5.json", + "normalized_hash": "3f43b8d5f5637fc825d242ebda5477d865733bc3c32d05694c2da32ed0b3e61b", + "detected_version": "1.14", + "channel": "testing", + "fixture_class": "testing", + "transformations": [], + "expected_gates": [ + "json-parse", + "import", + "derive-graph", + "diagnostics", + "render", + "json-round-trip", + "export" + ], + "official_check": null, + "counts_toward_200": true, + "official_check_result": { + "status": "failed", + "binary": "sing-box-testing", + "reason": "FATAL[0000] decode config at /var/folders/40/y5v_d1m548j9ytv981cn3bjc0000gn/T/sbc-external-official-TtjlLi/config.json: dns.rules[5].clash_mode: json: cannot unmarshal array into Go struct field RawDefaultDNSRule.clash_mode of type string" + } + }, + { + "id": "huixiao666-pk-box-1.14.0-alpha.ref1nd-1.14.0-alpha.17.ref1nd.json-586fb594", + "source_repo": "huixiao666/pk-box", + "source_path": "1.14.0-alpha.reF1nd/1.14.0-alpha.17.reF1nd.json", + "source_commit": "8d8f1631686d3f0de227312e7b2c9c84ed71d679", + "fixture_path": "fixtures/external/huixiao666-pk-box-1.14.0-alpha.ref1nd-1.14.0-alpha.17.ref1nd.json-586fb594.json", + "normalized_hash": "586fb594e9a99204d8f72dbad7ead9d691e0322dbc564b4d5c44a00964ac4ac9", + "detected_version": "1.14", + "channel": "testing", + "fixture_class": "testing", + "transformations": [], + "expected_gates": [ + "json-parse", + "import", + "derive-graph", + "diagnostics", + "render", + "json-round-trip", + "export" + ], + "official_check": null, + "counts_toward_200": true, + "official_check_result": { + "status": "failed", + "binary": "sing-box-testing", + "reason": "FATAL[0000] decode config at /var/folders/40/y5v_d1m548j9ytv981cn3bjc0000gn/T/sbc-external-official-ThYJWG/config.json: dns.rules[5].clash_mode: json: cannot unmarshal array into Go struct field RawDefaultDNSRule.clash_mode of type string" + } + }, + { + "id": "huixiao666-pk-box-1.14.0-alpha.ref1nd-1.14.0-alpha.27.ref1nd.json-c126df18", + "source_repo": "huixiao666/pk-box", + "source_path": "1.14.0-alpha.reF1nd/1.14.0-alpha.27.reF1nd.json", + "source_commit": "8d8f1631686d3f0de227312e7b2c9c84ed71d679", + "fixture_path": "fixtures/external/huixiao666-pk-box-1.14.0-alpha.ref1nd-1.14.0-alpha.27.ref1nd.json-c126df18.json", + "normalized_hash": "c126df183052d327fb990cc916271e425ef1d3104218a361de451c6b51b6905d", + "detected_version": "1.14", + "channel": "testing", + "fixture_class": "testing", + "transformations": [ + "fill-empty-selector-with-mock-outbounds" + ], + "expected_gates": [ + "json-parse", + "import", + "derive-graph", + "diagnostics", + "render", + "json-round-trip", + "export" + ], + "official_check": null, + "counts_toward_200": true, + "official_check_result": { + "status": "failed", + "binary": "sing-box-testing", + "reason": "FATAL[0000] decode config at /var/folders/40/y5v_d1m548j9ytv981cn3bjc0000gn/T/sbc-external-official-RLI8cP/config.json: outbounds[0].providers: json: unknown field \"providers\"" + } + }, + { + "id": "huixiao666-pk-box-1.14.0-alpha.ref1nd-1.14.0-alpha.31.ref1nd.json-eea67696", + "source_repo": "huixiao666/pk-box", + "source_path": "1.14.0-alpha.reF1nd/1.14.0-alpha.31.reF1nd.json", + "source_commit": "8d8f1631686d3f0de227312e7b2c9c84ed71d679", + "fixture_path": "fixtures/external/huixiao666-pk-box-1.14.0-alpha.ref1nd-1.14.0-alpha.31.ref1nd.json-eea67696.json", + "normalized_hash": "eea676960a176d2c201bed21c1ef5d35286da837c0a782a80b7923057d23f8e6", + "detected_version": "1.14", + "channel": "testing", + "fixture_class": "testing", + "transformations": [ + "fill-empty-selector-with-mock-outbounds" + ], + "expected_gates": [ + "json-parse", + "import", + "derive-graph", + "diagnostics", + "render", + "json-round-trip", + "export" + ], + "official_check": null, + "counts_toward_200": true, + "official_check_result": { + "status": "failed", + "binary": "sing-box-testing", + "reason": "FATAL[0000] decode config at /var/folders/40/y5v_d1m548j9ytv981cn3bjc0000gn/T/sbc-external-official-HnSjnY/config.json: outbounds[0].providers: json: unknown field \"providers\"" + } + }, + { + "id": "huixiao666-pk-box-1.14.0-alpha.xxx-1.14.0-alpha.12-.json-2eeb05f0", + "source_repo": "huixiao666/pk-box", + "source_path": "1.14.0-alpha.xxx/1.14.0-alpha.12优化版.json", + "source_commit": "8d8f1631686d3f0de227312e7b2c9c84ed71d679", + "fixture_path": "fixtures/external/huixiao666-pk-box-1.14.0-alpha.xxx-1.14.0-alpha.12-.json-2eeb05f0.json", + "normalized_hash": "2eeb05f0e30330be46bcdead41c87c8159a9e728e625d61de14b9d35dd6517a0", + "detected_version": "1.14", + "channel": "testing", + "fixture_class": "testing", + "transformations": [], + "expected_gates": [ + "json-parse", + "import", + "derive-graph", + "diagnostics", + "render", + "json-round-trip", + "export", + "official-check" + ], + "official_check": "sing-box-testing", + "counts_toward_200": true, + "official_check_result": { + "status": "pass", + "binary": "sing-box-testing" + } + }, + { + "id": "huixiao666-pk-box-1.14.0-alpha.xxx-1.14.0-alpha.14-.json-8c2a908f", + "source_repo": "huixiao666/pk-box", + "source_path": "1.14.0-alpha.xxx/1.14.0-alpha.14优化版.json", + "source_commit": "8d8f1631686d3f0de227312e7b2c9c84ed71d679", + "fixture_path": "fixtures/external/huixiao666-pk-box-1.14.0-alpha.xxx-1.14.0-alpha.14-.json-8c2a908f.json", + "normalized_hash": "8c2a908fd8a6d31094c79b30bfc9b0a5edb94d589ae6d0ebe0759c21c82a2a2d", + "detected_version": "1.14", + "channel": "testing", + "fixture_class": "testing", + "transformations": [], + "expected_gates": [ + "json-parse", + "import", + "derive-graph", + "diagnostics", + "render", + "json-round-trip", + "export", + "official-check" + ], + "official_check": "sing-box-testing", + "counts_toward_200": true, + "official_check_result": { + "status": "pass", + "binary": "sing-box-testing" + } + }, + { + "id": "huixiao666-pk-box-1.14.0-alpha.xxx-1.14.0-alpha.16-17-.json-1150bc0b", + "source_repo": "huixiao666/pk-box", + "source_path": "1.14.0-alpha.xxx/1.14.0-alpha.16-17(不修改).json", + "source_commit": "8d8f1631686d3f0de227312e7b2c9c84ed71d679", + "fixture_path": "fixtures/external/huixiao666-pk-box-1.14.0-alpha.xxx-1.14.0-alpha.16-17-.json-1150bc0b.json", + "normalized_hash": "1150bc0bc90303b6f8886c95f29cb32968d4a118afc388ef030a9b17fd8943c4", + "detected_version": "1.14", + "channel": "testing", + "fixture_class": "testing", + "transformations": [], + "expected_gates": [ + "json-parse", + "import", + "derive-graph", + "diagnostics", + "render", + "json-round-trip", + "export", + "official-check" + ], + "official_check": "sing-box-testing", + "counts_toward_200": true, + "official_check_result": { + "status": "pass", + "binary": "sing-box-testing" + } + }, + { + "id": "huixiao666-pk-box-1.14.0-alpha.xxx-1.14.0-alpha.18-.json-36630bef", + "source_repo": "huixiao666/pk-box", + "source_path": "1.14.0-alpha.xxx/1.14.0-alpha.18精简版.json", + "source_commit": "8d8f1631686d3f0de227312e7b2c9c84ed71d679", + "fixture_path": "fixtures/external/huixiao666-pk-box-1.14.0-alpha.xxx-1.14.0-alpha.18-.json-36630bef.json", + "normalized_hash": "36630bef43b23e70024604d09a35a97f4151a7558b8d70e3962c1ed426c4396d", + "detected_version": "1.14", + "channel": "testing", + "fixture_class": "testing", + "transformations": [], + "expected_gates": [ + "json-parse", + "import", + "derive-graph", + "diagnostics", + "render", + "json-round-trip", + "export", + "official-check" + ], + "official_check": "sing-box-testing", + "counts_toward_200": true, + "official_check_result": { + "status": "pass", + "binary": "sing-box-testing" + } + }, + { + "id": "huixiao666-pk-box-1.14.0-alpha.xxx-1.14.0-alpha.18-.json-3a97d11a", + "source_repo": "huixiao666/pk-box", + "source_path": "1.14.0-alpha.xxx/1.14.0-alpha.18优化版.json", + "source_commit": "8d8f1631686d3f0de227312e7b2c9c84ed71d679", + "fixture_path": "fixtures/external/huixiao666-pk-box-1.14.0-alpha.xxx-1.14.0-alpha.18-.json-3a97d11a.json", + "normalized_hash": "3a97d11afe9c5433a67de541f03d4b6834babf99eaacb019a2690beed3222e37", + "detected_version": "1.14", + "channel": "testing", + "fixture_class": "testing", + "transformations": [], + "expected_gates": [ + "json-parse", + "import", + "derive-graph", + "diagnostics", + "render", + "json-round-trip", + "export", + "official-check" + ], + "official_check": "sing-box-testing", + "counts_toward_200": true, + "official_check_result": { + "status": "pass", + "binary": "sing-box-testing" + } + }, + { + "id": "huixiao666-pk-box-1.14.0-alpha.xxx-1.14.0-alpha.18-.json-5f068761", + "source_repo": "huixiao666/pk-box", + "source_path": "1.14.0-alpha.xxx/1.14.0-alpha.18稳定版.json", + "source_commit": "8d8f1631686d3f0de227312e7b2c9c84ed71d679", + "fixture_path": "fixtures/external/huixiao666-pk-box-1.14.0-alpha.xxx-1.14.0-alpha.18-.json-5f068761.json", + "normalized_hash": "5f068761946b101b2a1aad9a810fcc4d2ee33e083e2212b67e5f24e62d44f236", + "detected_version": "1.14", + "channel": "testing", + "fixture_class": "testing", + "transformations": [], + "expected_gates": [ + "json-parse", + "import", + "derive-graph", + "diagnostics", + "render", + "json-round-trip", + "export", + "official-check" + ], + "official_check": "sing-box-testing", + "counts_toward_200": true, + "official_check_result": { + "status": "pass", + "binary": "sing-box-testing" + } + }, + { + "id": "huixiao666-pk-box-1.14.0-alpha.xxx-1.14.0-alpha.20-.json-1a52beb4", + "source_repo": "huixiao666/pk-box", + "source_path": "1.14.0-alpha.xxx/1.14.0-alpha.20优化版.json", + "source_commit": "8d8f1631686d3f0de227312e7b2c9c84ed71d679", + "fixture_path": "fixtures/external/huixiao666-pk-box-1.14.0-alpha.xxx-1.14.0-alpha.20-.json-1a52beb4.json", + "normalized_hash": "1a52beb47c67d9cbdce6dff3a12789168001eb8ca509aa4906cd71f8932d0843", + "detected_version": "1.14", + "channel": "testing", + "fixture_class": "testing", + "transformations": [], + "expected_gates": [ + "json-parse", + "import", + "derive-graph", + "diagnostics", + "render", + "json-round-trip", + "export", + "official-check" + ], + "official_check": "sing-box-testing", + "counts_toward_200": true, + "official_check_result": { + "status": "pass", + "binary": "sing-box-testing" + } + }, + { + "id": "huixiao666-pk-box-1.14.0-alpha.xxx-1.14.0-alpha.39-.json-f8d3f44a", + "source_repo": "huixiao666/pk-box", + "source_path": "1.14.0-alpha.xxx/1.14.0-alpha.39优化版.json", + "source_commit": "8d8f1631686d3f0de227312e7b2c9c84ed71d679", + "fixture_path": "fixtures/external/huixiao666-pk-box-1.14.0-alpha.xxx-1.14.0-alpha.39-.json-f8d3f44a.json", + "normalized_hash": "f8d3f44acd99641b59eb06ce0f1bdf9fcde7c6661fd14b1ad926b50ce28c9ad9", + "detected_version": "1.14", + "channel": "testing", + "fixture_class": "testing", + "transformations": [], + "expected_gates": [ + "json-parse", + "import", + "derive-graph", + "diagnostics", + "render", + "json-round-trip", + "export" + ], + "official_check": null, + "counts_toward_200": true, + "official_check_result": { + "status": "failed", + "binary": "sing-box-testing", + "reason": "ERROR[0000] legacy domain strategy options is deprecated in sing-box 1.12.0 and will be removed in sing-box 1.14.0, checkout documentation for migration: https://sing-box.sagernet.org/migration/#migrate-domain-strategy-options FATAL[0000] to continuing using this feature, set environment variable ENABLE_DEPRECATED_LEGACY_DOMAIN_STRATEGY_OPTIONS=true" + } + }, { "id": "iptunnels-iptunnels-sing-box-etc-sing-box-config.json-37aa9569", "source_repo": "IPTUNNELS/IPTUNNELS", @@ -5070,7 +5558,7 @@ "official_check_result": { "status": "failed", "binary": "sing-box-1.12", - "reason": "FATAL[0000] decode config at /var/folders/40/y5v_d1m548j9ytv981cn3bjc0000gn/T/sbc-external-official-9AEz8m/config.json: outbounds[14].filter: json: unknown field \"filter\"" + "reason": "FATAL[0000] decode config at /var/folders/40/y5v_d1m548j9ytv981cn3bjc0000gn/T/sbc-external-official-VrEY1q/config.json: outbounds[14].filter: json: unknown field \"filter\"" } }, { @@ -5100,7 +5588,7 @@ "official_check_result": { "status": "failed", "binary": "sing-box-1.12", - "reason": "FATAL[0000] decode config at /var/folders/40/y5v_d1m548j9ytv981cn3bjc0000gn/T/sbc-external-official-GosbH5/config.json: providers: json: unknown field \"providers\"" + "reason": "FATAL[0000] decode config at /var/folders/40/y5v_d1m548j9ytv981cn3bjc0000gn/T/sbc-external-official-lumISa/config.json: providers: json: unknown field \"providers\"" } }, { @@ -5130,7 +5618,7 @@ "official_check_result": { "status": "failed", "binary": "sing-box-1.12", - "reason": "FATAL[0000] decode config at /var/folders/40/y5v_d1m548j9ytv981cn3bjc0000gn/T/sbc-external-official-z84nNE/config.json: outbounds[14].filter: json: unknown field \"filter\"" + "reason": "FATAL[0000] decode config at /var/folders/40/y5v_d1m548j9ytv981cn3bjc0000gn/T/sbc-external-official-SaEkPk/config.json: outbounds[14].filter: json: unknown field \"filter\"" } }, { @@ -5160,7 +5648,7 @@ "official_check_result": { "status": "failed", "binary": "sing-box-1.12", - "reason": "FATAL[0000] decode config at /var/folders/40/y5v_d1m548j9ytv981cn3bjc0000gn/T/sbc-external-official-BY51jo/config.json: outbounds[14].filter: json: unknown field \"filter\"" + "reason": "FATAL[0000] decode config at /var/folders/40/y5v_d1m548j9ytv981cn3bjc0000gn/T/sbc-external-official-FZiegr/config.json: outbounds[14].filter: json: unknown field \"filter\"" } }, { @@ -5190,7 +5678,7 @@ "official_check_result": { "status": "failed", "binary": "sing-box-1.12", - "reason": "FATAL[0000] decode config at /var/folders/40/y5v_d1m548j9ytv981cn3bjc0000gn/T/sbc-external-official-leLm74/config.json: outbounds[14].filter: json: unknown field \"filter\"" + "reason": "FATAL[0000] decode config at /var/folders/40/y5v_d1m548j9ytv981cn3bjc0000gn/T/sbc-external-official-CkKjRQ/config.json: outbounds[14].filter: json: unknown field \"filter\"" } }, { @@ -5278,7 +5766,7 @@ "official_check_result": { "status": "failed", "binary": "sing-box-1.12", - "reason": "FATAL[0000] decode config at /var/folders/40/y5v_d1m548j9ytv981cn3bjc0000gn/T/sbc-external-official-v6E9qE/config.json: outbounds[14].filter: json: unknown field \"filter\"" + "reason": "FATAL[0000] decode config at /var/folders/40/y5v_d1m548j9ytv981cn3bjc0000gn/T/sbc-external-official-Zu5ENG/config.json: outbounds[14].filter: json: unknown field \"filter\"" } }, { @@ -5308,7 +5796,7 @@ "official_check_result": { "status": "failed", "binary": "sing-box-1.12", - "reason": "FATAL[0000] decode config at /var/folders/40/y5v_d1m548j9ytv981cn3bjc0000gn/T/sbc-external-official-jav4uQ/config.json: providers: json: unknown field \"providers\"" + "reason": "FATAL[0000] decode config at /var/folders/40/y5v_d1m548j9ytv981cn3bjc0000gn/T/sbc-external-official-qwOuH1/config.json: providers: json: unknown field \"providers\"" } }, { @@ -5338,7 +5826,7 @@ "official_check_result": { "status": "failed", "binary": "sing-box-1.12", - "reason": "FATAL[0000] decode config at /var/folders/40/y5v_d1m548j9ytv981cn3bjc0000gn/T/sbc-external-official-hXPiw9/config.json: outbounds[14].filter: json: unknown field \"filter\"" + "reason": "FATAL[0000] decode config at /var/folders/40/y5v_d1m548j9ytv981cn3bjc0000gn/T/sbc-external-official-Bg6dbh/config.json: outbounds[14].filter: json: unknown field \"filter\"" } }, { @@ -5368,7 +5856,7 @@ "official_check_result": { "status": "failed", "binary": "sing-box-1.12", - "reason": "FATAL[0000] decode config at /var/folders/40/y5v_d1m548j9ytv981cn3bjc0000gn/T/sbc-external-official-m0iNGV/config.json: outbounds[14].filter: json: unknown field \"filter\"" + "reason": "FATAL[0000] decode config at /var/folders/40/y5v_d1m548j9ytv981cn3bjc0000gn/T/sbc-external-official-yNWhFy/config.json: outbounds[14].filter: json: unknown field \"filter\"" } }, { @@ -5398,7 +5886,7 @@ "official_check_result": { "status": "failed", "binary": "sing-box-1.12", - "reason": "FATAL[0000] decode config at /var/folders/40/y5v_d1m548j9ytv981cn3bjc0000gn/T/sbc-external-official-H6Sat0/config.json: outbounds[14].filter: json: unknown field \"filter\"" + "reason": "FATAL[0000] decode config at /var/folders/40/y5v_d1m548j9ytv981cn3bjc0000gn/T/sbc-external-official-OeBolm/config.json: outbounds[14].filter: json: unknown field \"filter\"" } }, { @@ -6064,7 +6552,7 @@ "official_check_result": { "status": "failed", "binary": "sing-box-testing", - "reason": "FATAL[0000] decode config at /var/folders/40/y5v_d1m548j9ytv981cn3bjc0000gn/T/sbc-external-official-McE5lD/config.json: outbounds[18].filter: json: unknown field \"filter\"" + "reason": "FATAL[0000] decode config at /var/folders/40/y5v_d1m548j9ytv981cn3bjc0000gn/T/sbc-external-official-E1XRyk/config.json: outbounds[18].filter: json: unknown field \"filter\"" } }, { diff --git a/fixtures/external/rejected.json b/fixtures/external/rejected.json index 26274d19..5e592fe8 100644 --- a/fixtures/external/rejected.json +++ b/fixtures/external/rejected.json @@ -625,6 +625,391 @@ "source": "HideinOSS/sing-box-configuration-examples/Windows/sing-box-rule-set/≥sing-box-1.9.0/server-shadowtls-IPv6.json", "reason": "repo-fixture-cap" }, + { + "source": "huixiao666/pk-box/1.11.4优化配置.json", + "reason": "ingest-failed", + "detail": "SyntaxError: Unexpected token ']', ...\"\n },\n ],\n \"rout\"... is not valid JSON" + }, + { + "source": "huixiao666/pk-box/1.11.4完整注释.json", + "reason": "ingest-failed", + "detail": "SyntaxError: Expected property name or '}' in JSON at position 4 (line 2 column 3)" + }, + { + "source": "huixiao666/pk-box/1.13.xx/1.13.12.json", + "reason": "ingest-failed", + "detail": "SyntaxError: Unexpected token '端', ...\"er_port\": 端口,\n \"... is not valid JSON" + }, + { + "source": "huixiao666/pk-box/1.13.xx/1.13.12修复优化版.json", + "reason": "ingest-failed", + "detail": "SyntaxError: Unexpected token '端', ...\"er_port\": 端口,\n \"... is not valid JSON" + }, + { + "source": "huixiao666/pk-box/1.13.xx/1.13.12进阶版.json", + "reason": "ingest-failed", + "detail": "SyntaxError: Unexpected token '端', ...\"er_port\": 端口,\n \"... is not valid JSON" + }, + { + "source": "huixiao666/pk-box/1.13.xx/1.13.13.json", + "reason": "ingest-failed", + "detail": "SyntaxError: Unexpected token '/', ...\",\n //节点名称\n \"... is not valid JSON" + }, + { + "source": "huixiao666/pk-box/1.13.xx/1.13.13优化版.json", + "reason": "ingest-failed", + "detail": "SyntaxError: Unexpected token '/', ...\",\n //节点名称\n \"... is not valid JSON" + }, + { + "source": "huixiao666/pk-box/1.13.xx/1.13.14.json", + "reason": "ingest-failed", + "detail": "SyntaxError: Unexpected token '/', ...\" },\n //节点配置\n ]\"... is not valid JSON" + }, + { + "source": "huixiao666/pk-box/1.13.xx/1.13.8优化配置.json", + "reason": "ingest-failed", + "detail": "SyntaxError: Unexpected token ']', ...\"\n },\n ],\n \"rout\"... is not valid JSON" + }, + { + "source": "huixiao666/pk-box/1.13.xx/1.13.9优化版.json", + "reason": "ingest-failed", + "detail": "SyntaxError: Expected ',' or ']' after array element in JSON at position 2696 (line 144 column 9)" + }, + { + "source": "huixiao666/pk-box/1.13.xx/注释/1.13.12.json", + "reason": "ingest-failed", + "detail": "SyntaxError: Unexpected token '/', \"// =======\"... is not valid JSON" + }, + { + "source": "huixiao666/pk-box/1.13.xx/注释/1.13.13.json", + "reason": "ingest-failed", + "detail": "SyntaxError: Unexpected token '/', \"// ╔══════\"... is not valid JSON" + }, + { + "source": "huixiao666/pk-box/1.13.xx/注释/1.13.14.json", + "reason": "ingest-failed", + "detail": "SyntaxError: Unexpected token '/', \"// ┌──────\"... is not valid JSON" + }, + { + "source": "huixiao666/pk-box/1.13.xx/注释/三个版本完整注释.json", + "reason": "ingest-failed", + "detail": "SyntaxError: Expected property name or '}' in JSON at position 4 (line 2 column 3)" + }, + { + "source": "huixiao666/pk-box/1.14.0-alpha.reF1nd/1.14.0-alpha.21.reF1nd.json", + "reason": "ingest-failed", + "detail": "SyntaxError: Unexpected token '端', ...\"er_port\": 端口,\n \"... is not valid JSON" + }, + { + "source": "huixiao666/pk-box/1.14.0-alpha.reF1nd/1.14.0-alpha.26.reF1nd.json", + "reason": "ingest-failed", + "detail": "SyntaxError: Expected double-quoted property name in JSON at position 8134 (line 356 column 20)" + }, + { + "source": "huixiao666/pk-box/1.14.0-alpha.reF1nd/1.14.0-alpha.reF1nd12-21完整注释.json", + "reason": "ingest-failed", + "detail": "SyntaxError: Expected property name or '}' in JSON at position 4 (line 2 column 3)" + }, + { + "source": "huixiao666/pk-box/1.14.0-alpha.xxx/1.14.0-alpha.15修复优化版.json", + "reason": "ingest-failed", + "detail": "SyntaxError: Expected ',' or '}' after property value in JSON at position 2899 (line 114 column 45)" + }, + { + "source": "huixiao666/pk-box/1.14.0-alpha.xxx/1.14.0-alpha.18强化版.json", + "reason": "ingest-failed", + "detail": "SyntaxError: Expected ',' or '}' after property value in JSON at position 8482 (line 395 column 29)" + }, + { + "source": "huixiao666/pk-box/1.14.0-alpha.xxx/1.14.0-alpha.20卓越版.json", + "reason": "ingest-failed", + "detail": "SyntaxError: Unexpected token '端', ...\"er_port\": 端口,\n \"... is not valid JSON" + }, + { + "source": "huixiao666/pk-box/1.14.0-alpha.xxx/1.14.0-alpha.20精简版.json", + "reason": "ingest-failed", + "detail": "SyntaxError: Expected ',' or ']' after array element in JSON at position 2688 (line 136 column 5)" + }, + { + "source": "huixiao666/pk-box/1.14.0-alpha.xxx/1.14.0-alpha.21-tor版.json", + "reason": "ingest-failed", + "detail": "SyntaxError: Unexpected token '端', ...\"er_port\": 端口,\n \"... is not valid JSON" + }, + { + "source": "huixiao666/pk-box/1.14.0-alpha.xxx/1.14.0-alpha.21优化版.json", + "reason": "ingest-failed", + "detail": "SyntaxError: Unexpected token '端', ...\"er_port\": 端口,\n \"... is not valid JSON" + }, + { + "source": "huixiao666/pk-box/1.14.0-alpha.xxx/1.14.0-alpha.21版本.json", + "reason": "ingest-failed", + "detail": "SyntaxError: Unexpected token '端', ...\"er_port\": 端口,\n \"... is not valid JSON" + }, + { + "source": "huixiao666/pk-box/1.14.0-alpha.xxx/1.14.0-alpha.21特殊版.json", + "reason": "ingest-failed", + "detail": "SyntaxError: Unexpected token '端', ...\"er_port\": 端口,\n \"... is not valid JSON" + }, + { + "source": "huixiao666/pk-box/1.14.0-alpha.xxx/1.14.0-alpha.22-tor版.json", + "reason": "ingest-failed", + "detail": "SyntaxError: Unexpected token '端', ...\"er_port\": 端口,\n \"... is not valid JSON" + }, + { + "source": "huixiao666/pk-box/1.14.0-alpha.xxx/1.14.0-alpha.22优化版.json", + "reason": "ingest-failed", + "detail": "SyntaxError: Unexpected token '端', ...\"er_port\": 端口,\n \"... is not valid JSON" + }, + { + "source": "huixiao666/pk-box/1.14.0-alpha.xxx/1.14.0-alpha.23.json", + "reason": "ingest-failed", + "detail": "SyntaxError: Unexpected token '端', ...\"er_port\": 端口,\n \"... is not valid JSON" + }, + { + "source": "huixiao666/pk-box/1.14.0-alpha.xxx/1.14.0-alpha.23优化版.json", + "reason": "ingest-failed", + "detail": "SyntaxError: Unexpected token '端', ...\"er_port\": 端口,\n \"... is not valid JSON" + }, + { + "source": "huixiao666/pk-box/1.14.0-alpha.xxx/1.14.0-alpha.24.json", + "reason": "ingest-failed", + "detail": "SyntaxError: Unexpected token '端', ...\"er_port\": 端口,\n \"... is not valid JSON" + }, + { + "source": "huixiao666/pk-box/1.14.0-alpha.xxx/1.14.0-alpha.24优化版.json", + "reason": "ingest-failed", + "detail": "SyntaxError: Unexpected token '端', ...\"er_port\": 端口,\n \"... is not valid JSON" + }, + { + "source": "huixiao666/pk-box/1.14.0-alpha.xxx/1.14.0-alpha.24修复版.json", + "reason": "ingest-failed", + "detail": "SyntaxError: Unexpected token '端', ...\"er_port\": 端口,\n \"... is not valid JSON" + }, + { + "source": "huixiao666/pk-box/1.14.0-alpha.xxx/1.14.0-alpha.24精简版(不推荐).json", + "reason": "ingest-failed", + "detail": "SyntaxError: Unexpected token '/', ...\" },\n // {\n /\"... is not valid JSON" + }, + { + "source": "huixiao666/pk-box/1.14.0-alpha.xxx/1.14.0-alpha.25修复优化版.json", + "reason": "ingest-failed", + "detail": "SyntaxError: Unexpected token '端', ...\"er_port\": 端口,\n \"... is not valid JSON" + }, + { + "source": "huixiao666/pk-box/1.14.0-alpha.xxx/1.14.0-alpha.25停止使用.json", + "reason": "ingest-failed", + "detail": "SyntaxError: Unexpected token '端', ...\"er_port\": 端口,\n \"... is not valid JSON" + }, + { + "source": "huixiao666/pk-box/1.14.0-alpha.xxx/1.14.0-alpha.25精致优化.json", + "reason": "ingest-failed", + "detail": "SyntaxError: Unexpected token '/', ...\" },\n //节点配置\n ]\"... is not valid JSON" + }, + { + "source": "huixiao666/pk-box/1.14.0-alpha.xxx/1.14.0-alpha.26.json", + "reason": "ingest-failed", + "detail": "SyntaxError: Unexpected token '/', ...\"[\n //节点名称\n \"... is not valid JSON" + }, + { + "source": "huixiao666/pk-box/1.14.0-alpha.xxx/1.14.0-alpha.26优化版.json", + "reason": "ingest-failed", + "detail": "SyntaxError: Unexpected token '/', ...\"[\n // 节点名称\n \"... is not valid JSON" + }, + { + "source": "huixiao666/pk-box/1.14.0-alpha.xxx/1.14.0-alpha.26修复v4版.json", + "reason": "ingest-failed", + "detail": "SyntaxError: Unexpected token '/', ...\",\n // 节点名称\n \"... is not valid JSON" + }, + { + "source": "huixiao666/pk-box/1.14.0-alpha.xxx/1.14.0-alpha.27-114dns版.json", + "reason": "ingest-failed", + "detail": "SyntaxError: Unexpected token '/', ...\",\n // 节点名称\n \"... is not valid JSON" + }, + { + "source": "huixiao666/pk-box/1.14.0-alpha.xxx/1.14.0-alpha.27.json", + "reason": "ingest-failed", + "detail": "SyntaxError: Unexpected token '端', ...\"er_port\": 端口,\n \"... is not valid JSON" + }, + { + "source": "huixiao666/pk-box/1.14.0-alpha.xxx/1.14.0-alpha.28-114版.json", + "reason": "ingest-failed", + "detail": "SyntaxError: Unexpected token '/', ...\",\n // 节点名称\n \"... is not valid JSON" + }, + { + "source": "huixiao666/pk-box/1.14.0-alpha.xxx/1.14.0-alpha.28.json", + "reason": "ingest-failed", + "detail": "SyntaxError: Unexpected token '/', ...\",\n // 节点名称\n \"... is not valid JSON" + }, + { + "source": "huixiao666/pk-box/1.14.0-alpha.xxx/1.14.0-alpha.29.json", + "reason": "ingest-failed", + "detail": "SyntaxError: Unexpected token '/', ...\",\n //节点名称\n \"... is not valid JSON" + }, + { + "source": "huixiao666/pk-box/1.14.0-alpha.xxx/1.14.0-alpha.31.json", + "reason": "ingest-failed", + "detail": "SyntaxError: Unexpected token '/', ...\" },\n //节点配置\n ]\"... is not valid JSON" + }, + { + "source": "huixiao666/pk-box/1.14.0-alpha.xxx/1.14.0-alpha.31优化版.json", + "reason": "ingest-failed", + "detail": "SyntaxError: Unexpected token '/', ...\" },\n //节点配置\n ]\"... is not valid JSON" + }, + { + "source": "huixiao666/pk-box/1.14.0-alpha.xxx/1.14.0-alpha.31修复版.json", + "reason": "ingest-failed", + "detail": "SyntaxError: Unexpected token '/', ...\" },\n //节点配置\n ]\"... is not valid JSON" + }, + { + "source": "huixiao666/pk-box/1.14.0-alpha.xxx/1.14.0-alpha.31深度优化.json", + "reason": "ingest-failed", + "detail": "SyntaxError: Unexpected token '/', ...\" },\n //节点配置\n ]\"... is not valid JSON" + }, + { + "source": "huixiao666/pk-box/1.14.0-alpha.xxx/1.14.0-alpha.32.json", + "reason": "ingest-failed", + "detail": "SyntaxError: Unexpected token '/', ...\" },\n //节点配置\n ]\"... is not valid JSON" + }, + { + "source": "huixiao666/pk-box/1.14.0-alpha.xxx/1.14.0-alpha.32简化版.json", + "reason": "ingest-failed", + "detail": "SyntaxError: Unexpected token '/', ...\" },\n //节点配置\n ]\"... is not valid JSON" + }, + { + "source": "huixiao666/pk-box/1.14.0-alpha.xxx/1.14.0-alpha.33.json", + "reason": "ingest-failed", + "detail": "SyntaxError: Expected ',' or ']' after array element in JSON at position 2625 (line 146 column 9)" + }, + { + "source": "huixiao666/pk-box/1.14.0-alpha.xxx/1.14.0-alpha.34.json", + "reason": "ingest-failed", + "detail": "SyntaxError: Unexpected token '/', ...\" },\n //节点配置\n ]\"... is not valid JSON" + }, + { + "source": "huixiao666/pk-box/1.14.0-alpha.xxx/1.14.0-alpha.35.json", + "reason": "ingest-failed", + "detail": "SyntaxError: Unexpected token '/', ...\" },\n //节点配置\n ]\"... is not valid JSON" + }, + { + "source": "huixiao666/pk-box/1.14.0-alpha.xxx/1.14.0-alpha.36.json", + "reason": "ingest-failed", + "detail": "SyntaxError: Unexpected token '/', ...\" },\n //节点配置\n ]\"... is not valid JSON" + }, + { + "source": "huixiao666/pk-box/1.14.0-alpha.xxx/1.14.0-alpha.37.json", + "reason": "ingest-failed", + "detail": "SyntaxError: Unexpected token '/', ...\" },\n //节点配置\n ]\"... is not valid JSON" + }, + { + "source": "huixiao666/pk-box/1.14.0-alpha.xxx/1.14.0-alpha.38.json", + "reason": "ingest-failed", + "detail": "SyntaxError: Unexpected token '/', ...\" },\n //节点配置\n ]\"... is not valid JSON" + }, + { + "source": "huixiao666/pk-box/1.14.0-alpha.xxx/1.14.0-alpha.39.json", + "reason": "ingest-failed", + "detail": "SyntaxError: Unexpected token '/', ...\" },\n //节点配置\n ]\"... is not valid JSON" + }, + { + "source": "huixiao666/pk-box/1.14.0-alpha.xxx/1.14.0-alpha.40.json", + "reason": "ingest-failed", + "detail": "SyntaxError: Unexpected token '/', ...\" },\n //节点配置\n ]\"... is not valid JSON" + }, + { + "source": "huixiao666/pk-box/1.14.0-alpha.xxx/对比注释/1.14.0-alpha.12-17.json", + "reason": "ingest-failed", + "detail": "SyntaxError: Expected property name or '}' in JSON at position 4 (line 2 column 3)" + }, + { + "source": "huixiao666/pk-box/1.14.0-alpha.xxx/对比注释/1.14.0-alpha.18.json", + "reason": "ingest-failed", + "detail": "SyntaxError: Expected property name or '}' in JSON at position 4 (line 2 column 3)" + }, + { + "source": "huixiao666/pk-box/1.14.0-alpha.xxx/对比注释/1.14.0-alpha.20.json", + "reason": "ingest-failed", + "detail": "SyntaxError: Expected property name or '}' in JSON at position 4 (line 2 column 3)" + }, + { + "source": "huixiao666/pk-box/1.14.0-alpha.xxx/对比注释/1.14.0-alpha.21.json", + "reason": "ingest-failed", + "detail": "SyntaxError: Expected property name or '}' in JSON at position 4 (line 2 column 3)" + }, + { + "source": "huixiao666/pk-box/1.14.0-alpha.xxx/对比注释/1.14.0-alpha.22.json", + "reason": "ingest-failed", + "detail": "SyntaxError: Unexpected token '/', \"// =======\"... is not valid JSON" + }, + { + "source": "huixiao666/pk-box/1.14.0-alpha.xxx/对比注释/1.14.0-alpha.23.json", + "reason": "ingest-failed", + "detail": "SyntaxError: Unexpected token '/', \"/*\n * ╔═══\"... is not valid JSON" + }, + { + "source": "huixiao666/pk-box/1.14.0-alpha.xxx/对比注释/1.14.0-alpha.24.json", + "reason": "ingest-failed", + "detail": "SyntaxError: Unexpected token '/', \"// =======\"... is not valid JSON" + }, + { + "source": "huixiao666/pk-box/1.14.0-alpha.xxx/对比注释/1.14.0-alpha.25.json", + "reason": "ingest-failed", + "detail": "SyntaxError: Expected property name or '}' in JSON at position 4 (line 2 column 3)" + }, + { + "source": "huixiao666/pk-box/1.14.0-alpha.xxx/对比注释/1.14.0-alpha.25fakeip版.json", + "reason": "ingest-failed", + "detail": "SyntaxError: Unexpected token '/', \"// ╔══════\"... is not valid JSON" + }, + { + "source": "huixiao666/pk-box/1.14.0-alpha.xxx/对比注释/1.14.0-alpha.26.json", + "reason": "ingest-failed", + "detail": "SyntaxError: Unexpected token '/', \"// ╔══════\"... is not valid JSON" + }, + { + "source": "huixiao666/pk-box/1.14.0-alpha.xxx/对比注释/1.14.0-alpha.27.json", + "reason": "ingest-failed", + "detail": "SyntaxError: Unexpected token '/', \"// =======\"... is not valid JSON" + }, + { + "source": "huixiao666/pk-box/1.14.0-alpha.xxx/对比注释/1.14.0-alpha.29.json", + "reason": "ingest-failed", + "detail": "SyntaxError: Unexpected token '/', \"// ╔══════\"... is not valid JSON" + }, + { + "source": "huixiao666/pk-box/1.14.0-alpha.xxx/对比注释/1.14.0-alpha.31.json", + "reason": "ingest-failed", + "detail": "SyntaxError: Unexpected token '/', \"// =======\"... is not valid JSON" + }, + { + "source": "huixiao666/pk-box/1.14.0-alpha.xxx/对比注释/1.14.0-alpha.32.json", + "reason": "ingest-failed", + "detail": "SyntaxError: Expected property name or '}' in JSON at position 4 (line 2 column 3)" + }, + { + "source": "huixiao666/pk-box/1.14.0-alpha.xxx/对比注释/1.14.0-alpha.33.json", + "reason": "ingest-failed", + "detail": "SyntaxError: Unexpected token '/', \"// =======\"... is not valid JSON" + }, + { + "source": "huixiao666/pk-box/1.14.0-alpha.xxx/对比注释/1.14.0-alpha.35.json", + "reason": "ingest-failed", + "detail": "SyntaxError: Unexpected token '/', \"// ┌──────\"... is not valid JSON" + }, + { + "source": "huixiao666/pk-box/1.14.0-alpha.xxx/对比注释/1.14.0-alpha.38.json", + "reason": "ingest-failed", + "detail": "SyntaxError: Expected property name or '}' in JSON at position 4 (line 2 column 3)" + }, + { + "source": "huixiao666/pk-box/1.14.0-alpha.xxx/对比注释/1.14.0-alpha.40.json", + "reason": "ingest-failed", + "detail": "SyntaxError: Expected property name or '}' in JSON at position 4 (line 2 column 3)" + }, + { + "source": "huixiao666/pk-box/订阅链接/1.14.0-alpha.21.reF1nd完整注释.json", + "reason": "ingest-failed", + "detail": "SyntaxError: Expected property name or '}' in JSON at position 4 (line 2 column 3)" + }, { "source": "IPTUNNELS/IPTUNNELS/sing-box/etc/sing-box/commonports.json", "reason": "not-sing-box-config" From f36d4b64b342e0b9c70c26c3f0ac5bdd2fa60849 Mon Sep 17 00:00:00 2001 From: JegoVPN <154394132+JegoVPN@users.noreply.github.com> Date: Wed, 8 Jul 2026 14:13:06 +0800 Subject: [PATCH 3/4] fix(diagnostics): close the three gaps the pk-box cross-check exposed Diagnostics-vs-binary cross-check over the new corpus found 0 false positives and 3 false negatives; all binary-verified on 1.12.25 / 1.13.14 / alpha.40: - dial domain_strategy escalates warning->error on 1.13+ targets: the current 1.13/1.14 binaries fail check outright (env-gated removal). The dns.servers[] emission stays a warning - those dial fields still accept it on every binary. - inbound sniff*/domain_strategy escalate warning->error on 1.13+: decode-FATAL ("legacy inbound fields are deprecated"). - new rule-clash-mode-type error: reF1nd-fork array clash_mode decode-FATALs on vanilla sing-box (route + DNS rules, logical sub-rules included). Cross-check after: FP=0, FN=0 across all 17 pk-box fixtures. Co-Authored-By: Claude Opus 4.8 (1M context) --- src/domain/diagnostics.ts | 61 +++++++++++--- tests/legacy-field-escalation.test.ts | 112 ++++++++++++++++++++++++++ 2 files changed, 163 insertions(+), 10 deletions(-) create mode 100644 tests/legacy-field-escalation.test.ts diff --git a/src/domain/diagnostics.ts b/src/domain/diagnostics.ts index 2e33e904..678b4204 100644 --- a/src/domain/diagnostics.ts +++ b/src/domain/diagnostics.ts @@ -2611,8 +2611,17 @@ export function validateConfig( push(diagnostics, "warning", "no-outbounds", "/outbounds", "No outbounds are configured."); } - const dialDomainStrategyMessage = - 'Dial field "domain_strategy" is deprecated since sing-box 1.12.0 and scheduled for removal. Migrate to "domain_resolver" (per-entity) or route.default_domain_resolver.'; + // Legacy dial domain_strategy: deprecated since 1.12; on the CURRENT 1.13/1.14 binaries the check + // itself fails ("to continue using this feature, set ENABLE_DEPRECATED_LEGACY_DOMAIN_STRATEGY_OPTIONS + // =true", exit 1 — binary-verified on 1.13.14 + 1.14.0-alpha.40; 1.12.25 still warns and passes). + // So on a 1.13+ target this is an export-blocking ERROR, on 1.12 it stays the historical warning. + // EXCEPTION: dns.servers[] dial fields keep accepting it on every binary (verified: legacy udp server + // with domain_strategy passes check on 1.13.14 AND alpha.40) — that emission stays a warning. + const dialDomainStrategyRemoved = atLeast(version, "1.13"); + const dialDomainStrategyLevel = dialDomainStrategyRemoved ? ("error" as const) : ("warning" as const); + const dialDomainStrategyMessage = dialDomainStrategyRemoved + ? 'Dial field "domain_strategy" is deprecated since sing-box 1.12.0 and the 1.13/1.14 binaries refuse it (sing-box check fails unless ENABLE_DEPRECATED_LEGACY_DOMAIN_STRATEGY_OPTIONS=true). Migrate to "domain_resolver" (per-entity) or route.default_domain_resolver.' + : 'Dial field "domain_strategy" is deprecated since sing-box 1.12.0 and scheduled for removal. Migrate to "domain_resolver" (per-entity) or route.default_domain_resolver.'; const hasDomainStrategy = (entity: unknown): boolean => { if (!entity || typeof entity !== "object") return false; const value = (entity as Record).domain_strategy; @@ -2623,7 +2632,7 @@ export function validateConfig( const tag = outbound.tag ?? `outbound-${index}`; push( diagnostics, - "warning", + dialDomainStrategyLevel, "dial-domain-strategy-deprecated", `/outbounds/${index}/domain_strategy`, `Outbound "${tag}" — ${dialDomainStrategyMessage}`, @@ -2634,10 +2643,11 @@ export function validateConfig( const tag = server.tag ?? `dns-server-${index}`; push( diagnostics, + // DNS-server dial fields still accept domain_strategy on every pinned binary (see above). "warning", "dial-domain-strategy-deprecated", `/dns/servers/${index}/domain_strategy`, - `DNS server "${tag}" — ${dialDomainStrategyMessage}`, + `DNS server "${tag}" — Dial field "domain_strategy" is deprecated since sing-box 1.12.0 and scheduled for removal. Migrate to "domain_resolver" (per-entity) or route.default_domain_resolver.`, ); }); endpoints.forEach((endpoint, index) => { @@ -2645,7 +2655,7 @@ export function validateConfig( const tag = endpoint.tag ?? `endpoint-${index}`; push( diagnostics, - "warning", + dialDomainStrategyLevel, "dial-domain-strategy-deprecated", `/endpoints/${index}/domain_strategy`, `Endpoint "${tag}" — ${dialDomainStrategyMessage}`, @@ -2654,13 +2664,36 @@ export function validateConfig( if (hasDomainStrategy(config.ntp)) { push( diagnostics, - "warning", + dialDomainStrategyLevel, "dial-domain-strategy-deprecated", "/ntp/domain_strategy", `NTP — ${dialDomainStrategyMessage}`, ); } + // clash_mode must be a single string mode — the reF1nd fork accepts arrays here, but vanilla + // sing-box's strict decoder rejects them at load ("cannot unmarshal array into … clash_mode of type + // string", binary-verified on 1.14.0-alpha.40 for both route and DNS rules). Recurses into logical + // sub-rules, where imported fork configs commonly carry the same shape. + const checkClashModeType = (rule: unknown, path: string, owner: string) => { + if (!rule || typeof rule !== "object") return; + const obj = rule as Record; + if (obj.clash_mode !== undefined && typeof obj.clash_mode !== "string") { + push( + diagnostics, + "error", + "rule-clash-mode-type", + `${path}/clash_mode`, + `${owner} clash_mode must be a single string mode (e.g. "direct"); sing-box's strict decoder rejects other shapes ("cannot unmarshal … clash_mode of type string").`, + ); + } + if (Array.isArray(obj.rules)) { + (obj.rules as unknown[]).forEach((sub, subIndex) => checkClashModeType(sub, `${path}/rules/${subIndex}`, owner)); + } + }; + listItems(config.route?.rules).forEach((rule, index) => checkClashModeType(rule, `/route/rules/${index}`, `Route rule #${index + 1}`)); + listItems(config.dns?.rules).forEach((rule, index) => checkClashModeType(rule, `/dns/rules/${index}`, `DNS rule #${index + 1}`)); + if (channel === "testing") { const tlsAcmeMessage = 'Inline tls.acme is deprecated since sing-box 1.14.0. Move the ACME options into a tls.certificate_provider (type=acme) inline or a top-level certificate_providers[] entry.'; @@ -2753,6 +2786,14 @@ export function validateConfig( ); }); + // Legacy inbound fields (sniff*/domain_strategy): deprecated since 1.11; the 1.13.14 and + // 1.14.0-alpha.40 binaries hard-reject them at decode ("legacy inbound fields are deprecated…", + // exit 1 — binary-verified; 1.12.25 still accepts them). Error on 1.13+ targets, warning on 1.12. + const legacyInboundRemoved = atLeast(version, "1.13"); + const legacyInboundLevel = legacyInboundRemoved ? ("error" as const) : ("warning" as const); + const legacyInboundSuffix = legacyInboundRemoved + ? " The 1.13/1.14 binaries reject legacy inbound fields at load (sing-box check fails)." + : ""; const legacyInboundSniffFields = ["sniff", "sniff_override_destination", "sniff_timeout"] as const; const inboundLegacySniffMessage = 'Inbound-level sniff/sniff_timeout/sniff_override_destination are deprecated since sing-box 1.11.0. Move sniffing to a route rule with action="sniff" (and optional timeout/override_destination).'; @@ -2765,20 +2806,20 @@ export function validateConfig( if (obj[field] === undefined) continue; push( diagnostics, - "warning", + legacyInboundLevel, "inbound-legacy-sniff-deprecated", `/inbounds/${index}/${field}`, - `Inbound "${tag}" — ${inboundLegacySniffMessage}`, + `Inbound "${tag}" — ${inboundLegacySniffMessage}${legacyInboundSuffix}`, ); break; } if (typeof obj.domain_strategy === "string" && obj.domain_strategy.length > 0) { push( diagnostics, - "warning", + legacyInboundLevel, "inbound-legacy-domain-strategy-deprecated", `/inbounds/${index}/domain_strategy`, - `Inbound "${tag}" — ${inboundLegacyDomainStrategyMessage}`, + `Inbound "${tag}" — ${inboundLegacyDomainStrategyMessage}${legacyInboundSuffix}`, ); } }); diff --git a/tests/legacy-field-escalation.test.ts b/tests/legacy-field-escalation.test.ts new file mode 100644 index 00000000..da271957 --- /dev/null +++ b/tests/legacy-field-escalation.test.ts @@ -0,0 +1,112 @@ +import { describe, expect, it } from "vitest"; + +import { validateConfig } from "../src/domain/diagnostics"; +import type { SingBoxConfig } from "../src/domain/types"; + +// Escalations surfaced by the pk-box external corpus cross-check (diagnostics vs the real binaries): +// on the CURRENT pins the check itself fails for these legacy shapes, so a warning would greenlight a +// config the binary rejects. Every claim below is binary-verified (1.12.25 / 1.13.14 / 1.14.0-alpha.40): +// - dial domain_strategy (outbound/endpoint/ntp): 1.12 warns+passes; 1.13.14 + alpha.40 exit 1 +// ("set ENABLE_DEPRECATED_LEGACY_DOMAIN_STRATEGY_OPTIONS=true"). DNS-server dial fields still +// accept it on every binary — that emission must STAY a warning. +// - inbound sniff*/domain_strategy: 1.12 accepts; 1.13.14 + alpha.40 decode-FATAL +// ("legacy inbound fields are deprecated…"). +// - rule clash_mode must be a string: arrays (a reF1nd-fork extension) decode-FATAL on vanilla +// sing-box for both route and DNS rules. + +function findings(config: SingBoxConfig, channel: "stable" | "testing", version: string, code: string) { + return validateConfig(config, channel, version).filter((d) => d.code === code); +} + +describe("dial domain_strategy escalation (removed behind an env gate on 1.13+ binaries)", () => { + const outbound = { + outbounds: [{ type: "socks", tag: "s", server: "example.com", server_port: 1080, domain_strategy: "prefer_ipv4" }], + } as unknown as SingBoxConfig; + + it("stays a warning on a 1.12 target (binary warns and passes)", () => { + const hits = findings(outbound, "stable", "1.12", "dial-domain-strategy-deprecated"); + expect(hits).toHaveLength(1); + expect(hits[0]!.level).toBe("warning"); + }); + + it("errors on 1.13 and 1.14 targets (binary check exits 1)", () => { + for (const [channel, version] of [["stable", "1.13"], ["testing", "1.14"]] as const) { + const hits = findings(outbound, channel, version, "dial-domain-strategy-deprecated"); + expect(hits, `${channel}/${version}`).toHaveLength(1); + expect(hits[0]!.level, `${channel}/${version}`).toBe("error"); + expect(hits[0]!.message).toContain("ENABLE_DEPRECATED_LEGACY_DOMAIN_STRATEGY_OPTIONS"); + } + }); + + it("dns-server dial domain_strategy STAYS a warning on 1.13 (binary still accepts it there)", () => { + const config = { + dns: { servers: [{ type: "udp", tag: "u", server: "1.1.1.1", domain_strategy: "prefer_ipv4" }] }, + } as unknown as SingBoxConfig; + const hits = findings(config, "stable", "1.13", "dial-domain-strategy-deprecated"); + expect(hits).toHaveLength(1); + expect(hits[0]!.level).toBe("warning"); + }); + + it("endpoint and ntp emissions escalate with the same gate", () => { + const config = { + endpoints: [{ type: "wireguard", tag: "wg", domain_strategy: "prefer_ipv4" }], + ntp: { enabled: true, server: "time.apple.com", domain_strategy: "prefer_ipv4" }, + } as unknown as SingBoxConfig; + const hits = findings(config, "stable", "1.13", "dial-domain-strategy-deprecated"); + expect(hits.map((d) => d.level)).toEqual(["error", "error"]); + }); +}); + +describe("legacy inbound fields escalation (decode-FATAL on 1.13+ binaries)", () => { + const config = { + inbounds: [ + { type: "mixed", tag: "m1", listen: "127.0.0.1", listen_port: 1, sniff: true }, + { type: "mixed", tag: "m2", listen: "127.0.0.1", listen_port: 2, domain_strategy: "prefer_ipv4" }, + ], + } as unknown as SingBoxConfig; + + it("warnings on 1.12 (binary accepts)", () => { + expect(findings(config, "stable", "1.12", "inbound-legacy-sniff-deprecated")[0]?.level).toBe("warning"); + expect(findings(config, "stable", "1.12", "inbound-legacy-domain-strategy-deprecated")[0]?.level).toBe("warning"); + }); + + it("errors on 1.13 and 1.14 (binary decode-FATALs)", () => { + for (const [channel, version] of [["stable", "1.13"], ["testing", "1.14"]] as const) { + expect(findings(config, channel, version, "inbound-legacy-sniff-deprecated")[0]?.level, `sniff ${version}`).toBe("error"); + expect(findings(config, channel, version, "inbound-legacy-domain-strategy-deprecated")[0]?.level, `ds ${version}`).toBe("error"); + } + }); +}); + +describe("rule clash_mode type gate (fork-style arrays are rejected by vanilla sing-box)", () => { + it("errors on array clash_mode in route rules, dns rules, and logical sub-rules", () => { + const config = { + outbounds: [{ type: "direct", tag: "direct" }], + dns: { + servers: [{ type: "local", tag: "local" }], + rules: [{ clash_mode: ["direct"], server: "local" }], + }, + route: { + rules: [ + { clash_mode: ["direct"], outbound: "direct" }, + { type: "logical", mode: "and", rules: [{ clash_mode: ["global"] }, { network: "tcp" }], outbound: "direct" }, + ], + }, + } as unknown as SingBoxConfig; + const hits = validateConfig(config, "testing", "1.14").filter((d) => d.code === "rule-clash-mode-type"); + expect(hits.map((d) => d.path).sort()).toEqual([ + "/dns/rules/0/clash_mode", + "/route/rules/0/clash_mode", + "/route/rules/1/rules/0/clash_mode", + ]); + for (const hit of hits) expect(hit.level).toBe("error"); + }); + + it("silent on string clash_mode", () => { + const config = { + outbounds: [{ type: "direct", tag: "direct" }], + route: { rules: [{ clash_mode: "direct", outbound: "direct" }] }, + } as unknown as SingBoxConfig; + expect(validateConfig(config, "testing", "1.14").filter((d) => d.code === "rule-clash-mode-type")).toEqual([]); + }); +}); From cffa7a2be962321b27c8a5b97345848b40fb123f Mon Sep 17 00:00:00 2001 From: JegoVPN <154394132+JegoVPN@users.noreply.github.com> Date: Wed, 8 Jul 2026 14:31:30 +0800 Subject: [PATCH 4/4] =?UTF-8?q?fix(diagnostics):=20review=20findings=20?= =?UTF-8?q?=E2=80=94=20escalate=20only=20binary-check-fatal=20shapes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - inbound sniff escalation now keys on the VALUE like the binary's legacy gate: sniff:false / sniff_override_destination:false / sniff_timeout:"0s" pass check on 1.13.14+alpha.40 (binary-verified) and stay warnings; only true / non-zero-timeout values error. Non-zero timeout re-verified (300ms: exit 1). - rule-clash-mode-type skips null (decodes as a no-op on all three binaries) - update-external-fixtures: --repo without --append now throws (bare --repo would wipe the corpus and rebuild one repo); total-cap break logs loudly; corpus-size comment corrected to 237 Co-Authored-By: Claude Opus 4.8 (1M context) --- scripts/update-external-fixtures.mjs | 13 +++++++-- src/domain/diagnostics.ts | 40 +++++++++++++++++---------- tests/legacy-field-escalation.test.ts | 24 ++++++++++++++-- 3 files changed, 58 insertions(+), 19 deletions(-) diff --git a/scripts/update-external-fixtures.mjs b/scripts/update-external-fixtures.mjs index c510984e..7134708e 100644 --- a/scripts/update-external-fixtures.mjs +++ b/scripts/update-external-fixtures.mjs @@ -7,7 +7,7 @@ const root = dirname(fileURLToPath(import.meta.url)); const repoRoot = join(root, ".."); const outputDir = join(repoRoot, "fixtures", "external"); const fetchTimeoutMs = 15_000; -// 320 comfortably covers the checked-in corpus (282 after the pk-box ingest) — a FULL refresh with a +// 320 comfortably covers the checked-in corpus (237 after the pk-box ingest) — a FULL refresh with a // cap below the committed manifest size would silently truncate the corpus back down. const maxAcceptedFixtures = Number(process.env.MAX_EXTERNAL_FIXTURES ?? 320); const maxAcceptedPerRepo = Number(process.env.MAX_EXTERNAL_FIXTURES_PER_REPO ?? 30); @@ -332,6 +332,10 @@ async function main() { if (appendMode && targetRepoNames.length === 0) { throw new Error("--append requires at least one --repo; a full rebuild must not run in append mode."); } + if (!appendMode && targetRepoNames.length > 0) { + // Without this guard, `--repo X` alone would wipe the whole corpus and rebuild only X. + throw new Error("--repo requires --append; a full rebuild ignores repo filters and would drop every other repo's fixtures."); + } const manifest = []; const rejected = []; @@ -377,7 +381,12 @@ async function main() { } for (const candidate of candidates) { - if (manifest.length >= maxAcceptedFixtures) break sourceLoop; + if (manifest.length >= maxAcceptedFixtures) { + console.warn( + `WARN: total fixture cap (${maxAcceptedFixtures}) reached at ${candidate.repo}/${candidate.path} — remaining candidates are skipped WITHOUT rejected.json entries. Raise MAX_EXTERNAL_FIXTURES if this is a real ingest.`, + ); + break sourceLoop; + } const repoAcceptedCount = acceptedByRepo.get(candidate.repo) ?? 0; if (repoAcceptedCount >= repoCap) { rejected.push({ source: `${candidate.repo}/${candidate.path}`, reason: "repo-fixture-cap" }); diff --git a/src/domain/diagnostics.ts b/src/domain/diagnostics.ts index 678b4204..8f0649ac 100644 --- a/src/domain/diagnostics.ts +++ b/src/domain/diagnostics.ts @@ -2678,7 +2678,9 @@ export function validateConfig( const checkClashModeType = (rule: unknown, path: string, owner: string) => { if (!rule || typeof rule !== "object") return; const obj = rule as Record; - if (obj.clash_mode !== undefined && typeof obj.clash_mode !== "string") { + // JSON null decodes as a no-op into the Go string field (binary-verified exit 0 on all three), so + // only genuinely mistyped shapes (arrays/numbers/bools) are flagged. + if (obj.clash_mode !== undefined && obj.clash_mode !== null && typeof obj.clash_mode !== "string") { push( diagnostics, "error", @@ -2786,15 +2788,20 @@ export function validateConfig( ); }); - // Legacy inbound fields (sniff*/domain_strategy): deprecated since 1.11; the 1.13.14 and + // Legacy inbound fields (sniff*/domain_strategy): deprecated since 1.11. The 1.13.14 and // 1.14.0-alpha.40 binaries hard-reject them at decode ("legacy inbound fields are deprecated…", - // exit 1 — binary-verified; 1.12.25 still accepts them). Error on 1.13+ targets, warning on 1.12. + // exit 1) — but ONLY for non-zero values: `sniff:false`, `sniff_override_destination:false` and + // `sniff_timeout:"0s"` still pass check on every binary (the Go-side gate keys on non-zero decoded + // values; binary-verified). So on 1.13+ a check-fatal VALUE is an error, while zero-valued presence + // stays the historical warning. 1.12.25 accepts all of it (warning everywhere). const legacyInboundRemoved = atLeast(version, "1.13"); - const legacyInboundLevel = legacyInboundRemoved ? ("error" as const) : ("warning" as const); - const legacyInboundSuffix = legacyInboundRemoved - ? " The 1.13/1.14 binaries reject legacy inbound fields at load (sing-box check fails)." - : ""; + const legacyInboundSuffix = " The 1.13/1.14 binaries reject non-zero legacy inbound fields at load (sing-box check fails)."; + const zeroDuration = /^0+(\.0+)?[a-zµ]*$/; const legacyInboundSniffFields = ["sniff", "sniff_override_destination", "sniff_timeout"] as const; + const sniffValueIsCheckFatal = (field: (typeof legacyInboundSniffFields)[number], value: unknown): boolean => { + if (field === "sniff_timeout") return typeof value === "string" && value.trim() !== "" && !zeroDuration.test(value.trim()); + return value === true; + }; const inboundLegacySniffMessage = 'Inbound-level sniff/sniff_timeout/sniff_override_destination are deprecated since sing-box 1.11.0. Move sniffing to a route rule with action="sniff" (and optional timeout/override_destination).'; const inboundLegacyDomainStrategyMessage = @@ -2802,24 +2809,27 @@ export function validateConfig( listItems(config.inbounds).forEach((inbound, index) => { const obj = inbound as Record; const tag = inbound.tag ?? `inbound-${index}`; - for (const field of legacyInboundSniffFields) { - if (obj[field] === undefined) continue; + const present = legacyInboundSniffFields.filter((field) => obj[field] !== undefined); + if (present.length > 0) { + const fatalField = legacyInboundRemoved ? present.find((field) => sniffValueIsCheckFatal(field, obj[field])) : undefined; + const reportField = fatalField ?? present[0]!; push( diagnostics, - legacyInboundLevel, + fatalField ? "error" : "warning", "inbound-legacy-sniff-deprecated", - `/inbounds/${index}/${field}`, - `Inbound "${tag}" — ${inboundLegacySniffMessage}${legacyInboundSuffix}`, + `/inbounds/${index}/${reportField}`, + `Inbound "${tag}" — ${inboundLegacySniffMessage}${fatalField ? legacyInboundSuffix : ""}`, ); - break; } + // A non-empty string is the only shape the binaries reject (`""` passes check everywhere), so the + // existing trigger condition doubles as the check-fatal test. if (typeof obj.domain_strategy === "string" && obj.domain_strategy.length > 0) { push( diagnostics, - legacyInboundLevel, + legacyInboundRemoved ? "error" : "warning", "inbound-legacy-domain-strategy-deprecated", `/inbounds/${index}/domain_strategy`, - `Inbound "${tag}" — ${inboundLegacyDomainStrategyMessage}${legacyInboundSuffix}`, + `Inbound "${tag}" — ${inboundLegacyDomainStrategyMessage}${legacyInboundRemoved ? legacyInboundSuffix : ""}`, ); } }); diff --git a/tests/legacy-field-escalation.test.ts b/tests/legacy-field-escalation.test.ts index da271957..c571405c 100644 --- a/tests/legacy-field-escalation.test.ts +++ b/tests/legacy-field-escalation.test.ts @@ -76,6 +76,26 @@ describe("legacy inbound fields escalation (decode-FATAL on 1.13+ binaries)", () expect(findings(config, channel, version, "inbound-legacy-domain-strategy-deprecated")[0]?.level, `ds ${version}`).toBe("error"); } }); + + it("zero-valued sniff fields stay warnings on 1.13+ — the binaries only reject non-zero values", () => { + // Binary-verified: sniff:false / sniff_override_destination:false / sniff_timeout:"0s" all pass + // check with exit 0 on 1.13.14 AND alpha.40 (the legacy gate keys on non-zero decoded values). + const zeroValued = { + inbounds: [ + { type: "mixed", tag: "z1", listen: "127.0.0.1", listen_port: 1, sniff: false }, + { type: "mixed", tag: "z2", listen: "127.0.0.1", listen_port: 2, sniff_override_destination: false }, + { type: "mixed", tag: "z3", listen: "127.0.0.1", listen_port: 3, sniff_timeout: "0s" }, + ], + } as unknown as SingBoxConfig; + const hits = findings(zeroValued, "stable", "1.13", "inbound-legacy-sniff-deprecated"); + expect(hits).toHaveLength(3); + for (const hit of hits) expect(hit.level).toBe("warning"); + // A non-zero timeout IS check-fatal. + const nonZero = { + inbounds: [{ type: "mixed", tag: "t", listen: "127.0.0.1", listen_port: 4, sniff_timeout: "300ms" }], + } as unknown as SingBoxConfig; + expect(findings(nonZero, "stable", "1.13", "inbound-legacy-sniff-deprecated")[0]?.level).toBe("error"); + }); }); describe("rule clash_mode type gate (fork-style arrays are rejected by vanilla sing-box)", () => { @@ -102,10 +122,10 @@ describe("rule clash_mode type gate (fork-style arrays are rejected by vanilla s for (const hit of hits) expect(hit.level).toBe("error"); }); - it("silent on string clash_mode", () => { + it("silent on string clash_mode — and on null, which all three binaries decode as a no-op", () => { const config = { outbounds: [{ type: "direct", tag: "direct" }], - route: { rules: [{ clash_mode: "direct", outbound: "direct" }] }, + route: { rules: [{ clash_mode: "direct", outbound: "direct" }, { clash_mode: null, outbound: "direct" }] }, } as unknown as SingBoxConfig; expect(validateConfig(config, "testing", "1.14").filter((d) => d.code === "rule-clash-mode-type")).toEqual([]); });