#!/bin/bash # 1.8.1 最终验收:从公网走一遍用户会走的全部路径 set -u BASE=https://relay.xxmxxs.top UA='LanRemote/1.8.1' echo "════════ 1. 中转版本和隧道 ════════" curl -s --max-time 15 "$BASE/v1/health" | head -c 130 echo echo " 隧道连接: $(curl -s --max-time 5 http://127.0.0.1:20241/metrics 2>/dev/null | grep '^cloudflared_tunnel_ha_connections' | awk '{print $2}') 条" echo " 协议参数: $(grep -c 'protocol quic' /etc/systemd/system/lanremote-tunnel.service) (1=quic)" echo " 长轮询: $(tail -30 /root/lanremote-relay/relay.log | grep '长轮询' | tail -1 | grep -oE '[0-9]+ 秒')" echo echo "════════ 2. 官网 ════════" curl -s --max-time 25 -H "User-Agent: $UA" "$BASE/" -o /tmp/site.html echo " HTTP $(curl -s -o /dev/null -w '%{http_code}' --max-time 25 -H "User-Agent: $UA" "$BASE/") $(wc -c < /tmp/site.html) 字节" echo " 下载按钮:" grep -o 'href="/download/[^"]*"' /tmp/site.html | sort -u | sed 's/^/ /' echo " 管理页字眼: $(grep -cE 'zhongzhuanzhan|管理后台|管理页' /tmp/site.html || echo 0) 处(应为 0)" echo echo "════════ 3. 三个成品能下吗 ════════" for f in ykxmz-setup-1.8.1.exe ykxmz-server-1.8.1.zip ykxmz-watch-1.8.1.apk; do hdr=$(curl -sI --max-time 40 -H "User-Agent: $UA" "$BASE/download/$f") code=$(echo "$hdr" | head -1 | awk '{print $2}') len=$(echo "$hdr" | grep -i '^content-length' | tr -d '\r' | awk '{print $2}') printf " %-30s HTTP %-4s %s 字节\n" "$f" "$code" "${len:-?}" done echo echo "════════ 4. 长轮询还能跑通吗(2 次真实验证)════════" STAMP=$(date +%s) DEV="final-${STAMP}" CODE=$(printf "%06d" $(( STAMP % 1000000 ))) REG=$(curl -s --max-time 30 -X POST "$BASE/v1/agent/register" \ -H 'Content-Type: application/json' -H "User-Agent: $UA" \ -d "{\"deviceId\":\"$DEV\",\"code\":\"$CODE\",\"name\":\"final\",\"version\":\"1.8.1\"}") TOKEN=$(echo "$REG" | python3 -c "import sys,json; print(json.load(sys.stdin).get('token',''))" 2>/dev/null) echo " 探针注册: $([ -n "$TOKEN" ] && echo 成功 || echo 失败)" for i in 1 2; do out=$(curl -s -o /dev/null -w '%{http_code} %{time_total}' --max-time 130 \ -X POST "$BASE/v1/agent/poll" -H "X-Token: $TOKEN" -H "User-Agent: $UA") printf " 第 %d 次: 码 %s 耗时 %.1fs(应约 61 秒)\n" \ "$i" "$(echo "$out" | awk '{print $1}')" "$(echo "$out" | awk '{print $2}')" done KEY=$(cat /root/lanremote-relay/data/admin_key.txt 2>/dev/null) curl -s --max-time 20 -X POST "http://127.0.0.1:8080/v1/admin/delete" \ -H "X-Admin: $KEY" -H 'Content-Type: application/json' \ -d "{\"deviceId\":\"$DEV\"}" > /dev/null 2>&1 echo " 探针已清理" echo echo "════════ 5. 公网可用率(10 次)════════" ok=0 for i in $(seq 1 10); do c=$(curl -s -o /dev/null -w '%{http_code}' --max-time 20 -H "User-Agent: $UA" "$BASE/v1/health") [ "$c" = "200" ] && ok=$((ok+1)) printf " %2d: %s\n" "$i" "$c" sleep 1 done echo " 可用 $ok/10" echo echo "════════ 6. 中转有没有报错 ════════" journalctl -u lanremote-relay --since '5 minutes ago' --no-pager 2>/dev/null \ | grep -icE 'traceback|nameerror|typeerror' | sed 's/^/ 错误行数: /' tail -3 /root/lanremote-relay/relay.log | sed 's/^/ /'