Update Nlbench_beta.sh

This commit is contained in:
Jensfrank 2024-07-04 12:54:39 +08:00 committed by GitHub
parent 2ecd3ea973
commit ca3f0dd898
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -1,7 +1,7 @@
#!/bin/bash #!/bin/bash
# 定义版本 # 定义版本
VERSION="2.2.0" VERSION="1.0.2"
# 定义颜色 # 定义颜色
RED='\033[0;31m' RED='\033[0;31m'
@ -10,22 +10,30 @@ YELLOW='\033[1;33m'
NC='\033[0m' # No Color NC='\033[0m' # No Color
# 检查 root 权限并获取 sudo 权限 # 检查 root 权限并获取 sudo 权限
check_root() { if [ "$(id -u)" != "0" ]; then
if [ "$(id -u)" != "0" ]; then echo "此脚本需要 root 权限运行。"
echo "此脚本需要 root 权限运行。" if ! sudo -v; then
if ! sudo -v; then echo "无法获取 sudo 权限,退出脚本。"
echo "无法获取 sudo 权限,退出脚本。" exit 1
exit 1
fi
echo "已获取 sudo 权限。"
fi fi
} echo "已获取 sudo 权限。"
fi
# 检查并安装依赖 # 检查并安装依赖
install_dependencies() { install_dependencies() {
echo -e "${YELLOW}正在检查并安装必要的依赖项...${NC}" echo -e "${YELLOW}正在检查并安装必要的依赖项...${NC}"
local dependencies=("curl" "wget" "iperf3" "awk" "sed") # 更新包列表
if ! sudo apt-get update; then
echo -e "${RED}无法更新包列表。请检查您的网络连接和系统设置。${NC}"
exit 1
fi
# 安装依赖
local dependencies=(
"curl"
"wget"
)
for dep in "${dependencies[@]}"; do for dep in "${dependencies[@]}"; do
if ! command -v "$dep" &> /dev/null; then if ! command -v "$dep" &> /dev/null; then
@ -39,15 +47,20 @@ install_dependencies() {
done done
echo -e "${GREEN}依赖项检查和安装完成。${NC}" echo -e "${GREEN}依赖项检查和安装完成。${NC}"
clear
} }
# 获取IP地址 # 获取IP地址
get_ip_address() { ip_address() {
ipv4_address=$(curl -s --max-time 5 ipv4.ip.sb) ipv4_address=$(curl -s --max-time 5 ipv4.ip.sb)
[ -z "$ipv4_address" ] && ipv4_address=$(ip -4 addr show | grep -oP '(?<=inet\s)\d+(\.\d+){3}' | grep -v '127.0.0.1' | head -n1) if [ -z "$ipv4_address" ]; then
ipv4_address=$(ip -4 addr show | grep -oP '(?<=inet\s)\d+(\.\d+){3}' | grep -v '127.0.0.1' | head -n1)
fi
ipv6_address=$(curl -s --max-time 5 ipv6.ip.sb) ipv6_address=$(curl -s --max-time 5 ipv6.ip.sb)
[ -z "$ipv6_address" ] && ipv6_address=$(ip -6 addr show | grep -oP '(?<=inet6\s)[\da-f:]+' | grep -v '^::1' | grep -v '^fe80' | head -n1) if [ -z "$ipv6_address" ]; then
ipv6_address=$(ip -6 addr show | grep -oP '(?<=inet6\s)[\da-f:]+' | grep -v '^::1' | grep -v '^fe80' | head -n1)
fi
} }
# 检测VPS地理位置 # 检测VPS地理位置
@ -70,6 +83,23 @@ detect_region() {
esac esac
} }
# iperf3测试函数
run_iperf3_test() {
local servers=(
"iperf.he.net"
"iperf.biznetnetworks.com"
"iperf.scottlinux.com"
"bouygues.iperf.fr"
"ping.online.net"
)
for server in "${servers[@]}"; do
echo "测试服务器: $server"
iperf3 -c "$server" -t 30 -P 3
echo "----------------------------------------"
done
}
# 统计使用次数 # 统计使用次数
sum_run_times() { sum_run_times() {
local COUNT local COUNT
@ -84,14 +114,292 @@ sum_run_times() {
fi fi
} }
# 显示欢迎信息 # 调用函数获取统计数据
sum_run_times
# 更新系统
update_system() {
if command -v apt &>/dev/null; then
apt-get update && apt-get upgrade -y
elif command -v dnf &>/dev/null; then
dnf check-update && dnf upgrade -y
elif command -v yum &>/dev/null; then
yum check-update && yum upgrade -y
elif command -v apk &>/dev/null; then
apk update && apk upgrade
else
echo -e "${RED}不支持的Linux发行版${NC}"
return 1
fi
return 0
}
# 执行单个脚本并输出结果到文件
run_script() {
local script_number=$1
local output_file=$2
local temp_file=$(mktemp)
case $script_number in
# YABS
1)
echo -e "运行${YELLOW}YABS...${NC}"
wget -qO- yabs.sh | bash | tee "$temp_file"
sed -i 's/\x1B\[[0-9;]*[JKmsu]//g' "$temp_file"
sed -i 's/\.\.\./\.\.\.\n/g' "$temp_file"
sed -i '/\.\.\./d' "$temp_file"
sed -i '/^\s*$/d' "$temp_file"
cp "$temp_file" "${output_file}_yabs"
;;
# 融合怪
2)
echo -e "运行${YELLOW}融合怪...${NC}"
curl -L https://gitlab.com/spiritysdx/za/-/raw/main/ecs.sh -o ecs.sh && chmod +x ecs.sh && bash ecs.sh -m 1 <<< "y" | tee "$temp_file"
sed -i 's/\x1B\[[0-9;]*[JKmsu]//g' "$temp_file"
sed -i 's/\.\.\.\.\.\./\.\.\.\.\.\.\n/g' "$temp_file"
sed -i '1,/\.\.\.\.\.\./d' "$temp_file"
sed -i '1,/\.\.\.\.\.\./d' "$temp_file"
cp "$temp_file" "${output_file}_fusion"
;;
# IP质量
3)
echo -e "运行${YELLOW}IP质量测试...${NC}"
bash <(curl -Ls IP.Check.Place) | tee "$temp_file"
sed 's/\x1B\[[0-9;]*[JKmsu]//g; /\.\.\.\.\.\.\.\.\.\./d' "$temp_file" > "${output_file}_ip_quality"
;;
# 流媒体解锁
4)
echo -e "运行${YELLOW}流媒体解锁测试...${NC}"
local region=$(detect_region)
bash <(curl -L -s media.ispvps.com) <<< "$region" |tee "$temp_file"
sed 's/\x1B\[[0-9;]*[JKmsu]//g; 1,/脚本适配/d' "$temp_file" > "${output_file}_streaming"
;;
# 响应测试
5)
echo -e "运行${YELLOW}响应测试...${NC}"
bash <(curl -sL https://nodebench.mereith.com/scripts/curltime.sh) |tee "$temp_file"
sed 's/\x1B\[[0-9;]*[JKmsu]//g' "$temp_file" > "${output_file}_response"
;;
# 多线程测速
6)
echo -e "运行${YELLOW}多线程测速...${NC}"
bash <(curl -sL bash.icu/speedtest) <<< "1" |tee "$temp_file"
sed -r -i 's/\x1B\[[0-9;]*[JKmsu]//g' "$temp_file"
sed -i -r '1,/序号\:/d' "$temp_file"
sed -i -r 's/(⠋|⠙|⠹|⠸|⠼|⠴|⠦|⠧|⠇|⠏)/\n/g' "$temp_file"
sed -i -r '/测试进行中/d' "$temp_file"
cp "$temp_file" "${output_file}_multi_thread"
;;
# 单线程测速
7)
echo -e "运行${YELLOW}单线程测速...${NC}"
bash <(curl -sL bash.icu/speedtest) <<< "2" |tee "$temp_file"
sed -r -i 's/\x1B\[[0-9;]*[JKmsu]//g' "$temp_file"
sed -i -r '1,/序号\:/d' "$temp_file"
sed -i -r 's/(⠋|⠙|⠹|⠸|⠼|⠴|⠦|⠧|⠇|⠏)/\n/g' "$temp_file"
sed -i -r '/测试进行中/d' "$temp_file"
cp "$temp_file" "${output_file}_single_thread"
;;
# 回程路由
8)
echo -e "运行${YELLOW}回程路由测试...${NC}"
wget -N --no-check-certificate https://raw.githubusercontent.com/Chennhaoo/Shell_Bash/master/AutoTrace.sh && chmod +x AutoTrace.sh && bash AutoTrace.sh <<< "1" |tee "$temp_file"
sed 's/\x1B\[[0-9;]*[JKmsu]//g' -e ' /测试项/,+9d' -e '/信息/d' -e '/^\s*$/d' "$temp_file" > "${output_file}_route"
;;
# iperf3测试
9)
echo -e "运行${YELLOW}iperf3测试...${NC}"
run_iperf3_test | tee "$temp_file"
sed -e 's/\x1B\[[0-9;]*[JKmsu]//g' "$temp_file" > "${output_file}_iperf3"
;;
esac
rm "$temp_file"
echo -e "${GREEN}测试完成。${NC}"
}
# 生成最终的 Markdown 输出
generate_markdown_output() {
local base_output_file=$1
local final_output_file="${base_output_file}.md"
echo "[tabs]" > "$final_output_file"
echo "[tab=\"YABS\"]" >> "$final_output_file"
echo "\`\`\`" >> "$final_output_file"
if [ -f "${base_output_file}_yabs" ]; then
cat "${base_output_file}_yabs" >> "$final_output_file"
rm "${base_output_file}_yabs"
fi
echo "\`\`\`" >> "$final_output_file"
echo "[/tab]" >> "$final_output_file"
echo "[tab=\"融合怪\"]" >> "$final_output_file"
echo "\`\`\`" >> "$final_output_file"
if [ -f "${base_output_file}_fusion" ]; then
cat "${base_output_file}_fusion" >> "$final_output_file"
rm "${base_output_file}_fusion"
fi
echo "\`\`\`" >> "$final_output_file"
echo "[/tab]" >> "$final_output_file"
echo "[tab=\"IP质量\"]" >> "$final_output_file"
if [ -f "${base_output_file}_ip_quality" ]; then
cat "${base_output_file}_ip_quality" >> "$final_output_file"
rm "${base_output_file}_ip_quality"
fi
echo "[/tab]" >> "$final_output_file"
echo "[tab=\"流媒体\"]" >> "$final_output_file"
echo "\`\`\`" >> "$final_output_file"
if [ -f "${base_output_file}_streaming" ]; then
cat "${base_output_file}_streaming" >> "$final_output_file"
rm "${base_output_file}_streaming"
fi
echo "\`\`\`" >> "$final_output_file"
echo "[/tab]" >> "$final_output_file"
echo "[tab=\"响应\"]" >> "$final_output_file"
echo "\`\`\`" >> "$final_output_file"
if [ -f "${base_output_file}_response" ]; then
cat "${base_output_file}_response" >> "$final_output_file"
rm "${base_output_file}_response"
fi
echo "\`\`\`" >> "$final_output_file"
echo "[/tab]" >> "$final_output_file"
echo "[tab=\"多线程测速\"]" >> "$final_output_file"
echo "\`\`\`" >> "$final_output_file"
if [ -f "${base_output_file}_multi_thread" ]; then
cat "${base_output_file}_multi_thread" >> "$final_output_file"
rm "${base_output_file}_multi_thread"
fi
echo "\`\`\`" >> "$final_output_file"
echo "[/tab]" >> "$final_output_file"
echo "[tab=\"单线程测速\"]" >> "$final_output_file"
echo "\`\`\`" >> "$final_output_file"
if [ -f "${base_output_file}_single_thread" ]; then
cat "${base_output_file}_single_thread" >> "$final_output_file"
rm "${base_output_file}_single_thread"
fi
echo "\`\`\`" >> "$final_output_file"
echo "[/tab]" >> "$final_output_file"
echo "[tab=\"iperf3\"]" >> "$final_output_file"
echo "\`\`\`" >> "$final_output_file"
if [ -f "${base_output_file}_iperf3" ]; then
cat "${base_output_file}_iperf3" >> "$final_output_file"
rm "${base_output_file}_iperf3"
fi
echo "\`\`\`" >> "$final_output_file"
echo "[/tab]" >> "$final_output_file"
echo "[tab=\"回程路由\"]" >> "$final_output_file"
echo "\`\`\`" >> "$final_output_file"
if [ -f "${base_output_file}_route" ]; then
cat "${base_output_file}_route" >> "$final_output_file"
rm "${base_output_file}_route"
fi
echo "\`\`\`" >> "$final_output_file"
echo "[/tab]" >> "$final_output_file"
echo "[tab=\"去程路由\"]" >> "$final_output_file"
echo "[/tab]" >> "$final_output_file"
echo "[tab=\"Ping.pe\"]" >> "$final_output_file"
echo "[/tab]" >> "$final_output_file"
echo "[tab=\"哪吒 ICMP\"]" >> "$final_output_file"
echo "[/tab]" >> "$final_output_file"
echo "[tab=\"其他\"]" >> "$final_output_file"
echo "[/tab]" >> "$final_output_file"
echo "[/tabs]" >> "$final_output_file"
echo "所有测试完成,结果已保存在 $final_output_file 中。"
read -p "按回车键继续..."
clear
}
# 执行全部脚本
run_all_scripts() {
local base_output_file="NLvps_results_$(date +%Y%m%d_%H%M%S)"
echo "开始执行全部测试脚本..."
for i in {1..8}; do
run_script $i "$base_output_file"
done
generate_markdown_output "$base_output_file"
clear
}
# 执行选定的脚本
run_selected_scripts() {
clear
local base_output_file="NLvps_results_$(date +%Y%m%d_%H%M%S)"
echo -e "${YELLOW}Nodeloc VPS 自动测试脚本 $VERSION${NC}"
echo "1. Yabs"
echo "2. 融合怪"
echo "3. IP质量"
echo "4. 流媒体解锁"
echo "5. 响应测试"
echo "6. 多线程测试"
echo "7. 单线程测试"
echo "8. 回程路由"
echo "9. iperf3测试"
echo "0. 返回"
read -p "请输入要执行的脚本编号用逗号分隔例如1,2,3):" script_numbers
IFS=',' read -ra selected_scripts <<< "$script_numbers"
echo "开始执行选定的测试脚本..."
if [ $script_numbers == "0" ]
then
clear
show_welcome
else
for number in "${selected_scripts[@]}"; do
clear
run_script "$number" "$base_output_file"
done
generate_markdown_output "$base_output_file"
fi
}
# 主菜单
main_menu() {
echo -e "${GREEN}测试项目:${NC}Yabs融合怪IP质量流媒体解锁响应测试多线程测试单线程测试回程路由。"
echo -e "${YELLOW}1. 执行所有测试脚本${NC}"
echo -e "${YELLOW}2. 选择特定测试脚本${NC}"
echo -e "${YELLOW}0. 退出${NC}"
read -p "请选择操作 [0-2]: " choice
case $choice in
1)
run_all_scripts
;;
2)
run_selected_scripts
;;
0)
echo -e "${RED}感谢使用NodeLoc聚合测试脚本已退出脚本期待你的下次使用${NC}"
exit 0
;;
*)
echo -e "${RED}无效选择,请重新输入。${NC}"
sleep 3s
clear
show_welcome
;;
esac
}
# 输出欢迎信息
show_welcome() { show_welcome() {
echo "" echo ""
echo -e "${RED}---------------------------------By'Jensfrank---------------------------------${NC}" echo -e "${RED}---------------------------------By'Jensfrank---------------------------------${NC}"
echo "" echo ""
echo "Nodeloc_VPS_自动脚本测试 $VERSION" echo -e "${GREEN}Nodeloc VPS 自动测试脚本 $VERSION${NC}"
echo "GitHub地址: https://github.com/everett7623/nodeloc_vps_test" echo -e "${GREEN}GitHub地址: https://github.com/everett7623/nodeloc_vps_test${NC}"
echo "VPS选购: https://www.nodeloc.com/vps" echo -e "${GREEN}VPS选购: https://www.nodeloc.com/vps${NC}"
echo "" echo ""
echo -e "${YELLOW}# # ##### #### ###### # #### #### # # #### ####${NC}" echo -e "${YELLOW}# # ##### #### ###### # #### #### # # #### ####${NC}"
echo -e "${YELLOW}## # # # # # # # # # # # # # # # # #${NC}" echo -e "${YELLOW}## # # # # # # # # # # # # # # # # #${NC}"
@ -108,234 +416,20 @@ show_welcome() {
echo "" echo ""
} }
# Markdown 转义函数
escape_markdown() {
sed -E 's/\x1b\[[0-9;]*[a-zA-Z]//g'
}
# 执行YABS测试
run_yabs() {
echo "执行YABS测试..."
yabs_result=$(wget -qO- yabs.sh | bash)
echo "$yabs_result" | escape_markdown > yabs_result.txt
}
# 执行融合怪测试
run_fusion() {
echo "执行融合怪测试..."
fusion_result=$(curl -L https://gitlab.com/spiritysdx/za/-/raw/main/ecs.sh -o ecs.sh && chmod +x ecs.sh && bash ecs.sh)
echo "$fusion_result" | awk '/A Bench Script/{f=1} f; /短链/{f=0}' | escape_markdown > fusion_result.txt
}
# 执行IP质量测试
run_ip_quality() {
echo "执行IP质量测试..."
ip_quality_result=$(bash <(curl -Ls IP.Check.Place))
local start_line=$(echo "$ip_quality_result" | grep -n '正在检测黑名单数据库' | tail -n 1 | cut -d ':' -f 1)
start_line=$((start_line + 1)) # 移动到下一行
local end_line=$(echo "$ip_quality_result" | grep -n '按回车键返回主菜单' | head -n 1 | cut -d ':' -f 1)
if [ -n "$start_line" ] && [ -n "$end_line" ]; then
ip_quality_result=$(tail -n +"$start_line" <<< "$ip_quality_result" | head -n $(($end_line - $start_line)) | escape_markdown)
elif [ -n "$start_line" ]; then
ip_quality_result=$(tail -n +"$start_line" <<< "$ip_quality_result" | escape_markdown)
fi
echo "$ip_quality_result" > ip_quality_result.txt
}
# 执行流媒体解锁测试
run_streaming() {
echo "执行流媒体解锁测试..."
region=$(detect_region)
streaming_result=$(bash <(curl -L -s media.ispvps.com) $region)
echo "$streaming_result" | awk '/项目地址/{f=1} f; /检测脚本当天运行次数/{f=0}' | escape_markdown > streaming_result.txt
}
# 执行响应测试
run_response() {
echo "执行响应测试..."
response_result=$(bash <(curl -sL https://nodebench.mereith.com/scripts/curltime.sh))
echo "$response_result" | escape_markdown > response_result.txt
}
# 执行三网测速(多线程)
run_speedtest_multi() {
echo "执行三网测速(多线程)..."
speedtest_multi_result=$(bash <(curl -sL bash.icu/speedtest) 1)
echo "$speedtest_multi_result" | sed -e '1,/序号\:/d' -e '/测试进行中/d' -e '/^\s*$/d' | escape_markdown > speedtest_multi_result.txt
}
# 执行三网测速(单线程)
run_speedtest_single() {
echo "执行三网测速(单线程)..."
speedtest_single_result=$(bash <(curl -sL bash.icu/speedtest) 2)
echo "$speedtest_single_result" | sed -e '1,/序号\:/d' -e '/测试进行中/d' -e '/^\s*$/d' | escape_markdown > speedtest_single_result.txt
}
# 执行回程路由测试
run_traceroute() {
echo "执行回程路由测试..."
traceroute_result=$(wget -N --no-check-certificate https://raw.githubusercontent.com/Chennhaoo/Shell_Bash/master/AutoTrace.sh && chmod +x AutoTrace.sh && bash AutoTrace.sh)
echo "$traceroute_result" | sed -e '/测试项/,+9d' -e '/信息/d' -e '/^\s*$/d' | escape_markdown > traceroute_result.txt
}
# 生成Markdown文件
generate_markdown() {
local output_file="nodeloc_vps_test_$(date +%Y%m%d_%H%M%S).md"
{
echo "# VPS 测试结果"
echo "测试时间:$(date)"
echo ""
echo "## 系统信息"
echo "- IPv4: $ipv4_address"
echo "- IPv6: $ipv6_address"
echo ""
echo "[tabs]"
echo "[tab=\"YABS\"]"
echo "\`\`\`"
cat yabs_result.txt
echo "\`\`\`"
echo "[/tab]"
echo "[tab=\"融合怪\"]"
echo "\`\`\`"
cat fusion_result.txt
echo "\`\`\`"
echo "[/tab]"
echo "[tab=\"IP质量\"]"
echo "\`\`\`"
echo "########################################################################"
cat ip_quality_result.txt
echo "\`\`\`"
echo "[/tab]"
echo "[tab=\"流媒体\"]"
echo "\`\`\`"
cat streaming_result.txt
echo "\`\`\`"
echo "[/tab]"
echo "[tab=\"响应\"]"
echo "\`\`\`"
cat response_result.txt
echo "\`\`\`"
echo "[/tab]"
echo "[tab=\"多线程测速\"]"
echo "\`\`\`"
cat speedtest_multi_result.txt
echo "\`\`\`"
echo "[/tab]"
echo "[tab=\"单线程测速\"]"
echo "\`\`\`"
cat speedtest_single_result.txt
echo "\`\`\`"
echo "[/tab]"
echo "[tab=\"回程路由\"]"
echo "\`\`\`"
cat traceroute_result.txt
echo "\`\`\`"
echo "[/tab]"
echo "[tab=\"去程路由\"]"
echo "[/tab]"
echo "[tab=\"iperf3\"]"
echo "\`\`\`"
echo "\`\`\`"
echo "[/tab]"
echo "[tab=\"Ping.pe\"]"
echo "[/tab]"
echo "[tab=\"哪吒 ICMP\"]"
echo "[/tab]"
echo "[tab=\"其他\"]"
echo "[/tab]"
echo "[/tabs]"
} > "$output_file"
echo "测试结果已保存到 $output_file"
}
# 主函数 # 主函数
main() { main() {
check_root # 检查并安装依赖
install_dependencies install_dependencies
get_ip_address
# 获取统计数据
sum_run_times sum_run_times
show_welcome
# 主循环
while true; do while true; do
echo "请选择测试选项:" show_welcome
echo "1. 测试全部脚本" main_menu
echo "2. 选择特定脚本测试"
echo "0. 退出"
read -p "请输入选项 (0-2): " option
case $option in
1)
run_yabs
run_fusion
run_ip_quality
run_streaming
run_response
run_speedtest_multi
run_speedtest_single
run_traceroute
break
;;
2)
echo "请输入要测试的脚本编号用逗号分隔如1,2,3:"
echo "1. Yabs"
echo "2. 融合怪"
echo "3. IP质量"
echo "4. 流媒体解锁"
echo "5. 响应测试"
echo "6. 多线程测试"
echo "7. 单线程测试"
echo "8. 回程路由"
read -p "输入选择: " scripts
IFS=',' read -ra ADDR <<< "$scripts"
for i in "${ADDR[@]}"; do
case $i in
1) run_yabs ;;
2) run_fusion ;;
3) run_ip_quality ;;
4) run_streaming ;;
5) run_response ;;
6) run_speedtest_multi ;;
7) run_speedtest_single ;;
8) run_traceroute ;;
*) echo "无效的选项: $i" ;;
esac
done
break
;;
0)
echo "感谢使用,再见!"
exit 0
;;
*)
echo "无效的选项,请重新输入。"
;;
esac
done done
generate_markdown
# 清理临时文件
rm -f yabs_result.txt fusion_result.txt ip_quality_result.txt streaming_result.txt response_result.txt speedtest_multi_result.txt speedtest_single_result.txt traceroute_result.txt
echo "测试完成!结果已保存到 nodeloc_vps_test_$(date +%Y%m%d_%H%M%S).md"
} }
# 行主函数 # 运行主函数
main main