forked from DevOps/deploy.stack
feat(shell): 添加代理配置管理脚本
提供 proxy_on / proxy_off / proxy_status / proxy_test 四个函数,支持 HTTP/HTTPS/SOCKS 代理的快速启停、 状态查看与连通性测试(含本地端口探测与外网访问验证)。
This commit is contained in:
@@ -0,0 +1,95 @@
|
|||||||
|
#!/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┌──────────────────────────────────────┐"
|
||||||
|
echo "│ ✅ 代理已启用 │"
|
||||||
|
echo "├──────────────────────────────────────┤"
|
||||||
|
echo "│ http_proxy : ${HTTP_PROXY_URL}"
|
||||||
|
echo "│ https_proxy: ${HTTP_PROXY_URL}"
|
||||||
|
echo "│ all_proxy : ${SOCKS_PROXY_URL}"
|
||||||
|
echo "└──────────────────────────────────────┘\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┌──────────────────────────────────────┐"
|
||||||
|
echo "│ ❌ 代理已关闭 │"
|
||||||
|
echo "└──────────────────────────────────────┘\033[0m"
|
||||||
|
}
|
||||||
|
|
||||||
|
function proxy_status() {
|
||||||
|
echo -e "\033[36m┌──────────────────────────────────────┐"
|
||||||
|
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 "获取失败"
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user