#!/bin/bash # BearVPN 连接调试脚本 # 用于调试 macOS 平台下的节点连接超时问题 set -e # 颜色输出 RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m' # No Color # 日志函数 log_info() { echo -e "${BLUE}[INFO]${NC} $1" } log_success() { echo -e "${GREEN}[SUCCESS]${NC} $1" } log_warning() { echo -e "${YELLOW}[WARNING]${NC} $1" } log_error() { echo -e "${RED}[ERROR]${NC} $1" } # 检查网络连接 check_network() { log_info "检查网络连接..." # 检查基本网络连接 if ping -c 3 8.8.8.8 > /dev/null 2>&1; then log_success "基本网络连接正常" else log_error "基本网络连接失败" return 1 fi # 检查 DNS 解析 if nslookup google.com > /dev/null 2>&1; then log_success "DNS 解析正常" else log_error "DNS 解析失败" return 1 fi } # 检查代理设置 check_proxy() { log_info "检查系统代理设置..." # 检查 HTTP 代理 if [ -n "$http_proxy" ] || [ -n "$HTTP_PROXY" ]; then log_warning "检测到 HTTP 代理设置: $http_proxy$HTTP_PROXY" else log_info "未检测到 HTTP 代理设置" fi # 检查 HTTPS 代理 if [ -n "$https_proxy" ] || [ -n "$HTTPS_PROXY" ]; then log_warning "检测到 HTTPS 代理设置: $https_proxy$HTTPS_PROXY" else log_info "未检测到 HTTPS 代理设置" fi } # 检查防火墙 check_firewall() { log_info "检查防火墙状态..." # 检查 macOS 防火墙 local firewall_status=$(sudo /usr/libexec/ApplicationFirewall/socketfilterfw --getglobalstate 2>/dev/null || echo "unknown") log_info "防火墙状态: $firewall_status" if [ "$firewall_status" = "enabled" ]; then log_warning "防火墙已启用,可能影响连接" fi } # 测试常见端口连接 test_ports() { log_info "测试常见端口连接..." local ports=(80 443 8080 8443) local hosts=("google.com" "cloudflare.com" "github.com") for host in "${hosts[@]}"; do for port in "${ports[@]}"; do if timeout 5 bash -c "echo >/dev/tcp/$host/$port" 2>/dev/null; then log_success "$host:$port 连接正常" else log_warning "$host:$port 连接失败或超时" fi done done } # 检查 libcore 库 check_libcore() { log_info "检查 libcore 库..." if [ -f "libcore/bin/libcore.dylib" ]; then log_success "找到 libcore.dylib" # 检查库的架构 local arch=$(file libcore/bin/libcore.dylib) log_info "库架构: $arch" # 检查库的依赖 log_info "库依赖:" otool -L libcore/bin/libcore.dylib | head -10 else log_error "未找到 libcore.dylib" return 1 fi } # 检查应用配置 check_app_config() { log_info "检查应用配置..." # 检查当前域名配置 if [ -f "lib/app/common/app_config.dart" ]; then log_info "检查域名配置..." grep -n "kr_baseDomains\|kr_currentDomain" lib/app/common/app_config.dart | head -5 fi # 检查超时配置 log_info "检查超时配置..." grep -n "kr_domainTimeout\|kr_totalTimeout" lib/app/common/app_config.dart | head -5 } # 监控应用日志 monitor_logs() { log_info "开始监控应用日志..." log_info "请运行应用并尝试连接节点,然后按 Ctrl+C 停止监控" # 监控 Flutter 日志 flutter logs --device-id=macos 2>/dev/null | grep -E "(ERROR|WARNING|INFO|超时|连接|节点|SingBox)" || true } # 主函数 main() { log_info "开始 BearVPN 连接调试..." log_info "==========================================" check_network check_proxy check_firewall test_ports check_libcore check_app_config log_info "==========================================" log_info "基础检查完成" log_info "==========================================" # 询问是否监控日志 read -p "是否开始监控应用日志?(y/n): " -n 1 -r echo if [[ $REPLY =~ ^[Yy]$ ]]; then monitor_logs fi log_success "调试完成" } # 运行主函数 main "$@"