Files
deploy.stack/shell/proxy.sh
T

96 lines
4.1 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env bash
# 代理配置 - 请根据实际情况修改以下值
PROXY_HOST="127.0.0.1"
PROXY_HTTP_PORT="7890"
PROXY_SOCKS_PORT="7890"
# HTTP/HTTPS 代理地址
HTTP_PROXY_URL="http://${PROXY_HOST}:${PROXY_HTTP_PORT}"
SOCKS_PROXY_URL="socks5://${PROXY_HOST}:${PROXY_SOCKS_PORT}"
# 不使用代理的地址
NO_PROXY_VALUE="localhost,127.0.0.1,localaddress,.localdomain.com,.example.com,.hermesagent.org.cn,mcp.hermesagent.org.cn"
function proxy_on() {
export http_proxy="${HTTP_PROXY_URL}"
export https_proxy="${HTTP_PROXY_URL}"
export all_proxy="${SOCKS_PROXY_URL}"
export no_proxy="${NO_PROXY_VALUE}"
# 同时设置大写版本(某些程序需要)
export HTTP_PROXY="${HTTP_PROXY_URL}"
export HTTPS_PROXY="${HTTP_PROXY_URL}"
export ALL_PROXY="${SOCKS_PROXY_URL}"
export NO_PROXY="${NO_PROXY_VALUE}"
echo -e "\033[32m┌──────────────────────────────────────┐\033[0m"
echo "│ ✅ 代理已启用 │"
echo "├──────────────────────────────────────┤"
echo "│ http_proxy : ${HTTP_PROXY_URL}"
echo "│ https_proxy: ${HTTP_PROXY_URL}"
echo "│ all_proxy : ${SOCKS_PROXY_URL}"
echo -e "\033[32m└──────────────────────────────────────┘\033[0m"
}
function proxy_off() {
unset http_proxy https_proxy all_proxy no_proxy
unset HTTP_PROXY HTTPS_PROXY ALL_PROXY NO_PROXY
echo -e "\033[31m┌──────────────────────────────────────┐\033[0m"
echo "│ ❌ 代理已关闭 │"
echo -e "\033[31m└──────────────────────────────────────┘\033[0m"
}
function proxy_status() {
echo -e "\033[36m┌──────────────────────────────────────┐\033[0m"
echo "│ 📊 代理状态 │"
echo -e "├──────────────────────────────────────┤\033[0m"
if [ -z "$http_proxy" ]; then
echo -e "\033[31m│ 状态: 未启用 │\033[0m"
else
echo -e "\033[32m│ 状态: 已启用 │\033[0m"
echo "│ http_proxy : $http_proxy"
echo "│ https_proxy: $https_proxy"
echo "│ all_proxy : $all_proxy"
echo "│ no_proxy : $no_proxy"
fi
echo -e "\033[36m└──────────────────────────────────────┘\033[0m"
}
function proxy_test() {
# 检查 curl 是否可用
if ! command -v curl >/dev/null 2>&1; then
echo "curl 未安装,无法测试代理" >&2
return 1
fi
echo -e "\033[33m测试代理连通性...\033[0m"
# 1. 本地代理端口是否在监听(不依赖外网,最快的失败定位)
echo -n "代理端口 ${PROXY_HOST}:${PROXY_HTTP_PORT}: "
if (exec 3<>/dev/tcp/"${PROXY_HOST}"/"${PROXY_HTTP_PORT}") 2>/dev/null; then
exec 3<&- 3>&-
echo -e "\033[32m✓ 可达\033[0m"
else
echo -e "\033[31m✗ 不可达(请确认代理客户端已启动)\033[0m"
return 1
fi
# 2. 通过代理访问稳定可达的国内站点(连通性测试,非翻墙测试)
echo -n "代理访问 https://www.baidu.com: "
code=$(curl -s -o /dev/null -w "%{http_code}" --max-time 8 \
-x "${HTTP_PROXY_URL}" https://www.baidu.com 2>/dev/null)
if [ -n "$code" ] && [ "$code" -ge 200 ] && [ "$code" -lt 400 ]; then
echo -e "\033[32m✓ HTTP ${code}\033[0m"
else
echo -e "\033[31m✗ 失败(${code:-N/A}\033[0m"
fi
# 3. 显示当前出口 IP(直连,便于与走代理后的 IP 对比)
echo -n "当前出口 IP: "
curl -s --max-time 5 https://api.ipify.org 2>/dev/null || echo "获取失败"
}