From e49e5ffa5b84d7b3c4fe09cb1574a668fc2d2215 Mon Sep 17 00:00:00 2001 From: xzx3344521 Date: Sat, 1 Nov 2025 16:34:31 +0800 Subject: [PATCH] =?UTF-8?q?Update=20=E6=B5=8B=E9=80=9F=E4=B8=AD=E6=96=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 测速中文 | 278 +++++++++++++++++++++++++++++++++---------------------- 1 file changed, 166 insertions(+), 112 deletions(-) diff --git a/测速中文 b/测速中文 index ad44dba..59a2af3 100644 --- a/测速中文 +++ b/测速中文 @@ -59,7 +59,7 @@ install_tools() { fi # 安装必要工具 - TOOLS=("curl" "wget" "ping" "bc") + TOOLS=("curl" "wget" "ping" "bc" "pip3" "python3") for tool in "${TOOLS[@]}"; do if ! check_command "$tool"; then echo -e "${BLUE}安装 $tool...${NC}" @@ -76,6 +76,15 @@ install_tools() { "bc") $INSTALL_CMD bc >/dev/null 2>&1 || echo -e "${YELLOW}⚠️ bc 安装失败${NC}" ;; + "pip3"|"python3") + if [ "$PM" = "apt-get" ]; then + $INSTALL_CMD python3 python3-pip >/dev/null 2>&1 || echo -e "${YELLOW}⚠️ python3 安装失败${NC}" + elif [ "$PM" = "yum" ] || [ "$PM" = "dnf" ]; then + $INSTALL_CMD python3 python3-pip >/dev/null 2>&1 || echo -e "${YELLOW}⚠️ python3 安装失败${NC}" + elif [ "$PM" = "apk" ]; then + $INSTALL_CMD python3 py3-pip >/dev/null 2>&1 || echo -e "${YELLOW}⚠️ python3 安装失败${NC}" + fi + ;; *) $INSTALL_CMD "$tool" >/dev/null 2>&1 || echo -e "${YELLOW}⚠️ $tool 安装失败${NC}" ;; @@ -84,70 +93,134 @@ install_tools() { done } -# 安装speedtest +# 清理和修复speedtest安装 +clean_speedtest() { + echo -e "${BLUE}🧹 清理可能损坏的speedtest...${NC}" + + # 卸载各种版本的speedtest + apt-get remove -y speedtest-cli 2>/dev/null + pip uninstall -y speedtest-cli 2>/dev/null + pip3 uninstall -y speedtest-cli 2>/dev/null + rm -f /usr/local/bin/speedtest-cli + rm -f /usr/bin/speedtest + rm -f /usr/bin/speedtest-cli + + echo -e "${GREEN}✅ 清理完成${NC}" +} + +# 安装speedtest - 增强版本 install_speedtest() { echo -e "${BLUE}📦 检查并安装speedtest...${NC}" # 检查是否已安装 - if check_command speedtest || check_command speedtest-cli; then + if check_command speedtest; then echo -e "${GREEN}✅ speedtest 已安装${NC}" + speedtest --version return 0 fi - # 尝试不同的安装方法 - echo -e "${BLUE}尝试安装speedtest...${NC}" - - # 方法1: 使用包管理器安装 - if [ "$PM" = "apt-get" ]; then - if $INSTALL_CMD speedtest-cli >/dev/null 2>&1; then - echo -e "${GREEN}✅ speedtest-cli 安装成功${NC}" - return 0 - fi - elif [ "$PM" = "yum" ] || [ "$PM" = "dnf" ]; then - if $INSTALL_CMD speedtest-cli >/dev/null 2>&1; then - echo -e "${GREEN}✅ speedtest-cli 安装成功${NC}" - return 0 - fi - fi + # 清理旧版本 + clean_speedtest - # 方法2: 使用pip安装 - if check_command pip3; then - if pip3 install speedtest-cli >/dev/null 2>&1; then - echo -e "${GREEN}✅ speedtest-cli pip安装成功${NC}" - return 0 - fi - elif check_command pip; then - if pip install speedtest-cli >/dev/null 2>&1; then - echo -e "${GREEN}✅ speedtest-cli pip安装成功${NC}" - return 0 - fi - fi - - # 方法3: 使用curl下载官方speedtest + # 方法1: 安装官方ookla speedtest (首选) + echo -e "${BLUE}尝试安装官方speedtest...${NC}" if check_command curl; then - echo -e "${BLUE}尝试下载官方speedtest...${NC}" if curl -s https://install.speedtest.net/app/cli/install.deb.sh | bash >/dev/null 2>&1; then - if $INSTALL_CMD speedtest >/dev/null 2>&1; then + if $UPDATE_CMD >/dev/null 2>&1 && $INSTALL_CMD speedtest >/dev/null 2>&1; then echo -e "${GREEN}✅ 官方speedtest安装成功${NC}" + speedtest --version return 0 fi fi fi - # 方法4: 使用wget下载speedtest-cli + # 方法2: 直接下载二进制文件 + echo -e "${BLUE}尝试下载二进制speedtest...${NC}" if check_command wget; then - echo -e "${BLUE}尝试wget下载speedtest...${NC}" - if wget -q -O speedtest-cli https://raw.githubusercontent.com/sivel/speedtest-cli/master/speedtest.py && \ - chmod +x speedtest-cli && mv speedtest-cli /usr/local/bin/; then - echo -e "${GREEN}✅ speedtest-cli 下载安装成功${NC}" + ARCH=$(uname -m) + if [ "$ARCH" = "x86_64" ]; then + SPEEDTEST_URL="https://install.speedtest.net/app/cli/ookla-speedtest-1.2.0-linux-x86_64.tgz" + elif [ "$ARCH" = "aarch64" ]; then + SPEEDTEST_URL="https://install.speedtest.net/app/cli/ookla-speedtest-1.2.0-linux-aarch64.tgz" + else + SPEEDTEST_URL="https://install.speedtest.net/app/cli/ookla-speedtest-1.2.0-linux-x86_64.tgz" + fi + + if wget -q -O speedtest.tgz "$SPEEDTEST_URL" && \ + tar -xzf speedtest.tgz && \ + mv speedtest /usr/local/bin/ && \ + chmod +x /usr/local/bin/speedtest; then + echo -e "${GREEN}✅ 二进制speedtest安装成功${NC}" + speedtest --version + return 0 + fi + rm -f speedtest.tgz + fi + + # 方法3: 使用pip安装 + echo -e "${BLUE}尝试pip安装speedtest-cli...${NC}" + if check_command pip3; then + if pip3 install speedtest-cli >/dev/null 2>&1; then + echo -e "${GREEN}✅ speedtest-cli pip安装成功${NC}" return 0 fi fi - echo -e "${YELLOW}⚠️ speedtest安装失败,跳过测速功能${NC}" + # 方法4: 使用包管理器安装 + echo -e "${BLUE}尝试包管理器安装...${NC}" + if [ "$PM" = "apt-get" ]; then + if $INSTALL_CMD speedtest-cli >/dev/null 2>&1; then + echo -e "${GREEN}✅ speedtest-cli 包管理器安装成功${NC}" + return 0 + fi + elif [ "$PM" = "yum" ] || [ "$PM" = "dnf" ]; then + if $INSTALL_CMD speedtest-cli >/dev/null 2>&1; then + echo -e "${GREEN}✅ speedtest-cli 包管理器安装成功${NC}" + return 0 + fi + fi + + echo -e "${YELLOW}⚠️ speedtest安装失败,将使用备用测速方法${NC}" return 1 } +# 备用网络测速方法 +backup_speed_test() { + echo -e "${CYAN}🔄 使用备用方法进行网络测速...${NC}" + + # 测试下载速度到多个测速服务器 + servers=( + "http://speedtest.ftp.otenet.gr/files/test1Mb.db" + "http://ipv4.download.thinkbroadband.com/1MB.zip" + "http://proof.ovh.net/files/1Mb.dat" + ) + + for server in "${servers[@]}"; do + echo -e "${BLUE}测试服务器: $(basename $server)${NC}" + if check_command wget; then + start_time=$(date +%s) + if wget -O /dev/null --timeout=10 --tries=2 "$server" >/dev/null 2>&1; then + end_time=$(date +%s) + duration=$((end_time - start_time)) + if [ $duration -eq 0 ]; then + duration=1 + fi + speed=$(echo "scale=2; 8 / $duration" | bc -l 2>/dev/null || echo "N/A") + echo -e "${GREEN} 下载速度: ${speed} Mbps${NC}" + break + else + echo -e "${YELLOW} 服务器不可用${NC}" + fi + fi + done + + # 使用iperf3测试(如果可用) + if check_command iperf3; then + echo -e "${BLUE}使用iperf3测试...${NC}" + iperf3 -c speedtest.serverius.net -p 5202 -t 5 -O 2 2>/dev/null | grep -E "sender|receiver" | head -2 + fi +} + # 检查系统兼容性 check_system() { echo -e "${BLUE}🔍 检查系统环境...${NC}" @@ -227,84 +300,44 @@ test_latency() { done } -# Speedtest测速 +# Speedtest测速 - 增强版本 test_speed() { echo -e "${CYAN}🚀 进行Speedtest测速...${NC}" + # 调试信息 + echo -e "${BLUE}可用的speedtest命令:${NC}" + which speedtest 2>/dev/null && echo -e " speedtest: $(speedtest --version 2>/dev/null || echo '无法获取版本')" + which speedtest-cli 2>/dev/null && echo -e " speedtest-cli: $(speedtest-cli --version 2>/dev/null || echo '无法获取版本')" + # 检查是否有可用的speedtest命令 SPEEDTEST_CMD="" if check_command speedtest; then - SPEEDTEST_CMD="speedtest --simple" + SPEEDTEST_CMD="speedtest --accept-license --accept-gdpr --simple" elif check_command speedtest-cli; then SPEEDTEST_CMD="speedtest-cli --simple" - elif [ -f /usr/local/bin/speedtest-cli ]; then - SPEEDTEST_CMD="/usr/local/bin/speedtest-cli --simple" + elif [ -f /usr/local/bin/speedtest ]; then + SPEEDTEST_CMD="/usr/local/bin/speedtest --accept-license --accept-gdpr --simple" fi if [ -n "$SPEEDTEST_CMD" ]; then echo -e "${BLUE}使用命令: $SPEEDTEST_CMD${NC}" - result=$($SPEEDTEST_CMD 2>/dev/null) - if [ $? -eq 0 ] && [ -n "$result" ]; then - echo "$result" | sed -E " - s/Ping:/🔄 网络延迟:/ - s/Download:/⬇️ 下载速度:/ - s/Upload:/⬆️ 上传速度:/ - s/ ms/ 毫秒/ - s/ Mbit\/s/ Mbit\/秒/ - " | while read line; do - if [[ $line == *"网络延迟"* ]]; then - latency=$(echo "$line" | grep -o '[0-9.]*') - if command -v bc >/dev/null 2>&1 && [ -n "$latency" ]; then - if (( $(echo "$latency < 50" | bc -l 2>/dev/null) )); then - echo -e "${GREEN}$line ✅${NC}" - elif (( $(echo "$latency < 100" | bc -l 2>/dev/null) )); then - echo -e "${GREEN}$line 👍${NC}" - elif (( $(echo "$latency < 200" | bc -l 2>/dev/null) )); then - echo -e "${YELLOW}$line ⚠️${NC}" - else - echo -e "${RED}$line ❌${NC}" - fi - else - echo -e "${GREEN}$line${NC}" - fi - elif [[ $line == *"下载速度"* ]]; then - speed=$(echo "$line" | grep -o '[0-9.]*') - if command -v bc >/dev/null 2>&1 && [ -n "$speed" ]; then - if (( $(echo "$speed > 50" | bc -l 2>/dev/null) )); then - echo -e "${GREEN}$line 🚀${NC}" - elif (( $(echo "$speed > 10" | bc -l 2>/dev/null) )); then - echo -e "${GREEN}$line 👍${NC}" - else - echo -e "${YELLOW}$line ⚠️${NC}" - fi - else - echo -e "${GREEN}$line${NC}" - fi - elif [[ $line == *"上传速度"* ]]; then - speed=$(echo "$line" | grep -o '[0-9.]*') - if command -v bc >/dev/null 2>&1 && [ -n "$speed" ]; then - if (( $(echo "$speed > 20" | bc -l 2>/dev/null) )); then - echo -e "${BLUE}$line 🚀${NC}" - elif (( $(echo "$speed > 5" | bc -l 2>/dev/null) )); then - echo -e "${BLUE}$line 👍${NC}" - else - echo -e "${YELLOW}$line ⚠️${NC}" - fi - else - echo -e "${BLUE}$line${NC}" - fi - fi - done + # 设置超时,防止卡住 + timeout 60 bash -c "$SPEEDTEST_CMD" 2>/dev/null + result=$? + + if [ $result -eq 0 ]; then + echo -e "${GREEN}✅ speedtest测速成功${NC}" + elif [ $result -eq 124 ]; then + echo -e "${YELLOW}⚠️ speedtest测速超时${NC}" + backup_speed_test else - echo -e "${YELLOW}⚠️ speedtest测速失败,跳过此测试${NC}" + echo -e "${YELLOW}⚠️ speedtest测速失败,错误码: $result${NC}" + backup_speed_test fi else - echo -e "${YELLOW}⚠️ 未找到speedtest,跳过测速功能${NC}" - echo -e "${BLUE}💡 提示: 可以手动安装speedtest:${NC}" - echo -e "${BLUE} Ubuntu/Debian: apt-get install speedtest-cli${NC}" - echo -e "${BLUE} CentOS/RHEL: yum install speedtest-cli${NC}" - echo -e "${BLUE} 或使用: curl -s https://install.speedtest.net/app/cli/install.deb.sh | sudo bash${NC}" + echo -e "${YELLOW}⚠️ 未找到speedtest命令${NC}" + backup_speed_test fi } @@ -312,7 +345,8 @@ test_speed() { show_system_info() { echo -e "${PURPLE}" echo "==================================================" - echo " 🌈 精准网络测速脚本" + echo " 🌈 精准网络测速脚本 v3.0" + echo " 增强版 - 多方法测速 | 自动修复 | 备用方案" echo " 支持: Ubuntu/Debian/CentOS/RHEL" echo "==================================================" echo -e "${NC}" @@ -327,25 +361,36 @@ show_usage() { echo -e " $0 [选项]" echo -e "" echo -e "${GREEN}选项:${NC}" - echo -e " -h, --help 显示此帮助信息" - echo -e " -v, --version 显示版本信息" + echo -e " -h, --help 显示此帮助信息" + echo -e " -v, --version 显示版本信息" + echo -e " -f, --force 强制重新安装speedtest" echo -e "" echo -e "${GREEN}功能:${NC}" echo -e " ✅ 系统环境检测" echo -e " ✅ 自动安装依赖工具" echo -e " ✅ 网络连通性测试" echo -e " ✅ 多节点延迟测试" - echo -e " ✅ Speedtest网速测试" + echo -e " ✅ Speedtest网速测试 (多方法)" + echo -e " ✅ 备用测速方案" + echo -e " ✅ 自动修复安装问题" echo -e "" echo -e "${GREEN}示例:${NC}" - echo -e " $0 # 运行完整测试" - echo -e " $0 --help # 显示帮助" + echo -e " $0 # 运行完整测试" + echo -e " $0 --force # 强制重新安装speedtest" + echo -e " $0 --help # 显示帮助" } # 显示版本信息 show_version() { - echo -e "${GREEN}精准网络测速脚本 v2.0${NC}" - echo -e "支持多系统网络性能测试" + echo -e "${GREEN}精准网络测速脚本 v3.0${NC}" + echo -e "增强版 - 多方法测速 | 自动修复 | 备用方案" +} + +# 强制重新安装speedtest +force_reinstall_speedtest() { + echo -e "${YELLOW}🔄 强制重新安装speedtest...${NC}" + clean_speedtest + install_speedtest } # 主函数 @@ -360,6 +405,9 @@ main() { show_version exit 0 ;; + -f|--force) + FORCE_REINSTALL=true + ;; *) # 正常执行 ;; @@ -367,13 +415,19 @@ main() { show_system_info install_tools + echo "" + + if [ "$FORCE_REINSTALL" = true ]; then + force_reinstall_speedtest + else + install_speedtest + fi + echo "" test_connectivity echo "" test_latency echo "" - install_speedtest - echo "" test_speed echo ""