#!/usr/bin/env bash

# Colors
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[0;33m'
BLUE='\033[0;34m'
PURPLE="\033[0;35m"
CYAN='\033[0;36m'
PLAIN='\033[0m'

checkroot(){
	[[ $EUID -ne 0 ]] && echo -e "${RED}请使用 root 用户运行本脚本！${PLAIN}" && exit 1
}

checksystem() {
	if [ -f /etc/redhat-release ]; then
	    release="centos"
	elif cat /etc/issue | grep -Eqi "debian"; then
	    release="debian"
	elif cat /etc/issue | grep -Eqi "ubuntu"; then
	    release="ubuntu"
	elif cat /etc/issue | grep -Eqi "centos|red hat|redhat"; then
	    release="centos"
	elif cat /proc/version | grep -Eqi "debian"; then
	    release="debian"
	elif cat /proc/version | grep -Eqi "ubuntu"; then
	    release="ubuntu"
	elif cat /proc/version | grep -Eqi "centos|red hat|redhat"; then
	    release="centos"
	fi
}

checkpython() {
	if  [ ! -e '/usr/bin/python' ]; then
	        echo "正在安装 Python"
	            if [ "${release}" == "centos" ]; then
	            		yum update > /dev/null 2>&1
	                    yum -y install python > /dev/null 2>&1
	                else
	                	apt-get update > /dev/null 2>&1
	                    apt-get -y install python > /dev/null 2>&1
	                fi
	        
	fi
}

checkcurl() {
	if  [ ! -e '/usr/bin/curl' ]; then
	        echo "正在安装 Curl"
	            if [ "${release}" == "centos" ]; then
	                yum update > /dev/null 2>&1
	                yum -y install curl > /dev/null 2>&1
	            else
	                apt-get update > /dev/null 2>&1
	                apt-get -y install curl > /dev/null 2>&1
	            fi
	fi
}

checkwget() {
	if  [ ! -e '/usr/bin/wget' ]; then
	        echo "正在安装 Wget"
	            if [ "${release}" == "centos" ]; then
	                yum update > /dev/null 2>&1
	                yum -y install wget > /dev/null 2>&1
	            else
	                apt-get update > /dev/null 2>&1
	                apt-get -y install wget > /dev/null 2>&1
	            fi
	fi
}

checkspeedtest() {
	if  [ ! -e './speedtest-cli/speedtest' ]; then
		echo "正在安装 Speedtest-cli"
		#wget --no-check-certificate -qO speedtest.tgz https://bintray.com/ookla/download/download_file?file_path=ookla-speedtest-1.0.0-$(uname -m)-linux.tgz > /dev/null 2>&1
		wget --no-check-certificate -qO speedtest.tgz https://filedown.me/Linux/Tool/speedtest_cli/ookla-speedtest-1.0.0-$(uname -m)-linux.tgz > /dev/null 2>&1
	fi
	mkdir -p speedtest-cli && tar zxvf speedtest.tgz -C ./speedtest-cli/ > /dev/null 2>&1 && chmod a+rx ./speedtest-cli/speedtest
}

speed_test(){
	speedLog="./speedtest.log"
	true > $speedLog
		speedtest-cli/speedtest -p no -s $1 --accept-license --accept-gdpr > $speedLog 2>&1
		is_upload=$(cat $speedLog | grep 'Upload')
		if [[ ${is_upload} ]]; then
	        local REDownload=$(cat $speedLog | awk -F ' ' '/Download/{print $3}')
	        local reupload=$(cat $speedLog | awk -F ' ' '/Upload/{print $3}')
	        local relatency=$(cat $speedLog | awk -F ' ' '/Latency/{print $2}')
	        
			local nodeID=$1
			local nodeLocation=$2
			local nodeISP=$3
			
			strnodeLocation="${nodeLocation}　　　　　　"
			LANG=C
			#echo $LANG
			
			temp=$(echo "${REDownload}" | awk -F ' ' '{print $1}')
	        if [[ $(awk -v num1=${temp} -v num2=0 'BEGIN{print(num1>num2)?"1":"0"}') -eq 1 ]]; then
	        	printf "${RED}%-6s${YELLOW}%s%s${GREEN}%-24s${CYAN}%s%-10s${BLUE}%s%-10s${PURPLE}%-8s${PLAIN}\n" "${nodeID}"  "${nodeISP}" " " "${strnodeLocation:0:24}" "↑ " "${reupload}" "↓ " "${REDownload}" "${relatency}" | tee -a $log
			fi
		else
	        local cerror="ERROR"
		fi
}

preinfo() {
	echo "———————————————————————————————————————————————————————————————————————————"
	echo " SuperSpeed 全面测速修复版. By UXH & ernisn & oooldking"
	echo " 节点更新: 2023/09/29 | 脚本更新: 2021/12/23"
	echo " 国内测速节点在晚高峰使用1Gbps的日本CN2GIA（zenlayer）测试，均能跑在1Gbps+"
	echo " 国际测速节点使用40Gbps法国OVH、10Gbps新加坡OVH测试，基本都能跑1Gbps+"
	echo " 请注意Speedtest对同IP有限制，切勿重复大量测试，连续测试请间隔1-2小时"
	echo " 更新地址：https://www.infski.com/speedtest"
	echo "———————————————————————————————————————————————————————————————————————————"
}

selecttest() {
	echo -e "  测速类型:    ${GREEN}0.${PLAIN} 取消测速    ${GREEN}1.${PLAIN} 国内测速    ${GREEN}2.${PLAIN} 亚太地区"
	echo -ne "               ${GREEN}3.${PLAIN} 中东地区    ${GREEN}4.${PLAIN} 欧洲地区    ${GREEN}5.${PLAIN} 美洲地区"
	while :; do echo
			read -p "  请输入数字选择测速类型: " selection
			if [[ ! $selection =~ ^[1-5]$ ]]; then
					echo -ne "  ${RED}输入错误${PLAIN}, 请输入正确的数字!"
			else
					break   
			fi
	done
}

runtest() {
	[[ ${selection} == 0 ]] && exit 1

	if [[ ${selection} == 1 ]]; then
		echo "———————————————————————————————————————————————————————————————————————————"
		echo "ID    网络服务提供商       测速服务器位置   上传/Mbps   下载/Mbps   延迟/ms"
		start=$(date +%s) 
                                         #                        #  
		speed_test '59386' '中国浙江杭州   ' '中国电信            '
		speed_test '17145' '中国安徽合肥   ' '中国电信５Ｇ        '
		speed_test '5396'  '中国江苏苏州   ' '中国电信５Ｇ        '
		#speed_test '28225' '湖南长沙５Ｇ' '电信'
		#speed_test '3973'  '中国甘肃兰州   ' '中国电信            '
		#***
		speed_test '43752' '中国北京     ' '中国联通            '
		speed_test '24447' '中国上海     ' '中国联通５Ｇ        '
		speed_test '54432' '中国海南三亚   ' '中国联通            '
		speed_test '45170' '中国江苏无锡   ' '中国联通            '
		speed_test '56354' '中国福建福州   ' '中国联通            '
		speed_test '36646' '中国河南郑州   ' '中国联通５Ｇ        '
		#***
		speed_test '25858' '中国北京     ' '中国移动            '
		speed_test '6715'  '中国浙江杭州   ' '中国移动５Ｇ        '
		speed_test '29105'  '中国四川成都   ' '中国移动５Ｇ        '
		speed_test '60584' '中国广东广州   ' '中国移动５Ｇ        '
		#***
		speed_test '30852' '中国江苏昆山   ' '昆山教育网          '
		#***
		speed_test '35527' '中国四川成都   ' '中国广电            '
		#speed_test '5530' '重庆广电网' '广电'

		end=$(date +%s)  
		rm -rf speedtest*
		echo "———————————————————————————————————————————————————————————————————————————"
		time=$(( $end - $start ))
		if [[ $time -gt 60 ]]; then
			min=$(expr $time / 60)
			sec=$(expr $time % 60)
			echo -ne "  测试完成, 本次测速耗时: ${min} 分 ${sec} 秒"
		else
			echo -ne "  测试完成, 本次测速耗时: ${time} 秒"
		fi
		echo -ne "\n  当前时间: "
		echo $(TZ=UTC-8 date +%Y-%m-%d" "%H:%M:%S)
		echo -e "  ${GREEN}# 国内测速节点均在晚高峰使用1Gbps的日本CN2GIA测过。${PLAIN}"
		echo -e "  ${GREEN}# 这个测速脚本为多线程测速。${PLAIN}"
	fi


	if [[ ${selection} == 2 ]]; then
		echo "———————————————————————————————————————————————————————————————————————————"
		echo "ID    网络服务提供商       测速服务器位置   上传/Mbps   下载/Mbps   延迟/ms"
		start=$(date +%s) 
                                                                #  
		speed_test '32155' '中国香港     ' 'China Mobile        '
		speed_test '37695' '中国香港     ' 'China Unicom        '
		speed_test '27594' '印度孟买     ' 'Tata Teleservices   '
		speed_test '13623' '新加坡       ' 'Singtel             '
		speed_test '12492' '澳大利亚     ' 'Telstra             '
		speed_test '41663' '新西兰       ' 'Sky Broadband       '
		speed_test '3756'  '菲律宾       ' 'Globe Telecom       '
		speed_test '30131' '马来西亚     ' 'Telekom Malaysia    '
		speed_test '1370'  '印度尼西亚   ' 'Telekomunikasi      '
		speed_test '36978' '泰国         ' 'AIS Fibre           '
		speed_test '51451' '越南         ' 'Viettel Network     '
		speed_test '3973'  '日本         ' 'Rakuten Mobile      '
		speed_test '45357' '中国台湾     ' 'Asia Pacific Telecom'

		end=$(date +%s)  
		rm -rf speedtest*
		echo "———————————————————————————————————————————————————————————————————————————"
		time=$(( $end - $start ))
		if [[ $time -gt 60 ]]; then
			min=$(expr $time / 60)
			sec=$(expr $time % 60)
			echo -ne "  测试完成, 本次测速耗时: ${min} 分 ${sec} 秒"
		else
			echo -ne "  测试完成, 本次测速耗时: ${time} 秒"
		fi
		echo -ne "\n  当前时间: "
		echo $(TZ=UTC-8 date +%Y-%m-%d" "%H:%M:%S)
	fi

	if [[ ${selection} == 3 ]]; then
		echo "———————————————————————————————————————————————————————————————————————————"
		echo "ID    网络服务提供商       测速服务器位置   上传/Mbps   下载/Mbps   延迟/ms"
		start=$(date +%s) 
                                         #                      #
		speed_test '17336' '阿联酋       ' 'ETISALAT-UAE        '
		speed_test '52872' '巴基斯坦     ' 'Deltanet            '
		speed_test '43365' '土耳其       ' 'TurkNet             '
		speed_test '37151' '哈萨克斯坦   ' 'Kazakhtelecom       '
		speed_test '16051' '沙特阿拉伯   ' 'Saudi Telecom       '
		speed_test '15570' '也门         ' 'Yemen Net           '
		speed_test '42379' '马尔代夫     ' 'SatLink Pvt         '

		end=$(date +%s)  
		rm -rf speedtest*
		echo "———————————————————————————————————————————————————————————————————————————"
		time=$(( $end - $start ))
		if [[ $time -gt 60 ]]; then
			min=$(expr $time / 60)
			sec=$(expr $time % 60)
			echo -ne "  测试完成, 本次测速耗时: ${min} 分 ${sec} 秒"
		else
			echo -ne "  测试完成, 本次测速耗时: ${time} 秒"
		fi
		echo -ne "\n  当前时间: "
		echo $(TZ=UTC-8 date +%Y-%m-%d" "%H:%M:%S)
	fi

	if [[ ${selection} == 4 ]]; then
		echo "———————————————————————————————————————————————————————————————————————————"
		echo "ID    网络服务提供商       测速服务器位置   上传/Mbps   下载/Mbps   延迟/ms"
		start=$(date +%s) 
                                         #                      #
        speed_test '24215' '法国巴黎     ' 'Orange France       ' 
		speed_test '34948' '英国伦敦     ' 'Swish Fibre         '
		speed_test '30981' '乌克兰基辅   ' 'KPI-Telecom         '
		speed_test '21615' '波兰华沙     ' 'JMDI Sp. z o.o.     '
		speed_test '1434'  '意大利米兰   ' 'CPN Fibra           ' 
		speed_test '12919' '挪威奥斯陆   ' 'Telenor Norge AS    '
		speed_test '37211' '西班牙马德里   ' 'Avatel Telecom      ' #
		speed_test '14161' '芬兰赫尔辛基   ' 'DNA Welho Oy        ' 
		speed_test '37193' '爱沙尼亚塔林   ' 'CITIC Telecom CPC   ' 
		speed_test '24481' '俄罗斯莫斯科   ' 'CityTelecom.ru      ' 
		speed_test '38092' '爱尔兰都柏林   ' 'Three Ireland       ' 
		speed_test '44477' '德国法兰克福   ' 'TELE AG             '
		speed_test '15152' '奥地利维也纳   ' 'fonira Telekom      ' 
		speed_test '48096' '葡萄牙里斯本   ' 'ONI Telecom         ' 
		speed_test '26996' '荷兰阿姆斯丹   ' 'NRoyal KPN N.V      ' 


		end=$(date +%s)  
		rm -rf speedtest*
		echo "———————————————————————————————————————————————————————————————————————————"
		time=$(( $end - $start ))
		if [[ $time -gt 60 ]]; then
			min=$(expr $time / 60)
			sec=$(expr $time % 60)
			echo -ne "  测试完成, 本次测速耗时: ${min} 分 ${sec} 秒"
		else
			echo -ne "  测试完成, 本次测速耗时: ${time} 秒"
		fi
		echo -ne "\n  当前时间: "
		echo $(TZ=UTC-8 date +%Y-%m-%d" "%H:%M:%S)
	fi
	
	if [[ ${selection} == 5 ]]; then
		echo "———————————————————————————————————————————————————————————————————————————"
		echo "ID    网络服务提供商       测速服务器位置   上传/Mbps   下载/Mbps   延迟/ms"
		start=$(date +%s) 
                                         #到这                  #到这
        speed_test '46790' '加拿大魁北克   ' 'Bell Canada         ' 
        speed_test '16781' '加拿大温哥华   ' 'TELUS Mobility      ' 
		speed_test '50932' '格林兰努克   ' 'Tusass A/S           '
		speed_test '11777' '美国阿拉斯加   ' 'KPU Telecom         ' #
		speed_test '14161' '美国圣克拉拉   ' 'AT&T                ' 
		speed_test '22144' '美国堪萨斯   ' 'H&B Communications  ' 
		speed_test '13098' '美国纽约     ' 'Pilot Fiber         ' 
		speed_test '44477' '墨西哥墨西哥城   ' 'AT&T México         '
		speed_test '52716' '巴西圣保罗   ' 'Vila Conecta SP     ' 
		speed_test '31195' '阿根廷里约热内卢    ' 'PoP-RJ/RNP       ' 


		end=$(date +%s)  
		rm -rf speedtest*
		echo "———————————————————————————————————————————————————————————————————————————"
		time=$(( $end - $start ))
		if [[ $time -gt 60 ]]; then
			min=$(expr $time / 60)
			sec=$(expr $time % 60)
			echo -ne "  测试完成, 本次测速耗时: ${min} 分 ${sec} 秒"
		else
			echo -ne "  测试完成, 本次测速耗时: ${time} 秒"
		fi
		echo -ne "\n  当前时间: "
		echo $(TZ=UTC-8 date +%Y-%m-%d" "%H:%M:%S)
	fi
}

runall() {
	checkroot;
	checksystem;
	checkpython;
	checkcurl;
	checkwget;
	checkspeedtest;
	clear
	speed_test;
	preinfo;
	selecttest;
	runtest;
	rm -rf speedtest*
}

runall
