#!/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. 通过代理访问 GitHub(翻墙连通性测试),不通则试 Google echo -n "代理访问 https://github.com: " code=$(curl -s -o /dev/null -w "%{http_code}" --max-time 8 \ -x "${HTTP_PROXY_URL}" https://github.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" echo -n "代理访问 https://www.google.com: " code=$(curl -s -o /dev/null -w "%{http_code}" --max-time 8 \ -x "${HTTP_PROXY_URL}" https://www.google.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 fi # 3. 显示当前出口 IP(直连) echo -n "直连出口 IP: " curl --max-time 5 myip.ipip.net 2>/dev/null || echo "获取失败" # 4. 显示代理出口 IP(走代理,通过 HTTPS CONNECT 获取更稳定) echo -n "代理出口 IP: " curl -w "\n" --max-time 8 -x "${HTTP_PROXY_URL}" inet-ip.info 2>/dev/null || echo "获取失败" }