每日备份 2026-06-10 12:57:13

This commit is contained in:
root-backup committed 2026-06-10 12:57:14 +08:00
1 parent fda2ccb8c2
commit 3d2e638c6a
244 files changed
+58890 -3

No files matched your search

+222
View File
@@ -0,0 +1,222 @@
#!/bin/bash
# 代理域名管理器
# 功能:检查域名是否需要代理,自动添加到列表
# 用法:
# ./proxy-domain-check.sh check <域名> - 检查域名是否需要代理
# ./proxy-domain-check.sh add <域名> - 手动添加域名到列表
# ./proxy-domain-check.sh list - 显示当前列表
# ./proxy-domain-check.sh test <域名> - 测试域名直连和代理访问
PROXY_MANAGER_DIR="/root/.openclaw/scripts/proxy-manager"
DOMAIN_LIST="${PROXY_MANAGER_DIR}/proxy-domains.txt"
LOG_FILE="${PROXY_MANAGER_DIR}/access.log"
PROXY_URL="http://192.168.0.66:7890" # 代理地址
TIMEOUT=5
mkdir -p "$PROXY_MANAGER_DIR"
touch "$DOMAIN_LIST"
log() {
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" >> "$LOG_FILE"
}
# 提取域名(去除协议和路径)
extract_domain() {
local url="$1"
# 去除 http:// https://
url="${url#http://}"
url="${url#https://}"
# 去除路径
url="${url%%/*}"
# 去除端口
url="${url%%:*}"
echo "$url"
}
# 检查域名是否在列表中
is_proxy_required() {
local domain="$1"
local base_domain=$(echo "$domain" | sed 's/^www\.//')
# 检查完整域名和各级父域名
while [ -n "$base_domain" ]; do
# 直接匹配
if grep -q "^${base_domain}$" "$DOMAIN_LIST" 2>/dev/null; then
return 0
fi
# 通配符匹配
if grep -q "^\*\.$base_domain$" "$DOMAIN_LIST" 2>/dev/null; then
return 0
fi
# 父域名(去掉一级)
base_domain="${base_domain#*.}"
done
return 1
}
# 测试直连是否可用
test_direct() {
local domain="$1"
local result
# 尝试使用 curl 直连
result=$(curl -s -o /dev/null -w "%{http_code}" --connect-timeout "$TIMEOUT" \
--resolve "${domain}:443:8.8.8.8" \
"https://${domain}" 2>/dev/null || echo "FAILED")
if [ "$result" = "200" ] || [ "$result" = "301" ] || [ "$result" = "302" ]; then
return 0 # 直连成功
fi
# 尝试 HTTP
result=$(curl -s -o /dev/null -w "%{http_code}" --connect-timeout "$TIMEOUT" \
--resolve "${domain}:80:8.8.8.8" \
"http://${domain}" 2>/dev/null || echo "FAILED")
if [ "$result" = "200" ] || [ "$result" = "301" ] || [ "$result" = "302" ]; then
return 0
fi
return 1 # 直连失败
}
# 测试代理是否可用
test_proxy() {
local domain="$1"
local result
result=$(curl -s -o /dev/null -w "%{http_code}" --connect-timeout "$TIMEOUT" \
--proxy "$PROXY_URL" \
"https://${domain}" 2>/dev/null || echo "FAILED")
if [ "$result" = "200" ] || [ "$result" = "301" ] || [ "$result" = "302" ]; then
return 0 # 代理成功
fi
return 1 # 代理失败
}
# 检查并自动添加域名
check_and_add() {
local domain="$1"
local action="$2" # auto 或 manual
if is_proxy_required "$domain"; then
echo "⛔ 域名 '$domain' 已在代理列表中"
log "SKIP: $domain - already in list"
return 1
fi
echo "🔍 检测域名: $domain"
log "CHECK: $domain"
# 测试直连
if test_direct "$domain"; then
echo "✅ 直连可用,无需代理"
log "OK: $domain - direct access works"
return 0
fi
# 测试代理
if test_proxy "$domain"; then
echo "🌐 直连失败,代理可用,添加到列表"
log "ADD: $domain - proxy required"
# 添加到列表
echo "$domain" >> "$DOMAIN_LIST"
echo "✅ 已添加 '$domain' 到代理列表"
# 发送 Telegram 通知(如果配置)
if [ -f "${PROXY_MANAGER_DIR}/../send-session-alert.sh" ]; then
bash "${PROXY_MANAGER_DIR}/../send-session-alert.sh" "proxy" "$domain" "代理访问已添加"
fi
return 0
fi
echo "❌ 直连和代理都无法访问"
log "FAIL: $domain - neither direct nor proxy works"
return 1
}
# 手动添加域名
add_domain() {
local domain="$1"
# 提取纯域名
domain=$(extract_domain "$domain")
if is_proxy_required "$domain"; then
echo "⛔ '$domain' 已在代理列表中"
return 1
fi
echo "$domain" >> "$DOMAIN_LIST"
echo "✅ 已添加 '$domain' 到代理列表"
log "MANUAL_ADD: $domain"
}
# 显示列表
show_list() {
echo "📋 代理域名列表 (共 $(grep -c '^[^#]' "$DOMAIN_LIST") 个):"
echo "----------------------------------------"
grep -v '^#' "$DOMAIN_LIST" | grep -v '^$' | sort
echo "----------------------------------------"
}
# 主命令处理
case "$1" in
check)
if [ -z "$2" ]; then
echo "用法: $0 check <域名>"
exit 1
fi
domain=$(extract_domain "$2")
check_and_add "$domain" auto
;;
add)
if [ -z "$2" ]; then
echo "用法: $0 add <域名>"
exit 1
fi
add_domain "$2"
;;
list)
show_list
;;
test)
if [ -z "$2" ]; then
echo "用法: $0 test <域名>"
exit 1
fi
domain=$(extract_domain "$2")
echo "🌐 测试域名: $domain"
echo ""
echo "直连测试:"
if test_direct "$domain"; then
echo " ✅ 成功"
else
echo " ❌ 失败"
fi
echo ""
echo "代理测试:"
if test_proxy "$domain"; then
echo " ✅ 成功"
else
echo " ❌ 失败"
fi
;;
*)
echo "代理域名管理器 v1.0"
echo ""
echo "用法: $0 <命令> [参数]"
echo ""
echo "命令:"
echo " check <域名> - 检查域名,自动添加到列表(如需要)"
echo " add <域名> - 手动添加域名到列表"
echo " list - 显示当前代理域名列表"
echo " test <域名> - 测试直连和代理访问"
echo ""
echo "示例:"
echo " $0 check google.com"
echo " $0 add twitter.com"
echo " $0 list"
echo " $0 test youtube.com"
;;
esac