#!/bin/bash # 1.8.0 发布验收(稳定版) # # 上一版脚本两个毛病: # 1. 紧跟在中转重启之后跑,撞上隧道重连,一路 530 # 2. `curl -o /tmp/adm.html` 在 for 循环之后没生成文件 # (多半是前面某条 curl 把变量吃掉了) # 这里都改掉:先等稳定,登录 cookie 单步来。 set -u BASE=https://relay.xxmxxs.top UA='LanRemote/1.8.0' echo "════════ 0. 先等隧道稳定 ════════" for i in $(seq 1 10); do c=$(curl -s -o /dev/null -w '%{http_code}' --max-time 12 \ -H "User-Agent: $UA" "$BASE/v1/health") printf " 第 %d 次: %s\n" "$i" "$c" [ "$c" = "200" ] && break sleep 3 done echo echo "════════ 1. 中转版本 ════════" curl -s --max-time 15 "$BASE/v1/health" | head -c 180 echo echo echo "════════ 2. 官网 ════════" curl -s --max-time 20 -H "User-Agent: $UA" "$BASE/" -o /tmp/site.html echo " HTTP $(curl -s -o /dev/null -w '%{http_code}' --max-time 20 -H "User-Agent: $UA" "$BASE/") $(wc -c < /tmp/site.html) 字节" grep -o 'href="/download/[^"]*"' /tmp/site.html | sort -u | sed 's/^/ /' echo echo "════════ 3. 三个成品(响应头 + 真下 4KB)════════" for f in ykxmz-setup-1.8.0.exe ykxmz-server-1.8.0.zip ykxmz-watch-1.8.0.apk; do rm -f /tmp/chunk.bin hdr=$(curl -sI --max-time 30 -H "User-Agent: $UA" "$BASE/download/$f") hcode=$(echo "$hdr" | head -1 | awk '{print $2}') hlen=$(echo "$hdr" | grep -i '^content-length' | tr -d '\r' | awk '{print $2}') htype=$(echo "$hdr" | grep -i '^content-type' | tr -d '\r' | cut -d' ' -f2) curl -s --max-time 60 -r 0-4095 -o /tmp/chunk.bin -H "User-Agent: $UA" \ "$BASE/download/$f" >/dev/null 2>&1 real=$(wc -c < /tmp/chunk.bin 2>/dev/null || echo 0) printf " %-30s HEAD %-4s 长度 %-10s %-34s 实体取到 %s 字节\n" \ "$f" "$hcode" "${hlen:-?}" "${htype:-?}" "$real" done echo echo "════════ 4. 管理后台 ════════" PASS=$(cat /root/lanremote-relay/data/admin_password.txt 2>/dev/null) rm -f /tmp/ck.txt curl -s -c /tmp/ck.txt -o /dev/null --max-time 20 \ -d "username=xmz7891&password=$PASS" "$BASE/admin/login" echo " cookie: $(grep -c lr_admin /tmp/ck.txt 2>/dev/null || echo 0) 条" for p in "/zhongzhuanzhan" "/admin"; do printf " %-20s HTTP %s\n" "$p" \ "$(curl -s -o /dev/null -w '%{http_code}' -b /tmp/ck.txt \ --max-time 20 -H "User-Agent: $UA" "$BASE$p")" done curl -s -b /tmp/ck.txt --max-time 20 -H "User-Agent: $UA" \ "$BASE/zhongzhuanzhan" -o /tmp/adm.html if [ -f /tmp/adm.html ]; then echo " 管理页 $(wc -c < /tmp/adm.html) 字节" for k in 'class="top"' 'class="hero"' 'class="nums"' 'class="card"' \ 'ykxmz 中转站' 'id="pickAll"' 'id="netBtn"'; do if grep -q "$k" /tmp/adm.html; then echo " ✓ $k" else echo " ✗ $k" fi done else echo " [失败] 抓不到管理页" fi echo echo "════════ 5. 静态资源 ════════" for p in "/shot/pc-main.png" "/favicon.ico"; do printf " %-22s HTTP %s\n" "$p" \ "$(curl -s -o /dev/null -w '%{http_code}' --max-time 20 "$BASE$p")" done echo echo "════════ 6. 公网可用率(15 次,间隔 2 秒)════════" ok=0 for i in $(seq 1 15); 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 2 done echo " 可用 $ok/15" echo echo "════════ 7. 中转有没有报错 ════════" journalctl -u lanremote-relay --since '5 minutes ago' --no-pager 2>/dev/null \ | grep -icE 'traceback|nameerror|typeerror|attributeerror' \ | sed 's/^/ 错误行数: /' tail -3 /root/lanremote-relay/relay.log | sed 's/^/ /'