Add system proxy detection via scutil, egress geo/ASN enrichment, subscription node deltas, Clash rule snippet for shenzhou DIRECT, regression checker, robust actions-to-board publisher, and UI fields for sys proxy / geo / serial findings.
64 lines
2 KiB
Bash
Executable file
64 lines
2 KiB
Bash
Executable file
#!/usr/bin/env bash
|
||
# 网络供应链串线回归:跑 deep 探针并断言「不可接受」状态码
|
||
# exit 0 = 通过;1 = 探针失败;2 = 串线/策略回归失败
|
||
#
|
||
# 用法:
|
||
# bash scripts/manhuang/check-net-path-regression.sh
|
||
# bash scripts/manhuang/check-net-path-regression.sh --strict # 系统代理+global 也算失败
|
||
set -euo pipefail
|
||
|
||
ROOT="$(cd "$(dirname "$0")/../.." && pwd)"
|
||
STRICT=0
|
||
[[ "${1:-}" == "--strict" ]] && STRICT=1
|
||
|
||
export PATH="/opt/homebrew/bin:/usr/local/bin:/usr/bin:/bin:${PATH:-}"
|
||
export PYTHONPATH="${ROOT}/src${PYTHONPATH:+:$PYTHONPATH}"
|
||
export STRICT="$STRICT"
|
||
|
||
echo "[regression] probe-proxy-path --deep ..."
|
||
set +e
|
||
python3 "$ROOT/scripts/manhuang/probe-proxy-path.py" --deep
|
||
prc=$?
|
||
set -e
|
||
|
||
STATUS="${HOME}/.cache/manhuang/net-path/status.json"
|
||
if [[ ! -f "$STATUS" ]]; then
|
||
echo "[regression] FAIL: no status.json"
|
||
exit 1
|
||
fi
|
||
|
||
python3 - <<PY
|
||
import json, os, sys
|
||
from pathlib import Path
|
||
strict = os.environ.get("STRICT", "0") == "1"
|
||
st = json.loads(Path.home().joinpath(".cache/manhuang/net-path/status.json").read_text())
|
||
level = st.get("level")
|
||
iso = st.get("n4_n5_isolation") or {}
|
||
risk = iso.get("risk") or "ok"
|
||
sp = st.get("system_proxy") or {}
|
||
mode = (st.get("primary") or {}).get("mode")
|
||
findings = iso.get("findings") or []
|
||
print(f"[regression] level={level} risk={risk} mode={mode} sys_proxy={sp.get('enabled')} findings={len(findings)}")
|
||
print(f"[regression] headline={st.get('headline')}")
|
||
|
||
fails = []
|
||
# 硬失败:crit 串线
|
||
if risk == "crit":
|
||
fails.append("serial_risk=crit")
|
||
# 硬失败:controller 都没有
|
||
if not (st.get("primary") or {}).get("ok"):
|
||
fails.append("controller_down")
|
||
# strict:系统代理 + global
|
||
if strict and sp.get("enabled") and str(mode).lower() == "global":
|
||
fails.append("strict:system_proxy+global")
|
||
|
||
# 打印关键 findings
|
||
for f in findings[:8]:
|
||
print(f" [{f.get('level')}] {f.get('title')}")
|
||
|
||
if fails:
|
||
print("[regression] FAIL:", ", ".join(fails))
|
||
sys.exit(2)
|
||
print("[regression] PASS")
|
||
sys.exit(0)
|
||
PY
|