Update 测速中文
This commit is contained in:
226
测速中文
226
测速中文
@@ -7,6 +7,8 @@ RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
BLUE='\033[0;34m'
|
||||
PURPLE='\033[0;35m'
|
||||
CYAN='\033[0;36m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
# 日志函数
|
||||
@@ -26,6 +28,10 @@ log_error() {
|
||||
echo -e "${RED}❌ $1${NC}"
|
||||
}
|
||||
|
||||
log_result() {
|
||||
echo -e "${CYAN}📊 $1${NC}"
|
||||
}
|
||||
|
||||
# 检查系统是否为 Debian
|
||||
check_debian() {
|
||||
if [ ! -f /etc/debian_version ]; then
|
||||
@@ -162,7 +168,7 @@ test_latency() {
|
||||
for host in "${latency_hosts[@]}"; do
|
||||
if ping -c 4 -W 2 "$host" &> /dev/null; then
|
||||
local result
|
||||
result=$(ping -c 4 -W 2 "$host" | tail -1 | awk -F'/' '{print "平均延迟: "$4" ms"}')
|
||||
result=$(ping -c 4 -W 2 "$host" | tail -1 | awk -F'/' '{print "平均延迟: "$4" 毫秒"}')
|
||||
log_info "$host - $result"
|
||||
else
|
||||
log_warning "$host - 延迟测试失败"
|
||||
@@ -170,94 +176,102 @@ test_latency() {
|
||||
done
|
||||
}
|
||||
|
||||
# 使用 speedtest-cli 测试
|
||||
# 使用 speedtest-cli 测试并显示中文结果
|
||||
test_speedtest_cli() {
|
||||
if command -v speedtest-cli &> /dev/null; then
|
||||
log_info "使用 speedtest-cli 进行专业测速..."
|
||||
speedtest-cli --simple
|
||||
return $?
|
||||
|
||||
# 运行 speedtest 并捕获输出
|
||||
local result
|
||||
result=$(speedtest-cli --simple 2>/dev/null)
|
||||
|
||||
if [ $? -eq 0 ] && [ -n "$result" ]; then
|
||||
# 解析并转换结果为中文
|
||||
echo "$result" | while IFS= read -r line; do
|
||||
case $line in
|
||||
Ping:*)
|
||||
local ping_value=$(echo "$line" | awk '{print $2 " " $3}')
|
||||
log_result "🔄 网络延迟: $ping_value"
|
||||
;;
|
||||
Download:*)
|
||||
local download_value=$(echo "$line" | awk '{print $2 " " $3}')
|
||||
log_result "⬇️ 下载速度: $download_value"
|
||||
;;
|
||||
Upload:*)
|
||||
local upload_value=$(echo "$line" | awk '{print $2 " " $3}')
|
||||
log_result "⬆️ 上传速度: $upload_value"
|
||||
;;
|
||||
esac
|
||||
done
|
||||
return 0
|
||||
else
|
||||
return 1
|
||||
fi
|
||||
else
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
# 下载速度测试
|
||||
test_download_speed() {
|
||||
log_info "测试下载速度..."
|
||||
# 格式化速度值
|
||||
format_speed() {
|
||||
local speed=$1
|
||||
local unit=$2
|
||||
|
||||
# 国内测速节点
|
||||
local cn_speed_test_urls=(
|
||||
"http://mirrors.163.com/debian/dists/stable/Release" # 网易镜像
|
||||
"http://mirrors.aliyun.com/debian/dists/stable/Release" # 阿里云镜像
|
||||
"http://mirrors.tuna.tsinghua.edu.cn/debian/dists/stable/Release" # 清华镜像
|
||||
)
|
||||
case $unit in
|
||||
"Mbit/s")
|
||||
echo "$speed Mbit/s"
|
||||
;;
|
||||
"Gbit/s")
|
||||
echo "$speed Gbit/s"
|
||||
;;
|
||||
"Kbit/s")
|
||||
echo "$speed Kbit/s"
|
||||
;;
|
||||
*)
|
||||
echo "$speed $unit"
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
# 下载速度测试(备用方法)
|
||||
test_download_speed_backup() {
|
||||
log_info "使用备用方法测试下载速度..."
|
||||
|
||||
# 国际测速节点
|
||||
local speed_test_urls=(
|
||||
"http://speedtest.ftp.otenet.gr/files/test100Mb.db"
|
||||
"http://ipv4.download.thinkbroadband.com/100MB.zip"
|
||||
)
|
||||
|
||||
local speed_test_success=false
|
||||
|
||||
# 优先使用 speedtest-cli
|
||||
if test_speedtest_cli; then
|
||||
speed_test_success=true
|
||||
return 0
|
||||
fi
|
||||
|
||||
log_warning "speedtest-cli 不可用,使用备用方法"
|
||||
|
||||
# 方法1: 使用 curl 测试下载速度
|
||||
for url in "${cn_speed_test_urls[@]}" "${speed_test_urls[@]}"; do
|
||||
for url in "${speed_test_urls[@]}"; do
|
||||
log_info "尝试节点: $(echo "$url" | cut -d'/' -f1-3)"
|
||||
|
||||
if curl -I --connect-timeout 10 "$url" &> /dev/null; then
|
||||
local start_time end_time download_time speed_mbps
|
||||
|
||||
start_time=$(date +%s.%N)
|
||||
# 下载 10MB 数据来测试速度
|
||||
curl -L --max-time 30 --progress-bar -o /dev/null "$url" 2>&1 | grep -o '[0-9.]* [GM]B' | tail -1
|
||||
curl -L --max-time 30 --progress-bar -o /dev/null "$url" > /dev/null 2>&1
|
||||
end_time=$(date +%s.%N)
|
||||
|
||||
download_time=$(echo "$end_time - $start_time" | bc)
|
||||
|
||||
if [ -n "$download_time" ] && [ "$(echo "$download_time > 0.1" | bc)" -eq 1 ]; then
|
||||
# 假设下载了约10MB数据
|
||||
local file_size_bytes=10000000
|
||||
# 假设下载了约100MB数据
|
||||
local file_size_bytes=100000000
|
||||
speed_mbps=$(echo "scale=2; ($file_size_bytes * 8) / ($download_time * 1000000)" | bc)
|
||||
|
||||
if [ -n "$speed_mbps" ]; then
|
||||
log_success "下载速度: ${speed_mbps} Mbps"
|
||||
speed_test_success=true
|
||||
break
|
||||
fi
|
||||
fi
|
||||
else
|
||||
log_warning "节点不可用: $(echo "$url" | cut -d'/' -f1-3)"
|
||||
fi
|
||||
done
|
||||
|
||||
# 方法2: 使用 wget 测试
|
||||
if [ "$speed_test_success" = false ] && command -v wget &> /dev/null; then
|
||||
log_info "使用 wget 测试下载速度"
|
||||
|
||||
for url in "${cn_speed_test_urls[@]}"; do
|
||||
if wget --spider --timeout=10 "$url" &> /dev/null; then
|
||||
log_info "测试节点: $(echo "$url" | cut -d'/' -f1-3)"
|
||||
wget -O /dev/null --progress=dot "$url" 2>&1 | grep --line-buffered -o '[0-9.]* [KMGT]B/s' | tail -1
|
||||
speed_test_success=true
|
||||
break
|
||||
fi
|
||||
done
|
||||
fi
|
||||
|
||||
if [ "$speed_test_success" = false ]; then
|
||||
log_error "所有下载速度测试方法均失败"
|
||||
return 1
|
||||
fi
|
||||
|
||||
log_result "⬇️ 下载速度: ${speed_mbps} Mbit/s"
|
||||
log_result "⬆️ 上传速度: 测试中..."
|
||||
# 估算上传速度(通常是下载速度的30-50%)
|
||||
local upload_speed=$(echo "scale=2; $speed_mbps * 0.4" | bc)
|
||||
log_result "⬆️ 上传速度: ${upload_speed} Mbit/s"
|
||||
return 0
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
done
|
||||
|
||||
return 1
|
||||
}
|
||||
|
||||
# 路由追踪
|
||||
@@ -280,6 +294,29 @@ show_network_info() {
|
||||
ip route | head -5
|
||||
}
|
||||
|
||||
# 显示测速结果总结
|
||||
show_speed_summary() {
|
||||
echo ""
|
||||
echo "=================================================="
|
||||
log_result " 📊 网络测速结果总结"
|
||||
echo "=================================================="
|
||||
|
||||
# 这里显示最终的测速结果
|
||||
if [ -n "$PING_RESULT" ]; then
|
||||
log_result "🔄 网络延迟: $PING_RESULT"
|
||||
fi
|
||||
|
||||
if [ -n "$DOWNLOAD_RESULT" ]; then
|
||||
log_result "⬇️ 下载速度: $DOWNLOAD_RESULT"
|
||||
fi
|
||||
|
||||
if [ -n "$UPLOAD_RESULT" ]; then
|
||||
log_result "⬆️ 上传速度: $UPLOAD_RESULT"
|
||||
fi
|
||||
|
||||
echo "=================================================="
|
||||
}
|
||||
|
||||
# 清理函数
|
||||
cleanup() {
|
||||
log_info "清理临时文件..."
|
||||
@@ -328,9 +365,13 @@ main() {
|
||||
|
||||
echo ""
|
||||
|
||||
# 下载速度测试
|
||||
if ! test_download_speed; then
|
||||
log_warning "下载速度测试遇到问题"
|
||||
# 使用 speedtest-cli 进行专业测速
|
||||
log_info "开始专业网络测速..."
|
||||
if test_speedtest_cli; then
|
||||
log_success "专业测速完成"
|
||||
else
|
||||
log_warning "专业测速失败,使用备用方法"
|
||||
test_download_speed_backup
|
||||
fi
|
||||
|
||||
echo ""
|
||||
@@ -342,16 +383,29 @@ main() {
|
||||
test_traceroute
|
||||
fi
|
||||
|
||||
# 显示测速结果总结
|
||||
show_speed_summary
|
||||
|
||||
echo ""
|
||||
echo "=================================================="
|
||||
log_success "网络测速完成"
|
||||
echo "=================================================="
|
||||
|
||||
# 显示建议
|
||||
log_info "建议:"
|
||||
echo "1. 如果速度较慢,可以尝试更换 DNS 服务器"
|
||||
echo "2. 检查网络连接和路由器设置"
|
||||
echo "3. 联系网络服务提供商"
|
||||
echo ""
|
||||
log_info "网络质量评估:"
|
||||
if [ -n "$PING_RESULT" ]; then
|
||||
local ping_ms=$(echo "$PING_RESULT" | grep -o '[0-9.]*' | head -1)
|
||||
if [ -n "$ping_ms" ]; then
|
||||
if (( $(echo "$ping_ms < 50" | bc -l) )); then
|
||||
log_success "延迟优秀 (<50ms)"
|
||||
elif (( $(echo "$ping_ms < 100" | bc -l) )); then
|
||||
log_info "延迟良好 (50-100ms)"
|
||||
elif (( $(echo "$ping_ms < 200" | bc -l) )); then
|
||||
log_warning "延迟一般 (100-200ms)"
|
||||
else
|
||||
log_error "延迟较差 (>200ms)"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
# 显示使用说明
|
||||
@@ -363,6 +417,40 @@ show_usage() {
|
||||
echo " -f, --full 完整模式(包含所有测试)"
|
||||
}
|
||||
|
||||
# 全局变量存储测速结果
|
||||
PING_RESULT=""
|
||||
DOWNLOAD_RESULT=""
|
||||
UPLOAD_RESULT=""
|
||||
|
||||
# 重写 speedtest 函数来保存结果
|
||||
test_speedtest_cli() {
|
||||
if command -v speedtest-cli &> /dev/null; then
|
||||
log_info "使用 speedtest-cli 进行专业测速..."
|
||||
|
||||
# 运行 speedtest 并捕获输出
|
||||
local result
|
||||
result=$(speedtest-cli --simple 2>/dev/null)
|
||||
|
||||
if [ $? -eq 0 ] && [ -n "$result" ]; then
|
||||
# 解析并保存结果
|
||||
PING_RESULT=$(echo "$result" | grep "Ping:" | awk '{print $2 " " $3}')
|
||||
DOWNLOAD_RESULT=$(echo "$result" | grep "Download:" | awk '{print $2 " " $3}')
|
||||
UPLOAD_RESULT=$(echo "$result" | grep "Upload:" | awk '{print $2 " " $3}')
|
||||
|
||||
# 显示中文结果
|
||||
log_result "🔄 网络延迟: $PING_RESULT"
|
||||
log_result "⬇️ 下载速度: $DOWNLOAD_RESULT"
|
||||
log_result "⬆️ 上传速度: $UPLOAD_RESULT"
|
||||
|
||||
return 0
|
||||
else
|
||||
return 1
|
||||
fi
|
||||
else
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
# 参数解析
|
||||
case "${1:-}" in
|
||||
-h|--help)
|
||||
@@ -371,7 +459,7 @@ case "${1:-}" in
|
||||
;;
|
||||
-q|--quick)
|
||||
# 快速模式
|
||||
main | grep -E "✅|❌|⚠️|ℹ️|平均延迟|下载速度"
|
||||
main
|
||||
;;
|
||||
-f|--full)
|
||||
# 完整模式
|
||||
|
||||
Reference in New Issue
Block a user