Browse Source

wsl_clash_proxy

zhensolid 3 tháng trước cách đây
mục cha
commit
bca5361167
1 tập tin đã thay đổi với 262 bổ sung0 xóa
  1. 262 0
      proxy.sh

+ 262 - 0
proxy.sh

@@ -0,0 +1,262 @@
+#!/bin/bash
+
+# WSL 代理管理脚本
+# 用于快速开启和关闭代理设置
+
+# 获取 Windows 主机 IP
+get_windows_ip() {
+    local wsl_ip=$(ip addr show eth1 | grep 'inet ' | awk '{print $2}' | cut -d'/' -f1 2>/dev/null)
+    
+    if [ -z "$wsl_ip" ]; then
+        wsl_ip=$(hostname -I | awk '{print $1}')
+    fi
+    
+    # WSL2 共享 IP 的情况下,按优先级尝试不同地址
+    local test_ips=("127.0.0.1" "$wsl_ip")
+    
+    for ip in "${test_ips[@]}"; do
+        if timeout 3 bash -c "</dev/tcp/$ip/7897" 2>/dev/null; then
+            echo "$ip"
+            return
+        fi
+    done
+    
+    # 如果都失败了,返回 localhost
+    echo "127.0.0.1"
+}
+
+# Clash 端口配置
+HTTP_PORT="7897"
+SOCKS_PORT="7897"
+
+# 代理配置函数
+set_proxy() {
+    local windows_ip=$(get_windows_ip)
+    
+    echo "正在设置代理..."
+    echo "Windows IP: $windows_ip"
+    
+    # 设置 HTTP/HTTPS 代理
+    export http_proxy="http://${windows_ip}:${HTTP_PORT}"
+    export https_proxy="http://${windows_ip}:${HTTP_PORT}"
+    export HTTP_PROXY="http://${windows_ip}:${HTTP_PORT}"
+    export HTTPS_PROXY="http://${windows_ip}:${HTTP_PORT}"
+    
+    # 设置 SOCKS 代理
+    export all_proxy="socks5://${windows_ip}:${SOCKS_PORT}"
+    export ALL_PROXY="socks5://${windows_ip}:${SOCKS_PORT}"
+    
+    # 设置不走代理的地址
+    export no_proxy="localhost,127.0.0.1,::1,*.local"
+    export NO_PROXY="localhost,127.0.0.1,::1,*.local"
+    
+    # 写入到当前 shell 配置文件
+    echo "# Proxy settings - Auto generated" >> ~/.bashrc
+    echo "export http_proxy=\"http://${windows_ip}:${HTTP_PORT}\"" >> ~/.bashrc
+    echo "export https_proxy=\"http://${windows_ip}:${HTTP_PORT}\"" >> ~/.bashrc
+    echo "export HTTP_PROXY=\"http://${windows_ip}:${HTTP_PORT}\"" >> ~/.bashrc
+    echo "export HTTPS_PROXY=\"http://${windows_ip}:${HTTP_PORT}\"" >> ~/.bashrc
+    echo "export all_proxy=\"socks5://${windows_ip}:${SOCKS_PORT}\"" >> ~/.bashrc
+    echo "export ALL_PROXY=\"socks5://${windows_ip}:${SOCKS_PORT}\"" >> ~/.bashrc
+    echo "export no_proxy=\"localhost,127.0.0.1,::1,*.local\"" >> ~/.bashrc
+    echo "export NO_PROXY=\"localhost,127.0.0.1,::1,*.local\"" >> ~/.bashrc
+    
+    echo "✅ 代理已开启"
+    echo "HTTP/HTTPS 代理: http://${windows_ip}:${HTTP_PORT}"
+    echo "SOCKS 代理: socks5://${windows_ip}:${SOCKS_PORT}"
+}
+
+# 取消代理配置函数
+unset_proxy() {
+    echo "正在关闭代理..."
+    
+    # 取消当前会话的代理环境变量
+    unset http_proxy
+    unset https_proxy
+    unset HTTP_PROXY
+    unset HTTPS_PROXY
+    unset all_proxy
+    unset ALL_PROXY
+    unset no_proxy
+    unset NO_PROXY
+    
+    # 从 .bashrc 中移除代理配置
+    sed -i '/# Proxy settings - Auto generated/,+7d' ~/.bashrc
+    
+    echo "✅ 代理已关闭"
+}
+
+# 检查代理状态
+check_proxy() {
+    echo "当前代理状态:"
+    if [ -n "$http_proxy" ]; then
+        echo "✅ HTTP 代理: $http_proxy"
+    else
+        echo "❌ HTTP 代理: 未设置"
+    fi
+    
+    if [ -n "$all_proxy" ]; then
+        echo "✅ SOCKS 代理: $all_proxy"
+    else
+        echo "❌ SOCKS 代理: 未设置"
+    fi
+    
+    echo ""
+    echo "测试连接..."
+    if curl -s --connect-timeout 5 --max-time 10 http://www.google.com > /dev/null 2>&1; then
+        echo "✅ 网络连接正常"
+    else
+        echo "❌ 网络连接失败"
+    fi
+}
+
+# 测试代理连接
+test_proxy() {
+    local windows_ip=$(get_windows_ip)
+    echo "测试代理连接..."
+    echo "使用地址: $windows_ip:${HTTP_PORT}"
+    
+    # 测试 HTTP 代理
+    if curl -s --connect-timeout 5 --proxy "http://${windows_ip}:${HTTP_PORT}" http://www.google.com > /dev/null 2>&1; then
+        echo "✅ HTTP 代理连接正常"
+    else
+        echo "❌ HTTP 代理连接失败"
+    fi
+    
+    # 测试 SOCKS 代理
+    if curl -s --connect-timeout 5 --socks5 "${windows_ip}:${SOCKS_PORT}" http://www.google.com > /dev/null 2>&1; then
+        echo "✅ SOCKS 代理连接正常"
+    else
+        echo "❌ SOCKS 代理连接失败"
+    fi
+}
+
+# Git 代理设置
+set_git_proxy() {
+    local windows_ip=$(get_windows_ip)
+    echo "设置 Git 代理..."
+    
+    git config --global http.proxy "http://${windows_ip}:${HTTP_PORT}"
+    git config --global https.proxy "http://${windows_ip}:${HTTP_PORT}"
+    
+    echo "✅ Git 代理已设置为: http://${windows_ip}:${HTTP_PORT}"
+}
+
+# 取消 Git 代理
+unset_git_proxy() {
+    echo "取消 Git 代理..."
+    
+    git config --global --unset http.proxy
+    git config --global --unset https.proxy
+    
+    echo "✅ Git 代理已取消"
+}
+
+# 显示帮助信息
+show_help() {
+    echo "WSL 代理管理脚本"
+    echo ""
+    echo "用法: $0 [选项]"
+    echo ""
+    echo "选项:"
+    echo "  on       开启代理"
+    echo "  off      关闭代理"
+    echo "  status   检查代理状态"
+    echo "  test     测试代理连接"
+    echo "  git-on   开启 Git 代理"
+    echo "  git-off  关闭 Git 代理"
+    echo "  help     显示此帮助信息"
+    echo ""
+    echo "注意: 请确保 Windows 上的 Clash 正在运行"
+    echo "默认端口: HTTP=${HTTP_PORT}, SOCKS=${SOCKS_PORT}"
+}
+
+# 主菜单
+show_menu() {
+    echo "=================================="
+    echo "        WSL 代理管理工具"
+    echo "=================================="
+    echo "1. 开启代理"
+    echo "2. 关闭代理"
+    echo "3. 检查代理状态"
+    echo "4. 测试代理连接"
+    echo "5. 开启 Git 代理"
+    echo "6. 关闭 Git 代理"
+    echo "7. 退出"
+    echo "=================================="
+    echo -n "请选择操作 (1-7): "
+}
+
+# 主程序逻辑
+main() {
+    case "$1" in
+        "on")
+            set_proxy
+            ;;
+        "off")
+            unset_proxy
+            ;;
+        "status")
+            check_proxy
+            ;;
+        "test")
+            test_proxy
+            ;;
+        "git-on")
+            set_git_proxy
+            ;;
+        "git-off")
+            unset_git_proxy
+            ;;
+        "help")
+            show_help
+            ;;
+        "")
+            # 交互式菜单
+            while true; do
+                show_menu
+                read choice
+                echo ""
+                
+                case $choice in
+                    1)
+                        set_proxy
+                        ;;
+                    2)
+                        unset_proxy
+                        ;;
+                    3)
+                        check_proxy
+                        ;;
+                    4)
+                        test_proxy
+                        ;;
+                    5)
+                        set_git_proxy
+                        ;;
+                    6)
+                        unset_git_proxy
+                        ;;
+                    7)
+                        echo "再见!"
+                        break
+                        ;;
+                    *)
+                        echo "❌ 无效选择,请重新输入"
+                        ;;
+                esac
+                echo ""
+                echo "按任意键继续..."
+                read -n 1
+                clear
+            done
+            ;;
+        *)
+            echo "❌ 无效参数: $1"
+            show_help
+            ;;
+    esac
+}
+
+# 运行主程序
+main "$@"