#!/bin/bash PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin export PATH Green_font="\033[32m" && Red_font="\033[31m" && Font_suffix="\033[0m" Info="${Green_font}[Info]${Font_suffix}" Error="${Red_font}[Error]${Font_suffix}" echo -e "${Green_font} #====================================== # Project: testrace # Version: 0.0.1 # Blog: https://vpsxb.net #====================================== ${Font_suffix}" check_system(){ if [[ ! -z "`cat /etc/issue | grep -iE "debian"`" ]]; then apt-get install traceroute mtr -y elif [[ ! -z "`cat /etc/issue | grep -iE "ubuntu"`" ]]; then apt-get install traceroute mtr -y elif [[ ! -z "`cat /etc/redhat-release | grep -iE "CentOS"`" ]]; then yum install traceroute mtr -y else echo -e "${Error} system not support!" && exit 1 fi } check_root(){ [[ "`id -u`" != "0" ]] && echo -e "${Error} must be root user !" && exit 1 } directory(){ cd /usr/local/bin } install(){ [[ ! -f /usr/local/bin/nexttrace ]] && bash <(curl -Ls https://raw.githubusercontent.com/sjlleo/nexttrace/main/nt_install.sh) [[ ! -f /usr/local/bin/nexttrace ]] && echo -e "${Error} download failed, please check!" && exit 1 } test_single_tcp(){ echo -e "${Info} 请输入你要测试的目标 ip :" read -p "输入 ip 地址:" ip while [[ -z "${ip}" ]] do echo -e "${Error} 无效输入" echo -e "${Info} 请重新输入" && read -p "输入 ip 地址:" ip done ./nexttrace -T -q 1 -g cn ${ip} repeat_test_single_tcp } repeat_test_single_tcp(){ echo -e "${Info} 是否继续测试其他目标 ip ?" echo -e "1.是\n2.否" read -p "请选择:" whether_repeat_single while [[ ! "${whether_repeat_single}" =~ ^[1-2]$ ]] do echo -e "${Error} 无效输入" echo -e "${Info} 请重新输入" && read -p "请选择:" whether_repeat_single done [[ "${whether_repeat_single}" == "1" ]] && test_single_tcp [[ "${whether_repeat_single}" == "2" ]] && echo -e "${Info} 退出脚本 ..." && exit 0 } test_alternative_tcp(){ select_alternative_tcp set_alternative_tcp result_alternative_tcp } select_alternative_tcp(){ echo -e "${Info} 选择需要测速的目标网络: \n1.中国电信\n2.中国联通\n3.中国移动\n4.教育网" read -p "输入数字以选择:" ISP while [[ ! "${ISP}" =~ ^[1-4]$ ]] do echo -e "${Error} 无效输入" echo -e "${Info} 请重新选择" && read -p "输入数字以选择:" ISP done } set_alternative_tcp(){ [[ "${ISP}" == "1" ]] && node_1 [[ "${ISP}" == "2" ]] && node_2 [[ "${ISP}" == "3" ]] && node_3 [[ "${ISP}" == "4" ]] && node_4 } node_1(){ echo -e "1.上海电信\n2.上海CN2\n3.厦门CN2\n4.杭州电信\n5.嘉兴电信\n6.广州电信(天翼云)\n7.北京电信" && read -p "输入数字以选择:" node while [[ ! "${node}" =~ ^[1-7]$ ]] do echo -e "${Error} 无效输入" echo -e "${Info} 请重新选择" && read -p "输入数字以选择:" node done [[ "${node}" == "1" ]] && ISP_name="上海电信" && ip=ipv4.sha-4134.endpoint.nxtrace.org [[ "${node}" == "2" ]] && ISP_name="上海CN2" && ip=ipv4.sha-4809.endpoint.nxtrace.org [[ "${node}" == "3" ]] && ISP_name="厦门CN2" && ip=117.28.254.129 [[ "${node}" == "4" ]] && ISP_name="杭州电信" && ip=ipv4.hgh-4134.endpoint.nxtrace.org [[ "${node}" == "5" ]] && ISP_name="嘉兴电信" && ip=183.134.62.129 [[ "${node}" == "6" ]] && ISP_name="广州电信" && ip=ipv4.can-4134.endpoint.nxtrace.org [[ "${node}" == "7" ]] && ISP_name="北京电信" && ip=ipv4.pek-4134.endpoint.nxtrace.org } node_2(){ echo -e "1.广州联通\n2.北京联通\n3.杭州联通\n4.安徽合肥联通\n5.嘉兴联通\n6.上海联通\n7.上海联通9929" && read -p "输入数字以选择:" node while [[ ! "${node}" =~ ^[1-7]$ ]] do echo -e "${Error} 无效输入" echo -e "${Info} 请重新选择" && read -p "输入数字以选择:" node done [[ "${node}" == "1" ]] && ISP_name="广州联通" && ip=ipv4.can-4837.endpoint.nxtrace.org [[ "${node}" == "2" ]] && ISP_name="北京联通" && ip=ipv4.pek-4837.endpoint.nxtrace.org [[ "${node}" == "3" ]] && ISP_name="杭州联通" && ip=ipv4.hgh-4837.endpoint.nxtrace.org [[ "${node}" == "4" ]] && ISP_name="安徽合肥联通" && ip=112.122.10.26 [[ "${node}" == "5" ]] && ISP_name="嘉兴联通" && ip=60.12.95.255 [[ "${node}" == "6" ]] && ISP_name="上海联通" && ip=ipv4.sha-4837.endpoint.nxtrace.org [[ "${node}" == "7" ]] && ISP_name="上海联通9929" && ip=ipv4.sha-9929.endpoint.nxtrace.org } node_3(){ echo -e "1.上海移动\n2.深圳移动\n3.北京移动\n4.嘉兴移动\n5.杭州移动" && read -p "输入数字以选择:" node while [[ ! "${node}" =~ ^[1-5]$ ]] do echo -e "${Error} 无效输入" echo -e "${Info} 请重新选择" && read -p "输入数字以选择:" node done [[ "${node}" == "1" ]] && ISP_name="上海移动" && ip=ipv4.sha-9808.endpoint.nxtrace.org [[ "${node}" == "2" ]] && ISP_name="广州移动" && ip=ipv4.can-9808.endpoint.nxtrace.org [[ "${node}" == "3" ]] && ISP_name="北京移动" && ip=ipv4.pek-9808.endpoint.nxtrace.org [[ "${node}" == "4" ]] && ISP_name="嘉兴移动" && ip=223.95.245.102 [[ "${node}" == "5" ]] && ISP_name="杭州移动" && ip=ipv4.hgh-9808.endpoint.nxtrace.org } node_4(){ ISP_name="北京教育网" && ip=101.4.117.213 } result_alternative_tcp(){ echo -e "${Info} 测试路由 到 ${ISP_name} 中 ..." ./nexttrace -T -q 1 -g cn ${ip} echo -e "${Info} 测试路由 到 ${ISP_name} 完成 !" repeat_test_alternative_tcp } repeat_test_alternative_tcp(){ echo -e "${Info} 是否继续测试其他节点?" echo -e "1.是\n2.否" read -p "请选择:" whether_repeat_alternative while [[ ! "${whether_repeat_alternative}" =~ ^[1-2]$ ]] do echo -e "${Error} 无效输入" echo -e "${Info} 请重新输入" && read -p "请选择:" whether_repeat_alternative done [[ "${whether_repeat_alternative}" == "1" ]] && test_alternative_tcp [[ "${whether_repeat_alternative}" == "2" ]] && echo -e "${Info} 退出脚本 ..." && exit 0 } test_all_tcp(){ result_all_tcp 'ipv4.sha-4134.endpoint.nxtrace.org' '上海电信' result_all_tcp 'ipv4.sha-4809.endpoint.nxtrace.org' '上海CN2' result_all_tcp 'ipv4.sha-4837.endpoint.nxtrace.org' '上海联通' result_all_tcp 'ipv4.sha-9929.endpoint.nxtrace.org' '上海联通9929' result_all_tcp 'ipv4.sha-9808.endpoint.nxtrace.org' '上海移动' result_all_tcp 'ipv4.can-9808.endpoint.nxtrace.org' '广州移动' result_all_tcp 'ipv4.hgh-4538.endpoint.nxtrace.org' '杭州教育网' echo -e "${Info} 四网路由快速测试 已完成 !" } result_all_tcp(){ ISP_name=$2 echo -e "${Info} 测试路由 到 ${ISP_name} 中 ..." ./nexttrace -T -q 1 -g cn $1 echo -e "${Info} 测试路由 到 ${ISP_name} 完成 !" } test_all_tcp(){ result_all_tcp 'ipv4.sha-4134.endpoint.nxtrace.org' '上海电信' result_all_tcp 'ipv4.sha-4809.endpoint.nxtrace.org' '上海CN2' result_all_tcp 'ipv4.sha-4837.endpoint.nxtrace.org' '上海联通' result_all_tcp 'ipv4.sha-9929.endpoint.nxtrace.org' '上海联通9929' result_all_tcp 'ipv4.sha-9808.endpoint.nxtrace.org' '上海移动' result_all_tcp 'ipv4.can-9808.endpoint.nxtrace.org' '广州移动' result_all_tcp 'ipv4.hgh-4538.endpoint.nxtrace.org' '杭州教育网' echo -e "${Info} 四网路由快速测试 已完成 !" } test_single(){ echo -e "${Info} 请输入你要测试的目标 ip :" read -p "输入 ip 地址:" ip while [[ -z "${ip}" ]] do echo -e "${Error} 无效输入" echo -e "${Info} 请重新输入" && read -p "输入 ip 地址:" ip done ./nexttrace -q 1 -g cn ${ip} repeat_test_single } repeat_test_single(){ echo -e "${Info} 是否继续测试其他目标 ip ?" echo -e "1.是\n2.否" read -p "请选择:" whether_repeat_single while [[ ! "${whether_repeat_single}" =~ ^[1-2]$ ]] do echo -e "${Error} 无效输入" echo -e "${Info} 请重新输入" && read -p "请选择:" whether_repeat_single done [[ "${whether_repeat_single}" == "1" ]] && test_single [[ "${whether_repeat_single}" == "2" ]] && echo -e "${Info} 退出脚本 ..." && exit 0 } test_alternative(){ select_alternative set_alternative result_alternative } select_alternative(){ echo -e "${Info} 选择需要测速的目标网络: \n1.中国电信\n2.中国联通\n3.中国移动\n4.教育网" read -p "输入数字以选择:" ISP while [[ ! "${ISP}" =~ ^[1-4]$ ]] do echo -e "${Error} 无效输入" echo -e "${Info} 请重新选择" && read -p "输入数字以选择:" ISP done } set_alternative(){ [[ "${ISP}" == "1" ]] && node_1 [[ "${ISP}" == "2" ]] && node_2 [[ "${ISP}" == "3" ]] && node_3 [[ "${ISP}" == "4" ]] && node_4 } node_1(){ echo -e "1.上海电信\n2.上海CN2\n3.厦门CN2\n4.杭州电信\n5.嘉兴电信\n6.广州电信\n7.北京电信" && read -p "输入数字以选择:" node while [[ ! "${node}" =~ ^[1-7]$ ]] do echo -e "${Error} 无效输入" echo -e "${Info} 请重新选择" && read -p "输入数字以选择:" node done [[ "${node}" == "1" ]] && ISP_name="上海电信" && ip=ipv4.sha-4134.endpoint.nxtrace.org [[ "${node}" == "2" ]] && ISP_name="上海CN2" && ip=ipv4.sha-4809.endpoint.nxtrace.org [[ "${node}" == "3" ]] && ISP_name="厦门CN2" && ip=117.28.254.129 [[ "${node}" == "4" ]] && ISP_name="杭州电信" && ip=ipv4.hgh-4134.endpoint.nxtrace.org [[ "${node}" == "5" ]] && ISP_name="嘉兴电信" && ip=183.134.62.129 [[ "${node}" == "6" ]] && ISP_name="广州电信" && ip=ipv4.can-4134.endpoint.nxtrace.org [[ "${node}" == "7" ]] && ISP_name="北京电信" && ip=ipv4.pek-4134.endpoint.nxtrace.org } node_2(){ echo -e "1.深圳联通\n2.北京联通\n3.杭州联通\n4.安徽合肥联通\n5.嘉兴联通\n6.上海联通\n7.上海联通9929" && read -p "输入数字以选择:" node while [[ ! "${node}" =~ ^[1-7]$ ]] do echo -e "${Error} 无效输入" echo -e "${Info} 请重新选择" && read -p "输入数字以选择:" node done [[ "${node}" == "1" ]] && ISP_name="广州联通" && ip=ipv4.can-4837.endpoint.nxtrace.org [[ "${node}" == "2" ]] && ISP_name="北京联通" && ip=ipv4.pek-4837.endpoint.nxtrace.org [[ "${node}" == "3" ]] && ISP_name="杭州联通" && ip=ipv4.hgh-4837.endpoint.nxtrace.org [[ "${node}" == "4" ]] && ISP_name="安徽合肥联通" && ip=112.122.10.26 [[ "${node}" == "5" ]] && ISP_name="嘉兴联通" && ip=60.12.95.255 [[ "${node}" == "6" ]] && ISP_name="上海联通" && ip=ipv4.sha-4837.endpoint.nxtrace.org [[ "${node}" == "7" ]] && ISP_name="上海联通9929" && ip=ipv4.sha-9929.endpoint.nxtrace.org } node_3(){ echo -e "1.上海移动\n2.广州移动\n3.北京移动\n4.广移V6\n5.杭州移动" && read -p "输入数字以选择:" node while [[ ! "${node}" =~ ^[1-5]$ ]] do echo -e "${Error} 无效输入" echo -e "${Info} 请重新选择" && read -p "输入数字以选择:" node done [[ "${node}" == "1" ]] && ISP_name="上海移动" && ip=ipv4.sha-9808.endpoint.nxtrace.org [[ "${node}" == "2" ]] && ISP_name="广州移动" && ip=ipv4.can-9808.endpoint.nxtrace.org [[ "${node}" == "3" ]] && ISP_name="北京移动" && ip=ipv4.pek-9808.endpoint.nxtrace.org [[ "${node}" == "4" ]] && ISP_name="广移V6" && ip=ipv6.can-9808.endpoint.nxtrace.org [[ "${node}" == "5" ]] && ISP_name="杭州移动" && ip=ipv4.hgh-9808.endpoint.nxtrace.org } node_4(){ ISP_name="北京教育网" && ip=101.4.117.213 } result_alternative(){ echo -e "${Info} 测试路由 到 ${ISP_name} 中 ..." ./nexttrace -q 1 -g cn ${ip} echo -e "${Info} 测试路由 到 ${ISP_name} 完成 !" repeat_test_alternative } repeat_test_alternative(){ echo -e "${Info} 是否继续测试其他节点?" echo -e "1.是\n2.否" read -p "请选择:" whether_repeat_alternative while [[ ! "${whether_repeat_alternative}" =~ ^[1-2]$ ]] do echo -e "${Error} 无效输入" echo -e "${Info} 请重新输入" && read -p "请选择:" whether_repeat_alternative done [[ "${whether_repeat_alternative}" == "1" ]] && test_alternative [[ "${whether_repeat_alternative}" == "2" ]] && echo -e "${Info} 退出脚本 ..." && exit 0 } test_all(){ result_all 'ipv4.sha-4134.endpoint.nxtrace.org' '上海电信' result_all 'ipv4.sha-4809.endpoint.nxtrace.org' '上海CN2' result_all 'ipv4.sha-4837.endpoint.nxtrace.org' '上海联通' result_all 'ipv4.sha-9929.endpoint.nxtrace.org' '上海联通9929' result_all 'ipv4.sha-9808.endpoint.nxtrace.org' '上海移动' result_all 'ipv4.can-9808.endpoint.nxtrace.org' '广州移动' result_all 'ipv4.hgh-4538.endpoint.nxtrace.org' '杭州教育网' echo -e "${Info} 四网路由快速测试 已完成 !" } result_all(){ ISP_name=$2 echo -e "${Info} 测试路由 到 ${ISP_name} 中 ..." ./nexttrace -q 1 -g cn $1 echo -e "${Info} 测试路由 到 ${ISP_name} 完成 !" } test_all(){ result_all 'ipv4.sha-4134.endpoint.nxtrace.org' '上海电信' result_all 'ipv4.sha-4809.endpoint.nxtrace.org' '上海CN2' result_all 'ipv4.sha-4837.endpoint.nxtrace.org' '上海联通' result_all 'ipv4.sha-9929.endpoint.nxtrace.org' '上海联通9929' result_all 'ipv4.sha-9808.endpoint.nxtrace.org' '上海移动' result_all 'ipv4.can-9808.endpoint.nxtrace.org' '广州移动' result_all 'ipv4.hgh-4538.endpoint.nxtrace.org' '杭州教育网' echo -e "${Info} 四网路由快速测试 已完成 !" } test_allv6(){ result_all 'ipv6.sha-4134.endpoint.nxtrace.org' '上海电信' # result_all '58.32.0.1' '上海CN2' result_all 'ipv6.sha-4837.endpoint.nxtrace.org' '上海联通' result_all 'ipv6.sha-9929.endpoint.nxtrace.org' '上海9929' result_all 'ipv6.sha-9808.endpoint.nxtrace.org' '上海移动' result_all 'ipv6.can-9808.endpoint.nxtrace.org' '广州移动' result_all '2001:da8:8000:12d::2' '教育网' echo -e "${Info} 路由快速测试 已完成 !" } #check_system check_root directory install cd /usr/local/bin echo -e "${Info} 选择你要使用的功能: " echo "--------------------------------" echo -e "1.选择一个运营商进行测试(tcp)\n2.四网路由快速测试(tcp)\n3.手动输入ip进行测试(tcp)\n4.选择一个运营商进行测试(icmp)\n5.四网路由快速测试(icmp)\n6.手动输入ip进行测试(icmp)\n7.四网IPV6路由测试(icmp):" echo "--------------------------------" echo -e "广告位:" echo -e "垃圾场加速器:" echo -e "https://lajic.eu/index.php#/register?code=OAM8uBQl" echo "--------------------------------" read -p "输入数字以选择:" function while [[ ! "${function}" =~ ^[1-7]$ ]] do echo -e "${Error} 缺少或无效输入" echo -e "${Info} 请重新选择" && read -p "输入数字以选择:" function done if [[ "${function}" == "1" ]]; then test_alternative_tcp elif [[ "${function}" == "2" ]]; then test_all_tcp elif [[ "${function}" == "3" ]]; then test_single_tcp elif [[ "${function}" == "4" ]]; then test_alternative elif [[ "${function}" == "5" ]]; then test_all elif [[ "${function}" == "6" ]]; then test_single elif [[ "${function}" == "7" ]]; then test_allv6 fi