每日备份 2026-06-10 12:57:13
This commit is contained in:
1 parent
fda2ccb8c2
commit
3d2e638c6a
244 files changed
+58890
-3
No files matched your search
+222
@@ -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
|
||||
Reference in new issue
Block a user