fix: v2.2 check_ipv4 多源+8s超时+http fallback

This commit is contained in:
2026-04-17 06:15:44 +00:00
parent 3d99fc13ba
commit a800541c36

View File

@@ -27,7 +27,7 @@
set -Eeuo pipefail set -Eeuo pipefail
# ============ 常量 ============ # ============ 常量 ============
readonly SCRIPT_VERSION="2.1" readonly SCRIPT_VERSION="2.2"
readonly LOG_FILE="/var/log/stream-unlock.log" readonly LOG_FILE="/var/log/stream-unlock.log"
readonly BACKUP_ROOT="/etc/stream-unlock-backup" readonly BACKUP_ROOT="/etc/stream-unlock-backup"
readonly STATE_FILE="/etc/stream-unlock.state" readonly STATE_FILE="/etc/stream-unlock.state"
@@ -132,18 +132,19 @@ detect_os() {
} }
check_ipv4() { check_ipv4() {
# 需要至少一个全球可达 IPv4; 允许 NAT 后面的机器 (家庭/内网) 但提示 local ipv4="" src
local ipv4 for src in "https://api.ipify.org" "https://ifconfig.me" "http://ip.sb" "http://whatismyip.akamai.com"; do
ipv4=$(curl -4 -fsS --max-time 5 https://api.ipify.org 2>/dev/null || true) ipv4=$(curl -4 -fsS --max-time 8 "$src" 2>/dev/null | tr -d '[:space:]' || true)
if [[ -z "$ipv4" ]]; then if [[ "$ipv4" =~ ^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
info "IPv4 公网地址: $ipv4 (via $src)"
echo "$ipv4"
return 0
fi
done
warn "未检测到 IPv4 出口; 如果本机只有 IPv6, 此脚本无法工作" warn "未检测到 IPv4 出口; 如果本机只有 IPv6, 此脚本无法工作"
if [[ $FORCE -ne 1 ]]; then if [[ $FORCE -ne 1 ]]; then
die "加 --force 可强行继续" die "加 --force 可强行继续"
fi fi
else
info "IPv4 公网地址: $ipv4"
fi
echo "$ipv4"
} }
get_public_ip() { get_public_ip() {