From 20cf183eaf5a66bd8bb14c49ffa0a3cc4ab22575 Mon Sep 17 00:00:00 2001 From: ernie Date: Sun, 9 Jun 2019 21:05:18 +0800 Subject: [PATCH 01/52] Delete tools.py --- tools.py | 70 -------------------------------------------------------- 1 file changed, 70 deletions(-) delete mode 100644 tools.py diff --git a/tools.py b/tools.py deleted file mode 100644 index c8ba457..0000000 --- a/tools.py +++ /dev/null @@ -1,70 +0,0 @@ -#!/usr/bin/env python -# -*- coding: UTF-8 -*- - -import time,urllib2,json,sys -import shlex -import datetime -import subprocess - -reload(sys) -sys.setdefaultencoding('utf-8') - -def GetIpipInfo(para): - f = open("ip_json.json",'r') - ijson = json.load(f) - jjson = ijson['location'] - print jjson[para.encode('utf-8')] - -def GetGeoioInfo(para): - ip_api = urllib2.urlopen(r'http://ip-api.com/json') - ijson = json.loads(ip_api.read()) - print ijson[para.encode('utf-8')] - -def GetDiskInfo(para): - temp = ExecShell("df -h -P|grep '/'|grep -v tmpfs")[0]; - temp1 = temp.split('\n'); - diskInfo = []; - n = 0 - cuts = ['/mnt/cdrom','/boot','/boot/efi','/dev','/dev/shm','/run/lock','/run','/run/shm','/run/user']; - for tmp in temp1: - n += 1 - disk = tmp.split(); - if len(disk) < 5: continue; - if disk[1].find('M') != -1: continue; - if disk[1].find('K') != -1: continue; - if len(disk[5].split('/')) > 4: continue; - if disk[5] in cuts: continue; - arr = {} - diskInfo = [disk[1],disk[2],disk[3],disk[4],disk[5]]; - - print(diskInfo[int(para)]); - -def ExecShell(cmdstring, cwd=None, timeout=None, shell=True): - - if shell: - cmdstring_list = cmdstring - else: - cmdstring_list = shlex.split(cmdstring) - if timeout: - end_time = datetime.datetime.now() + datetime.timedelta(seconds=timeout) - - sub = subprocess.Popen(cmdstring_list, cwd=cwd, stdin=subprocess.PIPE,shell=shell,bufsize=4096,stdout=subprocess.PIPE,stderr=subprocess.PIPE) - - while sub.poll() is None: - time.sleep(0.1) - if timeout: - if end_time <= datetime.datetime.now(): - raise Exception("Timeout:%s"%cmdstring) - - return sub.communicate() - -if __name__ == "__main__": - type = sys.argv[1]; - if type == 'disk': - GetDiskInfo(sys.argv[2]) - elif type == 'geoip': - GetGeoioInfo(sys.argv[2]) - elif type == 'ipip': - GetIpipInfo(sys.argv[2]) - else: - print 'ERROR: Parameter error' From 2b387a7ff9a85b7f68328177f69f42c67df7f149 Mon Sep 17 00:00:00 2001 From: ernie Date: Sun, 9 Jun 2019 21:06:07 +0800 Subject: [PATCH 02/52] Delete superupdate.sh --- superupdate.sh | 217 ------------------------------------------------- 1 file changed, 217 deletions(-) delete mode 100644 superupdate.sh diff --git a/superupdate.sh b/superupdate.sh deleted file mode 100644 index d04830d..0000000 --- a/superupdate.sh +++ /dev/null @@ -1,217 +0,0 @@ -#!/usr/bin/env bash -# -# Description: Choose a faster mirror for Linux script -# -# Copyright (C) 2017 - 2018 Oldking -# -# URL: https://www.oldking.net/697.html -# - -RED='\033[0;31m' -GREEN='\033[0;32m' -YELLOW='\033[0;33m' -SKYBLUE='\033[0;36m' -PLAIN='\033[0m' - -getAbout() { - echo "" - echo " ========================================================= " - echo " \ SuperUpdate.sh Script / " - echo " \ Choose a faster mirror for Linux / " - echo " \ Created by Oldking / " - echo " ========================================================= " - echo "" - echo " Intro: https://www.oldking.net/697.html" - echo " Copyright (C) 2018 Oldking oooldking@gmail.com" - echo -e " Version: ${GREEN}1.0.3${PLAIN} (2 Nov 2018)" - echo " Usage: wget -qO- git.io/superupdate.sh | bash" - echo "" -} - -getHelp(){ - echo " $( bash superupdate.sh )" - ehco " - set sources from cdn-fastly " - echo " $( bash superupdate.sh cn ) " - echo " - set sources from USTC " - echo " $( bash superupdate.sh 163 ) " - echo " - set sources from 163.com " - echo " $( bash superupdate.sh aliyun ) " - echo " - set sources from aliyun.com " - echo " $( bash superupdate.sh aws ) " - echo " - set sources from cdn-aws " - echo " $( bash superupdate.sh restore ) " - echo " - restore sources from backup file " -} - -updateInit(){ - [[ $EUID -ne 0 ]] && echo -e " ${RED}Error:${PLAIN} This script must be run as root!" && exit 1 - - 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 - - if [ $release == "debian" ]; then - debianVersion=$(awk -F'[= "]' '/VERSION_ID/{print $3}' /etc/os-release) - elif [ $release == "ubuntu" ]; then - ubuntuVersion=$(awk -F'[= "]' '/VERSION_ID/{print $3}' /etc/os-release) - elif [ $release == "centos" ]; then - os_release=$(grep "CentOS" /etc/redhat-release 2>/dev/null) - if echo "$os_release"|grep "release 5" >/dev/null 2>&1 - then - centosVersion=5 - elif echo "$os_release"|grep "release 6" >/dev/null 2>&1 - then - centosVersion=6 - elif echo "$os_release"|grep "release 7" >/dev/null 2>&1 - then - centosVersion=7 - else - centosVersion="" - fi - else - echo -e " ${RED}Error:${PLAIN} This script can not be run in your system now!" && exit 1 - fi -} - -setDebian(){ - if [[ -f /etc/apt/sources.list.bak ]]; then - echo -e " ${GREEN}sources.list.bak exists${PLAIN}" - else - mv /etc/apt/sources.list{,.bak} - fi - - [ -f /etc/apt/sources.list ] && rm /etc/apt/sources.list - - echo "deb http://cdn-fastly.deb.debian.org/debian/ jessie main non-free contrib" >>/etc/apt/sources.list - echo "deb http://cdn-fastly.deb.debian.org/debian/ jessie-updates main non-free contrib" >>/etc/apt/sources.list - echo "deb http://cdn-fastly.deb.debian.org/debian/ jessie-backports main non-free contrib" >>/etc/apt/sources.list - echo "deb-src http://cdn-fastly.deb.debian.org/debian/ jessie main non-free contrib" >>/etc/apt/sources.list - echo "deb-src http://cdn-fastly.deb.debian.org/debian/ jessie-updates main non-free contrib" >>/etc/apt/sources.list - echo "deb-src http://cdn-fastly.deb.debian.org/debian/ jessie-backports main non-free contrib" >>/etc/apt/sources.list - echo "deb http://cdn-fastly.deb.debian.org/debian-security/ jessie/updates main non-free contrib" >>/etc/apt/sources.list - echo "deb-src http://cdn-fastly.deb.debian.org/debian-security/ jessie/updates main non-free contrib" >>/etc/apt/sources.list - - [ "$debianVersion" == '7' ] && sed -i 's/jessie/wheezy/'g /etc/apt/sources.list - [ "$debianVersion" == '8' ] && echo -n "" - [ "$debianVersion" == '9' ] && sed -i 's/jessie/stretch/'g /etc/apt/sources.list -} - -setUbuntu(){ - if [[ -f /etc/apt/sources.list.bak ]]; then - echo -e " ${GREEN}sources.list.bak exists${PLAIN}" - else - mv /etc/apt/sources.list{,.bak} - fi - - [ -f /etc/apt/sources.list ] && rm /etc/apt/sources.list - - echo "deb http://mirrors.aliyun.com/ubuntu/ xenial main restricted universe multiverse" >>/etc/apt/sources.list - echo "deb http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted universe multiverse" >>/etc/apt/sources.list - echo "deb http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted universe multiverse" >>/etc/apt/sources.list - echo "deb http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse" >>/etc/apt/sources.list - echo "deb-src http://mirrors.aliyun.com/ubuntu/ xenial main restricted universe multiverse" >>/etc/apt/sources.list - echo "deb-src http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted universe multiverse" >>/etc/apt/sources.list - echo "deb-src http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted universe multiverse" >>/etc/apt/sources.list - echo "deb-src http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse" >>/etc/apt/sources.list - - [ "$ubuntuVersion" == '14.04' ] && sed -i 's/xenial/trusty/'g /etc/apt/sources.list - [ "$ubuntuVersion" == '16.06' ] && echo -n "" - [ "$ubuntuVersion" == '18.04' ] && sed -i 's/xenial/bionic/'g /etc/apt/sources.list -} - -setCentos(){ - if [ -f /etc/yum.repos.d/CentOS-Base.repo.bak ]; then - echo -e " ${GREEN}CentOS-Base.repo.bak exists${PLAIN}" - else - mv /etc/yum.repos.d/CentOS-Base.repo{,.bak} - fi - - [ -f /etc/yum.repos.d/CentOS-Base.repo ] && rm /etc/yum.repos.d/CentOS-Base.repo - - [ "$centosVersion" == '5' ] && wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-5.repo - [ "$centosVersion" == '6' ] && wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo - [ "$centosVersion" == '7' ] && wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo -} - -setAWS(){ - sed -i 's/cdn-fastly.deb.debian.org/cdn-aws.deb.debian.org/'g /etc/apt/sources.list -} - -setCn(){ - sed -i 's/cdn-fastly.deb.debian.org/mirrors.ustc.edu.cn/'g /etc/apt/sources.list -} - -set163(){ - sed -i 's/cdn-fastly.deb.debian.org/mirrors.163.com/'g /etc/apt/sources.list -} - -setAliyun(){ - sed -i 's/cdn-fastly.deb.debian.org/mirrors.aliyun.com/'g /etc/apt/sources.list -} - -restore(){ - if [ -f /etc/apt/sources.list.bak ]; then - rm /etc/apt/sources.list - mv /etc/apt/sources.list.bak /etc/apt/sources.list - elif [ -f /etc/yum.repos.d/CentOS-Base.repo.bak ]; then - rm /etc/yum.repos.d/CentOS-Base.repo - mv /etc/yum.repos.d/CentOS-Base.repo.bak /etc/yum.repos.d/CentOS-Base.repo - fi -} - -setSources(){ - getAbout - updateInit - case "$release" in - debian) - case $para in - 'fastly'|'-fastly'|'--fastly' ) - setDebian;; - 'cn'|'-cn'|'--cn' ) - setDebian;setCn;; - '163'|'-163'|'--163' ) - setDebian;set163;; - 'aliyun'|'-aliyun'|'--aliyun' ) - setDebian;setAliyun;; - 'aws'|'-aws'|'--aws' ) - setDebian;setAWS;; - 'restore'|'-restore'|'--restore' ) - restore;; - *) - setDebian;; - esac - apt-get update;; - ubuntu) - case $para in - 'restore'|'-restore'|'--restore' ) - restore;; - *) - setUbuntu; - esac - apt-get update;; - centos) - case $para in - 'restore'|'-restore'|'--restore' ) - restore;; - *) - setCentos; - esac - yum makecache;; - esac -} - -para=$1 -setSources -echo -e "${GREEN}Done${PLAIN}" From 2d009d8a6cbc450505ce066a438ed9a435e9cc65 Mon Sep 17 00:00:00 2001 From: ernie Date: Sun, 9 Jun 2019 21:06:21 +0800 Subject: [PATCH 03/52] Delete ipip.py --- ipip.py | 14 -------------- 1 file changed, 14 deletions(-) delete mode 100644 ipip.py diff --git a/ipip.py b/ipip.py deleted file mode 100644 index 323c1ef..0000000 --- a/ipip.py +++ /dev/null @@ -1,14 +0,0 @@ -#!/usr/bin/env python -# -*- coding: UTF-8 -*- - -import urllib2 -import json -import sys -reload(sys) -sys.setdefaultencoding('utf-8') - -f = open("ip_json.json",'r') -ijson = json.load(f) -jjson = ijson['location'] - -print jjson[sys.argv[1].encode('utf-8')] \ No newline at end of file From a300f675ccc02df8abcf34af2f42416c8ec44f2a Mon Sep 17 00:00:00 2001 From: ernie Date: Sun, 9 Jun 2019 21:07:18 +0800 Subject: [PATCH 04/52] Delete ip_info.py --- ip_info.py | 14 -------------- 1 file changed, 14 deletions(-) delete mode 100644 ip_info.py diff --git a/ip_info.py b/ip_info.py deleted file mode 100644 index eb06c6d..0000000 --- a/ip_info.py +++ /dev/null @@ -1,14 +0,0 @@ -#!/usr/bin/env python -# -*- coding: UTF-8 -*- - -import urllib2 -import json -import sys -reload(sys) -sys.setdefaultencoding('utf-8') - -ip_api = urllib2.urlopen(r'http://ip-api.com/json') - -ijson = json.loads(ip_api.read()) - -print ijson[sys.argv[1].encode('utf-8')] \ No newline at end of file From c09ad966dd30b9c771c41dac63d786a5c82ce5d5 Mon Sep 17 00:00:00 2001 From: ernie Date: Sun, 9 Jun 2019 21:07:44 +0800 Subject: [PATCH 05/52] Delete superbench_old.sh --- superbench_old.sh | 272 ---------------------------------------------- 1 file changed, 272 deletions(-) delete mode 100644 superbench_old.sh diff --git a/superbench_old.sh b/superbench_old.sh deleted file mode 100644 index c4fc6a5..0000000 --- a/superbench_old.sh +++ /dev/null @@ -1,272 +0,0 @@ -#!/usr/bin/env bash -# -# Description: Auto test download & I/O speed & network to China script -# -# Copyright (C) 2017 - 2017 Oldking -# -# Thanks: Bench.sh -# -# URL: https://www.oldking.net/350.html -# - -# Colors -RED='\033[0;31m' -GREEN='\033[0;32m' -YELLOW='\033[0;33m' -SKYBLUE='\033[0;36m' -PLAIN='\033[0m' - -# check release -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 - -# check root -[[ $EUID -ne 0 ]] && echo -e "${RED}Error:${PLAIN} This script must be run as root!" && exit 1 - -# check python -if [ ! -e '/usr/bin/python' ]; then - #echo -e - #read -p "${RED}Error:${PLAIN} python is not install. You must be install python command at first.\nDo you want to install? [y/n]" is_install - #if [[ ${is_install} == "y" || ${is_install} == "Y" ]]; then - if [ "${release}" == "centos" ]; then - yum update > /dev/null 2>&1 - yum -y install python - else - apt-get update > /dev/null 2>&1 - apt-get -y install python - fi - #else - # exit - #fi - -fi - -# check wget -if [ ! -e '/usr/bin/wget' ]; then - #echo -e - #read -p "${RED}Error:${PLAIN} wget is not install. You must be install wget command at first.\nDo you want to install? [y/n]" is_install - #if [[ ${is_install} == "y" || ${is_install} == "Y" ]]; then - if [ "${release}" == "centos" ]; then - yum update > /dev/null 2>&1 - yum -y install wget - else - apt-get update > /dev/null 2>&1 - apt-get -y install wget - fi - #else - # exit - #fi -fi - -get_opsy() { - [ -f /etc/redhat-release ] && awk '{print ($1,$3~/^[0-9]/?$3:$4)}' /etc/redhat-release && return - [ -f /etc/os-release ] && awk -F'[= "]' '/PRETTY_NAME/{print $3,$4,$5}' /etc/os-release && return - [ -f /etc/lsb-release ] && awk -F'[="]+' '/DESCRIPTION/{print $2}' /etc/lsb-release && return -} - -next() { - printf "%-70s\n" "-" | sed 's/\s/-/g' -} - -speed_test(){ - if [[ $1 == '' ]]; then - temp=$(python /tmp/speedtest.py --share 2>&1) - is_down=$(echo "$temp" | grep 'Download') - if [[ ${is_down} ]]; then - local REDownload=$(echo "$temp" | awk -F ':' '/Download/{print $2}') - local reupload=$(echo "$temp" | awk -F ':' '/Upload/{print $2}') - local relatency=$(echo "$temp" | awk -F ':' '/Hosted/{print $2}') - local nodeName=$2 - - printf "${YELLOW}%-17s${GREEN}%-18s${RED}%-20s${SKYBLUE}%-12s${PLAIN}\n" "${nodeName}" "${reupload}" "${REDownload}" "${relatency}" - else - local cerror="ERROR" - fi - else - temp=$(python /tmp/speedtest.py --server $1 --share 2>&1) - is_down=$(echo "$temp" | grep 'Download') - if [[ ${is_down} ]]; then - local REDownload=$(echo "$temp" | awk -F ':' '/Download/{print $2}') - local reupload=$(echo "$temp" | awk -F ':' '/Upload/{print $2}') - local relatency=$(echo "$temp" | awk -F ':' '/Hosted/{print $2}') - temp=$(echo "$relatency" | awk -F '.' '{print $1}') - if [[ ${temp} -gt 1000 ]]; then - relatency=" 000.000 ms" - fi - local nodeName=$2 - - printf "${YELLOW}%-17s${GREEN}%-18s${RED}%-20s${SKYBLUE}%-12s${PLAIN}\n" "${nodeName}" "${reupload}" "${REDownload}" "${relatency}" - else - local cerror="ERROR" - fi - fi -} - -speed() { - # install speedtest - if [ ! -e '/tmp/speedtest.py' ]; then - wget --no-check-certificate -P /tmp https://raw.github.com/sivel/speedtest-cli/master/speedtest.py > /dev/null 2>&1 - fi - chmod a+rx /tmp/speedtest.py - - speed_test '' 'Normal Node' - speed_test '6435' 'Xiangyang CT' - speed_test '7509' 'Kunming CT' - speed_test '3633' 'Shanghai CT' - speed_test '4624' 'Chengdu CT' - speed_test '5017' 'Shenyang CU' - speed_test '4863' "Xi'an CU" - speed_test '5083' 'Shanghai CU' - speed_test '5726' 'Chongqing CU' - speed_test '5292' "Xi'an CM" - speed_test '16314' 'Shandong CM' - speed_test '6715' 'Ningbo CM' - speed_test '4575' 'Chengdu CM' - - rm -rf /tmp/speedtest.py -} - - -io_test() { - (LANG=C dd if=/dev/zero of=test_$$ bs=$1 count=$2 conv=fdatasync && rm -f test_$$ ) 2>&1 | awk -F, '{io=$NF} END { print io}' | sed 's/^[ \t]*//;s/[ \t]*$//' -} - -calc_disk() { - local total_size=0 - local array=$@ - for size in ${array[@]} - do - [ "${size}" == "0" ] && size_t=0 || size_t=`echo ${size:0:${#size}-1}` - [ "`echo ${size:(-1)}`" == "K" ] && size=0 - [ "`echo ${size:(-1)}`" == "M" ] && size=$( awk 'BEGIN{printf "%.1f", '$size_t' / 1024}' ) - [ "`echo ${size:(-1)}`" == "T" ] && size=$( awk 'BEGIN{printf "%.1f", '$size_t' * 1024}' ) - [ "`echo ${size:(-1)}`" == "G" ] && size=${size_t} - total_size=$( awk 'BEGIN{printf "%.1f", '$total_size' + '$size'}' ) - done - echo ${total_size} -} - -power_time() { - - result=$(smartctl -a $(result=$(cat /proc/mounts) && echo $(echo "$result" | awk '/data=ordered/{print $1}') | awk '{print $1}') 2>&1) && power_time=$(echo "$result" | awk '/Power_On/{print $10}') && echo "$power_time" -} - -install_smart() { - # install smartctl - if [ ! -e '/usr/sbin/smartctl' ]; then - if [ "${release}" == "centos" ]; then - yum update > /dev/null 2>&1 - yum -y install smartmontools > /dev/null 2>&1 - else - apt-get update > /dev/null 2>&1 - apt-get -y install smartmontools > /dev/null 2>&1 - fi - fi -} - -start=$(date +%s) - -cname=$( awk -F: '/model name/ {name=$2} END {print name}' /proc/cpuinfo | sed 's/^[ \t]*//;s/[ \t]*$//' ) -cores=$( awk -F: '/model name/ {core++} END {print core}' /proc/cpuinfo ) -freq=$( awk -F: '/cpu MHz/ {freq=$2} END {print freq}' /proc/cpuinfo | sed 's/^[ \t]*//;s/[ \t]*$//' ) -tram=$( free -m | awk '/Mem/ {print $2}' ) -uram=$( free -m | awk '/Mem/ {print $3}' ) -swap=$( free -m | awk '/Swap/ {print $2}' ) -uswap=$( free -m | awk '/Swap/ {print $3}' ) -up=$( awk '{a=$1/86400;b=($1%86400)/3600;c=($1%3600)/60} {printf("%d days %d hour %d min\n",a,b,c)}' /proc/uptime ) -load=$( w | head -1 | awk -F'load average:' '{print $2}' | sed 's/^[ \t]*//;s/[ \t]*$//' ) -opsy=$( get_opsy ) -arch=$( uname -m ) -lbit=$( getconf LONG_BIT ) -kern=$( uname -r ) -ipv6=$( wget -qO- -t1 -T2 ipv6.icanhazip.com ) -disk_size1=($( LANG=C df -hPl | grep -wvE '\-|none|tmpfs|devtmpfs|by-uuid|chroot|Filesystem' | awk '{print $2}' )) -disk_size2=($( LANG=C df -hPl | grep -wvE '\-|none|tmpfs|devtmpfs|by-uuid|chroot|Filesystem' | awk '{print $3}' )) -disk_total_size=$( calc_disk ${disk_size1[@]} ) -disk_used_size=$( calc_disk ${disk_size2[@]} ) -ptime=$(power_time) - - -clear -next -echo -e "CPU model : ${SKYBLUE}$cname${PLAIN}" -echo -e "Number of cores : ${SKYBLUE}$cores${PLAIN}" -echo -e "CPU frequency : ${SKYBLUE}$freq MHz${PLAIN}" -echo -e "Total size of Disk : ${SKYBLUE}$disk_total_size GB ($disk_used_size GB Used)${PLAIN}" -echo -e "Total amount of Mem : ${SKYBLUE}$tram MB ($uram MB Used)${PLAIN}" -echo -e "Total amount of Swap : ${SKYBLUE}$swap MB ($uswap MB Used)${PLAIN}" -echo -e "System uptime : ${SKYBLUE}$up${PLAIN}" -echo -e "Load average : ${SKYBLUE}$load${PLAIN}" -echo -e "OS : ${SKYBLUE}$opsy${PLAIN}" -echo -e "Arch : ${SKYBLUE}$arch ($lbit Bit)${PLAIN}" -echo -e "Kernel : ${SKYBLUE}$kern${PLAIN}" -echo -ne "Virt : " - -# install virt-what -if [ ! -e '/usr/sbin/virt-what' ]; then - if [ "${release}" == "centos" ]; then - yum update > /dev/null 2>&1 - yum -y install virt-what > /dev/null 2>&1 - else - apt-get update > /dev/null 2>&1 - apt-get -y install virt-what > /dev/null 2>&1 - fi -fi -virtua=$(virt-what) 2>/dev/null - -if [[ ${virtua} ]]; then - echo -e "${SKYBLUE}$virtua${PLAIN}" -else - echo -e "${SKYBLUE}No Virt${PLAIN}" - echo -ne "Power time of disk : " - install_smart - echo -e "${SKYBLUE}$ptime Hours${PLAIN}" -fi -next -echo -n "I/O speed( 32M ) : " -io1=$( io_test 32k 1k ) -echo -e "${YELLOW}$io1${PLAIN}" -echo -n "I/O speed( 256M ) : " -io2=$( io_test 64k 4k ) -echo -e "${YELLOW}$io2${PLAIN}" -echo -n "I/O speed( 2G ) : " -io3=$( io_test 64k 32k ) -echo -e "${YELLOW}$io3${PLAIN}" -ioraw1=$( echo $io1 | awk 'NR==1 {print $1}' ) -[ "`echo $io1 | awk 'NR==1 {print $2}'`" == "GB/s" ] && ioraw1=$( awk 'BEGIN{print '$ioraw1' * 1024}' ) -ioraw2=$( echo $io2 | awk 'NR==1 {print $1}' ) -[ "`echo $io2 | awk 'NR==1 {print $2}'`" == "GB/s" ] && ioraw2=$( awk 'BEGIN{print '$ioraw2' * 1024}' ) -ioraw3=$( echo $io3 | awk 'NR==1 {print $1}' ) -[ "`echo $io3 | awk 'NR==1 {print $2}'`" == "GB/s" ] && ioraw3=$( awk 'BEGIN{print '$ioraw3' * 1024}' ) -ioall=$( awk 'BEGIN{print '$ioraw1' + '$ioraw2' + '$ioraw3'}' ) -ioavg=$( awk 'BEGIN{printf "%.1f", '$ioall' / 3}' ) -echo -e "Average I/O speed : ${YELLOW}$ioavg MB/s${PLAIN}" -next -printf "%-18s%-18s%-20s%-12s\n" "Node Name" "Upload Speed" "Download Speed" "Latency" -speed && next -end=$(date +%s) -time=$(( $end - $start )) -if [[ $time -gt 60 ]]; then - min=$(expr $time / 60) - sec=$(expr $time % 60) - echo -ne "Total time : ${min} min ${sec} sec" -else - echo -ne "Total time : ${time} sec" -fi -echo -ne "\nCurrent time : " -echo $(date +%Y-%m-%d" "%H:%M:%S) -echo "Finished!" -next \ No newline at end of file From 78a06abe9fca7ba67744e3cdbccffac2b3b79746 Mon Sep 17 00:00:00 2001 From: ernie Date: Sun, 9 Jun 2019 21:08:01 +0800 Subject: [PATCH 06/52] Delete superbench_git.sh --- superbench_git.sh | 601 ---------------------------------------------- 1 file changed, 601 deletions(-) delete mode 100644 superbench_git.sh diff --git a/superbench_git.sh b/superbench_git.sh deleted file mode 100644 index d5868c6..0000000 --- a/superbench_git.sh +++ /dev/null @@ -1,601 +0,0 @@ -#!/usr/bin/env bash -# -# Description: Auto system info & I/O test & network to China script -# -# Copyright (C) 2017 - 2018 Oldking -# -# Thanks: Bench.sh -# -# URL: https://www.oldking.net/350.html -# - -RED='\033[0;31m' -GREEN='\033[0;32m' -YELLOW='\033[0;33m' -SKYBLUE='\033[0;36m' -PLAIN='\033[0m' - -about() { - echo "" - echo " ========================================================= " - echo " \ Superbench.sh Script / " - echo " \ Basic system info, I/O test and speedtest / " - echo " \ v1.1.4 (1 Jan 2019) / " - echo " \ Created by Oldking / " - echo " ========================================================= " - echo "" - echo " Intro: https://www.oldking.net/350.html" - echo " Copyright (C) 2019 Oldking oooldking@gmail.com" - echo -e " ${RED}Happy New Year!${PLAIN}" - echo "" -} - -cancel() { - echo "" - next; - echo " Abort ..." - echo " Cleanup ..." - cleanup; - echo " Done" - exit -} - -trap cancel SIGINT - -benchinit() { - 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 - - [[ $EUID -ne 0 ]] && echo -e "${RED}Error:${PLAIN} This script must be run as root!" && exit 1 - - if [ ! -e '/usr/bin/python' ]; then - echo " Installing 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 - - if [ ! -e '/usr/bin/curl' ]; then - echo " Installing 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 - - if [ ! -e '/usr/bin/wget' ]; then - echo " Installing 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 - - if [ ! -e 'speedtest.py' ]; then - echo " Installing Speedtest-cli ..." - wget --no-check-certificate https://raw.github.com/sivel/speedtest-cli/master/speedtest.py > /dev/null 2>&1 - fi - chmod a+rx speedtest.py - - if [ ! -e 'tools.py' ]; then - echo " Installing tools.py ..." - wget --no-check-certificate https://raw.githubusercontent.com/oooldking/script/master/tools.py > /dev/null 2>&1 - fi - chmod a+rx tools.py - - if [ ! -e 'fast_com.py' ]; then - echo " Installing Fast.com-cli ..." - wget --no-check-certificate https://raw.githubusercontent.com/sanderjo/fast.com/master/fast_com.py > /dev/null 2>&1 - wget --no-check-certificate https://raw.githubusercontent.com/sanderjo/fast.com/master/fast_com_example_usage.py > /dev/null 2>&1 - fi - chmod a+rx fast_com.py - chmod a+rx fast_com_example_usage.py - - sleep 5 - - start=$(date +%s) -} - -get_opsy() { - [ -f /etc/redhat-release ] && awk '{print ($1,$3~/^[0-9]/?$3:$4)}' /etc/redhat-release && return - [ -f /etc/os-release ] && awk -F'[= "]' '/PRETTY_NAME/{print $3,$4,$5}' /etc/os-release && return - [ -f /etc/lsb-release ] && awk -F'[="]+' '/DESCRIPTION/{print $2}' /etc/lsb-release && return -} - -next() { - printf "%-70s\n" "-" | sed 's/\s/-/g' | tee -a $log -} - -speed_test(){ - if [[ $1 == '' ]]; then - temp=$(python speedtest.py --share 2>&1) - is_down=$(echo "$temp" | grep 'Download') - result_speed=$(echo "$temp" | awk -F ' ' '/results/{print $3}') - if [[ ${is_down} ]]; then - local REDownload=$(echo "$temp" | awk -F ':' '/Download/{print $2}') - local reupload=$(echo "$temp" | awk -F ':' '/Upload/{print $2}') - local relatency=$(echo "$temp" | awk -F ':' '/Hosted/{print $2}') - - temp=$(echo "$relatency" | awk -F '.' '{print $1}') - if [[ ${temp} -gt 50 ]]; then - relatency=" (*)"${relatency} - fi - local nodeName=$2 - - 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 "${YELLOW}%-17s${GREEN}%-18s${RED}%-20s${SKYBLUE}%-12s${PLAIN}\n" " ${nodeName}" "${reupload}" "${REDownload}" "${relatency}" | tee -a $log - fi - else - local cerror="ERROR" - fi - else - temp=$(python speedtest.py --server $1 --share 2>&1) - is_down=$(echo "$temp" | grep 'Download') - if [[ ${is_down} ]]; then - local REDownload=$(echo "$temp" | awk -F ':' '/Download/{print $2}') - local reupload=$(echo "$temp" | awk -F ':' '/Upload/{print $2}') - local relatency=$(echo "$temp" | awk -F ':' '/Hosted/{print $2}') - relatency=" - " - local nodeName=$2 - - 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 "${YELLOW}%-17s${GREEN}%-18s${RED}%-20s${SKYBLUE}%-12s${PLAIN}\n" " ${nodeName}" "${reupload}" "${REDownload}" "${relatency}" | tee -a $log - fi - else - local cerror="ERROR" - fi - fi -} - -print_speedtest() { - printf "%-18s%-18s%-20s%-12s\n" " Node Name" "Upload Speed" "Download Speed" "Latency" | tee -a $log - speed_test '' 'Speedtest.net' - speed_fast_com - speed_test '5316' 'Nanjing CT' - speed_test '12637' 'Xiangyang CT' - speed_test '7509' 'Hangzhou CT' - speed_test '19076' 'Chongqing CT' - speed_test '5083' 'Shanghai CU' - speed_test '4863' "Xi'an CU" - speed_test '5726' 'Chongqing CU' - speed_test '4665' 'Shanghai CM' - speed_test '4575' 'Chengdu CM' - speed_test '6168' 'Kunming CM' - speed_test '6611' 'Guangzhou CM' - - rm -rf speedtest.py -} - -print_speedtest_fast() { - printf "%-18s%-18s%-20s%-12s\n" " Node Name" "Upload Speed" "Download Speed" "Latency" | tee -a $log - speed_test '' 'Speedtest.net' - speed_fast_com - speed_test '7509' 'Hangzhou CT' - speed_test '5083' 'Shanghai CU' - speed_test '4575' 'Chengdu CM' - - rm -rf speedtest.py -} - -speed_fast_com() { - temp=$(python fast_com_example_usage.py 2>&1) - is_down=$(echo "$temp" | grep 'Result') - if [[ ${is_down} ]]; then - temp1=$(echo "$temp" | awk -F ':' '/Result/{print $2}') - temp2=$(echo "$temp1" | awk -F ' ' '/Mbps/{print $1}') - local REDownload="$temp2 Mbit/s" - local reupload="0.00 Mbit/s" - local relatency="-" - local nodeName="Fast.com" - - printf "${YELLOW}%-18s${GREEN}%-18s${RED}%-20s${SKYBLUE}%-12s${PLAIN}\n" " ${nodeName}" "${reupload}" "${REDownload}" "${relatency}" | tee -a $log - else - local cerror="ERROR" - fi - rm -rf fast_com_example_usage.py - rm -rf fast_com.py - -} - -io_test() { - (LANG=C dd if=/dev/zero of=test_file_$$ bs=512K count=$1 conv=fdatasync && rm -f test_file_$$ ) 2>&1 | awk -F, '{io=$NF} END { print io}' | sed 's/^[ \t]*//;s/[ \t]*$//' -} - -calc_disk() { - local total_size=0 - local array=$@ - for size in ${array[@]} - do - [ "${size}" == "0" ] && size_t=0 || size_t=`echo ${size:0:${#size}-1}` - [ "`echo ${size:(-1)}`" == "K" ] && size=0 - [ "`echo ${size:(-1)}`" == "M" ] && size=$( awk 'BEGIN{printf "%.1f", '$size_t' / 1024}' ) - [ "`echo ${size:(-1)}`" == "T" ] && size=$( awk 'BEGIN{printf "%.1f", '$size_t' * 1024}' ) - [ "`echo ${size:(-1)}`" == "G" ] && size=${size_t} - total_size=$( awk 'BEGIN{printf "%.1f", '$total_size' + '$size'}' ) - done - echo ${total_size} -} - -power_time() { - - result=$(smartctl -a $(result=$(cat /proc/mounts) && echo $(echo "$result" | awk '/data=ordered/{print $1}') | awk '{print $1}') 2>&1) && power_time=$(echo "$result" | awk '/Power_On/{print $10}') && echo "$power_time" -} - -install_smart() { - if [ ! -e '/usr/sbin/smartctl' ]; then - echo "Installing Smartctl ..." - if [ "${release}" == "centos" ]; then - yum update > /dev/null 2>&1 - yum -y install smartmontools > /dev/null 2>&1 - else - apt-get update > /dev/null 2>&1 - apt-get -y install smartmontools > /dev/null 2>&1 - fi - fi -} - -ip_info4(){ - ip_date=$(curl -4 -s http://api.ip.la/en?json) - echo $ip_date > ip_json.json - isp=$(python tools.py geoip isp) - as_tmp=$(python tools.py geoip as) - asn=$(echo $as_tmp | awk -F ' ' '{print $1}') - org=$(python tools.py geoip org) - if [ -z "ip_date" ]; then - echo $ip_date - echo "hala" - country=$(python tools.py ipip country_name) - city=$(python tools.py ipip city) - countryCode=$(python tools.py ipip country_code) - region=$(python tools.py ipip province) - else - country=$(python tools.py geoip country) - city=$(python tools.py geoip city) - countryCode=$(python tools.py geoip countryCode) - region=$(python tools.py geoip regionName) - fi - if [ -z "$city" ]; then - city=${region} - fi - - echo -e " ASN & ISP : ${SKYBLUE}$asn, $isp${PLAIN}" | tee -a $log - echo -e " Organization : ${YELLOW}$org${PLAIN}" | tee -a $log - echo -e " Location : ${SKYBLUE}$city, ${YELLOW}$country / $countryCode${PLAIN}" | tee -a $log - echo -e " Region : ${SKYBLUE}$region${PLAIN}" | tee -a $log - - rm -rf tools.py - rm -rf ip_json.json -} - -virt_check(){ - if hash ifconfig 2>/dev/null; then - eth=$(ifconfig) - fi - - virtualx=$(dmesg) 2>/dev/null - - if [ $(which dmidecode) ]; then - sys_manu=$(dmidecode -s system-manufacturer) 2>/dev/null - sys_product=$(dmidecode -s system-product-name) 2>/dev/null - sys_ver=$(dmidecode -s system-version) 2>/dev/null - else - sys_manu="" - sys_product="" - sys_ver="" - fi - - if grep docker /proc/1/cgroup -qa; then - virtual="Docker" - elif grep lxc /proc/1/cgroup -qa; then - virtual="Lxc" - elif grep -qa container=lxc /proc/1/environ; then - virtual="Lxc" - elif [[ -f /proc/user_beancounters ]]; then - virtual="OpenVZ" - elif [[ "$virtualx" == *kvm-clock* ]]; then - virtual="KVM" - elif [[ "$cname" == *KVM* ]]; then - virtual="KVM" - elif [[ "$virtualx" == *"VMware Virtual Platform"* ]]; then - virtual="VMware" - elif [[ "$virtualx" == *"Parallels Software International"* ]]; then - virtual="Parallels" - elif [[ "$virtualx" == *VirtualBox* ]]; then - virtual="VirtualBox" - elif [[ -e /proc/xen ]]; then - virtual="Xen" - elif [[ "$sys_manu" == *"Microsoft Corporation"* ]]; then - if [[ "$sys_product" == *"Virtual Machine"* ]]; then - if [[ "$sys_ver" == *"7.0"* || "$sys_ver" == *"Hyper-V" ]]; then - virtual="Hyper-V" - else - virtual="Microsoft Virtual Machine" - fi - fi - else - virtual="Dedicated" - fi -} - -power_time_check(){ - echo -ne " Power time of disk : " - install_smart - ptime=$(power_time) - echo -e "${SKYBLUE}$ptime Hours${PLAIN}" -} - -freedisk() { - freespace=$( df -m . | awk 'NR==2 {print $4}' ) - if [[ $freespace == "" ]]; then - $freespace=$( df -m . | awk 'NR==3 {print $3}' ) - fi - if [[ $freespace -gt 1024 ]]; then - printf "%s" $((1024*2)) - elif [[ $freespace -gt 512 ]]; then - printf "%s" $((512*2)) - elif [[ $freespace -gt 256 ]]; then - printf "%s" $((256*2)) - elif [[ $freespace -gt 128 ]]; then - printf "%s" $((128*2)) - else - printf "1" - fi -} - -print_io() { - if [[ $1 == "fast" ]]; then - writemb=$((128*2)) - else - writemb=$(freedisk) - fi - - writemb_size="$(( writemb / 2 ))MB" - if [[ $writemb_size == "1024MB" ]]; then - writemb_size="1.0GB" - fi - - if [[ $writemb != "1" ]]; then - echo -n " I/O Speed( $writemb_size ) : " | tee -a $log - io1=$( io_test $writemb ) - echo -e "${YELLOW}$io1${PLAIN}" | tee -a $log - echo -n " I/O Speed( $writemb_size ) : " | tee -a $log - io2=$( io_test $writemb ) - echo -e "${YELLOW}$io2${PLAIN}" | tee -a $log - echo -n " I/O Speed( $writemb_size ) : " | tee -a $log - io3=$( io_test $writemb ) - echo -e "${YELLOW}$io3${PLAIN}" | tee -a $log - ioraw1=$( echo $io1 | awk 'NR==1 {print $1}' ) - [ "`echo $io1 | awk 'NR==1 {print $2}'`" == "GB/s" ] && ioraw1=$( awk 'BEGIN{print '$ioraw1' * 1024}' ) - ioraw2=$( echo $io2 | awk 'NR==1 {print $1}' ) - [ "`echo $io2 | awk 'NR==1 {print $2}'`" == "GB/s" ] && ioraw2=$( awk 'BEGIN{print '$ioraw2' * 1024}' ) - ioraw3=$( echo $io3 | awk 'NR==1 {print $1}' ) - [ "`echo $io3 | awk 'NR==1 {print $2}'`" == "GB/s" ] && ioraw3=$( awk 'BEGIN{print '$ioraw3' * 1024}' ) - ioall=$( awk 'BEGIN{print '$ioraw1' + '$ioraw2' + '$ioraw3'}' ) - ioavg=$( awk 'BEGIN{printf "%.1f", '$ioall' / 3}' ) - echo -e " Average I/O Speed : ${YELLOW}$ioavg MB/s${PLAIN}" | tee -a $log - else - echo -e " ${RED}Not enough space!${PLAIN}" - fi -} - -print_system_info() { - echo -e " CPU Model : ${SKYBLUE}$cname${PLAIN}" | tee -a $log - echo -e " CPU Cores : ${YELLOW}$cores Cores ${SKYBLUE}@ $freq MHz $arch${PLAIN}" | tee -a $log - echo -e " CPU Cache : ${SKYBLUE}$corescache ${PLAIN}" | tee -a $log - echo -e " OS : ${SKYBLUE}$opsy ($lbit Bit) ${YELLOW}$virtual${PLAIN}" | tee -a $log - echo -e " Kernel : ${SKYBLUE}$kern${PLAIN}" | tee -a $log - echo -e " Total Space : ${SKYBLUE}$disk_used_size GB / ${YELLOW}$disk_total_size GB ${PLAIN}" | tee -a $log - echo -e " Total RAM : ${SKYBLUE}$uram MB / ${YELLOW}$tram MB ${SKYBLUE}($bram MB Buff)${PLAIN}" | tee -a $log - echo -e " Total SWAP : ${SKYBLUE}$uswap MB / $swap MB${PLAIN}" | tee -a $log - echo -e " Uptime : ${SKYBLUE}$up${PLAIN}" | tee -a $log - echo -e " Load Average : ${SKYBLUE}$load${PLAIN}" | tee -a $log - echo -e " TCP CC : ${YELLOW}$tcpctrl${PLAIN}" | tee -a $log -} - -print_end_time() { - end=$(date +%s) - time=$(( $end - $start )) - if [[ $time -gt 60 ]]; then - min=$(expr $time / 60) - sec=$(expr $time % 60) - echo -ne " Finished in : ${min} min ${sec} sec" | tee -a $log - else - echo -ne " Finished in : ${time} sec" | tee -a $log - fi - - printf '\n' | tee -a $log - - bj_time=$(curl -s http://cgi.im.qq.com/cgi-bin/cgi_svrtime) - - if [[ $(echo $bj_time | grep "html") ]]; then - bj_time=$(date -u +%Y-%m-%d" "%H:%M:%S -d '+8 hours') - fi - echo " Timestamp : $bj_time GMT+8" | tee -a $log - echo " Results : $log" -} - -get_system_info() { - cname=$( awk -F: '/model name/ {name=$2} END {print name}' /proc/cpuinfo | sed 's/^[ \t]*//;s/[ \t]*$//' ) - cores=$( awk -F: '/model name/ {core++} END {print core}' /proc/cpuinfo ) - freq=$( awk -F: '/cpu MHz/ {freq=$2} END {print freq}' /proc/cpuinfo | sed 's/^[ \t]*//;s/[ \t]*$//' ) - corescache=$( awk -F: '/cache size/ {cache=$2} END {print cache}' /proc/cpuinfo | sed 's/^[ \t]*//;s/[ \t]*$//' ) - tram=$( free -m | awk '/Mem/ {print $2}' ) - uram=$( free -m | awk '/Mem/ {print $3}' ) - bram=$( free -m | awk '/Mem/ {print $6}' ) - swap=$( free -m | awk '/Swap/ {print $2}' ) - uswap=$( free -m | awk '/Swap/ {print $3}' ) - up=$( awk '{a=$1/86400;b=($1%86400)/3600;c=($1%3600)/60} {printf("%d days %d hour %d min\n",a,b,c)}' /proc/uptime ) - load=$( w | head -1 | awk -F'load average:' '{print $2}' | sed 's/^[ \t]*//;s/[ \t]*$//' ) - opsy=$( get_opsy ) - arch=$( uname -m ) - lbit=$( getconf LONG_BIT ) - kern=$( uname -r ) - - disk_size1=($( LANG=C df -hPl | grep -wvE '\-|none|tmpfs|overlay|shm|udev|devtmpfs|by-uuid|chroot|Filesystem' | awk '{print $2}' )) - disk_size2=($( LANG=C df -hPl | grep -wvE '\-|none|tmpfs|overlay|shm|udev|devtmpfs|by-uuid|chroot|Filesystem' | awk '{print $3}' )) - disk_total_size=$( calc_disk ${disk_size1[@]} ) - disk_used_size=$( calc_disk ${disk_size2[@]} ) - - tcpctrl=$( sysctl net.ipv4.tcp_congestion_control | awk -F ' ' '{print $3}' ) - - virt_check -} - -print_intro() { - printf ' Superbench.sh -- https://www.oldking.net/350.html\n' | tee -a $log - printf " Mode : \e${GREEN}%s\e${PLAIN} Version : \e${GREEN}%s${PLAIN}\n" $mode_name 1.1.4 | tee -a $log - printf ' Usage : wget -qO- git.io/superbench.sh | bash\n' | tee -a $log -} - -sharetest() { - echo " Share result:" | tee -a $log - echo " · $result_speed" | tee -a $log - log_preupload - case $1 in - 'ubuntu') - share_link=$( curl -v --data-urlencode "content@$log_up" -d "poster=superbench.sh" -d "syntax=text" "https://paste.ubuntu.com" 2>&1 | \ - grep "Location" | awk '{print $3}' );; - 'haste' ) - share_link=$( curl -X POST -s -d "$(cat $log)" https://hastebin.com/documents | awk -F '"' '{print "https://hastebin.com/"$4}' );; - 'clbin' ) - share_link=$( curl -sF 'clbin=<-' https://clbin.com < $log );; - 'ptpb' ) - share_link=$( curl -sF c=@- https://ptpb.pw/?u=1 < $log );; - esac - - echo " · $share_link" | tee -a $log - next - echo "" - rm -f $log_up - -} - -log_preupload() { - log_up="$HOME/superbench_upload.log" - true > $log_up - $(cat superbench.log 2>&1 | sed -r "s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[m|K]//g" > $log_up) -} - -cleanup() { - rm -f test_file_*; - rm -f speedtest.py; - rm -f fast_com*; - rm -f tools.py; - rm -f ip_json.json -} - -bench_all(){ - mode_name="Standard" - about; - benchinit; - clear - next; - print_intro; - next; - get_system_info; - print_system_info; - ip_info4; - next; - print_io; - next; - print_speedtest; - next; - print_end_time; - next; - cleanup; - sharetest ubuntu; -} - -fast_bench(){ - mode_name="Fast" - about; - benchinit; - clear - next; - print_intro; - next; - get_system_info; - print_system_info; - ip_info4; - next; - print_io fast; - next; - print_speedtest_fast; - next; - print_end_time; - next; - cleanup; -} - -log="$HOME/superbench.log" -true > $log - -case $1 in - 'info'|'-i'|'--i'|'-info'|'--info' ) - about;sleep 3;next;get_system_info;print_system_info;next;; - 'version'|'-v'|'--v'|'-version'|'--version') - next;about;next;; - 'io'|'-io'|'--io'|'-drivespeed'|'--drivespeed' ) - next;print_io;next;; - 'speed'|'-speed'|'--speed'|'-speedtest'|'--speedtest'|'-speedcheck'|'--speedcheck' ) - about;benchinit;next;print_speedtest;next;cleanup;; - 'ip'|'-ip'|'--ip'|'geoip'|'-geoip'|'--geoip' ) - about;benchinit;next;ip_info4;next;cleanup;; - 'bench'|'-a'|'--a'|'-all'|'--all'|'-bench'|'--bench' ) - bench_all;; - 'about'|'-about'|'--about' ) - about;; - 'fast'|'-f'|'--f'|'-fast'|'--fast' ) - fast_bench;; - 'share'|'-s'|'--s'|'-share'|'--share' ) - bench_all; - is_share="share" - if [[ $2 == "" ]]; then - sharetest ubuntu; - else - sharetest $2; - fi - ;; - 'debug'|'-d'|'--d'|'-debug'|'--debug' ) - get_ip_whois_org_name;; -*) - bench_all;; -esac - -if [[ ! $is_share == "share" ]]; then - case $2 in - 'share'|'-s'|'--s'|'-share'|'--share' ) - if [[ $3 == '' ]]; then - sharetest ubuntu; - else - sharetest $3; - fi - ;; - esac -fi \ No newline at end of file From 285f84a5caff04f39bcf3f7bc7f3f45d0763cd2a Mon Sep 17 00:00:00 2001 From: ernie Date: Sun, 9 Jun 2019 21:08:14 +0800 Subject: [PATCH 07/52] Delete superbench.sh --- superbench.sh | 757 -------------------------------------------------- 1 file changed, 757 deletions(-) delete mode 100644 superbench.sh diff --git a/superbench.sh b/superbench.sh deleted file mode 100644 index 4f14051..0000000 --- a/superbench.sh +++ /dev/null @@ -1,757 +0,0 @@ -#!/usr/bin/env bash -# -# Description: Auto system info & I/O test & network to China script -# -# Copyright (C) 2017 - 2018 Oldking -# -# Thanks: Bench.sh -# -# URL: https://www.oldking.net/350.html -# - -# Colors -RED='\033[0;31m' -GREEN='\033[0;32m' -YELLOW='\033[0;33m' -SKYBLUE='\033[0;36m' -PLAIN='\033[0m' - -about() { - echo "" - echo " ========================================================= " - echo " \ Superbench.sh Script / " - echo " \ Basic system info, I/O test and speedtest / " - echo " \ v1.1.4 (1 Jan 2019) / " - echo " \ Created by Oldking / " - echo " ========================================================= " - echo "" - echo " Intro: https://www.oldking.net/350.html" - echo " Copyright (C) 2019 Oldking oooldking@gmail.com" - echo -e " ${RED}Happy New Year!${PLAIN}" - echo "" -} - -cancel() { - echo "" - next; - echo " Abort ..." - echo " Cleanup ..." - cleanup; - echo " Done" - exit -} - -trap cancel SIGINT - -benchinit() { - # check release - 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 - - # check root - [[ $EUID -ne 0 ]] && echo -e "${RED}Error:${PLAIN} This script must be run as root!" && exit 1 - - # check python - if [ ! -e '/usr/bin/python' ]; then - #echo -e - #read -p "${RED}Error:${PLAIN} python is not install. You must be install python command at first.\nDo you want to install? [y/n]" is_install - #if [[ ${is_install} == "y" || ${is_install} == "Y" ]]; then - echo " Installing 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 - #else - # exit - #fi - - fi - - # check curl - if [ ! -e '/usr/bin/curl' ]; then - #echo -e - #read -p "${RED}Error:${PLAIN} curl is not install. You must be install curl command at first.\nDo you want to install? [y/n]" is_install - #if [[ ${is_install} == "y" || ${is_install} == "Y" ]]; then - echo " Installing 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 - #else - # exit - #fi - fi - - # check wget - if [ ! -e '/usr/bin/wget' ]; then - #echo -e - #read -p "${RED}Error:${PLAIN} wget is not install. You must be install wget command at first.\nDo you want to install? [y/n]" is_install - #if [[ ${is_install} == "y" || ${is_install} == "Y" ]]; then - echo " Installing 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 - #else - # exit - #fi - fi - - # install virt-what - #if [ ! -e '/usr/sbin/virt-what' ]; then - # echo "Installing Virt-what ..." - # if [ "${release}" == "centos" ]; then - # yum update > /dev/null 2>&1 - # yum -y install virt-what > /dev/null 2>&1 - # else - # apt-get update > /dev/null 2>&1 - # apt-get -y install virt-what > /dev/null 2>&1 - # fi - #fi - - # install jq - #if [ ! -e '/usr/bin/jq' ]; then - # echo " Installing Jq ..." - # if [ "${release}" == "centos" ]; then - # yum update > /dev/null 2>&1 - # yum -y install jq > /dev/null 2>&1 - # else - # apt-get update > /dev/null 2>&1 - # apt-get -y install jq > /dev/null 2>&1 - # fi - #fi - - # install speedtest-cli - if [ ! -e 'speedtest.py' ]; then - echo " Installing Speedtest-cli ..." - wget --no-check-certificate https://raw.github.com/sivel/speedtest-cli/master/speedtest.py > /dev/null 2>&1 - fi - chmod a+rx speedtest.py - - - # install tools.py - if [ ! -e 'tools.py' ]; then - echo " Installing tools.py ..." - wget --no-check-certificate https://raw.githubusercontent.com/oooldking/script/master/tools.py > /dev/null 2>&1 - fi - chmod a+rx tools.py - - # install fast.com-cli - if [ ! -e 'fast_com.py' ]; then - echo " Installing Fast.com-cli ..." - wget --no-check-certificate https://raw.githubusercontent.com/sanderjo/fast.com/master/fast_com.py > /dev/null 2>&1 - wget --no-check-certificate https://raw.githubusercontent.com/sanderjo/fast.com/master/fast_com_example_usage.py > /dev/null 2>&1 - fi - chmod a+rx fast_com.py - chmod a+rx fast_com_example_usage.py - - sleep 5 - - # start - start=$(date +%s) -} - -get_opsy() { - [ -f /etc/redhat-release ] && awk '{print ($1,$3~/^[0-9]/?$3:$4)}' /etc/redhat-release && return - [ -f /etc/os-release ] && awk -F'[= "]' '/PRETTY_NAME/{print $3,$4,$5}' /etc/os-release && return - [ -f /etc/lsb-release ] && awk -F'[="]+' '/DESCRIPTION/{print $2}' /etc/lsb-release && return -} - -next() { - printf "%-70s\n" "-" | sed 's/\s/-/g' | tee -a $log -} - -speed_test(){ - if [[ $1 == '' ]]; then - temp=$(python speedtest.py --share 2>&1) - is_down=$(echo "$temp" | grep 'Download') - result_speed=$(echo "$temp" | awk -F ' ' '/results/{print $3}') - if [[ ${is_down} ]]; then - local REDownload=$(echo "$temp" | awk -F ':' '/Download/{print $2}') - local reupload=$(echo "$temp" | awk -F ':' '/Upload/{print $2}') - local relatency=$(echo "$temp" | awk -F ':' '/Hosted/{print $2}') - - temp=$(echo "$relatency" | awk -F '.' '{print $1}') - if [[ ${temp} -gt 50 ]]; then - relatency=" (*)"${relatency} - fi - local nodeName=$2 - - 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 "${YELLOW}%-17s${GREEN}%-18s${RED}%-20s${SKYBLUE}%-12s${PLAIN}\n" " ${nodeName}" "${reupload}" "${REDownload}" "${relatency}" | tee -a $log - fi - else - local cerror="ERROR" - fi - else - temp=$(python speedtest.py --server $1 --share 2>&1) - is_down=$(echo "$temp" | grep 'Download') - if [[ ${is_down} ]]; then - local REDownload=$(echo "$temp" | awk -F ':' '/Download/{print $2}') - local reupload=$(echo "$temp" | awk -F ':' '/Upload/{print $2}') - local relatency=$(echo "$temp" | awk -F ':' '/Hosted/{print $2}') - #local relatency=$(pingtest $3) - #temp=$(echo "$relatency" | awk -F '.' '{print $1}') - #if [[ ${temp} -gt 1000 ]]; then - relatency=" - " - #fi - local nodeName=$2 - - 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 "${YELLOW}%-17s${GREEN}%-18s${RED}%-20s${SKYBLUE}%-12s${PLAIN}\n" " ${nodeName}" "${reupload}" "${REDownload}" "${relatency}" | tee -a $log - fi - else - local cerror="ERROR" - fi - fi -} - -print_speedtest() { - printf "%-18s%-18s%-20s%-12s\n" " Node Name" "Upload Speed" "Download Speed" "Latency" | tee -a $log - speed_test '' 'Speedtest.net' - speed_fast_com - speed_test '5316' 'Nanjing CT' - speed_test '12637' 'Xiangyang CT' - speed_test '7509' 'Hangzhou CT' - speed_test '19076' 'Chongqing CT' - speed_test '5083' 'Shanghai CU' - speed_test '4863' "Xi'an CU" - speed_test '5726' 'Chongqing CU' - speed_test '4665' 'Shanghai CM' - speed_test '4575' 'Chengdu CM' - speed_test '6168' 'Kunming CM' - speed_test '6611' 'Guangzhou CM' - - rm -rf speedtest.py -} - -print_speedtest_fast() { - printf "%-18s%-18s%-20s%-12s\n" " Node Name" "Upload Speed" "Download Speed" "Latency" | tee -a $log - speed_test '' 'Speedtest.net' - speed_fast_com - speed_test '7509' 'Hangzhou CT' - speed_test '5083' 'Shanghai CU' - speed_test '4575' 'Chengdu CM' - - rm -rf speedtest.py -} - -speed_fast_com() { - temp=$(python fast_com_example_usage.py 2>&1) - is_down=$(echo "$temp" | grep 'Result') - if [[ ${is_down} ]]; then - temp1=$(echo "$temp" | awk -F ':' '/Result/{print $2}') - temp2=$(echo "$temp1" | awk -F ' ' '/Mbps/{print $1}') - local REDownload="$temp2 Mbit/s" - local reupload="0.00 Mbit/s" - local relatency="-" - local nodeName="Fast.com" - - printf "${YELLOW}%-18s${GREEN}%-18s${RED}%-20s${SKYBLUE}%-12s${PLAIN}\n" " ${nodeName}" "${reupload}" "${REDownload}" "${relatency}" | tee -a $log - else - local cerror="ERROR" - fi - rm -rf fast_com_example_usage.py - rm -rf fast_com.py - -} - -io_test() { - (LANG=C dd if=/dev/zero of=test_file_$$ bs=512K count=$1 conv=fdatasync && rm -f test_file_$$ ) 2>&1 | awk -F, '{io=$NF} END { print io}' | sed 's/^[ \t]*//;s/[ \t]*$//' -} - -calc_disk() { - local total_size=0 - local array=$@ - for size in ${array[@]} - do - [ "${size}" == "0" ] && size_t=0 || size_t=`echo ${size:0:${#size}-1}` - [ "`echo ${size:(-1)}`" == "K" ] && size=0 - [ "`echo ${size:(-1)}`" == "M" ] && size=$( awk 'BEGIN{printf "%.1f", '$size_t' / 1024}' ) - [ "`echo ${size:(-1)}`" == "T" ] && size=$( awk 'BEGIN{printf "%.1f", '$size_t' * 1024}' ) - [ "`echo ${size:(-1)}`" == "G" ] && size=${size_t} - total_size=$( awk 'BEGIN{printf "%.1f", '$total_size' + '$size'}' ) - done - echo ${total_size} -} - -power_time() { - - result=$(smartctl -a $(result=$(cat /proc/mounts) && echo $(echo "$result" | awk '/data=ordered/{print $1}') | awk '{print $1}') 2>&1) && power_time=$(echo "$result" | awk '/Power_On/{print $10}') && echo "$power_time" -} - -install_smart() { - # install smartctl - if [ ! -e '/usr/sbin/smartctl' ]; then - echo "Installing Smartctl ..." - if [ "${release}" == "centos" ]; then - yum update > /dev/null 2>&1 - yum -y install smartmontools > /dev/null 2>&1 - else - apt-get update > /dev/null 2>&1 - apt-get -y install smartmontools > /dev/null 2>&1 - fi - fi -} - -ip_info(){ - # use jq tool - result=$(curl -s 'http://ip-api.com/json') - country=$(echo $result | jq '.country' | sed 's/\"//g') - city=$(echo $result | jq '.city' | sed 's/\"//g') - isp=$(echo $result | jq '.isp' | sed 's/\"//g') - as_tmp=$(echo $result | jq '.as' | sed 's/\"//g') - asn=$(echo $as_tmp | awk -F ' ' '{print $1}') - org=$(echo $result | jq '.org' | sed 's/\"//g') - countryCode=$(echo $result | jq '.countryCode' | sed 's/\"//g') - region=$(echo $result | jq '.regionName' | sed 's/\"//g') - if [ -z "$city" ]; then - city=${region} - fi - - echo -e " ASN & ISP : ${SKYBLUE}$asn, $isp${PLAIN}" | tee -a $log - echo -e " Organization : ${YELLOW}$org${PLAIN}" | tee -a $log - echo -e " Location : ${SKYBLUE}$city, ${YELLOW}$country / $countryCode${PLAIN}" | tee -a $log - echo -e " Region : ${SKYBLUE}$region${PLAIN}" | tee -a $log -} - -ip_info2(){ - # no jq - country=$(curl -s https://ipapi.co/country_name/) - city=$(curl -s https://ipapi.co/city/) - asn=$(curl -s https://ipapi.co/asn/) - org=$(curl -s https://ipapi.co/org/) - countryCode=$(curl -s https://ipapi.co/country/) - region=$(curl -s https://ipapi.co/region/) - - echo -e " ASN & ISP : ${SKYBLUE}$asn${PLAIN}" | tee -a $log - echo -e " Organization : ${SKYBLUE}$org${PLAIN}" | tee -a $log - echo -e " Location : ${SKYBLUE}$city, ${GREEN}$country / $countryCode${PLAIN}" | tee -a $log - echo -e " Region : ${SKYBLUE}$region${PLAIN}" | tee -a $log -} - -ip_info3(){ - # use python tool - country=$(python ip_info.py country) - city=$(python ip_info.py city) - isp=$(python ip_info.py isp) - as_tmp=$(python ip_info.py as) - asn=$(echo $as_tmp | awk -F ' ' '{print $1}') - org=$(python ip_info.py org) - countryCode=$(python ip_info.py countryCode) - region=$(python ip_info.py regionName) - - echo -e " ASN & ISP : ${SKYBLUE}$asn, $isp${PLAIN}" | tee -a $log - echo -e " Organization : ${GREEN}$org${PLAIN}" | tee -a $log - echo -e " Location : ${SKYBLUE}$city, ${GREEN}$country / $countryCode${PLAIN}" | tee -a $log - echo -e " Region : ${SKYBLUE}$region${PLAIN}" | tee -a $log - - rm -rf ip_info.py -} - -ip_info4(){ - ip_date=$(curl -4 -s http://api.ip.la/en?json) - echo $ip_date > ip_json.json - isp=$(python tools.py geoip isp) - as_tmp=$(python tools.py geoip as) - asn=$(echo $as_tmp | awk -F ' ' '{print $1}') - org=$(python tools.py geoip org) - if [ -z "ip_date" ]; then - echo $ip_date - echo "hala" - country=$(python tools.py ipip country_name) - city=$(python tools.py ipip city) - countryCode=$(python tools.py ipip country_code) - region=$(python tools.py ipip province) - else - country=$(python tools.py geoip country) - city=$(python tools.py geoip city) - countryCode=$(python tools.py geoip countryCode) - region=$(python tools.py geoip regionName) - fi - if [ -z "$city" ]; then - city=${region} - fi - - echo -e " ASN & ISP : ${SKYBLUE}$asn, $isp${PLAIN}" | tee -a $log - echo -e " Organization : ${YELLOW}$org${PLAIN}" | tee -a $log - echo -e " Location : ${SKYBLUE}$city, ${YELLOW}$country / $countryCode${PLAIN}" | tee -a $log - echo -e " Region : ${SKYBLUE}$region${PLAIN}" | tee -a $log - - rm -rf tools.py - rm -rf ip_json.json -} - -virt_check(){ - if hash ifconfig 2>/dev/null; then - eth=$(ifconfig) - fi - - virtualx=$(dmesg) 2>/dev/null - - # check dmidecode cmd - if [ $(which dmidecode) ]; then - sys_manu=$(dmidecode -s system-manufacturer) 2>/dev/null - sys_product=$(dmidecode -s system-product-name) 2>/dev/null - sys_ver=$(dmidecode -s system-version) 2>/dev/null - else - sys_manu="" - sys_product="" - sys_ver="" - fi - - if grep docker /proc/1/cgroup -qa; then - virtual="Docker" - elif grep lxc /proc/1/cgroup -qa; then - virtual="Lxc" - elif grep -qa container=lxc /proc/1/environ; then - virtual="Lxc" - elif [[ -f /proc/user_beancounters ]]; then - virtual="OpenVZ" - elif [[ "$virtualx" == *kvm-clock* ]]; then - virtual="KVM" - elif [[ "$cname" == *KVM* ]]; then - virtual="KVM" - elif [[ "$virtualx" == *"VMware Virtual Platform"* ]]; then - virtual="VMware" - elif [[ "$virtualx" == *"Parallels Software International"* ]]; then - virtual="Parallels" - elif [[ "$virtualx" == *VirtualBox* ]]; then - virtual="VirtualBox" - elif [[ -e /proc/xen ]]; then - virtual="Xen" - elif [[ "$sys_manu" == *"Microsoft Corporation"* ]]; then - if [[ "$sys_product" == *"Virtual Machine"* ]]; then - if [[ "$sys_ver" == *"7.0"* || "$sys_ver" == *"Hyper-V" ]]; then - virtual="Hyper-V" - else - virtual="Microsoft Virtual Machine" - fi - fi - else - virtual="Dedicated" - fi -} - -power_time_check(){ - echo -ne " Power time of disk : " - install_smart - ptime=$(power_time) - echo -e "${SKYBLUE}$ptime Hours${PLAIN}" -} - -freedisk() { - # check free space - #spacename=$( df -m . | awk 'NR==2 {print $1}' ) - #spacenamelength=$(echo ${spacename} | awk '{print length($0)}') - #if [[ $spacenamelength -gt 20 ]]; then - # freespace=$( df -m . | awk 'NR==3 {print $3}' ) - #else - # freespace=$( df -m . | awk 'NR==2 {print $4}' ) - #fi - freespace=$( df -m . | awk 'NR==2 {print $4}' ) - if [[ $freespace == "" ]]; then - $freespace=$( df -m . | awk 'NR==3 {print $3}' ) - fi - if [[ $freespace -gt 1024 ]]; then - printf "%s" $((1024*2)) - elif [[ $freespace -gt 512 ]]; then - printf "%s" $((512*2)) - elif [[ $freespace -gt 256 ]]; then - printf "%s" $((256*2)) - elif [[ $freespace -gt 128 ]]; then - printf "%s" $((128*2)) - else - printf "1" - fi -} - -print_io() { - if [[ $1 == "fast" ]]; then - writemb=$((128*2)) - else - writemb=$(freedisk) - fi - - writemb_size="$(( writemb / 2 ))MB" - if [[ $writemb_size == "1024MB" ]]; then - writemb_size="1.0GB" - fi - - if [[ $writemb != "1" ]]; then - echo -n " I/O Speed( $writemb_size ) : " | tee -a $log - io1=$( io_test $writemb ) - echo -e "${YELLOW}$io1${PLAIN}" | tee -a $log - echo -n " I/O Speed( $writemb_size ) : " | tee -a $log - io2=$( io_test $writemb ) - echo -e "${YELLOW}$io2${PLAIN}" | tee -a $log - echo -n " I/O Speed( $writemb_size ) : " | tee -a $log - io3=$( io_test $writemb ) - echo -e "${YELLOW}$io3${PLAIN}" | tee -a $log - ioraw1=$( echo $io1 | awk 'NR==1 {print $1}' ) - [ "`echo $io1 | awk 'NR==1 {print $2}'`" == "GB/s" ] && ioraw1=$( awk 'BEGIN{print '$ioraw1' * 1024}' ) - ioraw2=$( echo $io2 | awk 'NR==1 {print $1}' ) - [ "`echo $io2 | awk 'NR==1 {print $2}'`" == "GB/s" ] && ioraw2=$( awk 'BEGIN{print '$ioraw2' * 1024}' ) - ioraw3=$( echo $io3 | awk 'NR==1 {print $1}' ) - [ "`echo $io3 | awk 'NR==1 {print $2}'`" == "GB/s" ] && ioraw3=$( awk 'BEGIN{print '$ioraw3' * 1024}' ) - ioall=$( awk 'BEGIN{print '$ioraw1' + '$ioraw2' + '$ioraw3'}' ) - ioavg=$( awk 'BEGIN{printf "%.1f", '$ioall' / 3}' ) - echo -e " Average I/O Speed : ${YELLOW}$ioavg MB/s${PLAIN}" | tee -a $log - else - echo -e " ${RED}Not enough space!${PLAIN}" - fi -} - -print_system_info() { - echo -e " CPU Model : ${SKYBLUE}$cname${PLAIN}" | tee -a $log - echo -e " CPU Cores : ${YELLOW}$cores Cores ${SKYBLUE}@ $freq MHz $arch${PLAIN}" | tee -a $log - echo -e " CPU Cache : ${SKYBLUE}$corescache ${PLAIN}" | tee -a $log - echo -e " OS : ${SKYBLUE}$opsy ($lbit Bit) ${YELLOW}$virtual${PLAIN}" | tee -a $log - echo -e " Kernel : ${SKYBLUE}$kern${PLAIN}" | tee -a $log - echo -e " Total Space : ${SKYBLUE}$disk_used_size GB / ${YELLOW}$disk_total_size GB ${PLAIN}" | tee -a $log - echo -e " Total RAM : ${SKYBLUE}$uram MB / ${YELLOW}$tram MB ${SKYBLUE}($bram MB Buff)${PLAIN}" | tee -a $log - echo -e " Total SWAP : ${SKYBLUE}$uswap MB / $swap MB${PLAIN}" | tee -a $log - echo -e " Uptime : ${SKYBLUE}$up${PLAIN}" | tee -a $log - echo -e " Load Average : ${SKYBLUE}$load${PLAIN}" | tee -a $log - echo -e " TCP CC : ${YELLOW}$tcpctrl${PLAIN}" | tee -a $log -} - -print_end_time() { - end=$(date +%s) - time=$(( $end - $start )) - if [[ $time -gt 60 ]]; then - min=$(expr $time / 60) - sec=$(expr $time % 60) - echo -ne " Finished in : ${min} min ${sec} sec" | tee -a $log - else - echo -ne " Finished in : ${time} sec" | tee -a $log - fi - #echo -ne "\n Current time : " - #echo $(date +%Y-%m-%d" "%H:%M:%S) - printf '\n' | tee -a $log - #utc_time=$(date -u '+%F %T') - #bj_time=$(date +%Y-%m-%d" "%H:%M:%S -d '+8 hours') - bj_time=$(curl -s http://cgi.im.qq.com/cgi-bin/cgi_svrtime) - #utc_time=$(date +"$bj_time" -d '-8 hours') - - if [[ $(echo $bj_time | grep "html") ]]; then - bj_time=$(date -u +%Y-%m-%d" "%H:%M:%S -d '+8 hours') - fi - echo " Timestamp : $bj_time GMT+8" | tee -a $log - #echo " Finished!" - echo " Results : $log" -} - -get_system_info() { - cname=$( awk -F: '/model name/ {name=$2} END {print name}' /proc/cpuinfo | sed 's/^[ \t]*//;s/[ \t]*$//' ) - cores=$( awk -F: '/model name/ {core++} END {print core}' /proc/cpuinfo ) - freq=$( awk -F: '/cpu MHz/ {freq=$2} END {print freq}' /proc/cpuinfo | sed 's/^[ \t]*//;s/[ \t]*$//' ) - corescache=$( awk -F: '/cache size/ {cache=$2} END {print cache}' /proc/cpuinfo | sed 's/^[ \t]*//;s/[ \t]*$//' ) - tram=$( free -m | awk '/Mem/ {print $2}' ) - uram=$( free -m | awk '/Mem/ {print $3}' ) - bram=$( free -m | awk '/Mem/ {print $6}' ) - swap=$( free -m | awk '/Swap/ {print $2}' ) - uswap=$( free -m | awk '/Swap/ {print $3}' ) - up=$( awk '{a=$1/86400;b=($1%86400)/3600;c=($1%3600)/60} {printf("%d days %d hour %d min\n",a,b,c)}' /proc/uptime ) - load=$( w | head -1 | awk -F'load average:' '{print $2}' | sed 's/^[ \t]*//;s/[ \t]*$//' ) - opsy=$( get_opsy ) - arch=$( uname -m ) - lbit=$( getconf LONG_BIT ) - kern=$( uname -r ) - #ipv6=$( wget -qO- -t1 -T2 ipv6.icanhazip.com ) - disk_size1=($( LANG=C df -hPl | grep -wvE '\-|none|tmpfs|overlay|shm|udev|devtmpfs|by-uuid|chroot|Filesystem' | awk '{print $2}' )) - disk_size2=($( LANG=C df -hPl | grep -wvE '\-|none|tmpfs|overlay|shm|udev|devtmpfs|by-uuid|chroot|Filesystem' | awk '{print $3}' )) - disk_total_size=$( calc_disk ${disk_size1[@]} ) - disk_used_size=$( calc_disk ${disk_size2[@]} ) - #tcp congestion control - tcpctrl=$( sysctl net.ipv4.tcp_congestion_control | awk -F ' ' '{print $3}' ) - - #tmp=$(python tools.py disk 0) - #disk_total_size=$(echo $tmp | sed s/G//) - #tmp=$(python tools.py disk 1) - #disk_used_size=$(echo $tmp | sed s/G//) - - virt_check -} - -print_intro() { - printf ' Superbench.sh -- https://www.oldking.net/350.html\n' | tee -a $log - printf " Mode : \e${GREEN}%s\e${PLAIN} Version : \e${GREEN}%s${PLAIN}\n" $mode_name 1.1.4 | tee -a $log - printf ' Usage : wget -qO- git.io/superbench.sh | bash\n' | tee -a $log -} - -sharetest() { - echo " Share result:" | tee -a $log - echo " · $result_speed" | tee -a $log - log_preupload - case $1 in - 'ubuntu') - share_link=$( curl -v --data-urlencode "content@$log_up" -d "poster=superbench.sh" -d "syntax=text" "https://paste.ubuntu.com" 2>&1 | \ - grep "Location" | awk '{print $3}' );; - 'haste' ) - share_link=$( curl -X POST -s -d "$(cat $log)" https://hastebin.com/documents | awk -F '"' '{print "https://hastebin.com/"$4}' );; - 'clbin' ) - share_link=$( curl -sF 'clbin=<-' https://clbin.com < $log );; - 'ptpb' ) - share_link=$( curl -sF c=@- https://ptpb.pw/?u=1 < $log );; - esac - - # print result info - echo " · $share_link" | tee -a $log - next - echo "" - rm -f $log_up - -} - -log_preupload() { - log_up="$HOME/superbench_upload.log" - true > $log_up - $(cat superbench.log 2>&1 | sed -r "s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[m|K]//g" > $log_up) -} - -get_ip_whois_org_name(){ - #ip=$(curl -s ip.sb) - result=$(curl -s https://rest.db.ripe.net/search.json?query-string=$(curl -s ip.sb)) - #org_name=$(echo $result | jq '.objects.object.[1].attributes.attribute.[1].value' | sed 's/\"//g') - org_name=$(echo $result | jq '.objects.object[1].attributes.attribute[1]' | sed 's/\"//g') - echo $org_name; -} - -pingtest() { - local ping_ms=$( ping -w 1 -c 1 $1 | grep 'rtt' | cut -d"/" -f5 ) - - # get download speed and print - if [[ $ping_ms == "" ]]; then - printf "ping error!" | tee -a $log - else - printf "%3i.%s ms" "${ping_ms%.*}" "${ping_ms#*.}" | tee -a $log - fi -} - -cleanup() { - rm -f test_file_*; - rm -f speedtest.py; - rm -f fast_com*; - rm -f tools.py; - rm -f ip_json.json -} - -bench_all(){ - mode_name="Standard" - about; - benchinit; - clear - next; - print_intro; - next; - get_system_info; - print_system_info; - ip_info4; - next; - print_io; - next; - print_speedtest; - next; - print_end_time; - next; - cleanup; - sharetest ubuntu; -} - -fast_bench(){ - mode_name="Fast" - about; - benchinit; - clear - next; - print_intro; - next; - get_system_info; - print_system_info; - ip_info4; - next; - print_io fast; - next; - print_speedtest_fast; - next; - print_end_time; - next; - cleanup; -} - - - - -log="$HOME/superbench.log" -true > $log - -case $1 in - 'info'|'-i'|'--i'|'-info'|'--info' ) - about;sleep 3;next;get_system_info;print_system_info;next;; - 'version'|'-v'|'--v'|'-version'|'--version') - next;about;next;; - 'io'|'-io'|'--io'|'-drivespeed'|'--drivespeed' ) - next;print_io;next;; - 'speed'|'-speed'|'--speed'|'-speedtest'|'--speedtest'|'-speedcheck'|'--speedcheck' ) - about;benchinit;next;print_speedtest;next;cleanup;; - 'ip'|'-ip'|'--ip'|'geoip'|'-geoip'|'--geoip' ) - about;benchinit;next;ip_info4;next;cleanup;; - 'bench'|'-a'|'--a'|'-all'|'--all'|'-bench'|'--bench' ) - bench_all;; - 'about'|'-about'|'--about' ) - about;; - 'fast'|'-f'|'--f'|'-fast'|'--fast' ) - fast_bench;; - 'share'|'-s'|'--s'|'-share'|'--share' ) - bench_all; - is_share="share" - if [[ $2 == "" ]]; then - sharetest ubuntu; - else - sharetest $2; - fi - ;; - 'debug'|'-d'|'--d'|'-debug'|'--debug' ) - get_ip_whois_org_name;; -*) - bench_all;; -esac - - - -if [[ ! $is_share == "share" ]]; then - case $2 in - 'share'|'-s'|'--s'|'-share'|'--share' ) - if [[ $3 == '' ]]; then - sharetest ubuntu; - else - sharetest $3; - fi - ;; - esac -fi From 83449a651f21e1b6c5a2d5bff1b79f03ac6799bc Mon Sep 17 00:00:00 2001 From: ernie Date: Sun, 9 Jun 2019 21:09:41 +0800 Subject: [PATCH 08/52] Update README.md --- README.md | 31 ++++--------------------------- 1 file changed, 4 insertions(+), 27 deletions(-) diff --git a/README.md b/README.md index 0024efc..adc101f 100644 --- a/README.md +++ b/README.md @@ -1,30 +1,7 @@ -# Some Linux scripts -## Superspeed.sh +## Superspeed +Superspeed.sh with updated server lists +--- +Original Info: - Description: Test your server's network with Speedtest to China - Intro: https://www.oldking.net/305.html - Copyright (C) 2018 Oldking - -```bash -Usage: - -| No. | Bash Command -|----------|--------------------------------- -| 1 | wget https://raw.githubusercontent.com/oooldking/script/master/superspeed.sh -| 2 | chmod +x superspeed.sh -| 3 | ./superspeed.sh -``` -## Superbench.sh -- Description: Auto test download & I/O speed & network to China script -- Intro: https://www.oldking.net/350.html -- Copyright (C) 2018 Oldking - -```bash -Usage: - -| No. | Bash Command | -|----------|---------------------------------| -| 1 | wget -qO- https://raw.githubusercontent.com/oooldking/script/master/superbench.sh | bash | -| 2 | curl -Lso- https://raw.githubusercontent.com/oooldking/script/master/superbench.sh | bash | -``` - - From 99f1ce526da545f03148c722089a5b0dec65a4ef Mon Sep 17 00:00:00 2001 From: ernie Date: Sun, 9 Jun 2019 21:10:25 +0800 Subject: [PATCH 09/52] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index adc101f..389f07c 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ ## Superspeed Superspeed.sh with updated server lists ---- + Original Info: - Description: Test your server's network with Speedtest to China - Intro: https://www.oldking.net/305.html From 04f341d1ccfb1bdeade47be41f979b8412839ad7 Mon Sep 17 00:00:00 2001 From: ernie Date: Sun, 9 Jun 2019 22:15:27 +0800 Subject: [PATCH 10/52] Add files via upload --- ServerList.md | 150 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 150 insertions(+) create mode 100644 ServerList.md diff --git a/ServerList.md b/ServerList.md new file mode 100644 index 0000000..f493428 --- /dev/null +++ b/ServerList.md @@ -0,0 +1,150 @@ +更新日期:2019/06/09 + +| 节点ID | 节点名称 | +| :------: | :------: | +| 6132 | 长沙电信 | +| 3633 | 上海电信 | +| 3973 | 兰州电信 | +| 4751 | 北京电信 | +| 5316 | 南京电信 | +| 10305 | 南宁电信1 | +| 22724 | 南宁电信2 | +| 10192 | 南宁电信3 | +| 16399 | 南昌电信1 | +| 6473 | 南昌电信2 | +| 6345 | 南昌电信3 | +| 7643 | 南昌电信4 | +| 17145 | 合肥电信 | +| 24012 | 呼和浩特电信 | +| 6714 | 天津电信 | +| 10775 | 广州电信1 | +| 9151 | 广州电信2 | +| 17251 | 广州电信3 | +| 5324 | 徐州电信 | +| 4624 | 成都电信 | +| 6168 | 昆明电信 | +| 7509 | 杭州电信 | +| 23844 | 武汉电信1 | +| 20038 | 武汉电信2 | +| 23665 | 武汉电信3 | +| 24011 | 武汉电信4 | +| 5081 | 深圳电信 | +| 5396 | 苏州电信 | +| 6435 | 襄阳电信1 | +| 12637 | 襄阳电信2 | +| 19918 | 西宁电信 | +| 5317 | 连云港电信 | +| 4595 | 郑州电信 | +| 21470 | 鄂尔多斯电信 | +| 19076 | 重庆电信1 | +| 6592 | 重庆电信2 | +| 16983 | 重庆电信3 | +| 5145 | 北京联通1 | +| 18462 | 北京联通2 | +| 5505 | 北京联通3 | +| 9484 | 长春联通1 | +| 10742 | 长春联通2 | +| 4870 | 长沙联通 | +| 2461 | 成都联通 | +| 5726 | 重庆联通 | +| 4884 | 福州联通 | +| 3891 | 广州联通 | +| 5985 | 海口联通 | +| 5300 | 杭州联通 | +| 5460 | 哈尔滨联通 | +| 5724 | 合肥联通 | +| 5465 | 呼和浩特联通 | +| 5039 | 济南联通1 | +| 12538 | 济南联通2 | +| 5103 | 昆明联通 | +| 4690 | 兰州联通 | +| 5750 | 拉萨联通 | +| 7230 | 南昌联通1 | +| 5097 | 南昌联通2 | +| 5446 | 南京联通1 | +| 13704 | 南京联通2 | +| 5674 | 南宁联通 | +| 6245 | 宁波联通 | +| 5509 | 宁夏联通 | +| 5710 | 青岛联通 | +| 21005 | 上海联通1 | +| 24447 | 上海联通2 | +| 5083 | 上海联通3 | +| 5017 | 沈阳联通 | +| 10201 | 深圳联通 | +| 19736 | 太原联通1 | +| 12868 | 太原联通2 | +| 12516 | 太原联通3 | +| 5475 | 天津联通 | +| 6144 | 乌鲁木齐联通 | +| 5485 | 武汉联通 | +| 5506 | 厦门联通 | +| 5992 | 西宁联通 | +| 5131 | 郑州联通1 | +| 6810 | 郑州联通2 | +| 17222 | 新疆阿勒泰移动 | +| 17230 | 内蒙古阿拉善移动 | +| 17227 | 新疆和田移动 | +| 4665 | 上海移动1 | +| 16719 | 上海移动2 | +| 16803 | 上海移动3 | +| 17388 | 临沂移动 | +| 3784 | 乌鲁木齐移动1 | +| 16858 | 乌鲁木齐移动2 | +| 17228 | 伊犁移动 | +| 16145 | 兰州移动 | +| 4713 | 北京移动 | +| 21590 | 南京移动 | +| 15863 | 南宁移动 | +| 16294 | 南昌移动1 | +| 16332 | 南昌移动2 | +| 21530 | 南通移动 | +| 21642 | 台州移动 | +| 4377 | 合肥移动 | +| 17085 | 呼和浩特移动 | +| 17437 | 哈尔滨移动 | +| 10939 | 商丘移动 | +| 17245 | 喀什移动 | +| 17184 | 天津移动 | +| 16005 | 太原移动 | +| 6715 | 宁波移动 | +| 21722 | 宿迁移动 | +| 21845 | 常州移动 | +| 6611 | 广州移动 | +| 22349 | 徐州移动 | +| 24337 | 成都移动1 | +| 4575 | 成都移动2 | +| 21600 | 扬州移动 | +| 18444 | 拉萨移动1 | +| 17494 | 拉萨移动2 | +| 5122 | 无锡移动1 | +| 21973 | 无锡移动2 | +| 5892 | 昆明移动 | +| 4647 | 杭州移动1 | +| 12278 | 杭州移动2 | +| 16395 | 武汉移动 | +| 16167 | 沈阳移动 | +| 16314 | 济南移动1 | +| 17480 | 济南移动2 | +| 16503 | 海口移动 | +| 22037 | 淮安移动 | +| 4515 | 深圳移动 | +| 21946 | 盐城移动 | +| 17223 | 石家庄移动 | +| 16171 | 福州移动 | +| 3927 | 苏州移动1 | +| 21472 | 苏州移动2 | +| 18504 | 西宁移动1 | +| 16915 | 西宁移动2 | +| 16398 | 贵阳移动1 | +| 7404 | 贵阳移动2 | +| 21584 | 连云港移动 | +| 18970 | 郑州移动1 | +| 4486 | 郑州移动2 | +| 16409 | 重庆移动1 | +| 17584 | 重庆移动2 | +| 16392 | 银川移动 | +| 17320 | 镇江移动 | +| 16375 | 长春移动 | +| 15862 | 长沙移动 | +| 17432 | 青岛移动 | From 582dcbbc1dd2d1c4ee2de17ab5566c9813f6c57a Mon Sep 17 00:00:00 2001 From: ernie Date: Sun, 9 Jun 2019 22:17:16 +0800 Subject: [PATCH 11/52] Update README.md --- README.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 389f07c..e4045f6 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,8 @@ ## Superspeed Superspeed.sh with updated server lists -Original Info: +[查看全部节点列表](https://github.com/ernisn/superspeed/blob/master/ServerList.md) + +Modified from Oldking's script. Original Info: - Description: Test your server's network with Speedtest to China -- Intro: https://www.oldking.net/305.html - Copyright (C) 2018 Oldking From 8a97b780df7eb55de513992d94bc3ed68bd06504 Mon Sep 17 00:00:00 2001 From: ernie Date: Sun, 9 Jun 2019 22:18:36 +0800 Subject: [PATCH 12/52] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E4=BA=86=E5=85=A8?= =?UTF-8?q?=E9=83=A8=E6=9C=8D=E5=8A=A1=E5=99=A8=E8=8A=82=E7=82=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- superspeed.sh | 475 ++++++++++++++++---------------------------------- 1 file changed, 155 insertions(+), 320 deletions(-) diff --git a/superspeed.sh b/superspeed.sh index 923f3e9..3febced 100644 --- a/superspeed.sh +++ b/superspeed.sh @@ -1,11 +1,4 @@ #!/usr/bin/env bash -# -# Description: Test your server's network with Speedtest to China -# -# Copyright (C) 2017 - 2017 Oldking -# -# URL: https://www.oldking.net/305.html -# # Colors RED='\033[0;31m' @@ -50,292 +43,22 @@ fi clear -echo "#############################################################" -echo "# Description: Test your server's network with Speedtest #" -echo "# Intro: https://www.oldking.net/305.html #" -echo "# Author: Oldking #" -echo "# Github: https://github.com/oooldking #" -echo "#############################################################" -echo -echo "测试服务器到" -echo -ne "1.中国电信 2.中国联通 3.中国移动 4.本地默认 5.全面测速" +echo "测速节点更新日期: 2019/06/09" +echo "查看当前所有节点:" +echo "https://github.com/ernisn/superspeed/blob/master/ServerList.md" +echo "是否进行全面测速? (失效的测速节点会自动跳过)" +echo -ne "1.确认测速 2.取消测速" while :; do echo read -p "请输入数字选择: " telecom - if [[ ! $telecom =~ ^[1-5]$ ]]; then + if [[ ! $telecom =~ ^[1-2]$ ]]; then echo "输入错误! 请输入正确的数字!" else break fi done -if [[ ${telecom} == 1 ]]; then - telecomName="电信" - echo -e "\n选择最靠近你的方位" - echo -ne "1.北方 2.南方" - while :; do echo - read -p "请输入数字选择: " pos - if [[ ! $pos =~ ^[1-2]$ ]]; then - echo "输入错误! 请输入正确的数字!" - else - break - fi - done - echo -e "\n选择最靠近你的城市" - if [[ ${pos} == 1 ]]; then - echo -ne "1.郑州 2.襄阳" - while :; do echo - read -p "请输入数字选择: " city - if [[ ! $city =~ ^[1-2]$ ]]; then - echo "输入错误! 请输入正确的数字!" - else - break - fi - done - if [[ ${city} == 1 ]]; then - num=4595 - cityName="郑州" - fi - if [[ ${city} == 2 ]]; then - num=12637 - cityName="襄阳" - fi - fi - if [[ ${pos} == 2 ]]; then - echo -ne "1.上海 2.杭州 3.南宁 4.南昌 5.长沙 6.深圳 7.重庆 8.成都" - while :; do echo - read -p "请输入数字选择: " city - if [[ ! $city =~ ^[1-8]$ ]]; then - echo "输入错误! 请输入正确的数字!" - else - break - fi - done - if [[ ${city} == 1 ]]; then - num=3633 - cityName="上海" - fi - if [[ ${city} == 2 ]]; then - num=7509 - cityName="杭州" - fi - if [[ ${city} == 3 ]]; then - num=10305 - cityName="南宁" - fi - if [[ ${city} == 4 ]]; then - num=7230 - cityName="南昌" - fi - if [[ ${city} == 5 ]]; then - num=6132 - cityName="长沙" - fi - if [[ ${city} == 6 ]]; then - num=5081 - cityName="深圳" - fi - if [[ ${city} == 7 ]]; then - num=6592 - cityName="重庆" - fi - if [[ ${city} == 8 ]]; then - num=4624 - cityName="成都" - fi - fi -fi - -if [[ ${telecom} == 2 ]]; then - telecomName="联通" - echo -ne "\n1.北方 2.南方" - while :; do echo - read -p "请输入数字选择: " pos - if [[ ! $pos =~ ^[1-2]$ ]]; then - echo "输入错误! 请输入正确的数字!" - else - break - fi - done - echo -e "\n选择最靠近你的城市" - if [[ ${pos} == 1 ]]; then - echo -ne "1.沈阳 2.长春 3.哈尔滨 4.天津 5.济南 6.北京 7.郑州 8.西安 9.太原 10.宁夏 11.兰州 12.西宁" - while :; do echo - read -p "请输入数字选择: " city - if [[ ! $city =~ ^(([1-9])|(1([0-2]{1})))$ ]]; then - echo "输入错误! 请输入正确的数字!" - else - break - fi - done - if [[ ${city} == 1 ]]; then - num=5017 - cityName="沈阳" - fi - if [[ ${city} == 2 ]]; then - num=9484 - cityName="长春" - fi - if [[ ${city} == 3 ]]; then - num=5460 - cityName="哈尔滨" - fi - if [[ ${city} == 4 ]]; then - num=5475 - cityName="天津" - fi - if [[ ${city} == 5 ]]; then - num=5039 - cityName="济南" - fi - if [[ ${city} == 6 ]]; then - num=5145 - cityName="北京" - fi - if [[ ${city} == 7 ]]; then - num=5131 - cityName="郑州" - fi - if [[ ${city} == 8 ]]; then - num= 4863 - cityName="西安" - fi - if [[ ${city} == 9 ]]; then - num=12868 - cityName="太原" - fi - if [[ ${city} == 10 ]]; then - num=5509 - cityName="宁夏" - fi - if [[ ${city} == 11 ]]; then - num=4690 - cityName="兰州" - fi - if [[ ${city} == 12 ]]; then - num=5992 - cityName="西宁" - fi - fi - if [[ ${pos} == 2 ]]; then - echo -ne "1.上海 2.杭州 3.南宁 4.合肥 5.南昌 6.长沙 7.深圳 8.广州 9.重庆 10.昆明 11.成都" - while :; do echo - read -p "请输入数字选择: " city - if [[ ! $city =~ ^(([1-9])|(1([0-1]{1})))$ ]]; then - echo "输入错误! 请输入正确的数字!" - else - break - fi - done - if [[ ${city} == 1 ]]; then - num=5083 - cityName="上海" - fi - if [[ ${city} == 2 ]]; then - num=5300 - cityName="杭州" - fi - if [[ ${city} == 3 ]]; then - num=5674 - cityName="南宁" - fi - if [[ ${city} == 4 ]]; then - num=5724 - cityName="合肥" - fi - if [[ ${city} == 5 ]]; then - num=5079 - cityName="南昌" - fi - if [[ ${city} == 6 ]]; then - num=4870 - cityName="长沙" - fi - if [[ ${city} == 7 ]]; then - num=10201 - cityName="深圳" - fi - if [[ ${city} == 8 ]]; then - num=3891 - cityName="广州" - fi - if [[ ${city} == 9 ]]; then - num=5726 - cityName="重庆" - fi - if [[ ${city} == 10 ]]; then - num=5103 - cityName="昆明" - fi - if [[ ${city} == 11 ]]; then - num=2461 - cityName="成都" - fi - fi -fi - -if [[ ${telecom} == 3 ]]; then - telecomName="移动" - echo -ne "\n1.北方 2.南方" - while :; do echo - read -p "请输入数字选择: " pos - if [[ ! $pos =~ ^[1-2]$ ]]; then - echo "输入错误! 请输入正确的数字!" - else - break - fi - done - echo -e "\n选择最靠近你的城市" - if [[ ${pos} == 1 ]]; then - echo -ne "1.西安" - while :; do echo - read -p "请输入数字选择: " city - if [[ ! $city =~ ^[1]$ ]]; then - echo "输入错误! 请输入正确的数字!" - else - break - fi - done - if [[ ${city} == 1 ]]; then - num=5292 - fi - fi - if [[ ${pos} == 2 ]]; then - echo -ne "1.上海 2.宁波 3.无锡 4.杭州 5.合肥 6.成都" - while :; do echo - read -p "请输入数字选择: " city - if [[ ! $city =~ ^[1-6]$ ]]; then - echo "输入错误! 请输入正确的数字!" - else - break - fi - done - if [[ ${city} == 1 ]]; then - num=4665 - cityName="上海" - fi - if [[ ${city} == 2 ]]; then - num=6715 - cityName="宁波" - fi - if [[ ${city} == 3 ]]; then - num=5122 - cityName="无锡" - fi - if [[ ${city} == 4 ]]; then - num=4647 - cityName="杭州" - fi - if [[ ${city} == 5 ]]; then - num=4377 - cityName="合肥" - fi - if [[ ${city} == 6 ]]; then - num=4575 - cityName="成都" - fi - fi -fi +[[ ${telecom} == 2 ]] && exit 1 # install speedtest if [ ! -e '/tmp/speedtest.py' ]; then @@ -376,44 +99,156 @@ speed_test(){ fi } -if [[ ${telecom} =~ ^[1-3]$ ]]; then - python /tmp/speedtest.py --server ${num} --share 2>/dev/null | tee /tmp/speed.log 2>/dev/null - is_down=$(cat /tmp/speed.log | grep 'Download') - - if [[ ${is_down} ]]; then - result - echo "测试到 ${cityName}${telecomName} 完成!" - rm -rf /tmp/speedtest.py - rm -rf /tmp/speed.log - else - echo -e "\n${RED}ERROR:${PLAIN} 当前节点不可用,请更换其他节点,或换个时间段再测试。" - fi -fi - -if [[ ${telecom} == 4 ]]; then - python /tmp/speedtest.py | tee /tmp/speed.log - result - echo "本地测试完成!" - rm -rf /tmp/speedtest.py - rm -rf /tmp/speed.log -fi - -if [[ ${telecom} == 5 ]]; then +if [[ ${telecom} == 1 ]]; then echo "" - printf "%-14s%-18s%-20s%-12s\n" "Node Name" "Upload Speed" "Download Speed" "Latency" + printf "%-18s%-18s%-20s%-12s\n" "节点名称" "上传速度" "下载速度" "延迟" start=$(date +%s) - speed_test '6435' '襄阳电信' - speed_test '7509' '昆明电信' - speed_test '3633' '上海电信' - speed_test '4624' '成都电信' - speed_test '5017' '沈阳联通' - speed_test '4863' '西安联通' - speed_test '5083' '上海联通' - speed_test '5726' '重庆联通' - speed_test '5292' '西安移动' - speed_test '16314' '山东移动' + speed_test '6132' '长沙电信' + speed_test '3633' '上海电信' + speed_test '3973' '兰州电信' + speed_test '4751' '北京电信' + speed_test '5316' '南京电信' + speed_test '10305' '南宁电信1' + speed_test '22724' '南宁电信2' + speed_test '10192' '南宁电信3' + speed_test '16399' '南昌电信1' + speed_test '6473' '南昌电信2' + speed_test '6345' '南昌电信3' + speed_test '7643' '南昌电信4' + speed_test '17145' '合肥电信' + speed_test '24012' '呼和浩特电信' + speed_test '6714' '天津电信' + speed_test '10775' '广州电信1' + speed_test '9151' '广州电信2' + speed_test '17251' '广州电信3' + speed_test '5324' '徐州电信' + speed_test '4624' '成都电信' + speed_test '6168' '昆明电信' + speed_test '7509' '杭州电信' + speed_test '23844' '武汉电信1' + speed_test '20038' '武汉电信2' + speed_test '23665' '武汉电信3' + speed_test '24011' '武汉电信4' + speed_test '5081' '深圳电信' + speed_test '5396' '苏州电信' + speed_test '6435' '襄阳电信1' + speed_test '12637' '襄阳电信2' + speed_test '19918' '西宁电信' + speed_test '5317' '连云港电信' + speed_test '4595' '郑州电信' + speed_test '21470' '鄂尔多斯电信' + speed_test '19076' '重庆电信1' + speed_test '6592' '重庆电信2' + speed_test '16983' '重庆电信3' + speed_test '5145' '北京联通1' + speed_test '18462' '北京联通2' + speed_test '5505' '北京联通3' + speed_test '9484' '长春联通1' + speed_test '10742' '长春联通2' + speed_test '4870' '长沙联通' + speed_test '2461' '成都联通' + speed_test '5726' '重庆联通' + speed_test '4884' '福州联通' + speed_test '3891' '广州联通' + speed_test '5985' '海口联通' + speed_test '5300' '杭州联通' + speed_test '5460' '哈尔滨联通' + speed_test '5724' '合肥联通' + speed_test '5465' '呼和浩特联通' + speed_test '5039' '济南联通1' + speed_test '12538' '济南联通2' + speed_test '5103' '昆明联通' + speed_test '4690' '兰州联通' + speed_test '5750' '拉萨联通' + speed_test '7230' '南昌联通1' + speed_test '5097' '南昌联通2' + speed_test '5446' '南京联通1' + speed_test '13704' '南京联通2' + speed_test '5674' '南宁联通' + speed_test '6245' '宁波联通' + speed_test '5509' '宁夏联通' + speed_test '5710' '青岛联通' + speed_test '21005' '上海联通1' + speed_test '24447' '上海联通2' + speed_test '5083' '上海联通3' + speed_test '5017' '沈阳联通' + speed_test '10201' '深圳联通' + speed_test '19736' '太原联通1' + speed_test '12868' '太原联通2' + speed_test '12516' '太原联通3' + speed_test '5475' '天津联通' + speed_test '6144' '乌鲁木齐联通' + speed_test '5485' '武汉联通' + speed_test '5506' '厦门联通' + speed_test '5992' '西宁联通' + speed_test '5131' '郑州联通1' + speed_test '6810' '郑州联通2' + speed_test '17222' '新疆阿勒泰移动' + speed_test '17230' '内蒙古阿拉善移动' + speed_test '17227' '新疆和田移动' + speed_test '4665' '上海移动1' + speed_test '16719' '上海移动2' + speed_test '16803' '上海移动3' + speed_test '17388' '临沂移动' + speed_test '3784' '乌鲁木齐移动1' + speed_test '16858' '乌鲁木齐移动2' + speed_test '17228' '伊犁移动' + speed_test '16145' '兰州移动' + speed_test '4713' '北京移动' + speed_test '21590' '南京移动' + speed_test '15863' '南宁移动' + speed_test '16294' '南昌移动1' + speed_test '16332' '南昌移动2' + speed_test '21530' '南通移动' + speed_test '21642' '台州移动' + speed_test '4377' '合肥移动' + speed_test '17085' '呼和浩特移动' + speed_test '17437' '哈尔滨移动' + speed_test '10939' '商丘移动' + speed_test '17245' '喀什移动' + speed_test '17184' '天津移动' + speed_test '16005' '太原移动' speed_test '6715' '宁波移动' - speed_test '4575' '成都移动' + speed_test '21722' '宿迁移动' + speed_test '21845' '常州移动' + speed_test '6611' '广州移动' + speed_test '22349' '徐州移动' + speed_test '24337' '成都移动1' + speed_test '4575' '成都移动2' + speed_test '21600' '扬州移动' + speed_test '18444' '拉萨移动1' + speed_test '17494' '拉萨移动2' + speed_test '5122' '无锡移动1' + speed_test '21973' '无锡移动2' + speed_test '5892' '昆明移动' + speed_test '4647' '杭州移动1' + speed_test '12278' '杭州移动2' + speed_test '16395' '武汉移动' + speed_test '16167' '沈阳移动' + speed_test '16314' '济南移动1' + speed_test '17480' '济南移动2' + speed_test '16503' '海口移动' + speed_test '22037' '淮安移动' + speed_test '4515' '深圳移动' + speed_test '21946' '盐城移动' + speed_test '17223' '石家庄移动' + speed_test '16171' '福州移动' + speed_test '3927' '苏州移动1' + speed_test '21472' '苏州移动2' + speed_test '18504' '西宁移动1' + speed_test '16915' '西宁移动2' + speed_test '16398' '贵阳移动1' + speed_test '7404' '贵阳移动2' + speed_test '21584' '连云港移动' + speed_test '18970' '郑州移动1' + speed_test '4486' '郑州移动2' + speed_test '16409' '重庆移动1' + speed_test '17584' '重庆移动2' + speed_test '16392' '银川移动' + speed_test '17320' '镇江移动' + speed_test '16375' '长春移动' + speed_test '15862' '长沙移动' + speed_test '17432' '青岛移动' end=$(date +%s) rm -rf /tmp/speedtest.py echo "" @@ -428,4 +263,4 @@ if [[ ${telecom} == 5 ]]; then echo -ne "\n当前时间: " echo $(date +%Y-%m-%d" "%H:%M:%S) echo "全面测试完成!" -fi +fi \ No newline at end of file From 7d326ddf24a43dc703d7ee8eb4989efb99befe8a Mon Sep 17 00:00:00 2001 From: ernie Date: Sun, 9 Jun 2019 22:20:50 +0800 Subject: [PATCH 13/52] Update README.md --- README.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index e4045f6..2b958c8 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,10 @@ ## Superspeed -Superspeed.sh with updated server lists +Superspeed.sh with updated server lists. + +## Usage +``` +wget https://raw.githubusercontent.com/ernisn/superspeed/master/superspeed.sh && chmod +x superspeed.sh && bash superspeed.sh +``` [查看全部节点列表](https://github.com/ernisn/superspeed/blob/master/ServerList.md) From 596e4045ef3b6249432b54d37f89fa6a275458bf Mon Sep 17 00:00:00 2001 From: ernie Date: Sun, 9 Jun 2019 22:46:44 +0800 Subject: [PATCH 14/52] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E4=BA=86=E5=85=A8?= =?UTF-8?q?=E9=83=A8=E8=8A=82=E7=82=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- superspeed.sh | 25 +++++-------------------- 1 file changed, 5 insertions(+), 20 deletions(-) diff --git a/superspeed.sh b/superspeed.sh index 3febced..e3b8dbc 100644 --- a/superspeed.sh +++ b/superspeed.sh @@ -44,8 +44,7 @@ fi clear echo "测速节点更新日期: 2019/06/09" -echo "查看当前所有节点:" -echo "https://github.com/ernisn/superspeed/blob/master/ServerList.md" +echo "查看当前所有节点: https://github.com/ernisn/superspeed/blob/master/ServerList.md" echo "是否进行全面测速? (失效的测速节点会自动跳过)" echo -ne "1.确认测速 2.取消测速" @@ -66,20 +65,6 @@ if [ ! -e '/tmp/speedtest.py' ]; then fi chmod a+rx /tmp/speedtest.py -result() { - download=`cat /tmp/speed.log | awk -F ':' '/Download/{print $2}'` - upload=`cat /tmp/speed.log | awk -F ':' '/Upload/{print $2}'` - hostby=`cat /tmp/speed.log | awk -F ':' '/Hosted/{print $1}'` - latency=`cat /tmp/speed.log | awk -F ':' '/Hosted/{print $2}'` - clear - echo "$hostby" - echo "延迟 : $latency" - echo "上传 : $upload" - echo "下载 : $download" - echo -ne "\n当前时间: " - echo $(date +%Y-%m-%d" "%H:%M:%S) -} - speed_test(){ temp=$(python /tmp/speedtest.py --server $1 --share 2>&1) is_down=$(echo "$temp" | grep 'Download') @@ -93,15 +78,15 @@ speed_test(){ fi local nodeName=$2 - printf "${YELLOW}%-17s${GREEN}%-18s${RED}%-20s${SKYBLUE}%-12s${PLAIN}\n" "${nodeName}" "${reupload}" "${REDownload}" "${relatency}" + printf "${YELLOW}%-20s${GREEN}%-20s${RED}%-20s${SKYBLUE}%-12s${PLAIN}\n" "${nodeName}" "${reupload}" "${REDownload}" "${relatency}" else local cerror="ERROR" fi } if [[ ${telecom} == 1 ]]; then - echo "" - printf "%-18s%-18s%-20s%-12s\n" "节点名称" "上传速度" "下载速度" "延迟" + echo "———————————————————————————————————————————————————————————————————" + printf "%-20s%-20s%-20s%-12s\n" "节点名称 " "上传速度 " "下载速度 " "延迟" start=$(date +%s) speed_test '6132' '长沙电信' speed_test '3633' '上海电信' @@ -251,7 +236,7 @@ if [[ ${telecom} == 1 ]]; then speed_test '17432' '青岛移动' end=$(date +%s) rm -rf /tmp/speedtest.py - echo "" + echo "———————————————————————————————————————————————————————————————————" time=$(( $end - $start )) if [[ $time -gt 60 ]]; then min=$(expr $time / 60) From 80b5517aab2af53b72a462822e9137ac4c78e6d2 Mon Sep 17 00:00:00 2001 From: ernie Date: Sun, 9 Jun 2019 23:17:59 +0800 Subject: [PATCH 15/52] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E4=BA=86=E5=85=A8?= =?UTF-8?q?=E9=83=A8=E8=8A=82=E7=82=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- superspeed.sh | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/superspeed.sh b/superspeed.sh index e3b8dbc..8cb4fd2 100644 --- a/superspeed.sh +++ b/superspeed.sh @@ -43,15 +43,15 @@ fi clear -echo "测速节点更新日期: 2019/06/09" +# echo "测速节点更新日期: 2019/06/09" echo "查看当前所有节点: https://github.com/ernisn/superspeed/blob/master/ServerList.md" echo "是否进行全面测速? (失效的测速节点会自动跳过)" echo -ne "1.确认测速 2.取消测速" while :; do echo - read -p "请输入数字选择: " telecom + read -p "请输入数字选择: " telecom if [[ ! $telecom =~ ^[1-2]$ ]]; then - echo "输入错误! 请输入正确的数字!" + echo "输入错误, 请输入正确的数字!" else break fi @@ -241,9 +241,9 @@ if [[ ${telecom} == 1 ]]; then if [[ $time -gt 60 ]]; then min=$(expr $time / 60) sec=$(expr $time % 60) - echo -ne "花费时间:${min} 分 ${sec} 秒" + echo -ne "花费时间: ${min} 分 ${sec} 秒" else - echo -ne "花费时间:${time} 秒" + echo -ne "花费时间: ${time} 秒" fi echo -ne "\n当前时间: " echo $(date +%Y-%m-%d" "%H:%M:%S) From 97c116c824fdd05e7eb3213e504cfb2cc1349977 Mon Sep 17 00:00:00 2001 From: ernie Date: Mon, 10 Jun 2019 10:44:29 +0800 Subject: [PATCH 16/52] =?UTF-8?q?=E5=AE=8C=E5=96=84=E8=8A=82=E7=82=B9?= =?UTF-8?q?=E5=90=8D=E7=A7=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ServerList.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/ServerList.md b/ServerList.md index f493428..c951890 100644 --- a/ServerList.md +++ b/ServerList.md @@ -1,4 +1,4 @@ -更新日期:2019/06/09 +更新日期:2019/06/10 | 节点ID | 节点名称 | | :------: | :------: | @@ -82,9 +82,9 @@ | 5992 | 西宁联通 | | 5131 | 郑州联通1 | | 6810 | 郑州联通2 | -| 17222 | 新疆阿勒泰移动 | -| 17230 | 内蒙古阿拉善移动 | -| 17227 | 新疆和田移动 | +| 17222 | 阿勒泰移动 | +| 17230 | 阿拉善移动 | +| 17227 | 和田移动 | | 4665 | 上海移动1 | | 16719 | 上海移动2 | | 16803 | 上海移动3 | From 4c90d8f98c638ec6fe3d54a8ad338ebbdfcbb1d6 Mon Sep 17 00:00:00 2001 From: ernie Date: Mon, 10 Jun 2019 10:45:36 +0800 Subject: [PATCH 17/52] =?UTF-8?q?=E5=AE=8C=E5=96=84=E8=8A=82=E7=82=B9?= =?UTF-8?q?=E6=8F=8F=E8=BF=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- superspeed.sh | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/superspeed.sh b/superspeed.sh index 8cb4fd2..d922383 100644 --- a/superspeed.sh +++ b/superspeed.sh @@ -43,7 +43,7 @@ fi clear -# echo "测速节点更新日期: 2019/06/09" +# echo "测速节点更新日期: 2019/06/10" echo "查看当前所有节点: https://github.com/ernisn/superspeed/blob/master/ServerList.md" echo "是否进行全面测速? (失效的测速节点会自动跳过)" echo -ne "1.确认测速 2.取消测速" @@ -168,9 +168,9 @@ if [[ ${telecom} == 1 ]]; then speed_test '5992' '西宁联通' speed_test '5131' '郑州联通1' speed_test '6810' '郑州联通2' - speed_test '17222' '新疆阿勒泰移动' - speed_test '17230' '内蒙古阿拉善移动' - speed_test '17227' '新疆和田移动' + speed_test '17222' '阿勒泰移动' + speed_test '17230' '阿拉善移动' + speed_test '17227' '和田移动' speed_test '4665' '上海移动1' speed_test '16719' '上海移动2' speed_test '16803' '上海移动3' @@ -248,4 +248,4 @@ if [[ ${telecom} == 1 ]]; then echo -ne "\n当前时间: " echo $(date +%Y-%m-%d" "%H:%M:%S) echo "全面测试完成!" -fi \ No newline at end of file +fi From cfd2fa3fd01e1e7968ac3a081b3e163f2764f3b8 Mon Sep 17 00:00:00 2001 From: ernie Date: Mon, 10 Jun 2019 11:15:37 +0800 Subject: [PATCH 18/52] =?UTF-8?q?=E5=AE=8C=E5=96=84=E8=8A=82=E7=82=B9?= =?UTF-8?q?=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- superspeed.sh | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/superspeed.sh b/superspeed.sh index d922383..de61d3a 100644 --- a/superspeed.sh +++ b/superspeed.sh @@ -4,6 +4,7 @@ RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[0;33m' +PURPLE="\033[0;35m" SKYBLUE='\033[0;36m' PLAIN='\033[0m' @@ -44,9 +45,12 @@ fi clear # echo "测速节点更新日期: 2019/06/10" -echo "查看当前所有节点: https://github.com/ernisn/superspeed/blob/master/ServerList.md" +echo "———————————————————————————————————————————————————————————————————" +echo "查看所有测速节点信息: " +echo " https://github.com/ernisn/superspeed/blob/master/ServerList.md" +echo "———————————————————————————————————————————————————————————————————" echo "是否进行全面测速? (失效的测速节点会自动跳过)" -echo -ne "1.确认测速 2.取消测速" +echo -ne "1. 确认测速 2. 取消测速" while :; do echo read -p "请输入数字选择: " telecom @@ -74,11 +78,12 @@ speed_test(){ local relatency=$(echo "$temp" | awk -F ':' '/Hosted/{print $2}') temp=$(echo "$relatency" | awk -F '.' '{print $1}') if [[ ${temp} -gt 1000 ]]; then - relatency=" 000.000 ms" + relatency=" > 1 s" fi + local nodeID=$1 local nodeName=$2 - printf "${YELLOW}%-20s${GREEN}%-20s${RED}%-20s${SKYBLUE}%-12s${PLAIN}\n" "${nodeName}" "${reupload}" "${REDownload}" "${relatency}" + printf "${PURPLE}%-8s${YELLOW}%-16s${GREEN}%-18s${RED}%-18s${SKYBLUE}%-12s${PLAIN}\n" "${nodeID}" "${nodeName}" "${reupload}" "${REDownload}" "${relatency}" else local cerror="ERROR" fi @@ -86,7 +91,7 @@ speed_test(){ if [[ ${telecom} == 1 ]]; then echo "———————————————————————————————————————————————————————————————————" - printf "%-20s%-20s%-20s%-12s\n" "节点名称 " "上传速度 " "下载速度 " "延迟" + printf "%-8s%-16s%-18s%-18s%-12s\n" "节点ID " "节点名称 " "上传速度 " "下载速度 " "延迟" start=$(date +%s) speed_test '6132' '长沙电信' speed_test '3633' '上海电信' @@ -241,11 +246,10 @@ if [[ ${telecom} == 1 ]]; then if [[ $time -gt 60 ]]; then min=$(expr $time / 60) sec=$(expr $time % 60) - echo -ne "花费时间: ${min} 分 ${sec} 秒" + echo -ne "测试完成, 本次测速耗时: ${min} 分 ${sec} 秒" else - echo -ne "花费时间: ${time} 秒" + echo -ne "测试完成, 本次测速耗时: ${time} 秒" fi echo -ne "\n当前时间: " echo $(date +%Y-%m-%d" "%H:%M:%S) - echo "全面测试完成!" fi From b20369325cd9f2b9ae0c81d1a3e9c8862e6d3c48 Mon Sep 17 00:00:00 2001 From: ernie Date: Mon, 10 Jun 2019 22:20:43 +0800 Subject: [PATCH 19/52] Update README.md --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index 2b958c8..6068708 100644 --- a/README.md +++ b/README.md @@ -8,6 +8,10 @@ wget https://raw.githubusercontent.com/ernisn/superspeed/master/superspeed.sh && [查看全部节点列表](https://github.com/ernisn/superspeed/blob/master/ServerList.md) +![测速图](https://i.loli.net/2019/06/10/5cfe66bda253d41014.png) + +--- + Modified from Oldking's script. Original Info: - Description: Test your server's network with Speedtest to China - Copyright (C) 2018 Oldking From 176581cacd21d5b1219dc2300016ea955801a7fb Mon Sep 17 00:00:00 2001 From: ernie Date: Tue, 11 Jun 2019 10:26:55 +0800 Subject: [PATCH 20/52] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 6068708..736c16f 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ wget https://raw.githubusercontent.com/ernisn/superspeed/master/superspeed.sh && [查看全部节点列表](https://github.com/ernisn/superspeed/blob/master/ServerList.md) -![测速图](https://i.loli.net/2019/06/10/5cfe66bda253d41014.png) +![测速图](https://i.loli.net/2019/06/11/5cff113b273e210685.png) --- From 5a433574f8fcb03ee95d88a7038b70565cdf3195 Mon Sep 17 00:00:00 2001 From: ernie Date: Mon, 24 Jun 2019 09:13:30 +0800 Subject: [PATCH 21/52] Update superspeed.sh --- superspeed.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/superspeed.sh b/superspeed.sh index de61d3a..542d857 100644 --- a/superspeed.sh +++ b/superspeed.sh @@ -83,7 +83,7 @@ speed_test(){ local nodeID=$1 local nodeName=$2 - printf "${PURPLE}%-8s${YELLOW}%-16s${GREEN}%-18s${RED}%-18s${SKYBLUE}%-12s${PLAIN}\n" "${nodeID}" "${nodeName}" "${reupload}" "${REDownload}" "${relatency}" + printf "${PURPLE}%-8s${YELLOW}%-16s${GREEN}%-18s${RED}%-18s${SKYBLUE}%-10s${PLAIN}\n" "${nodeID}" "${nodeName}" "${reupload}" "${REDownload}" "${relatency}" else local cerror="ERROR" fi @@ -91,7 +91,7 @@ speed_test(){ if [[ ${telecom} == 1 ]]; then echo "———————————————————————————————————————————————————————————————————" - printf "%-8s%-16s%-18s%-18s%-12s\n" "节点ID " "节点名称 " "上传速度 " "下载速度 " "延迟" + printf "%-8s%-16s%-18s%-18s%-10s\n" "节点ID " "节点名称 " "上传速度 " "下载速度 " "延迟" start=$(date +%s) speed_test '6132' '长沙电信' speed_test '3633' '上海电信' From 6928e0c3696bfa0082444d5b29a7734456b4baac Mon Sep 17 00:00:00 2001 From: ernie Date: Tue, 2 Jul 2019 00:20:17 +0800 Subject: [PATCH 22/52] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E4=BD=BF=E7=94=A8?= =?UTF-8?q?=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 736c16f..50816f5 100644 --- a/README.md +++ b/README.md @@ -3,12 +3,12 @@ Superspeed.sh with updated server lists. ## Usage ``` -wget https://raw.githubusercontent.com/ernisn/superspeed/master/superspeed.sh && chmod +x superspeed.sh && bash superspeed.sh +bash <(curl -Lso- https://git.io/superspeed) ``` -[查看全部节点列表](https://github.com/ernisn/superspeed/blob/master/ServerList.md) +[查看全部节点列表](https://git.io/superspeedList) -![测速图](https://i.loli.net/2019/06/11/5cff113b273e210685.png) +![测速图](https://i.loli.net/2019/07/02/5d1a32698da9894105.png) --- From 11ecd3f1569bcd1d67613ad3d0b2384c58208ca3 Mon Sep 17 00:00:00 2001 From: ernie Date: Tue, 2 Jul 2019 00:21:36 +0800 Subject: [PATCH 23/52] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E8=8A=82=E7=82=B9?= =?UTF-8?q?=E4=BF=A1=E6=81=AF=E5=8F=8A=E5=AE=8C=E5=96=84=E6=98=BE=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- superspeed.sh | 397 +++++++++++++++++++++++++------------------------- 1 file changed, 202 insertions(+), 195 deletions(-) diff --git a/superspeed.sh b/superspeed.sh index 542d857..43c6024 100644 --- a/superspeed.sh +++ b/superspeed.sh @@ -4,8 +4,9 @@ RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[0;33m' +BLUE='\033[0;34m' PURPLE="\033[0;35m" -SKYBLUE='\033[0;36m' +CYAN='\033[0;36m' PLAIN='\033[0m' # check root @@ -13,59 +14,60 @@ PLAIN='\033[0m' # check python if [ ! -e '/usr/bin/python' ]; then - echo -e - read -p "${RED}Error:${PLAIN} python is not install. You must be install python command at first.\nDo you want to install? [y/n]" is_install - if [[ ${is_install} == "y" || ${is_install} == "Y" ]]; then - if [ "${release}" == "centos" ]; then - yum -y install python - else - apt-get -y install python - fi - else - exit - fi - + echo -e + read -p "${RED}Error:${PLAIN} python is not install. You must be install python command at first.\nDo you want to install? [y/n]" is_install + if [[ ${is_install} == "y" || ${is_install} == "Y" ]]; then + if [ "${release}" == "centos" ]; then + yum -y install python + else + apt-get -y install python + fi + else + exit + fi + fi # check wget if [ ! -e '/usr/bin/wget' ]; then - echo -e - read -p "${RED}Error:${PLAIN} wget is not install. You must be install wget command at first.\nDo you want to install? [y/n]" is_install - if [[ ${is_install} == "y" || ${is_install} == "Y" ]]; then - if [ "${release}" == "centos" ]; then - yum -y install wget - else - apt-get -y install wget - fi - else - exit - fi + echo -e + read -p "${RED}Error:${PLAIN} wget is not install. You must be install wget command at first.\nDo you want to install? [y/n]" is_install + if [[ ${is_install} == "y" || ${is_install} == "Y" ]]; then + if [ "${release}" == "centos" ]; then + yum -y install wget + else + apt-get -y install wget + fi + else + exit + fi fi clear -# echo "测速节点更新日期: 2019/06/10" -echo "———————————————————————————————————————————————————————————————————" -echo "查看所有测速节点信息: " -echo " https://github.com/ernisn/superspeed/blob/master/ServerList.md" + +echo "———————————————————————SuperSpeed 全面测速版———————————————————————" +echo " 使用方法: bash <(curl -Lso- https://git.io/superspeed)" +echo " 查看全部节点: https://git.io/superspeedList" +echo " 节点更新日期: 2019/07/02" echo "———————————————————————————————————————————————————————————————————" -echo "是否进行全面测速? (失效的测速节点会自动跳过)" -echo -ne "1. 确认测速 2. 取消测速" +echo "是否进行全面测速? (失效的测速节点会自动跳过)" +echo -ne " 1. 确认测速 2. 取消测速" while :; do echo - read -p "请输入数字选择: " telecom - if [[ ! $telecom =~ ^[1-2]$ ]]; then - echo "输入错误, 请输入正确的数字!" - else - break - fi + read -p "请输入数字选择: " telecom + if [[ ! $telecom =~ ^[1-2]$ ]]; then + echo "输入错误, 请输入正确的数字!" + else + break + fi done [[ ${telecom} == 2 ]] && exit 1 # install speedtest if [ ! -e '/tmp/speedtest.py' ]; then - wget --no-check-certificate -P /tmp https://raw.github.com/sivel/speedtest-cli/master/speedtest.py > /dev/null 2>&1 + wget --no-check-certificate -P /tmp https://raw.github.com/sivel/speedtest-cli/master/speedtest.py > /dev/null 2>&1 fi chmod a+rx /tmp/speedtest.py @@ -73,172 +75,177 @@ speed_test(){ temp=$(python /tmp/speedtest.py --server $1 --share 2>&1) is_down=$(echo "$temp" | grep 'Download') if [[ ${is_down} ]]; then - local REDownload=$(echo "$temp" | awk -F ':' '/Download/{print $2}') - local reupload=$(echo "$temp" | awk -F ':' '/Upload/{print $2}') - local relatency=$(echo "$temp" | awk -F ':' '/Hosted/{print $2}') - temp=$(echo "$relatency" | awk -F '.' '{print $1}') - if [[ ${temp} -gt 1000 ]]; then - relatency=" > 1 s" - fi + local REDownload=$(echo "$temp" | awk -F ':' '/Download/{print $2}') + local reupload=$(echo "$temp" | awk -F ':' '/Upload/{print $2}') + local relatency=$(echo "$temp" | awk -F ':' '/Hosted/{print $2}') + temp=$(echo "$relatency" | awk -F '.' '{print $1}') + if [[ ${temp} -gt 1000 ]]; then + relatency=" > 1 s" + fi local nodeID=$1 - local nodeName=$2 + local nodeLocation=$2 + local nodeISP=$3 - printf "${PURPLE}%-8s${YELLOW}%-16s${GREEN}%-18s${RED}%-18s${SKYBLUE}%-10s${PLAIN}\n" "${nodeID}" "${nodeName}" "${reupload}" "${REDownload}" "${relatency}" + printf "${RED}%-8s${YELLOW}%-10s${GREEN}%-10s${CYAN}%-16s${BLUE}%-16s${PURPLE}%-10s${PLAIN}\n" "${nodeID} " "${nodeISP} " "${nodeLocation} " "${reupload} " "${REDownload} " "${relatency}" else - local cerror="ERROR" + local cerror="ERROR" fi } if [[ ${telecom} == 1 ]]; then echo "———————————————————————————————————————————————————————————————————" - printf "%-8s%-16s%-18s%-18s%-10s\n" "节点ID " "节点名称 " "上传速度 " "下载速度 " "延迟" + printf "%-8s%-10s%-10s%-16s%-16s%-10s\n" "节点ID " "运营商 " "位置 " "上传速度 " "下载速度 " "延迟" start=$(date +%s) - speed_test '6132' '长沙电信' - speed_test '3633' '上海电信' - speed_test '3973' '兰州电信' - speed_test '4751' '北京电信' - speed_test '5316' '南京电信' - speed_test '10305' '南宁电信1' - speed_test '22724' '南宁电信2' - speed_test '10192' '南宁电信3' - speed_test '16399' '南昌电信1' - speed_test '6473' '南昌电信2' - speed_test '6345' '南昌电信3' - speed_test '7643' '南昌电信4' - speed_test '17145' '合肥电信' - speed_test '24012' '呼和浩特电信' - speed_test '6714' '天津电信' - speed_test '10775' '广州电信1' - speed_test '9151' '广州电信2' - speed_test '17251' '广州电信3' - speed_test '5324' '徐州电信' - speed_test '4624' '成都电信' - speed_test '6168' '昆明电信' - speed_test '7509' '杭州电信' - speed_test '23844' '武汉电信1' - speed_test '20038' '武汉电信2' - speed_test '23665' '武汉电信3' - speed_test '24011' '武汉电信4' - speed_test '5081' '深圳电信' - speed_test '5396' '苏州电信' - speed_test '6435' '襄阳电信1' - speed_test '12637' '襄阳电信2' - speed_test '19918' '西宁电信' - speed_test '5317' '连云港电信' - speed_test '4595' '郑州电信' - speed_test '21470' '鄂尔多斯电信' - speed_test '19076' '重庆电信1' - speed_test '6592' '重庆电信2' - speed_test '16983' '重庆电信3' - speed_test '5145' '北京联通1' - speed_test '18462' '北京联通2' - speed_test '5505' '北京联通3' - speed_test '9484' '长春联通1' - speed_test '10742' '长春联通2' - speed_test '4870' '长沙联通' - speed_test '2461' '成都联通' - speed_test '5726' '重庆联通' - speed_test '4884' '福州联通' - speed_test '3891' '广州联通' - speed_test '5985' '海口联通' - speed_test '5300' '杭州联通' - speed_test '5460' '哈尔滨联通' - speed_test '5724' '合肥联通' - speed_test '5465' '呼和浩特联通' - speed_test '5039' '济南联通1' - speed_test '12538' '济南联通2' - speed_test '5103' '昆明联通' - speed_test '4690' '兰州联通' - speed_test '5750' '拉萨联通' - speed_test '7230' '南昌联通1' - speed_test '5097' '南昌联通2' - speed_test '5446' '南京联通1' - speed_test '13704' '南京联通2' - speed_test '5674' '南宁联通' - speed_test '6245' '宁波联通' - speed_test '5509' '宁夏联通' - speed_test '5710' '青岛联通' - speed_test '21005' '上海联通1' - speed_test '24447' '上海联通2' - speed_test '5083' '上海联通3' - speed_test '5017' '沈阳联通' - speed_test '10201' '深圳联通' - speed_test '19736' '太原联通1' - speed_test '12868' '太原联通2' - speed_test '12516' '太原联通3' - speed_test '5475' '天津联通' - speed_test '6144' '乌鲁木齐联通' - speed_test '5485' '武汉联通' - speed_test '5506' '厦门联通' - speed_test '5992' '西宁联通' - speed_test '5131' '郑州联通1' - speed_test '6810' '郑州联通2' - speed_test '17222' '阿勒泰移动' - speed_test '17230' '阿拉善移动' - speed_test '17227' '和田移动' - speed_test '4665' '上海移动1' - speed_test '16719' '上海移动2' - speed_test '16803' '上海移动3' - speed_test '17388' '临沂移动' - speed_test '3784' '乌鲁木齐移动1' - speed_test '16858' '乌鲁木齐移动2' - speed_test '17228' '伊犁移动' - speed_test '16145' '兰州移动' - speed_test '4713' '北京移动' - speed_test '21590' '南京移动' - speed_test '15863' '南宁移动' - speed_test '16294' '南昌移动1' - speed_test '16332' '南昌移动2' - speed_test '21530' '南通移动' - speed_test '21642' '台州移动' - speed_test '4377' '合肥移动' - speed_test '17085' '呼和浩特移动' - speed_test '17437' '哈尔滨移动' - speed_test '10939' '商丘移动' - speed_test '17245' '喀什移动' - speed_test '17184' '天津移动' - speed_test '16005' '太原移动' - speed_test '6715' '宁波移动' - speed_test '21722' '宿迁移动' - speed_test '21845' '常州移动' - speed_test '6611' '广州移动' - speed_test '22349' '徐州移动' - speed_test '24337' '成都移动1' - speed_test '4575' '成都移动2' - speed_test '21600' '扬州移动' - speed_test '18444' '拉萨移动1' - speed_test '17494' '拉萨移动2' - speed_test '5122' '无锡移动1' - speed_test '21973' '无锡移动2' - speed_test '5892' '昆明移动' - speed_test '4647' '杭州移动1' - speed_test '12278' '杭州移动2' - speed_test '16395' '武汉移动' - speed_test '16167' '沈阳移动' - speed_test '16314' '济南移动1' - speed_test '17480' '济南移动2' - speed_test '16503' '海口移动' - speed_test '22037' '淮安移动' - speed_test '4515' '深圳移动' - speed_test '21946' '盐城移动' - speed_test '17223' '石家庄移动' - speed_test '16171' '福州移动' - speed_test '3927' '苏州移动1' - speed_test '21472' '苏州移动2' - speed_test '18504' '西宁移动1' - speed_test '16915' '西宁移动2' - speed_test '16398' '贵阳移动1' - speed_test '7404' '贵阳移动2' - speed_test '21584' '连云港移动' - speed_test '18970' '郑州移动1' - speed_test '4486' '郑州移动2' - speed_test '16409' '重庆移动1' - speed_test '17584' '重庆移动2' - speed_test '16392' '银川移动' - speed_test '17320' '镇江移动' - speed_test '16375' '长春移动' - speed_test '15862' '长沙移动' - speed_test '17432' '青岛移动' + # 电信 + speed_test '6132' '长沙' '电信' + speed_test '3633' '上海' '电信' + speed_test '3973' '兰州' '电信' + speed_test '4751' '北京' '电信' + speed_test '5316' '南京' '电信' + speed_test '10305' '南宁1' '电信' + speed_test '22724' '南宁2' '电信' + speed_test '10192' '南宁3' '电信' + speed_test '16399' '南昌1' '电信' + speed_test '6473' '南昌2' '电信' + speed_test '6345' '南昌3' '电信' + speed_test '7643' '南昌4' '电信' + speed_test '17145' '合肥' '电信' + speed_test '24012' '呼和浩特' '电信' + speed_test '6714' '天津' '电信' + speed_test '10775' '广州1' '电信' + speed_test '9151' '广州2' '电信' + speed_test '17251' '广州3' '电信' + speed_test '5324' '徐州' '电信' + speed_test '4624' '成都' '电信' + speed_test '6168' '昆明' '电信' + speed_test '7509' '杭州' '电信' + speed_test '23844' '武汉1' '电信' + speed_test '20038' '武汉2' '电信' + speed_test '23665' '武汉3' '电信' + speed_test '24011' '武汉4' '电信' + speed_test '5081' '深圳' '电信' + speed_test '5396' '苏州' '电信' + speed_test '6435' '襄阳1' '电信' + speed_test '12637' '襄阳2' '电信' + speed_test '19918' '西宁' '电信' + speed_test '5317' '连云港' '电信' + speed_test '4595' '郑州' '电信' + speed_test '21470' '鄂尔多斯' '电信' + speed_test '19076' '重庆1' '电信' + speed_test '6592' '重庆2' '电信' + speed_test '16983' '重庆3' '电信' + # 联通 + speed_test '5145' '北京1' '联通' + speed_test '18462' '北京2' '联通' + speed_test '5505' '北京3' '联通' + speed_test '9484' '长春1' '联通' + speed_test '10742' '长春2' '联通' + speed_test '4870' '长沙' '联通' + speed_test '2461' '成都' '联通' + speed_test '5726' '重庆' '联通' + speed_test '4884' '福州' '联通' + speed_test '3891' '广州' '联通' + speed_test '5985' '海口' '联通' + speed_test '5300' '杭州' '联通' + speed_test '5460' '哈尔滨' '联通' + speed_test '5724' '合肥' '联通' + speed_test '5465' '呼和浩特' '联通' + speed_test '5039' '济南1' '联通' + speed_test '12538' '济南2' '联通' + speed_test '5103' '昆明' '联通' + speed_test '4690' '兰州' '联通' + speed_test '5750' '拉萨' '联通' + speed_test '7230' '南昌1' '联通' + speed_test '5097' '南昌2' '联通' + speed_test '5446' '南京1' '联通' + speed_test '13704' '南京2' '联通' + speed_test '5674' '南宁' '联通' + speed_test '6245' '宁波' '联通' + speed_test '5509' '宁夏' '联通' + speed_test '5710' '青岛' '联通' + speed_test '21005' '上海1' '联通' + speed_test '24447' '上海2' '联通' + speed_test '5083' '上海3' '联通' + speed_test '5017' '沈阳' '联通' + speed_test '10201' '深圳' '联通' + speed_test '19736' '太原1' '联通' + speed_test '12868' '太原2' '联通' + speed_test '12516' '太原3' '联通' + speed_test '5475' '天津' '联通' + speed_test '6144' '乌鲁木齐' '联通' + speed_test '5485' '武汉' '联通' + speed_test '5506' '厦门' '联通' + speed_test '5992' '西宁' '联通' + speed_test '5131' '郑州1' '联通' + speed_test '6810' '郑州2' '联通' + # 移动 + speed_test '4665' '上海1' '移动' + speed_test '16719' '上海2' '移动' + speed_test '16803' '上海3' '移动' + speed_test '17388' '临沂' '移动' + speed_test '3784' '乌鲁木齐1' '移动' + speed_test '16858' '乌鲁木齐2' '移动' + speed_test '17228' '伊犁' '移动' + speed_test '16145' '兰州' '移动' + speed_test '4713' '北京' '移动' + speed_test '21590' '南京' '移动' + speed_test '15863' '南宁' '移动' + speed_test '16294' '南昌1' '移动' + speed_test '16332' '南昌2' '移动' + speed_test '21530' '南通' '移动' + speed_test '21642' '台州' '移动' + speed_test '4377' '合肥' '移动' + speed_test '17085' '呼和浩特' '移动' + speed_test '17437' '哈尔滨' '移动' + speed_test '10939' '商丘' '移动' + speed_test '17245' '喀什' '移动' + speed_test '17184' '天津' '移动' + speed_test '16005' '太原' '移动' + speed_test '6715' '宁波' '移动' + speed_test '21722' '宿迁' '移动' + speed_test '21845' '常州' '移动' + speed_test '6611' '广州' '移动' + speed_test '22349' '徐州' '移动' + speed_test '24337' '成都1' '移动' + speed_test '4575' '成都2' '移动' + speed_test '21600' '扬州' '移动' + speed_test '18444' '拉萨1' '移动' + speed_test '17494' '拉萨2' '移动' + speed_test '5122' '无锡1' '移动' + speed_test '21973' '无锡2' '移动' + speed_test '5892' '昆明' '移动' + speed_test '4647' '杭州1' '移动' + speed_test '12278' '杭州2' '移动' + speed_test '16395' '武汉' '移动' + speed_test '16167' '沈阳' '移动' + speed_test '16314' '济南1' '移动' + speed_test '17480' '济南2' '移动' + speed_test '16503' '海口' '移动' + speed_test '22037' '淮安' '移动' + speed_test '4515' '深圳' '移动' + speed_test '21946' '盐城' '移动' + speed_test '17223' '石家庄' '移动' + speed_test '16171' '福州' '移动' + speed_test '3927' '苏州1' '移动' + speed_test '21472' '苏州2' '移动' + speed_test '18504' '西宁1' '移动' + speed_test '16915' '西宁2' '移动' + speed_test '16398' '贵阳1' '移动' + speed_test '7404' '贵阳2' '移动' + speed_test '21584' '连云港' '移动' + speed_test '18970' '郑州1' '移动' + speed_test '4486' '郑州2' '移动' + speed_test '16409' '重庆1' '移动' + speed_test '17584' '重庆2' '移动' + speed_test '16392' '银川' '移动' + speed_test '17320' '镇江' '移动' + speed_test '16375' '长春' '移动' + speed_test '15862' '长沙' '移动' + speed_test '17432' '青岛' '移动' + speed_test '17222' '阿勒泰' '移动' + speed_test '17230' '阿拉善' '移动' + speed_test '17227' '和田' '移动' + end=$(date +%s) rm -rf /tmp/speedtest.py echo "———————————————————————————————————————————————————————————————————" @@ -251,5 +258,5 @@ if [[ ${telecom} == 1 ]]; then echo -ne "测试完成, 本次测速耗时: ${time} 秒" fi echo -ne "\n当前时间: " - echo $(date +%Y-%m-%d" "%H:%M:%S) + echo $(date +%Y-%m-%d" "%H:%M:%S) fi From 07002f925e603be460c2b389541fcc741f0b2728 Mon Sep 17 00:00:00 2001 From: ernie Date: Tue, 2 Jul 2019 00:28:03 +0800 Subject: [PATCH 24/52] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E8=8A=82=E7=82=B9?= =?UTF-8?q?=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ServerList.md | 300 +++++++++++++++++++++++++------------------------- 1 file changed, 151 insertions(+), 149 deletions(-) diff --git a/ServerList.md b/ServerList.md index c951890..8c178ec 100644 --- a/ServerList.md +++ b/ServerList.md @@ -1,150 +1,152 @@ -更新日期:2019/06/10 +更新日期:2019/07/02 -| 节点ID | 节点名称 | -| :------: | :------: | -| 6132 | 长沙电信 | -| 3633 | 上海电信 | -| 3973 | 兰州电信 | -| 4751 | 北京电信 | -| 5316 | 南京电信 | -| 10305 | 南宁电信1 | -| 22724 | 南宁电信2 | -| 10192 | 南宁电信3 | -| 16399 | 南昌电信1 | -| 6473 | 南昌电信2 | -| 6345 | 南昌电信3 | -| 7643 | 南昌电信4 | -| 17145 | 合肥电信 | -| 24012 | 呼和浩特电信 | -| 6714 | 天津电信 | -| 10775 | 广州电信1 | -| 9151 | 广州电信2 | -| 17251 | 广州电信3 | -| 5324 | 徐州电信 | -| 4624 | 成都电信 | -| 6168 | 昆明电信 | -| 7509 | 杭州电信 | -| 23844 | 武汉电信1 | -| 20038 | 武汉电信2 | -| 23665 | 武汉电信3 | -| 24011 | 武汉电信4 | -| 5081 | 深圳电信 | -| 5396 | 苏州电信 | -| 6435 | 襄阳电信1 | -| 12637 | 襄阳电信2 | -| 19918 | 西宁电信 | -| 5317 | 连云港电信 | -| 4595 | 郑州电信 | -| 21470 | 鄂尔多斯电信 | -| 19076 | 重庆电信1 | -| 6592 | 重庆电信2 | -| 16983 | 重庆电信3 | -| 5145 | 北京联通1 | -| 18462 | 北京联通2 | -| 5505 | 北京联通3 | -| 9484 | 长春联通1 | -| 10742 | 长春联通2 | -| 4870 | 长沙联通 | -| 2461 | 成都联通 | -| 5726 | 重庆联通 | -| 4884 | 福州联通 | -| 3891 | 广州联通 | -| 5985 | 海口联通 | -| 5300 | 杭州联通 | -| 5460 | 哈尔滨联通 | -| 5724 | 合肥联通 | -| 5465 | 呼和浩特联通 | -| 5039 | 济南联通1 | -| 12538 | 济南联通2 | -| 5103 | 昆明联通 | -| 4690 | 兰州联通 | -| 5750 | 拉萨联通 | -| 7230 | 南昌联通1 | -| 5097 | 南昌联通2 | -| 5446 | 南京联通1 | -| 13704 | 南京联通2 | -| 5674 | 南宁联通 | -| 6245 | 宁波联通 | -| 5509 | 宁夏联通 | -| 5710 | 青岛联通 | -| 21005 | 上海联通1 | -| 24447 | 上海联通2 | -| 5083 | 上海联通3 | -| 5017 | 沈阳联通 | -| 10201 | 深圳联通 | -| 19736 | 太原联通1 | -| 12868 | 太原联通2 | -| 12516 | 太原联通3 | -| 5475 | 天津联通 | -| 6144 | 乌鲁木齐联通 | -| 5485 | 武汉联通 | -| 5506 | 厦门联通 | -| 5992 | 西宁联通 | -| 5131 | 郑州联通1 | -| 6810 | 郑州联通2 | -| 17222 | 阿勒泰移动 | -| 17230 | 阿拉善移动 | -| 17227 | 和田移动 | -| 4665 | 上海移动1 | -| 16719 | 上海移动2 | -| 16803 | 上海移动3 | -| 17388 | 临沂移动 | -| 3784 | 乌鲁木齐移动1 | -| 16858 | 乌鲁木齐移动2 | -| 17228 | 伊犁移动 | -| 16145 | 兰州移动 | -| 4713 | 北京移动 | -| 21590 | 南京移动 | -| 15863 | 南宁移动 | -| 16294 | 南昌移动1 | -| 16332 | 南昌移动2 | -| 21530 | 南通移动 | -| 21642 | 台州移动 | -| 4377 | 合肥移动 | -| 17085 | 呼和浩特移动 | -| 17437 | 哈尔滨移动 | -| 10939 | 商丘移动 | -| 17245 | 喀什移动 | -| 17184 | 天津移动 | -| 16005 | 太原移动 | -| 6715 | 宁波移动 | -| 21722 | 宿迁移动 | -| 21845 | 常州移动 | -| 6611 | 广州移动 | -| 22349 | 徐州移动 | -| 24337 | 成都移动1 | -| 4575 | 成都移动2 | -| 21600 | 扬州移动 | -| 18444 | 拉萨移动1 | -| 17494 | 拉萨移动2 | -| 5122 | 无锡移动1 | -| 21973 | 无锡移动2 | -| 5892 | 昆明移动 | -| 4647 | 杭州移动1 | -| 12278 | 杭州移动2 | -| 16395 | 武汉移动 | -| 16167 | 沈阳移动 | -| 16314 | 济南移动1 | -| 17480 | 济南移动2 | -| 16503 | 海口移动 | -| 22037 | 淮安移动 | -| 4515 | 深圳移动 | -| 21946 | 盐城移动 | -| 17223 | 石家庄移动 | -| 16171 | 福州移动 | -| 3927 | 苏州移动1 | -| 21472 | 苏州移动2 | -| 18504 | 西宁移动1 | -| 16915 | 西宁移动2 | -| 16398 | 贵阳移动1 | -| 7404 | 贵阳移动2 | -| 21584 | 连云港移动 | -| 18970 | 郑州移动1 | -| 4486 | 郑州移动2 | -| 16409 | 重庆移动1 | -| 17584 | 重庆移动2 | -| 16392 | 银川移动 | -| 17320 | 镇江移动 | -| 16375 | 长春移动 | -| 15862 | 长沙移动 | -| 17432 | 青岛移动 | +| 节点ID | 节点位置 | 运营商 | +| :------: | :------: | :------: | +| 6132 | 长沙 | 电信 | +| 3633 | 上海 | 电信 | +| 3973 | 兰州 | 电信 | +| 4751 | 北京 | 电信 | +| 5316 | 南京 | 电信 | +| 10305 | 南宁1 | 电信 | +| 22724 | 南宁2 | 电信 | +| 10192 | 南宁3 | 电信 | +| 16399 | 南昌1 | 电信 | +| 6473 | 南昌2 | 电信 | +| 6345 | 南昌3 | 电信 | +| 7643 | 南昌4 | 电信 | +| 17145 | 合肥 | 电信 | +| 24012 | 呼和浩特 | 电信 | +| 6714 | 天津 | 电信 | +| 10775 | 广州1 | 电信 | +| 9151 | 广州2 | 电信 | +| 17251 | 广州3 | 电信 | +| 5324 | 徐州 | 电信 | +| 4624 | 成都 | 电信 | +| 6168 | 昆明 | 电信 | +| 7509 | 杭州 | 电信 | +| 23844 | 武汉1 | 电信 | +| 20038 | 武汉2 | 电信 | +| 23665 | 武汉3 | 电信 | +| 24011 | 武汉4 | 电信 | +| 5081 | 深圳 | 电信 | +| 5396 | 苏州 | 电信 | +| 6435 | 襄阳1 | 电信 | +| 12637 | 襄阳2 | 电信 | +| 19918 | 西宁 | 电信 | +| 5317 | 连云港 | 电信 | +| 4595 | 郑州 | 电信 | +| 21470 | 鄂尔多斯 | 电信 | +| 19076 | 重庆1 | 电信 | +| 6592 | 重庆2 | 电信 | +| 16983 | 重庆3 | 电信 | +| --- | --- | --- | +| 5145 | 北京1 | 联通 | +| 18462 | 北京2 | 联通 | +| 5505 | 北京3 | 联通 | +| 9484 | 长春1 | 联通 | +| 10742 | 长春2 | 联通 | +| 4870 | 长沙 | 联通 | +| 2461 | 成都 | 联通 | +| 5726 | 重庆 | 联通 | +| 4884 | 福州 | 联通 | +| 3891 | 广州 | 联通 | +| 5985 | 海口 | 联通 | +| 5300 | 杭州 | 联通 | +| 5460 | 哈尔滨 | 联通 | +| 5724 | 合肥 | 联通 | +| 5465 | 呼和浩特 | 联通 | +| 5039 | 济南1 | 联通 | +| 12538 | 济南2 | 联通 | +| 5103 | 昆明 | 联通 | +| 4690 | 兰州 | 联通 | +| 5750 | 拉萨 | 联通 | +| 7230 | 南昌1 | 联通 | +| 5097 | 南昌2 | 联通 | +| 5446 | 南京1 | 联通 | +| 13704 | 南京2 | 联通 | +| 5674 | 南宁 | 联通 | +| 6245 | 宁波 | 联通 | +| 5509 | 宁夏 | 联通 | +| 5710 | 青岛 | 联通 | +| 21005 | 上海1 | 联通 | +| 24447 | 上海2 | 联通 | +| 5083 | 上海3 | 联通 | +| 5017 | 沈阳 | 联通 | +| 10201 | 深圳 | 联通 | +| 19736 | 太原1 | 联通 | +| 12868 | 太原2 | 联通 | +| 12516 | 太原3 | 联通 | +| 5475 | 天津 | 联通 | +| 6144 | 乌鲁木齐 | 联通 | +| 5485 | 武汉 | 联通 | +| 5506 | 厦门 | 联通 | +| 5992 | 西宁 | 联通 | +| 5131 | 郑州1 | 联通 | +| 6810 | 郑州2 | 联通 | +| --- | --- | --- | +| 4665 | 上海1 | 移动 | +| 16719 | 上海2 | 移动 | +| 16803 | 上海3 | 移动 | +| 17388 | 临沂 | 移动 | +| 3784 | 乌鲁木齐1 | 移动 | +| 16858 | 乌鲁木齐2 | 移动 | +| 17228 | 伊犁 | 移动 | +| 16145 | 兰州 | 移动 | +| 4713 | 北京 | 移动 | +| 21590 | 南京 | 移动 | +| 15863 | 南宁 | 移动 | +| 16294 | 南昌1 | 移动 | +| 16332 | 南昌2 | 移动 | +| 21530 | 南通 | 移动 | +| 21642 | 台州 | 移动 | +| 4377 | 合肥 | 移动 | +| 17085 | 呼和浩特 | 移动 | +| 17437 | 哈尔滨 | 移动 | +| 10939 | 商丘 | 移动 | +| 17245 | 喀什 | 移动 | +| 17184 | 天津 | 移动 | +| 16005 | 太原 | 移动 | +| 6715 | 宁波 | 移动 | +| 21722 | 宿迁 | 移动 | +| 21845 | 常州 | 移动 | +| 6611 | 广州 | 移动 | +| 22349 | 徐州 | 移动 | +| 24337 | 成都1 | 移动 | +| 4575 | 成都2 | 移动 | +| 21600 | 扬州 | 移动 | +| 18444 | 拉萨1 | 移动 | +| 17494 | 拉萨2 | 移动 | +| 5122 | 无锡1 | 移动 | +| 21973 | 无锡2 | 移动 | +| 5892 | 昆明 | 移动 | +| 4647 | 杭州1 | 移动 | +| 12278 | 杭州2 | 移动 | +| 16395 | 武汉 | 移动 | +| 16167 | 沈阳 | 移动 | +| 16314 | 济南1 | 移动 | +| 17480 | 济南2 | 移动 | +| 16503 | 海口 | 移动 | +| 22037 | 淮安 | 移动 | +| 4515 | 深圳 | 移动 | +| 21946 | 盐城 | 移动 | +| 17223 | 石家庄 | 移动 | +| 16171 | 福州 | 移动 | +| 3927 | 苏州1 | 移动 | +| 21472 | 苏州2 | 移动 | +| 18504 | 西宁1 | 移动 | +| 16915 | 西宁2 | 移动 | +| 16398 | 贵阳1 | 移动 | +| 7404 | 贵阳2 | 移动 | +| 21584 | 连云港 | 移动 | +| 18970 | 郑州1 | 移动 | +| 4486 | 郑州2 | 移动 | +| 16409 | 重庆1 | 移动 | +| 17584 | 重庆2 | 移动 | +| 16392 | 银川 | 移动 | +| 17320 | 镇江 | 移动 | +| 16375 | 长春 | 移动 | +| 15862 | 长沙 | 移动 | +| 17432 | 青岛 | 移动 | +| 17222 | 阿勒泰 | 移动 | +| 17230 | 阿拉善 | 移动 | +| 17227 | 和田 | 移动 | \ No newline at end of file From e3a893622b75a07e81e1728a39dd817479641e0c Mon Sep 17 00:00:00 2001 From: ernie Date: Mon, 23 Dec 2019 15:24:46 +0800 Subject: [PATCH 25/52] Update ServerList.md --- ServerList.md | 333 +++++++++++++++++++++++++++----------------------- 1 file changed, 182 insertions(+), 151 deletions(-) diff --git a/ServerList.md b/ServerList.md index 8c178ec..7aaf437 100644 --- a/ServerList.md +++ b/ServerList.md @@ -1,152 +1,183 @@ -更新日期:2019/07/02 +更新日期:2019/12/23 -| 节点ID | 节点位置 | 运营商 | -| :------: | :------: | :------: | -| 6132 | 长沙 | 电信 | -| 3633 | 上海 | 电信 | -| 3973 | 兰州 | 电信 | -| 4751 | 北京 | 电信 | -| 5316 | 南京 | 电信 | -| 10305 | 南宁1 | 电信 | -| 22724 | 南宁2 | 电信 | -| 10192 | 南宁3 | 电信 | -| 16399 | 南昌1 | 电信 | -| 6473 | 南昌2 | 电信 | -| 6345 | 南昌3 | 电信 | -| 7643 | 南昌4 | 电信 | -| 17145 | 合肥 | 电信 | -| 24012 | 呼和浩特 | 电信 | -| 6714 | 天津 | 电信 | -| 10775 | 广州1 | 电信 | -| 9151 | 广州2 | 电信 | -| 17251 | 广州3 | 电信 | -| 5324 | 徐州 | 电信 | -| 4624 | 成都 | 电信 | -| 6168 | 昆明 | 电信 | -| 7509 | 杭州 | 电信 | -| 23844 | 武汉1 | 电信 | -| 20038 | 武汉2 | 电信 | -| 23665 | 武汉3 | 电信 | -| 24011 | 武汉4 | 电信 | -| 5081 | 深圳 | 电信 | -| 5396 | 苏州 | 电信 | -| 6435 | 襄阳1 | 电信 | -| 12637 | 襄阳2 | 电信 | -| 19918 | 西宁 | 电信 | -| 5317 | 连云港 | 电信 | -| 4595 | 郑州 | 电信 | -| 21470 | 鄂尔多斯 | 电信 | -| 19076 | 重庆1 | 电信 | -| 6592 | 重庆2 | 电信 | -| 16983 | 重庆3 | 电信 | -| --- | --- | --- | -| 5145 | 北京1 | 联通 | -| 18462 | 北京2 | 联通 | -| 5505 | 北京3 | 联通 | -| 9484 | 长春1 | 联通 | -| 10742 | 长春2 | 联通 | -| 4870 | 长沙 | 联通 | -| 2461 | 成都 | 联通 | -| 5726 | 重庆 | 联通 | -| 4884 | 福州 | 联通 | -| 3891 | 广州 | 联通 | -| 5985 | 海口 | 联通 | -| 5300 | 杭州 | 联通 | -| 5460 | 哈尔滨 | 联通 | -| 5724 | 合肥 | 联通 | -| 5465 | 呼和浩特 | 联通 | -| 5039 | 济南1 | 联通 | -| 12538 | 济南2 | 联通 | -| 5103 | 昆明 | 联通 | -| 4690 | 兰州 | 联通 | -| 5750 | 拉萨 | 联通 | -| 7230 | 南昌1 | 联通 | -| 5097 | 南昌2 | 联通 | -| 5446 | 南京1 | 联通 | -| 13704 | 南京2 | 联通 | -| 5674 | 南宁 | 联通 | -| 6245 | 宁波 | 联通 | -| 5509 | 宁夏 | 联通 | -| 5710 | 青岛 | 联通 | -| 21005 | 上海1 | 联通 | -| 24447 | 上海2 | 联通 | -| 5083 | 上海3 | 联通 | -| 5017 | 沈阳 | 联通 | -| 10201 | 深圳 | 联通 | -| 19736 | 太原1 | 联通 | -| 12868 | 太原2 | 联通 | -| 12516 | 太原3 | 联通 | -| 5475 | 天津 | 联通 | -| 6144 | 乌鲁木齐 | 联通 | -| 5485 | 武汉 | 联通 | -| 5506 | 厦门 | 联通 | -| 5992 | 西宁 | 联通 | -| 5131 | 郑州1 | 联通 | -| 6810 | 郑州2 | 联通 | -| --- | --- | --- | -| 4665 | 上海1 | 移动 | -| 16719 | 上海2 | 移动 | -| 16803 | 上海3 | 移动 | -| 17388 | 临沂 | 移动 | -| 3784 | 乌鲁木齐1 | 移动 | -| 16858 | 乌鲁木齐2 | 移动 | -| 17228 | 伊犁 | 移动 | -| 16145 | 兰州 | 移动 | -| 4713 | 北京 | 移动 | -| 21590 | 南京 | 移动 | -| 15863 | 南宁 | 移动 | -| 16294 | 南昌1 | 移动 | -| 16332 | 南昌2 | 移动 | -| 21530 | 南通 | 移动 | -| 21642 | 台州 | 移动 | -| 4377 | 合肥 | 移动 | -| 17085 | 呼和浩特 | 移动 | -| 17437 | 哈尔滨 | 移动 | -| 10939 | 商丘 | 移动 | -| 17245 | 喀什 | 移动 | -| 17184 | 天津 | 移动 | -| 16005 | 太原 | 移动 | -| 6715 | 宁波 | 移动 | -| 21722 | 宿迁 | 移动 | -| 21845 | 常州 | 移动 | -| 6611 | 广州 | 移动 | -| 22349 | 徐州 | 移动 | -| 24337 | 成都1 | 移动 | -| 4575 | 成都2 | 移动 | -| 21600 | 扬州 | 移动 | -| 18444 | 拉萨1 | 移动 | -| 17494 | 拉萨2 | 移动 | -| 5122 | 无锡1 | 移动 | -| 21973 | 无锡2 | 移动 | -| 5892 | 昆明 | 移动 | -| 4647 | 杭州1 | 移动 | -| 12278 | 杭州2 | 移动 | -| 16395 | 武汉 | 移动 | -| 16167 | 沈阳 | 移动 | -| 16314 | 济南1 | 移动 | -| 17480 | 济南2 | 移动 | -| 16503 | 海口 | 移动 | -| 22037 | 淮安 | 移动 | -| 4515 | 深圳 | 移动 | -| 21946 | 盐城 | 移动 | -| 17223 | 石家庄 | 移动 | -| 16171 | 福州 | 移动 | -| 3927 | 苏州1 | 移动 | -| 21472 | 苏州2 | 移动 | -| 18504 | 西宁1 | 移动 | -| 16915 | 西宁2 | 移动 | -| 16398 | 贵阳1 | 移动 | -| 7404 | 贵阳2 | 移动 | -| 21584 | 连云港 | 移动 | -| 18970 | 郑州1 | 移动 | -| 4486 | 郑州2 | 移动 | -| 16409 | 重庆1 | 移动 | -| 17584 | 重庆2 | 移动 | -| 16392 | 银川 | 移动 | -| 17320 | 镇江 | 移动 | -| 16375 | 长春 | 移动 | -| 15862 | 长沙 | 移动 | -| 17432 | 青岛 | 移动 | -| 17222 | 阿勒泰 | 移动 | -| 17230 | 阿拉善 | 移动 | -| 17227 | 和田 | 移动 | \ No newline at end of file +| 服务器ID | 运营商 | 位置 | +| -------- | ------ | -------------- | +| 3633 | 电信 | 上海 | +| 28139 | 电信 | 上海5G | +| 6168 | 电信 | 云南昆明 | +| 27539 | 电信 | 云南昆明5G | +| 24012 | 电信 | 内蒙古呼和浩特 | +| 21470 | 电信 | 内蒙古鄂尔多斯 | +| 4751 | 电信 | 北京 | +| 27377 | 电信 | 北京5G | +| 4624 | 电信 | 四川成都 | +| 6714 | 电信 | 天津 | +| 17145 | 电信 | 安徽安徽合肥 | +| 9151 | 电信 | 广东广州 | +| 10775 | 电信 | 广东广州 | +| 17251 | 电信 | 广东广州 | +| 27594 | 电信 | 广东广州5G | +| 5081 | 电信 | 广东深圳 | +| 10192 | 电信 | 广西南宁 | +| 10305 | 电信 | 广西南宁 | +| 22724 | 电信 | 广西南宁 | +| 27810 | 电信 | 广西南宁 | +| 27304 | 电信 | 新疆乌鲁木齐 | +| 27575 | 电信 | 新疆乌鲁木齐 | +| 5316 | 电信 | 江苏南京 | +| 26352 | 电信 | 江苏南京5G | +| 5324 | 电信 | 江苏徐州 | +| 5396 | 电信 | 江苏苏州 | +| 5317 | 电信 | 江苏连云港 | +| 6345 | 电信 | 江西南昌 | +| 6473 | 电信 | 江西南昌 | +| 7643 | 电信 | 江西南昌 | +| 16399 | 电信 | 江西南昌 | +| 4595 | 电信 | 河南郑州 | +| 7509 | 电信 | 浙江杭州 | +| 20038 | 电信 | 湖北武汉 | +| 23665 | 电信 | 湖北武汉 | +| 23844 | 电信 | 湖北武汉 | +| 24011 | 电信 | 湖北武汉 | +| 6435 | 电信 | 湖北襄阳 | +| 12637 | 电信 | 湖北襄阳 | +| 6132 | 电信 | 湖南长沙 | +| 28225 | 电信 | 湖南长沙 | +| 3973 | 电信 | 甘肃兰州 | +| 6592 | 电信 | 重庆 | +| 16983 | 电信 | 重庆 | +| 19076 | 电信 | 重庆 | +| 19918 | 电信 | 青海西宁 | +| 4665 | 移动 | 上海 | +| 16719 | 移动 | 上海 | +| 16803 | 移动 | 上海 | +| 25637 | 移动 | 上海5G | +| 5892 | 移动 | 云南昆明 | +| 26728 | 移动 | 云南昆明 | +| 17085 | 移动 | 内蒙古呼和浩特 | +| 27019 | 移动 | 内蒙古呼和浩特 | +| 17230 | 移动 | 内蒙古阿拉善 | +| 4713 | 移动 | 北京 | +| 25858 | 移动 | 北京 | +| 16375 | 移动 | 吉林长春 | +| 4575 | 移动 | 四川成都 | +| 24337 | 移动 | 四川成都 | +| 28211 | 移动 | 四川成都 | +| 17184 | 移动 | 天津 | +| 16392 | 移动 | 宁夏银川 | +| 26940 | 移动 | 宁夏银川 | +| 4377 | 移动 | 安徽合肥 | +| 26404 | 移动 | 安徽合肥 | +| 17388 | 移动 | 山东临沂 | +| 16314 | 移动 | 山东济南 | +| 17480 | 移动 | 山东济南 | +| 25881 | 移动 | 山东济南 | +| 17432 | 移动 | 山东青岛 | +| 16005 | 移动 | 山西太原 | +| 6611 | 移动 | 广东广州 | +| 4515 | 移动 | 广东深圳 | +| 15863 | 移动 | 广西南宁 | +| 3784 | 移动 | 新疆乌鲁木齐 | +| 16858 | 移动 | 新疆乌鲁木齐 | +| 26938 | 移动 | 新疆乌鲁木齐5G | +| 17228 | 移动 | 新疆伊犁 | +| 17227 | 移动 | 新疆和田 | +| 17245 | 移动 | 新疆喀什 | +| 17222 | 移动 | 新疆阿勒泰 | +| 21590 | 移动 | 江苏南京 | +| 27249 | 移动 | 江苏南京5G | +| 21530 | 移动 | 江苏南通 | +| 21722 | 移动 | 江苏宿迁 | +| 21845 | 移动 | 江苏常州 | +| 22349 | 移动 | 江苏徐州 | +| 21600 | 移动 | 江苏扬州 | +| 5122 | 移动 | 江苏无锡 | +| 21973 | 移动 | 江苏无锡 | +| 26850 | 移动 | 江苏无锡5G | +| 21642 | 移动 | 江苏泰州 | +| 22037 | 移动 | 江苏淮安 | +| 21946 | 移动 | 江苏盐城 | +| 3927 | 移动 | 江苏苏州 | +| 21472 | 移动 | 江苏苏州 | +| 21584 | 移动 | 江苏连云港 | +| 17320 | 移动 | 江苏镇江 | +| 16294 | 移动 | 江西南昌 | +| 16332 | 移动 | 江西南昌 | +| 25883 | 移动 | 江西南昌 | +| 17223 | 移动 | 河北石家庄 | +| 10939 | 移动 | 河南商丘 | +| 4486 | 移动 | 河南郑州 | +| 18970 | 移动 | 河南郑州 | +| 26331 | 移动 | 河南郑州5G | +| 6715 | 移动 | 浙江宁波 | +| 4647 | 移动 | 浙江杭州 | +| 12278 | 移动 | 浙江杭州 | +| 16503 | 移动 | 海南海口 | +| 16395 | 移动 | 湖北武汉 | +| 26357 | 移动 | 湖北武汉 | +| 26547 | 移动 | 湖北武汉 | +| 15862 | 移动 | 湖南长沙 | +| 28491 | 移动 | 湖南长沙5G | +| 16145 | 移动 | 甘肃兰州 | +| 16171 | 移动 | 福建福州 | +| 17494 | 移动 | 西藏拉萨 | +| 18444 | 移动 | 西藏拉萨 | +| 7404 | 移动 | 贵州贵阳 | +| 16398 | 移动 | 贵州贵阳 | +| 25728 | 移动 | 辽宁大连 | +| 16167 | 移动 | 辽宁沈阳 | +| 16409 | 移动 | 重庆 | +| 17584 | 移动 | 重庆 | +| 26380 | 移动 | 陕西西安 | +| 16915 | 移动 | 青海西宁 | +| 18504 | 移动 | 青海西宁 | +| 29083 | 移动 | 青海西宁5G | +| 17437 | 移动 | 黑龙江哈尔滨 | +| 26656 | 移动 | 黑龙江哈尔滨5G | +| 5083 | 联通 | 上海 | +| 21005 | 联通 | 上海 | +| 24447 | 联通 | 上海5G | +| 5103 | 联通 | 云南昆明 | +| 5465 | 联通 | 内蒙古呼和浩特 | +| 5145 | 联通 | 北京 | +| 5505 | 联通 | 北京 | +| 18462 | 联通 | 北京 | +| 9484 | 联通 | 吉林长春 | +| 10742 | 联通 | 吉林长春 | +| 2461 | 联通 | 四川成都 | +| 5475 | 联通 | 天津 | +| 27154 | 联通 | 天津5G | +| 5509 | 联通 | 宁夏 | +| 5724 | 联通 | 安徽合肥 | +| 5039 | 联通 | 山东济南 | +| 12538 | 联通 | 山东济南 | +| 26180 | 联通 | 山东济南5G | +| 5710 | 联通 | 山东青岛 | +| 12516 | 联通 | 山西太原 | +| 12868 | 联通 | 山西太原 | +| 19736 | 联通 | 山西太原 | +| 3891 | 联通 | 广东广州 | +| 26678 | 联通 | 广东广州 | +| 10201 | 联通 | 广东深圳 | +| 5674 | 联通 | 广西南宁 | +| 6144 | 联通 | 新疆乌鲁木齐 | +| 5446 | 联通 | 江苏南京 | +| 13704 | 联通 | 江苏南京 | +| 5097 | 联通 | 江西南昌 | +| 7230 | 联通 | 江西南昌 | +| 5131 | 联通 | 河南郑州 | +| 6810 | 联通 | 河南郑州 | +| 6245 | 联通 | 浙江宁波 | +| 5300 | 联通 | 浙江杭州 | +| 5985 | 联通 | 海南海口 | +| 5485 | 联通 | 湖北武汉 | +| 26677 | 联通 | 湖南株洲 | +| 4870 | 联通 | 湖南长沙 | +| 4690 | 联通 | 甘肃兰州 | +| 5506 | 联通 | 福建厦门 | +| 4884 | 联通 | 福建福州 | +| 5750 | 联通 | 西藏拉萨 | +| 5017 | 联通 | 辽宁沈阳 | +| 5726 | 联通 | 重庆 | +| 5992 | 联通 | 青海西宁 | +| 5460 | 联通 | 黑龙江哈尔滨 | From 0e7b463f0a691ddf3e4df492d17c6034ad358328 Mon Sep 17 00:00:00 2001 From: ernie Date: Mon, 23 Dec 2019 21:44:37 +0800 Subject: [PATCH 26/52] Add files via upload --- superspeed.sh | 623 ++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 454 insertions(+), 169 deletions(-) diff --git a/superspeed.sh b/superspeed.sh index 43c6024..ec60682 100644 --- a/superspeed.sh +++ b/superspeed.sh @@ -46,24 +46,25 @@ fi clear -echo "———————————————————————SuperSpeed 全面测速版———————————————————————" -echo " 使用方法: bash <(curl -Lso- https://git.io/superspeed)" -echo " 查看全部节点: https://git.io/superspeedList" -echo " 节点更新日期: 2019/07/02" -echo "———————————————————————————————————————————————————————————————————" -echo "是否进行全面测速? (失效的测速节点会自动跳过)" -echo -ne " 1. 确认测速 2. 取消测速" +echo "————————————————————————SuperSpeed 全面测速版—————————————————————————" +echo " 使用方法: bash <(curl -Lso- https://git.io/superspeed)" +echo " 查看全部节点: https://git.io/superspeedList" +echo " 节点更新日期: 2019/12/23" +echo "——————————————————————————————————————————————————————————————————————" +echo " 选择测速类型: " +echo " 1. 三网全面测速 2. 取消本次测速" +echo -ne " 3. 电信节点测速 4. 联通节点测速 5. 移动节点测速" while :; do echo - read -p "请输入数字选择: " telecom - if [[ ! $telecom =~ ^[1-2]$ ]]; then - echo "输入错误, 请输入正确的数字!" + read -p " 请输入数字选择: " selection + if [[ ! $selection =~ ^[1-5]$ ]]; then + echo " 输入错误, 请输入正确的数字!" else break fi done -[[ ${telecom} == 2 ]] && exit 1 +[[ ${selection} == 2 ]] && exit 1 # install speedtest if [ ! -e '/tmp/speedtest.py' ]; then @@ -85,178 +86,462 @@ speed_test(){ local nodeID=$1 local nodeLocation=$2 local nodeISP=$3 - - printf "${RED}%-8s${YELLOW}%-10s${GREEN}%-10s${CYAN}%-16s${BLUE}%-16s${PURPLE}%-10s${PLAIN}\n" "${nodeID} " "${nodeISP} " "${nodeLocation} " "${reupload} " "${REDownload} " "${relatency}" + + strnodeLocation="${nodeLocation}      " + + #LANG=zh_CN.GB2312 + #echo $LANG + #printf "${RED}%-6s${YELLOW}%s%s${GREEN}%-8s${CYAN}%-16s${BLUE}%-16s${PURPLE}%-10s${PLAIN}\n" "${nodeID}" "${nodeISP}" "|" "${strnodeLocation:0:8}" "${reupload}" "${REDownload}" "${relatency}" + + LANG=C + #echo $LANG + printf "${RED}%-6s${YELLOW}%s%s${GREEN}%-24s${CYAN}%-16s${BLUE}%-16s${PURPLE}%-10s${PLAIN}\n" "${nodeID}" "${nodeISP}" "|" "${strnodeLocation:0:24}" "${reupload}" "${REDownload}" "${relatency}" + else local cerror="ERROR" fi } -if [[ ${telecom} == 1 ]]; then - echo "———————————————————————————————————————————————————————————————————" - printf "%-8s%-10s%-10s%-16s%-16s%-10s\n" "节点ID " "运营商 " "位置 " "上传速度 " "下载速度 " "延迟" +if [[ ${selection} == 1 ]]; then + echo "——————————————————————————————————————————————————————————————————————" + echo "ID 测速服务器信息 上传速度 下载速度 延迟" start=$(date +%s) - # 电信 - speed_test '6132' '长沙' '电信' - speed_test '3633' '上海' '电信' - speed_test '3973' '兰州' '电信' - speed_test '4751' '北京' '电信' - speed_test '5316' '南京' '电信' - speed_test '10305' '南宁1' '电信' - speed_test '22724' '南宁2' '电信' - speed_test '10192' '南宁3' '电信' - speed_test '16399' '南昌1' '电信' - speed_test '6473' '南昌2' '电信' - speed_test '6345' '南昌3' '电信' - speed_test '7643' '南昌4' '电信' - speed_test '17145' '合肥' '电信' - speed_test '24012' '呼和浩特' '电信' - speed_test '6714' '天津' '电信' - speed_test '10775' '广州1' '电信' - speed_test '9151' '广州2' '电信' - speed_test '17251' '广州3' '电信' - speed_test '5324' '徐州' '电信' - speed_test '4624' '成都' '电信' - speed_test '6168' '昆明' '电信' - speed_test '7509' '杭州' '电信' - speed_test '23844' '武汉1' '电信' - speed_test '20038' '武汉2' '电信' - speed_test '23665' '武汉3' '电信' - speed_test '24011' '武汉4' '电信' - speed_test '5081' '深圳' '电信' - speed_test '5396' '苏州' '电信' - speed_test '6435' '襄阳1' '电信' - speed_test '12637' '襄阳2' '电信' - speed_test '19918' '西宁' '电信' - speed_test '5317' '连云港' '电信' - speed_test '4595' '郑州' '电信' - speed_test '21470' '鄂尔多斯' '电信' - speed_test '19076' '重庆1' '电信' - speed_test '6592' '重庆2' '电信' - speed_test '16983' '重庆3' '电信' - # 联通 - speed_test '5145' '北京1' '联通' - speed_test '18462' '北京2' '联通' - speed_test '5505' '北京3' '联通' - speed_test '9484' '长春1' '联通' - speed_test '10742' '长春2' '联通' - speed_test '4870' '长沙' '联通' - speed_test '2461' '成都' '联通' - speed_test '5726' '重庆' '联通' - speed_test '4884' '福州' '联通' - speed_test '3891' '广州' '联通' - speed_test '5985' '海口' '联通' - speed_test '5300' '杭州' '联通' - speed_test '5460' '哈尔滨' '联通' - speed_test '5724' '合肥' '联通' - speed_test '5465' '呼和浩特' '联通' - speed_test '5039' '济南1' '联通' - speed_test '12538' '济南2' '联通' - speed_test '5103' '昆明' '联通' - speed_test '4690' '兰州' '联通' - speed_test '5750' '拉萨' '联通' - speed_test '7230' '南昌1' '联通' - speed_test '5097' '南昌2' '联通' - speed_test '5446' '南京1' '联通' - speed_test '13704' '南京2' '联通' - speed_test '5674' '南宁' '联通' - speed_test '6245' '宁波' '联通' - speed_test '5509' '宁夏' '联通' - speed_test '5710' '青岛' '联通' - speed_test '21005' '上海1' '联通' - speed_test '24447' '上海2' '联通' - speed_test '5083' '上海3' '联通' - speed_test '5017' '沈阳' '联通' - speed_test '10201' '深圳' '联通' - speed_test '19736' '太原1' '联通' - speed_test '12868' '太原2' '联通' - speed_test '12516' '太原3' '联通' - speed_test '5475' '天津' '联通' - speed_test '6144' '乌鲁木齐' '联通' - speed_test '5485' '武汉' '联通' - speed_test '5506' '厦门' '联通' - speed_test '5992' '西宁' '联通' - speed_test '5131' '郑州1' '联通' - speed_test '6810' '郑州2' '联通' - # 移动 - speed_test '4665' '上海1' '移动' - speed_test '16719' '上海2' '移动' - speed_test '16803' '上海3' '移动' - speed_test '17388' '临沂' '移动' - speed_test '3784' '乌鲁木齐1' '移动' - speed_test '16858' '乌鲁木齐2' '移动' - speed_test '17228' '伊犁' '移动' - speed_test '16145' '兰州' '移动' - speed_test '4713' '北京' '移动' - speed_test '21590' '南京' '移动' - speed_test '15863' '南宁' '移动' - speed_test '16294' '南昌1' '移动' - speed_test '16332' '南昌2' '移动' - speed_test '21530' '南通' '移动' - speed_test '21642' '台州' '移动' - speed_test '4377' '合肥' '移动' - speed_test '17085' '呼和浩特' '移动' - speed_test '17437' '哈尔滨' '移动' - speed_test '10939' '商丘' '移动' - speed_test '17245' '喀什' '移动' - speed_test '17184' '天津' '移动' - speed_test '16005' '太原' '移动' - speed_test '6715' '宁波' '移动' - speed_test '21722' '宿迁' '移动' - speed_test '21845' '常州' '移动' - speed_test '6611' '广州' '移动' - speed_test '22349' '徐州' '移动' - speed_test '24337' '成都1' '移动' - speed_test '4575' '成都2' '移动' - speed_test '21600' '扬州' '移动' - speed_test '18444' '拉萨1' '移动' - speed_test '17494' '拉萨2' '移动' - speed_test '5122' '无锡1' '移动' - speed_test '21973' '无锡2' '移动' - speed_test '5892' '昆明' '移动' - speed_test '4647' '杭州1' '移动' - speed_test '12278' '杭州2' '移动' - speed_test '16395' '武汉' '移动' - speed_test '16167' '沈阳' '移动' - speed_test '16314' '济南1' '移动' - speed_test '17480' '济南2' '移动' - speed_test '16503' '海口' '移动' - speed_test '22037' '淮安' '移动' - speed_test '4515' '深圳' '移动' - speed_test '21946' '盐城' '移动' - speed_test '17223' '石家庄' '移动' - speed_test '16171' '福州' '移动' - speed_test '3927' '苏州1' '移动' - speed_test '21472' '苏州2' '移动' - speed_test '18504' '西宁1' '移动' - speed_test '16915' '西宁2' '移动' - speed_test '16398' '贵阳1' '移动' - speed_test '7404' '贵阳2' '移动' - speed_test '21584' '连云港' '移动' - speed_test '18970' '郑州1' '移动' - speed_test '4486' '郑州2' '移动' - speed_test '16409' '重庆1' '移动' - speed_test '17584' '重庆2' '移动' - speed_test '16392' '银川' '移动' - speed_test '17320' '镇江' '移动' - speed_test '16375' '长春' '移动' - speed_test '15862' '长沙' '移动' - speed_test '17432' '青岛' '移动' - speed_test '17222' '阿勒泰' '移动' - speed_test '17230' '阿拉善' '移动' - speed_test '17227' '和田' '移动' + + # speed_test '3633' '上海' '电信' + speed_test '28139' '上海5G' '电信' + # speed_test '6168' '云南昆明' '电信' + speed_test '27539' '云南昆明5G' '电信' + speed_test '24012' '内蒙古呼和浩特' '电信' + speed_test '21470' '内蒙古鄂尔多斯' '电信' + # speed_test '4751' '北京' '电信' + speed_test '27377' '北京5G' '电信' + speed_test '4624' '四川成都' '电信' + speed_test '6714' '天津' '电信' + speed_test '17145' '安徽安徽合肥' '电信' + # speed_test '9151' '广东广州' '电信' + # speed_test '10775' '广东广州' '电信' + # speed_test '17251' '广东广州' '电信' + speed_test '27594' '广东广州5G' '电信' + speed_test '5081' '广东深圳' '电信' + speed_test '10192' '广西南宁' '电信' + speed_test '10305' '广西南宁' '电信' + speed_test '22724' '广西南宁' '电信' + speed_test '27810' '广西南宁' '电信' + speed_test '27304' '新疆乌鲁木齐' '电信' + speed_test '27575' '新疆乌鲁木齐' '电信' + # speed_test '5316' '江苏南京' '电信' + speed_test '26352' '江苏南京5G' '电信' + speed_test '5324' '江苏徐州' '电信' + speed_test '5396' '江苏苏州' '电信' + speed_test '5317' '江苏连云港' '电信' + speed_test '6345' '江西南昌' '电信' + speed_test '6473' '江西南昌' '电信' + speed_test '7643' '江西南昌' '电信' + speed_test '16399' '江西南昌' '电信' + speed_test '4595' '河南郑州' '电信' + speed_test '7509' '浙江杭州' '电信' + speed_test '20038' '湖北武汉' '电信' + speed_test '23665' '湖北武汉' '电信' + speed_test '23844' '湖北武汉' '电信' + speed_test '24011' '湖北武汉' '电信' + speed_test '6435' '湖北襄阳' '电信' + speed_test '12637' '湖北襄阳' '电信' + speed_test '6132' '湖南长沙' '电信' + speed_test '28225' '湖南长沙' '电信' + speed_test '3973' '甘肃兰州' '电信' + speed_test '6592' '重庆' '电信' + speed_test '16983' '重庆' '电信' + speed_test '19076' '重庆' '电信' + speed_test '19918' '青海西宁' '电信' + + # speed_test '5083' '上海' '联通' + # speed_test '21005' '上海' '联通' + speed_test '24447' '上海5G' '联通' + speed_test '5103' '云南昆明' '联通' + speed_test '5465' '内蒙古呼和浩特' '联通' + speed_test '5145' '北京' '联通' + # speed_test '5505' '北京' '联通' + # speed_test '18462' '北京' '联通' + speed_test '9484' '吉林长春' '联通' + # speed_test '10742' '吉林长春' '联通' + speed_test '2461' '四川成都' '联通' + # speed_test '5475' '天津' '联通' + speed_test '27154' '天津5G' '联通' + speed_test '5509' '宁夏' '联通' + speed_test '5724' '安徽合肥' '联通' + # speed_test '5039' '山东济南' '联通' + # speed_test '12538' '山东济南' '联通' + speed_test '26180' '山东济南5G' '联通' + # speed_test '5710' '山东青岛' '联通' + speed_test '12516' '山西太原' '联通' + speed_test '12868' '山西太原' '联通' + speed_test '19736' '山西太原' '联通' + # speed_test '3891' '广东广州' '联通' + speed_test '26678' '广东广州' '联通' + speed_test '10201' '广东深圳' '联通' + speed_test '5674' '广西南宁' '联通' + speed_test '6144' '新疆乌鲁木齐' '联通' + speed_test '5446' '江苏南京' '联通' + speed_test '13704' '江苏南京' '联通' + speed_test '5097' '江西南昌' '联通' + speed_test '7230' '江西南昌' '联通' + speed_test '5131' '河南郑州' '联通' + speed_test '6810' '河南郑州' '联通' + speed_test '6245' '浙江宁波' '联通' + speed_test '5300' '浙江杭州' '联通' + speed_test '5985' '海南海口' '联通' + speed_test '5485' '湖北武汉' '联通' + speed_test '26677' '湖南株洲' '联通' + # speed_test '4870' '湖南长沙' '联通' + speed_test '4690' '甘肃兰州' '联通' + speed_test '5506' '福建厦门' '联通' + speed_test '4884' '福建福州' '联通' + speed_test '5750' '西藏拉萨' '联通' + speed_test '5017' '辽宁沈阳' '联通' + speed_test '5726' '重庆' '联通' + speed_test '5992' '青海西宁' '联通' + speed_test '5460' '黑龙江哈尔滨' '联通' + + # speed_test '4665' '上海' '移动' + # speed_test '16719' '上海' '移动' + # speed_test '16803' '上海' '移动' + speed_test '25637' '上海5G' '移动' + # speed_test '5892' '云南昆明' '移动' + speed_test '26728' '云南昆明' '移动' + # speed_test '17085' '内蒙古呼和浩特' '移动' + speed_test '27019' '内蒙古呼和浩特' '移动' + # speed_test '17230' '内蒙古阿拉善' '移动' + # speed_test '4713' '北京' '移动' + # speed_test '25858' '北京' '移动' + # speed_test '16375' '吉林长春' '移动' + # speed_test '4575' '四川成都' '移动' + speed_test '24337' '四川成都' '移动' + # speed_test '28211' '四川成都' '移动' + speed_test '17184' '天津' '移动' + # speed_test '16392' '宁夏银川' '移动' + # speed_test '26940' '宁夏银川' '移动' + # speed_test '4377' '安徽合肥' '移动' + # speed_test '26404' '安徽合肥' '移动' + # speed_test '17388' '山东临沂' '移动' + # speed_test '16314' '山东济南' '移动' + # speed_test '17480' '山东济南' '移动' + # speed_test '25881' '山东济南' '移动' + # speed_test '17432' '山东青岛' '移动' + # speed_test '16005' '山西太原' '移动' + # speed_test '6611' '广东广州' '移动' + speed_test '4515' '广东深圳' '移动' + speed_test '15863' '广西南宁' '移动' + # speed_test '3784' '新疆乌鲁木齐' '移动' + # speed_test '16858' '新疆乌鲁木齐' '移动' + speed_test '26938' '新疆乌鲁木齐5G' '移动' + # speed_test '17228' '新疆伊犁' '移动' + # speed_test '17227' '新疆和田' '移动' + # speed_test '17245' '新疆喀什' '移动' + # speed_test '17222' '新疆阿勒泰' '移动' + # speed_test '21590' '江苏南京' '移动' + speed_test '27249' '江苏南京5G' '移动' + # speed_test '21530' '江苏南通' '移动' + # speed_test '21722' '江苏宿迁' '移动' + # speed_test '21845' '江苏常州' '移动' + # speed_test '22349' '江苏徐州' '移动' + # speed_test '21600' '江苏扬州' '移动' + # speed_test '5122' '江苏无锡' '移动' + # speed_test '21973' '江苏无锡' '移动' + # speed_test '26850' '江苏无锡5G' '移动' + # speed_test '21642' '江苏泰州' '移动' + # speed_test '22037' '江苏淮安' '移动' + # speed_test '21946' '江苏盐城' '移动' + # speed_test '3927' '江苏苏州' '移动' + # speed_test '21472' '江苏苏州' '移动' + # speed_test '21584' '江苏连云港' '移动' + # speed_test '17320' '江苏镇江' '移动' + # speed_test '16294' '江西南昌' '移动' + # speed_test '16332' '江西南昌' '移动' + # speed_test '25883' '江西南昌' '移动' + # speed_test '17223' '河北石家庄' '移动' + # speed_test '10939' '河南商丘' '移动' + # speed_test '4486' '河南郑州' '移动' + # speed_test '18970' '河南郑州' '移动' + speed_test '26331' '河南郑州5G' '移动' + speed_test '6715' '浙江宁波' '移动' + # speed_test '4647' '浙江杭州' '移动' + # speed_test '12278' '浙江杭州' '移动' + speed_test '16503' '海南海口' '移动' + # speed_test '16395' '湖北武汉' '移动' + # speed_test '26357' '湖北武汉' '移动' + # speed_test '26547' '湖北武汉' '移动' + # speed_test '15862' '湖南长沙' '移动' + speed_test '28491' '湖南长沙5G' '移动' + speed_test '16145' '甘肃兰州' '移动' + # speed_test '16171' '福建福州' '移动' + # speed_test '17494' '西藏拉萨' '移动' + speed_test '18444' '西藏拉萨' '移动' + # speed_test '7404' '贵州贵阳' '移动' + speed_test '16398' '贵州贵阳' '移动' + # speed_test '25728' '辽宁大连' '移动' + # speed_test '16167' '辽宁沈阳' '移动' + # speed_test '16409' '重庆' '移动' + speed_test '17584' '重庆' '移动' + # speed_test '26380' '陕西西安' '移动' + # speed_test '16915' '青海西宁' '移动' + # speed_test '18504' '青海西宁' '移动' + speed_test '29083' '青海西宁5G' '移动' + # speed_test '17437' '黑龙江哈尔滨' '移动' + speed_test '26656' '黑龙江哈尔滨5G' '移动' end=$(date +%s) rm -rf /tmp/speedtest.py - echo "———————————————————————————————————————————————————————————————————" + echo "——————————————————————————————————————————————————————————————————————" time=$(( $end - $start )) if [[ $time -gt 60 ]]; then min=$(expr $time / 60) sec=$(expr $time % 60) - echo -ne "测试完成, 本次测速耗时: ${min} 分 ${sec} 秒" + echo -ne " 测试完成, 本次测速耗时: ${min} 分 ${sec} 秒" else - echo -ne "测试完成, 本次测速耗时: ${time} 秒" + echo -ne " 测试完成, 本次测速耗时: ${time} 秒" fi - echo -ne "\n当前时间: " + echo -ne "\n 当前时间: " echo $(date +%Y-%m-%d" "%H:%M:%S) fi + +if [[ ${selection} == 3 ]]; then + echo "——————————————————————————————————————————————————————————————————————" + echo "ID 测速服务器信息 上传速度 下载速度 延迟" + start=$(date +%s) + + speed_test '3633' '上海' '电信' + speed_test '28139' '上海5G' '电信' + speed_test '6168' '云南昆明' '电信' + speed_test '27539' '云南昆明5G' '电信' + speed_test '24012' '内蒙古呼和浩特' '电信' + speed_test '21470' '内蒙古鄂尔多斯' '电信' + speed_test '4751' '北京' '电信' + speed_test '27377' '北京5G' '电信' + speed_test '4624' '四川成都' '电信' + speed_test '6714' '天津' '电信' + speed_test '17145' '安徽安徽合肥' '电信' + speed_test '9151' '广东广州' '电信' + speed_test '10775' '广东广州' '电信' + speed_test '17251' '广东广州' '电信' + speed_test '27594' '广东广州5G' '电信' + speed_test '5081' '广东深圳' '电信' + speed_test '10192' '广西南宁' '电信' + speed_test '10305' '广西南宁' '电信' + speed_test '22724' '广西南宁' '电信' + speed_test '27810' '广西南宁' '电信' + speed_test '27304' '新疆乌鲁木齐' '电信' + speed_test '27575' '新疆乌鲁木齐' '电信' + speed_test '5316' '江苏南京' '电信' + speed_test '26352' '江苏南京5G' '电信' + speed_test '5324' '江苏徐州' '电信' + speed_test '5396' '江苏苏州' '电信' + speed_test '5317' '江苏连云港' '电信' + speed_test '6345' '江西南昌' '电信' + speed_test '6473' '江西南昌' '电信' + speed_test '7643' '江西南昌' '电信' + speed_test '16399' '江西南昌' '电信' + speed_test '4595' '河南郑州' '电信' + speed_test '7509' '浙江杭州' '电信' + speed_test '20038' '湖北武汉' '电信' + speed_test '23665' '湖北武汉' '电信' + speed_test '23844' '湖北武汉' '电信' + speed_test '24011' '湖北武汉' '电信' + speed_test '6435' '湖北襄阳' '电信' + speed_test '12637' '湖北襄阳' '电信' + speed_test '6132' '湖南长沙' '电信' + speed_test '28225' '湖南长沙' '电信' + speed_test '3973' '甘肃兰州' '电信' + speed_test '6592' '重庆' '电信' + speed_test '16983' '重庆' '电信' + speed_test '19076' '重庆' '电信' + speed_test '19918' '青海西宁' '电信' + + end=$(date +%s) + rm -rf /tmp/speedtest.py + 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 $(date +%Y-%m-%d" "%H:%M:%S) +fi + +if [[ ${selection} == 4 ]]; then + echo "——————————————————————————————————————————————————————————————————————" + echo "ID 测速服务器信息 上传速度 下载速度 延迟" + start=$(date +%s) + + speed_test '5083' '上海' '联通' + speed_test '21005' '上海' '联通' + speed_test '24447' '上海5G' '联通' + speed_test '5103' '云南昆明' '联通' + speed_test '5465' '内蒙古呼和浩特' '联通' + speed_test '5145' '北京' '联通' + speed_test '5505' '北京' '联通' + speed_test '18462' '北京' '联通' + speed_test '9484' '吉林长春' '联通' + speed_test '10742' '吉林长春' '联通' + speed_test '2461' '四川成都' '联通' + speed_test '5475' '天津' '联通' + speed_test '27154' '天津5G' '联通' + speed_test '5509' '宁夏' '联通' + speed_test '5724' '安徽合肥' '联通' + speed_test '5039' '山东济南' '联通' + speed_test '12538' '山东济南' '联通' + speed_test '26180' '山东济南5G' '联通' + speed_test '5710' '山东青岛' '联通' + speed_test '12516' '山西太原' '联通' + speed_test '12868' '山西太原' '联通' + speed_test '19736' '山西太原' '联通' + speed_test '3891' '广东广州' '联通' + speed_test '26678' '广东广州' '联通' + speed_test '10201' '广东深圳' '联通' + speed_test '5674' '广西南宁' '联通' + speed_test '6144' '新疆乌鲁木齐' '联通' + speed_test '5446' '江苏南京' '联通' + speed_test '13704' '江苏南京' '联通' + speed_test '5097' '江西南昌' '联通' + speed_test '7230' '江西南昌' '联通' + speed_test '5131' '河南郑州' '联通' + speed_test '6810' '河南郑州' '联通' + speed_test '6245' '浙江宁波' '联通' + speed_test '5300' '浙江杭州' '联通' + speed_test '5985' '海南海口' '联通' + speed_test '5485' '湖北武汉' '联通' + speed_test '26677' '湖南株洲' '联通' + speed_test '4870' '湖南长沙' '联通' + speed_test '4690' '甘肃兰州' '联通' + speed_test '5506' '福建厦门' '联通' + speed_test '4884' '福建福州' '联通' + speed_test '5750' '西藏拉萨' '联通' + speed_test '5017' '辽宁沈阳' '联通' + speed_test '5726' '重庆' '联通' + speed_test '5992' '青海西宁' '联通' + speed_test '5460' '黑龙江哈尔滨' '联通' + + end=$(date +%s) + rm -rf /tmp/speedtest.py + 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 $(date +%Y-%m-%d" "%H:%M:%S) +fi + +if [[ ${selection} == 5 ]]; then + echo "——————————————————————————————————————————————————————————————————————" + echo "ID 测速服务器信息 上传速度 下载速度 延迟" + start=$(date +%s) + + speed_test '4665' '上海' '移动' + speed_test '16719' '上海' '移动' + speed_test '16803' '上海' '移动' + speed_test '25637' '上海5G' '移动' + speed_test '5892' '云南昆明' '移动' + speed_test '26728' '云南昆明' '移动' + speed_test '17085' '内蒙古呼和浩特' '移动' + speed_test '27019' '内蒙古呼和浩特' '移动' + speed_test '17230' '内蒙古阿拉善' '移动' + speed_test '4713' '北京' '移动' + speed_test '25858' '北京' '移动' + speed_test '16375' '吉林长春' '移动' + speed_test '4575' '四川成都' '移动' + speed_test '24337' '四川成都' '移动' + speed_test '28211' '四川成都' '移动' + speed_test '17184' '天津' '移动' + speed_test '16392' '宁夏银川' '移动' + speed_test '26940' '宁夏银川' '移动' + speed_test '4377' '安徽合肥' '移动' + speed_test '26404' '安徽合肥' '移动' + speed_test '17388' '山东临沂' '移动' + speed_test '16314' '山东济南' '移动' + speed_test '17480' '山东济南' '移动' + speed_test '25881' '山东济南' '移动' + speed_test '17432' '山东青岛' '移动' + speed_test '16005' '山西太原' '移动' + speed_test '6611' '广东广州' '移动' + speed_test '4515' '广东深圳' '移动' + speed_test '15863' '广西南宁' '移动' + speed_test '3784' '新疆乌鲁木齐' '移动' + speed_test '16858' '新疆乌鲁木齐' '移动' + speed_test '26938' '新疆乌鲁木齐5G' '移动' + speed_test '17228' '新疆伊犁' '移动' + speed_test '17227' '新疆和田' '移动' + speed_test '17245' '新疆喀什' '移动' + speed_test '17222' '新疆阿勒泰' '移动' + speed_test '21590' '江苏南京' '移动' + speed_test '27249' '江苏南京5G' '移动' + speed_test '21530' '江苏南通' '移动' + speed_test '21722' '江苏宿迁' '移动' + speed_test '21845' '江苏常州' '移动' + speed_test '22349' '江苏徐州' '移动' + speed_test '21600' '江苏扬州' '移动' + speed_test '5122' '江苏无锡' '移动' + speed_test '21973' '江苏无锡' '移动' + speed_test '26850' '江苏无锡5G' '移动' + speed_test '21642' '江苏泰州' '移动' + speed_test '22037' '江苏淮安' '移动' + speed_test '21946' '江苏盐城' '移动' + speed_test '3927' '江苏苏州' '移动' + speed_test '21472' '江苏苏州' '移动' + speed_test '21584' '江苏连云港' '移动' + speed_test '17320' '江苏镇江' '移动' + speed_test '16294' '江西南昌' '移动' + speed_test '16332' '江西南昌' '移动' + speed_test '25883' '江西南昌' '移动' + speed_test '17223' '河北石家庄' '移动' + speed_test '10939' '河南商丘' '移动' + speed_test '4486' '河南郑州' '移动' + speed_test '18970' '河南郑州' '移动' + speed_test '26331' '河南郑州5G' '移动' + speed_test '6715' '浙江宁波' '移动' + speed_test '4647' '浙江杭州' '移动' + speed_test '12278' '浙江杭州' '移动' + speed_test '16503' '海南海口' '移动' + speed_test '16395' '湖北武汉' '移动' + speed_test '26357' '湖北武汉' '移动' + speed_test '26547' '湖北武汉' '移动' + speed_test '15862' '湖南长沙' '移动' + speed_test '28491' '湖南长沙5G' '移动' + speed_test '16145' '甘肃兰州' '移动' + speed_test '16171' '福建福州' '移动' + speed_test '17494' '西藏拉萨' '移动' + speed_test '18444' '西藏拉萨' '移动' + speed_test '7404' '贵州贵阳' '移动' + speed_test '16398' '贵州贵阳' '移动' + speed_test '25728' '辽宁大连' '移动' + speed_test '16167' '辽宁沈阳' '移动' + speed_test '16409' '重庆' '移动' + speed_test '17584' '重庆' '移动' + speed_test '26380' '陕西西安' '移动' + speed_test '16915' '青海西宁' '移动' + speed_test '18504' '青海西宁' '移动' + speed_test '29083' '青海西宁5G' '移动' + speed_test '17437' '黑龙江哈尔滨' '移动' + speed_test '26656' '黑龙江哈尔滨5G' '移动' + + end=$(date +%s) + rm -rf /tmp/speedtest.py + 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 $(date +%Y-%m-%d" "%H:%M:%S) +fi \ No newline at end of file From 959acc5c66e1506bd7d15d3bee2664eb49ff7deb Mon Sep 17 00:00:00 2001 From: ernie Date: Mon, 23 Dec 2019 21:49:24 +0800 Subject: [PATCH 27/52] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 50816f5..fe3aa96 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ bash <(curl -Lso- https://git.io/superspeed) [查看全部节点列表](https://git.io/superspeedList) -![测速图](https://i.loli.net/2019/07/02/5d1a32698da9894105.png) +![测速图](https://i.loli.net/2019/12/23/doBQeKpgH9jfRTw.jpg) --- From ca20df35067a9aca7c54eff1ca73f5d27e54a702 Mon Sep 17 00:00:00 2001 From: ernie Date: Mon, 23 Dec 2019 21:56:41 +0800 Subject: [PATCH 28/52] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index fe3aa96..9a36804 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ bash <(curl -Lso- https://git.io/superspeed) [查看全部节点列表](https://git.io/superspeedList) -![测速图](https://i.loli.net/2019/12/23/doBQeKpgH9jfRTw.jpg) +![测速图](https://sm.ms/image/H8WtjGTgDqVsUaL) --- From 7ade7f38c72a8c89a3e1c9678607143957bca2a3 Mon Sep 17 00:00:00 2001 From: ernie Date: Mon, 23 Dec 2019 21:57:11 +0800 Subject: [PATCH 29/52] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 9a36804..bfc8363 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ bash <(curl -Lso- https://git.io/superspeed) [查看全部节点列表](https://git.io/superspeedList) -![测速图](https://sm.ms/image/H8WtjGTgDqVsUaL) +![测速图](![1.jpg](https://i.loli.net/2019/12/23/H8WtjGTgDqVsUaL.jpg)) --- From ebcf274719452f7284e3b6478512aefc7c9d0f76 Mon Sep 17 00:00:00 2001 From: ernie Date: Mon, 23 Dec 2019 21:57:52 +0800 Subject: [PATCH 30/52] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index bfc8363..56e6f8d 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ bash <(curl -Lso- https://git.io/superspeed) [查看全部节点列表](https://git.io/superspeedList) -![测速图](![1.jpg](https://i.loli.net/2019/12/23/H8WtjGTgDqVsUaL.jpg)) +![测速图](https://i.loli.net/2019/12/23/H8WtjGTgDqVsUaL.jpg) --- From 5562a17bafc5d38cf4bc5ab66e6170ec31baeeb3 Mon Sep 17 00:00:00 2001 From: ernie Date: Mon, 30 Dec 2019 17:19:14 +0800 Subject: [PATCH 31/52] Update ServerList.md --- ServerList.md | 383 ++++++++++++++++++++++++++------------------------ 1 file changed, 202 insertions(+), 181 deletions(-) diff --git a/ServerList.md b/ServerList.md index 7aaf437..d005fee 100644 --- a/ServerList.md +++ b/ServerList.md @@ -1,183 +1,204 @@ 更新日期:2019/12/23 -| 服务器ID | 运营商 | 位置 | -| -------- | ------ | -------------- | -| 3633 | 电信 | 上海 | -| 28139 | 电信 | 上海5G | -| 6168 | 电信 | 云南昆明 | -| 27539 | 电信 | 云南昆明5G | -| 24012 | 电信 | 内蒙古呼和浩特 | -| 21470 | 电信 | 内蒙古鄂尔多斯 | -| 4751 | 电信 | 北京 | -| 27377 | 电信 | 北京5G | -| 4624 | 电信 | 四川成都 | -| 6714 | 电信 | 天津 | -| 17145 | 电信 | 安徽安徽合肥 | -| 9151 | 电信 | 广东广州 | -| 10775 | 电信 | 广东广州 | -| 17251 | 电信 | 广东广州 | -| 27594 | 电信 | 广东广州5G | -| 5081 | 电信 | 广东深圳 | -| 10192 | 电信 | 广西南宁 | -| 10305 | 电信 | 广西南宁 | -| 22724 | 电信 | 广西南宁 | -| 27810 | 电信 | 广西南宁 | -| 27304 | 电信 | 新疆乌鲁木齐 | -| 27575 | 电信 | 新疆乌鲁木齐 | -| 5316 | 电信 | 江苏南京 | -| 26352 | 电信 | 江苏南京5G | -| 5324 | 电信 | 江苏徐州 | -| 5396 | 电信 | 江苏苏州 | -| 5317 | 电信 | 江苏连云港 | -| 6345 | 电信 | 江西南昌 | -| 6473 | 电信 | 江西南昌 | -| 7643 | 电信 | 江西南昌 | -| 16399 | 电信 | 江西南昌 | -| 4595 | 电信 | 河南郑州 | -| 7509 | 电信 | 浙江杭州 | -| 20038 | 电信 | 湖北武汉 | -| 23665 | 电信 | 湖北武汉 | -| 23844 | 电信 | 湖北武汉 | -| 24011 | 电信 | 湖北武汉 | -| 6435 | 电信 | 湖北襄阳 | -| 12637 | 电信 | 湖北襄阳 | -| 6132 | 电信 | 湖南长沙 | -| 28225 | 电信 | 湖南长沙 | -| 3973 | 电信 | 甘肃兰州 | -| 6592 | 电信 | 重庆 | -| 16983 | 电信 | 重庆 | -| 19076 | 电信 | 重庆 | -| 19918 | 电信 | 青海西宁 | -| 4665 | 移动 | 上海 | -| 16719 | 移动 | 上海 | -| 16803 | 移动 | 上海 | -| 25637 | 移动 | 上海5G | -| 5892 | 移动 | 云南昆明 | -| 26728 | 移动 | 云南昆明 | -| 17085 | 移动 | 内蒙古呼和浩特 | -| 27019 | 移动 | 内蒙古呼和浩特 | -| 17230 | 移动 | 内蒙古阿拉善 | -| 4713 | 移动 | 北京 | -| 25858 | 移动 | 北京 | -| 16375 | 移动 | 吉林长春 | -| 4575 | 移动 | 四川成都 | -| 24337 | 移动 | 四川成都 | -| 28211 | 移动 | 四川成都 | -| 17184 | 移动 | 天津 | -| 16392 | 移动 | 宁夏银川 | -| 26940 | 移动 | 宁夏银川 | -| 4377 | 移动 | 安徽合肥 | -| 26404 | 移动 | 安徽合肥 | -| 17388 | 移动 | 山东临沂 | -| 16314 | 移动 | 山东济南 | -| 17480 | 移动 | 山东济南 | -| 25881 | 移动 | 山东济南 | -| 17432 | 移动 | 山东青岛 | -| 16005 | 移动 | 山西太原 | -| 6611 | 移动 | 广东广州 | -| 4515 | 移动 | 广东深圳 | -| 15863 | 移动 | 广西南宁 | -| 3784 | 移动 | 新疆乌鲁木齐 | -| 16858 | 移动 | 新疆乌鲁木齐 | -| 26938 | 移动 | 新疆乌鲁木齐5G | -| 17228 | 移动 | 新疆伊犁 | -| 17227 | 移动 | 新疆和田 | -| 17245 | 移动 | 新疆喀什 | -| 17222 | 移动 | 新疆阿勒泰 | -| 21590 | 移动 | 江苏南京 | -| 27249 | 移动 | 江苏南京5G | -| 21530 | 移动 | 江苏南通 | -| 21722 | 移动 | 江苏宿迁 | -| 21845 | 移动 | 江苏常州 | -| 22349 | 移动 | 江苏徐州 | -| 21600 | 移动 | 江苏扬州 | -| 5122 | 移动 | 江苏无锡 | -| 21973 | 移动 | 江苏无锡 | -| 26850 | 移动 | 江苏无锡5G | -| 21642 | 移动 | 江苏泰州 | -| 22037 | 移动 | 江苏淮安 | -| 21946 | 移动 | 江苏盐城 | -| 3927 | 移动 | 江苏苏州 | -| 21472 | 移动 | 江苏苏州 | -| 21584 | 移动 | 江苏连云港 | -| 17320 | 移动 | 江苏镇江 | -| 16294 | 移动 | 江西南昌 | -| 16332 | 移动 | 江西南昌 | -| 25883 | 移动 | 江西南昌 | -| 17223 | 移动 | 河北石家庄 | -| 10939 | 移动 | 河南商丘 | -| 4486 | 移动 | 河南郑州 | -| 18970 | 移动 | 河南郑州 | -| 26331 | 移动 | 河南郑州5G | -| 6715 | 移动 | 浙江宁波 | -| 4647 | 移动 | 浙江杭州 | -| 12278 | 移动 | 浙江杭州 | -| 16503 | 移动 | 海南海口 | -| 16395 | 移动 | 湖北武汉 | -| 26357 | 移动 | 湖北武汉 | -| 26547 | 移动 | 湖北武汉 | -| 15862 | 移动 | 湖南长沙 | -| 28491 | 移动 | 湖南长沙5G | -| 16145 | 移动 | 甘肃兰州 | -| 16171 | 移动 | 福建福州 | -| 17494 | 移动 | 西藏拉萨 | -| 18444 | 移动 | 西藏拉萨 | -| 7404 | 移动 | 贵州贵阳 | -| 16398 | 移动 | 贵州贵阳 | -| 25728 | 移动 | 辽宁大连 | -| 16167 | 移动 | 辽宁沈阳 | -| 16409 | 移动 | 重庆 | -| 17584 | 移动 | 重庆 | -| 26380 | 移动 | 陕西西安 | -| 16915 | 移动 | 青海西宁 | -| 18504 | 移动 | 青海西宁 | -| 29083 | 移动 | 青海西宁5G | -| 17437 | 移动 | 黑龙江哈尔滨 | -| 26656 | 移动 | 黑龙江哈尔滨5G | -| 5083 | 联通 | 上海 | -| 21005 | 联通 | 上海 | -| 24447 | 联通 | 上海5G | -| 5103 | 联通 | 云南昆明 | -| 5465 | 联通 | 内蒙古呼和浩特 | -| 5145 | 联通 | 北京 | -| 5505 | 联通 | 北京 | -| 18462 | 联通 | 北京 | -| 9484 | 联通 | 吉林长春 | -| 10742 | 联通 | 吉林长春 | -| 2461 | 联通 | 四川成都 | -| 5475 | 联通 | 天津 | -| 27154 | 联通 | 天津5G | -| 5509 | 联通 | 宁夏 | -| 5724 | 联通 | 安徽合肥 | -| 5039 | 联通 | 山东济南 | -| 12538 | 联通 | 山东济南 | -| 26180 | 联通 | 山东济南5G | -| 5710 | 联通 | 山东青岛 | -| 12516 | 联通 | 山西太原 | -| 12868 | 联通 | 山西太原 | -| 19736 | 联通 | 山西太原 | -| 3891 | 联通 | 广东广州 | -| 26678 | 联通 | 广东广州 | -| 10201 | 联通 | 广东深圳 | -| 5674 | 联通 | 广西南宁 | -| 6144 | 联通 | 新疆乌鲁木齐 | -| 5446 | 联通 | 江苏南京 | -| 13704 | 联通 | 江苏南京 | -| 5097 | 联通 | 江西南昌 | -| 7230 | 联通 | 江西南昌 | -| 5131 | 联通 | 河南郑州 | -| 6810 | 联通 | 河南郑州 | -| 6245 | 联通 | 浙江宁波 | -| 5300 | 联通 | 浙江杭州 | -| 5985 | 联通 | 海南海口 | -| 5485 | 联通 | 湖北武汉 | -| 26677 | 联通 | 湖南株洲 | -| 4870 | 联通 | 湖南长沙 | -| 4690 | 联通 | 甘肃兰州 | -| 5506 | 联通 | 福建厦门 | -| 4884 | 联通 | 福建福州 | -| 5750 | 联通 | 西藏拉萨 | -| 5017 | 联通 | 辽宁沈阳 | -| 5726 | 联通 | 重庆 | -| 5992 | 联通 | 青海西宁 | -| 5460 | 联通 | 黑龙江哈尔滨 | +注:在“三网全面测速”中,为了避免三网测试数量不均以及测试时长过久,每部分并未采用所有节点,如果需要全部检测,可以选择三网单独检测。 + + + + + + +
电信节点联通节点移动节点
+ +| 服务器ID | 位置 | +| -------- | -------------- | +| 3633 | 上海 | +| 28139 | 上海5G | +| 6168 | 云南昆明 | +| 27539 | 云南昆明5G | +| 24012 | 内蒙古呼和浩特 | +| 21470 | 内蒙古鄂尔多斯 | +| 4751 | 北京 | +| 27377 | 北京5G | +| 4624 | 四川成都 | +| 6714 | 天津 | +| 17145 | 安徽安徽合肥 | +| 9151 | 广东广州 | +| 10775 | 广东广州 | +| 17251 | 广东广州 | +| 27594 | 广东广州5G | +| 5081 | 广东深圳 | +| 10192 | 广西南宁 | +| 10305 | 广西南宁 | +| 22724 | 广西南宁 | +| 27810 | 广西南宁 | +| 27304 | 新疆乌鲁木齐 | +| 27575 | 新疆乌鲁木齐 | +| 5316 | 江苏南京 | +| 26352 | 江苏南京5G | +| 5324 | 江苏徐州 | +| 5396 | 江苏苏州 | +| 5317 | 江苏连云港 | +| 6345 | 江西南昌 | +| 6473 | 江西南昌 | +| 7643 | 江西南昌 | +| 16399 | 江西南昌 | +| 4595 | 河南郑州 | +| 7509 | 浙江杭州 | +| 20038 | 湖北武汉 | +| 23665 | 湖北武汉 | +| 23844 | 湖北武汉 | +| 24011 | 湖北武汉 | +| 6435 | 湖北襄阳 | +| 12637 | 湖北襄阳 | +| 6132 | 湖南长沙 | +| 28225 | 湖南长沙 | +| 3973 | 甘肃兰州 | +| 6592 | 重庆 | +| 16983 | 重庆 | +| 19076 | 重庆 | +| 19918 | 青海西宁 | + + + +| 服务器ID | 位置 | +| -------- | -------------- | +| 5083 | 上海 | +| 21005 | 上海 | +| 24447 | 上海5G | +| 5103 | 云南昆明 | +| 5465 | 内蒙古呼和浩特 | +| 5145 | 北京 | +| 5505 | 北京 | +| 18462 | 北京 | +| 9484 | 吉林长春 | +| 10742 | 吉林长春 | +| 2461 | 四川成都 | +| 5475 | 天津 | +| 27154 | 天津5G | +| 5509 | 宁夏 | +| 5724 | 安徽合肥 | +| 5039 | 山东济南 | +| 12538 | 山东济南 | +| 26180 | 山东济南5G | +| 5710 | 山东青岛 | +| 12516 | 山西太原 | +| 12868 | 山西太原 | +| 19736 | 山西太原 | +| 3891 | 广东广州 | +| 26678 | 广东广州 | +| 10201 | 广东深圳 | +| 5674 | 广西南宁 | +| 6144 | 新疆乌鲁木齐 | +| 5446 | 江苏南京 | +| 13704 | 江苏南京 | +| 5097 | 江西南昌 | +| 7230 | 江西南昌 | +| 5131 | 河南郑州 | +| 6810 | 河南郑州 | +| 6245 | 浙江宁波 | +| 5300 | 浙江杭州 | +| 5985 | 海南海口 | +| 5485 | 湖北武汉 | +| 26677 | 湖南株洲 | +| 4870 | 湖南长沙 | +| 4690 | 甘肃兰州 | +| 5506 | 福建厦门 | +| 4884 | 福建福州 | +| 5750 | 西藏拉萨 | +| 5017 | 辽宁沈阳 | +| 5726 | 重庆 | +| 5992 | 青海西宁 | +| 5460 | 黑龙江哈尔滨 | + + + +| 服务器ID | 位置 | +| -------- | ---------------- | +| 4665 | 上海 | +| 16719 | 上海 | +| 16803 | 上海 | +| 25637 | 上海5G | +| 5892 | 云南昆明 | +| 26728 | 云南昆明 | +| 17085 | 内蒙古呼和浩特 | +| 27019 | 内蒙古呼和浩特 | +| 17230 | 内蒙古阿拉善 | +| 4713 | 北京 | +| 25858 | 北京 | +| 16375 | 吉林长春 | +| 4575 | 四川成都 | +| 24337 | 四川成都 | +| 28211 | 四川成都 | +| 17184 | 天津 | +| 16392 | 宁夏银川 | +| 26940 | 宁夏银川 | +| 4377 | 安徽合肥 | +| 26404 | 安徽合肥 | +| 17388 | 山东临沂 | +| 16314 | 山东济南 | +| 17480 | 山东济南 | +| 25881 | 山东济南 | +| 17432 | 山东青岛 | +| 16005 | 山西太原 | +| 6611 | 广东广州 | +| 4515 | 广东深圳 | +| 15863 | 广西南宁 | +| 3784 | 新疆乌鲁木齐 | +| 16858 | 新疆乌鲁木齐 | +| 26938 | 新疆乌鲁木齐5G | +| 17228 | 新疆伊犁 | +| 17227 | 新疆和田 | +| 17245 | 新疆喀什 | +| 17222 | 新疆阿勒泰 | +| 21590 | 江苏南京 | +| 27249 | 江苏南京5G | +| 21530 | 江苏南通 | +| 21722 | 江苏宿迁 | +| 21845 | 江苏常州 | +| 22349 | 江苏徐州 | +| 21600 | 江苏扬州 | +| 5122 | 江苏无锡 | +| 21973 | 江苏无锡 | +| 26850 | 江苏无锡5G | +| 21642 | 江苏泰州 | +| 22037 | 江苏淮安 | +| 21946 | 江苏盐城 | +| 3927 | 江苏苏州 | +| 21472 | 江苏苏州 | +| 21584 | 江苏连云港 | +| 17320 | 江苏镇江 | +| 16294 | 江西南昌 | +| 16332 | 江西南昌 | +| 25883 | 江西南昌 | +| 17223 | 河北石家庄 | +| 10939 | 河南商丘 | +| 4486 | 河南郑州 | +| 18970 | 河南郑州 | +| 26331 | 河南郑州5G | +| 6715 | 浙江宁波 | +| 4647 | 浙江杭州 | +| 12278 | 浙江杭州 | +| 16503 | 海南海口 | +| 16395 | 湖北武汉 | +| 26357 | 湖北武汉 | +| 26547 | 湖北武汉 | +| 15862 | 湖南长沙 | +| 28491 | 湖南长沙5G | +| 16145 | 甘肃兰州 | +| 16171 | 福建福州 | +| 17494 | 西藏拉萨 | +| 18444 | 西藏拉萨 | +| 7404 | 贵州贵阳 | +| 16398 | 贵州贵阳 | +| 25728 | 辽宁大连 | +| 16167 | 辽宁沈阳 | +| 16409 | 重庆 | +| 17584 | 重庆 | +| 26380 | 陕西西安 | +| 16915 | 青海西宁 | +| 18504 | 青海西宁 | +| 29083 | 青海西宁5G | +| 17437 | 黑龙江哈尔滨 | +| 26656 | 黑龙江哈尔滨5G | + +
From d27bd10cb4a3cf5c40406eb18551c6248e9410c9 Mon Sep 17 00:00:00 2001 From: ernie Date: Wed, 15 Jan 2020 12:59:06 +0800 Subject: [PATCH 32/52] Add files via upload --- superspeed.sh | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/superspeed.sh b/superspeed.sh index ec60682..182a01b 100644 --- a/superspeed.sh +++ b/superspeed.sh @@ -49,16 +49,16 @@ clear echo "————————————————————————SuperSpeed 全面测速版—————————————————————————" echo " 使用方法: bash <(curl -Lso- https://git.io/superspeed)" echo " 查看全部节点: https://git.io/superspeedList" -echo " 节点更新日期: 2019/12/23" +echo " 节点更新日期: 2019/12/23 脚本更新日期: 2020/01/15" echo "——————————————————————————————————————————————————————————————————————" echo " 选择测速类型: " -echo " 1. 三网全面测速 2. 取消本次测速" -echo -ne " 3. 电信节点测速 4. 联通节点测速 5. 移动节点测速" +echo -e " ${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 " 输入错误, 请输入正确的数字!" + echo -ne " ${RED}输入错误${PLAIN}, 请输入正确的数字!" else break fi @@ -107,9 +107,9 @@ if [[ ${selection} == 1 ]]; then echo "ID 测速服务器信息 上传速度 下载速度 延迟" start=$(date +%s) - # speed_test '3633' '上海' '电信' + speed_test '3633' '上海' '电信' speed_test '28139' '上海5G' '电信' - # speed_test '6168' '云南昆明' '电信' + speed_test '6168' '云南昆明' '电信' speed_test '27539' '云南昆明5G' '电信' speed_test '24012' '内蒙古呼和浩特' '电信' speed_test '21470' '内蒙古鄂尔多斯' '电信' @@ -239,7 +239,7 @@ if [[ ${selection} == 1 ]]; then # speed_test '17245' '新疆喀什' '移动' # speed_test '17222' '新疆阿勒泰' '移动' # speed_test '21590' '江苏南京' '移动' - speed_test '27249' '江苏南京5G' '移动' + # speed_test '27249' '江苏南京5G' '移动' # speed_test '21530' '江苏南通' '移动' # speed_test '21722' '江苏宿迁' '移动' # speed_test '21845' '江苏常州' '移动' @@ -262,7 +262,7 @@ if [[ ${selection} == 1 ]]; then # speed_test '10939' '河南商丘' '移动' # speed_test '4486' '河南郑州' '移动' # speed_test '18970' '河南郑州' '移动' - speed_test '26331' '河南郑州5G' '移动' + # speed_test '26331' '河南郑州5G' '移动' speed_test '6715' '浙江宁波' '移动' # speed_test '4647' '浙江杭州' '移动' # speed_test '12278' '浙江杭州' '移动' @@ -275,7 +275,7 @@ if [[ ${selection} == 1 ]]; then speed_test '16145' '甘肃兰州' '移动' # speed_test '16171' '福建福州' '移动' # speed_test '17494' '西藏拉萨' '移动' - speed_test '18444' '西藏拉萨' '移动' + # speed_test '18444' '西藏拉萨' '移动' # speed_test '7404' '贵州贵阳' '移动' speed_test '16398' '贵州贵阳' '移动' # speed_test '25728' '辽宁大连' '移动' @@ -302,6 +302,8 @@ if [[ ${selection} == 1 ]]; then fi echo -ne "\n 当前时间: " echo $(date +%Y-%m-%d" "%H:%M:%S) + echo -e " ${GREEN}# 三网测速中为避免节点数不均及测试过久,每部分未使用所有节点,${PLAIN}" + echo -e " ${GREEN}# 如果需要使用全部节点,可分别选择三网节点检测。${PLAIN}" fi if [[ ${selection} == 3 ]]; then From 42c2c9feb06b9595ae422287b2dbe3e9b319585b Mon Sep 17 00:00:00 2001 From: ernie Date: Fri, 24 Jan 2020 00:49:07 +0800 Subject: [PATCH 33/52] Add files via upload --- superspeed.sh | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/superspeed.sh b/superspeed.sh index 182a01b..8adccb3 100644 --- a/superspeed.sh +++ b/superspeed.sh @@ -49,7 +49,7 @@ clear echo "————————————————————————SuperSpeed 全面测速版—————————————————————————" echo " 使用方法: bash <(curl -Lso- https://git.io/superspeed)" echo " 查看全部节点: https://git.io/superspeedList" -echo " 节点更新日期: 2019/12/23 脚本更新日期: 2020/01/15" +echo " 节点更新日期: 2019/12/23 脚本更新日期: 2020/01/24" echo "——————————————————————————————————————————————————————————————————————" echo " 选择测速类型: " echo -e " ${GREEN}1.${PLAIN} 三网测速 (各取部分节点) ${GREEN}2.${PLAIN} 取消本次测速" @@ -212,8 +212,8 @@ if [[ ${selection} == 1 ]]; then speed_test '27019' '内蒙古呼和浩特' '移动' # speed_test '17230' '内蒙古阿拉善' '移动' # speed_test '4713' '北京' '移动' - # speed_test '25858' '北京' '移动' - # speed_test '16375' '吉林长春' '移动' + speed_test '25858' '北京' '移动' + speed_test '16375' '吉林长春' '移动' # speed_test '4575' '四川成都' '移动' speed_test '24337' '四川成都' '移动' # speed_test '28211' '四川成都' '移动' @@ -225,7 +225,7 @@ if [[ ${selection} == 1 ]]; then # speed_test '17388' '山东临沂' '移动' # speed_test '16314' '山东济南' '移动' # speed_test '17480' '山东济南' '移动' - # speed_test '25881' '山东济南' '移动' + speed_test '25881' '山东济南' '移动' # speed_test '17432' '山东青岛' '移动' # speed_test '16005' '山西太原' '移动' # speed_test '6611' '广东广州' '移动' @@ -239,7 +239,7 @@ if [[ ${selection} == 1 ]]; then # speed_test '17245' '新疆喀什' '移动' # speed_test '17222' '新疆阿勒泰' '移动' # speed_test '21590' '江苏南京' '移动' - # speed_test '27249' '江苏南京5G' '移动' + speed_test '27249' '江苏南京5G' '移动' # speed_test '21530' '江苏南通' '移动' # speed_test '21722' '江苏宿迁' '移动' # speed_test '21845' '江苏常州' '移动' From 53baee77175fa6e697de6dadbfb8fe34ee4be62f Mon Sep 17 00:00:00 2001 From: ernie Date: Tue, 28 Jan 2020 16:26:13 +0800 Subject: [PATCH 34/52] Add files via upload --- superspeed.sh | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/superspeed.sh b/superspeed.sh index 8adccb3..d40d1ec 100644 --- a/superspeed.sh +++ b/superspeed.sh @@ -49,7 +49,7 @@ clear echo "————————————————————————SuperSpeed 全面测速版—————————————————————————" echo " 使用方法: bash <(curl -Lso- https://git.io/superspeed)" echo " 查看全部节点: https://git.io/superspeedList" -echo " 节点更新日期: 2019/12/23 脚本更新日期: 2020/01/24" +echo " 节点更新日期: 2019/12/23 脚本更新日期: 2020/01/28" echo "——————————————————————————————————————————————————————————————————————" echo " 选择测速类型: " echo -e " ${GREEN}1.${PLAIN} 三网测速 (各取部分节点) ${GREEN}2.${PLAIN} 取消本次测速" @@ -177,7 +177,7 @@ if [[ ${selection} == 1 ]]; then speed_test '12868' '山西太原' '联通' speed_test '19736' '山西太原' '联通' # speed_test '3891' '广东广州' '联通' - speed_test '26678' '广东广州' '联通' + speed_test '26678' '广东广州5G' '联通' speed_test '10201' '广东深圳' '联通' speed_test '5674' '广西南宁' '联通' speed_test '6144' '新疆乌鲁木齐' '联通' @@ -191,7 +191,7 @@ if [[ ${selection} == 1 ]]; then speed_test '5300' '浙江杭州' '联通' speed_test '5985' '海南海口' '联通' speed_test '5485' '湖北武汉' '联通' - speed_test '26677' '湖南株洲' '联通' + # speed_test '26677' '湖南株洲' '联通' # speed_test '4870' '湖南长沙' '联通' speed_test '4690' '甘肃兰州' '联通' speed_test '5506' '福建厦门' '联通' @@ -207,12 +207,12 @@ if [[ ${selection} == 1 ]]; then # speed_test '16803' '上海' '移动' speed_test '25637' '上海5G' '移动' # speed_test '5892' '云南昆明' '移动' - speed_test '26728' '云南昆明' '移动' + # speed_test '26728' '云南昆明' '移动' # speed_test '17085' '内蒙古呼和浩特' '移动' - speed_test '27019' '内蒙古呼和浩特' '移动' + # speed_test '27019' '内蒙古呼和浩特' '移动' # speed_test '17230' '内蒙古阿拉善' '移动' # speed_test '4713' '北京' '移动' - speed_test '25858' '北京' '移动' + # speed_test '25858' '北京' '移动' speed_test '16375' '吉林长春' '移动' # speed_test '4575' '四川成都' '移动' speed_test '24337' '四川成都' '移动' From 6d254168457a7930997059f4c417acd7b5483ae7 Mon Sep 17 00:00:00 2001 From: ernie Date: Tue, 28 Jan 2020 16:27:06 +0800 Subject: [PATCH 35/52] Update ServerList.md --- ServerList.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ServerList.md b/ServerList.md index d005fee..55382fa 100644 --- a/ServerList.md +++ b/ServerList.md @@ -83,7 +83,7 @@ | 12868 | 山西太原 | | 19736 | 山西太原 | | 3891 | 广东广州 | -| 26678 | 广东广州 | +| 26678 | 广东广州5G | | 10201 | 广东深圳 | | 5674 | 广西南宁 | | 6144 | 新疆乌鲁木齐 | From 8eb41a59ae47e0837856ad4068af2a848ce7c4d6 Mon Sep 17 00:00:00 2001 From: ernie Date: Fri, 28 Feb 2020 12:36:33 +0800 Subject: [PATCH 36/52] Add files via upload --- superspeed.sh | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/superspeed.sh b/superspeed.sh index d40d1ec..6866986 100644 --- a/superspeed.sh +++ b/superspeed.sh @@ -49,7 +49,7 @@ clear echo "————————————————————————SuperSpeed 全面测速版—————————————————————————" echo " 使用方法: bash <(curl -Lso- https://git.io/superspeed)" echo " 查看全部节点: https://git.io/superspeedList" -echo " 节点更新日期: 2019/12/23 脚本更新日期: 2020/01/28" +echo " 节点更新日期: 2019/12/23 脚本更新日期: 2020/02/28" echo "——————————————————————————————————————————————————————————————————————" echo " 选择测速类型: " echo -e " ${GREEN}1.${PLAIN} 三网测速 (各取部分节点) ${GREEN}2.${PLAIN} 取消本次测速" @@ -151,7 +151,7 @@ if [[ ${selection} == 1 ]]; then speed_test '3973' '甘肃兰州' '电信' speed_test '6592' '重庆' '电信' speed_test '16983' '重庆' '电信' - speed_test '19076' '重庆' '电信' + # speed_test '19076' '重庆' '电信' speed_test '19918' '青海西宁' '电信' # speed_test '5083' '上海' '联通' @@ -239,7 +239,7 @@ if [[ ${selection} == 1 ]]; then # speed_test '17245' '新疆喀什' '移动' # speed_test '17222' '新疆阿勒泰' '移动' # speed_test '21590' '江苏南京' '移动' - speed_test '27249' '江苏南京5G' '移动' + # speed_test '27249' '江苏南京5G' '移动' # speed_test '21530' '江苏南通' '移动' # speed_test '21722' '江苏宿迁' '移动' # speed_test '21845' '江苏常州' '移动' @@ -272,7 +272,7 @@ if [[ ${selection} == 1 ]]; then # speed_test '26547' '湖北武汉' '移动' # speed_test '15862' '湖南长沙' '移动' speed_test '28491' '湖南长沙5G' '移动' - speed_test '16145' '甘肃兰州' '移动' + # speed_test '16145' '甘肃兰州' '移动' # speed_test '16171' '福建福州' '移动' # speed_test '17494' '西藏拉萨' '移动' # speed_test '18444' '西藏拉萨' '移动' From bdc7f6d36ff057cbb008450018534c0629c88b9e Mon Sep 17 00:00:00 2001 From: ernie Date: Fri, 28 Feb 2020 12:59:41 +0800 Subject: [PATCH 37/52] Add files via upload --- superspeed.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/superspeed.sh b/superspeed.sh index 6866986..9d4ab14 100644 --- a/superspeed.sh +++ b/superspeed.sh @@ -271,7 +271,7 @@ if [[ ${selection} == 1 ]]; then # speed_test '26357' '湖北武汉' '移动' # speed_test '26547' '湖北武汉' '移动' # speed_test '15862' '湖南长沙' '移动' - speed_test '28491' '湖南长沙5G' '移动' + # speed_test '28491' '湖南长沙5G' '移动' # speed_test '16145' '甘肃兰州' '移动' # speed_test '16171' '福建福州' '移动' # speed_test '17494' '西藏拉萨' '移动' From 72bba20dfa51ea67dd2f212748ee3281290ed1fe Mon Sep 17 00:00:00 2001 From: ernie Date: Sat, 29 Feb 2020 14:27:22 +0800 Subject: [PATCH 38/52] Add files via upload --- superspeed.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/superspeed.sh b/superspeed.sh index 9d4ab14..86305d2 100644 --- a/superspeed.sh +++ b/superspeed.sh @@ -133,7 +133,7 @@ if [[ ${selection} == 1 ]]; then speed_test '26352' '江苏南京5G' '电信' speed_test '5324' '江苏徐州' '电信' speed_test '5396' '江苏苏州' '电信' - speed_test '5317' '江苏连云港' '电信' + # speed_test '5317' '江苏连云港' '电信' speed_test '6345' '江西南昌' '电信' speed_test '6473' '江西南昌' '电信' speed_test '7643' '江西南昌' '电信' From 6e81de6e8109f026278aa5a1167ef45062d07fd7 Mon Sep 17 00:00:00 2001 From: ernie Date: Thu, 5 Mar 2020 17:51:15 +0800 Subject: [PATCH 39/52] Add files via upload --- superspeed.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/superspeed.sh b/superspeed.sh index 86305d2..44bf18a 100644 --- a/superspeed.sh +++ b/superspeed.sh @@ -49,7 +49,7 @@ clear echo "————————————————————————SuperSpeed 全面测速版—————————————————————————" echo " 使用方法: bash <(curl -Lso- https://git.io/superspeed)" echo " 查看全部节点: https://git.io/superspeedList" -echo " 节点更新日期: 2019/12/23 脚本更新日期: 2020/02/28" +echo " 节点更新日期: 2019/12/23 脚本更新日期: 2020/03/05" echo "——————————————————————————————————————————————————————————————————————" echo " 选择测速类型: " echo -e " ${GREEN}1.${PLAIN} 三网测速 (各取部分节点) ${GREEN}2.${PLAIN} 取消本次测速" @@ -151,7 +151,7 @@ if [[ ${selection} == 1 ]]; then speed_test '3973' '甘肃兰州' '电信' speed_test '6592' '重庆' '电信' speed_test '16983' '重庆' '电信' - # speed_test '19076' '重庆' '电信' + speed_test '19076' '重庆' '电信' speed_test '19918' '青海西宁' '电信' # speed_test '5083' '上海' '联通' @@ -167,7 +167,7 @@ if [[ ${selection} == 1 ]]; then speed_test '2461' '四川成都' '联通' # speed_test '5475' '天津' '联通' speed_test '27154' '天津5G' '联通' - speed_test '5509' '宁夏' '联通' + # speed_test '5509' '宁夏' '联通' speed_test '5724' '安徽合肥' '联通' # speed_test '5039' '山东济南' '联通' # speed_test '12538' '山东济南' '联通' From 57a36f0f724d4f56922ca97c88f02be340aed1e1 Mon Sep 17 00:00:00 2001 From: ernie Date: Mon, 9 Mar 2020 12:45:58 +0800 Subject: [PATCH 40/52] Add files via upload --- superspeed.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/superspeed.sh b/superspeed.sh index 44bf18a..fceaf0e 100644 --- a/superspeed.sh +++ b/superspeed.sh @@ -49,7 +49,7 @@ clear echo "————————————————————————SuperSpeed 全面测速版—————————————————————————" echo " 使用方法: bash <(curl -Lso- https://git.io/superspeed)" echo " 查看全部节点: https://git.io/superspeedList" -echo " 节点更新日期: 2019/12/23 脚本更新日期: 2020/03/05" +echo " 节点更新日期: 2019/12/23 脚本更新日期: 2020/03/09" echo "——————————————————————————————————————————————————————————————————————" echo " 选择测速类型: " echo -e " ${GREEN}1.${PLAIN} 三网测速 (各取部分节点) ${GREEN}2.${PLAIN} 取消本次测速" @@ -142,7 +142,7 @@ if [[ ${selection} == 1 ]]; then speed_test '7509' '浙江杭州' '电信' speed_test '20038' '湖北武汉' '电信' speed_test '23665' '湖北武汉' '电信' - speed_test '23844' '湖北武汉' '电信' + # speed_test '23844' '湖北武汉' '电信' speed_test '24011' '湖北武汉' '电信' speed_test '6435' '湖北襄阳' '电信' speed_test '12637' '湖北襄阳' '电信' From a89b0bd6d03b5ab18ca69b6e214073f613153138 Mon Sep 17 00:00:00 2001 From: ernie Date: Thu, 9 Apr 2020 19:41:56 +0800 Subject: [PATCH 41/52] =?UTF-8?q?=E9=87=8D=E5=86=99=E3=80=81=E6=9B=B4?= =?UTF-8?q?=E6=8D=A2=E6=B5=8B=E9=80=9F=E6=96=B9=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- superspeed.sh | 1065 ++++++++++++++++++++++++++----------------------- 1 file changed, 556 insertions(+), 509 deletions(-) diff --git a/superspeed.sh b/superspeed.sh index fceaf0e..ac61cbe 100644 --- a/superspeed.sh +++ b/superspeed.sh @@ -9,541 +9,588 @@ PURPLE="\033[0;35m" CYAN='\033[0;36m' PLAIN='\033[0m' -# check root -[[ $EUID -ne 0 ]] && echo -e "${RED}Error:${PLAIN} This script must be run as root!" && exit 1 +checkroot(){ + [[ $EUID -ne 0 ]] && echo -e "${RED}请使用 root 用户运行本脚本!${PLAIN}" && exit 1 +} -# check python -if [ ! -e '/usr/bin/python' ]; then - echo -e - read -p "${RED}Error:${PLAIN} python is not install. You must be install python command at first.\nDo you want to install? [y/n]" is_install - if [[ ${is_install} == "y" || ${is_install} == "Y" ]]; then - if [ "${release}" == "centos" ]; then - yum -y install python - else - apt-get -y install python - fi - else - exit - fi - -fi +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 +} -# check wget -if [ ! -e '/usr/bin/wget' ]; then - echo -e - read -p "${RED}Error:${PLAIN} wget is not install. You must be install wget command at first.\nDo you want to install? [y/n]" is_install - if [[ ${is_install} == "y" || ${is_install} == "Y" ]]; then - if [ "${release}" == "centos" ]; then - yum -y install wget - else - apt-get -y install wget - fi - else - exit - fi -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 +} -clear +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 +} -echo "————————————————————————SuperSpeed 全面测速版—————————————————————————" -echo " 使用方法: bash <(curl -Lso- https://git.io/superspeed)" -echo " 查看全部节点: https://git.io/superspeedList" -echo " 节点更新日期: 2019/12/23 脚本更新日期: 2020/03/09" -echo "——————————————————————————————————————————————————————————————————————" -echo " 选择测速类型: " -echo -e " ${GREEN}1.${PLAIN} 三网测速 (各取部分节点) ${GREEN}2.${PLAIN} 取消本次测速" -echo -ne " ${GREEN}3.${PLAIN} 电信节点测速 ${GREEN}4.${PLAIN} 联通节点测速 ${GREEN}5.${PLAIN} 移动节点测速" +checkspeedtest() { + if [ ! -e './speedtest-cli/speedtest' ]; then + echo "正在安装 Speedtest-cli" + wget --no-check-certificate -qO speedtest.tgz https://cdn.jsdelivr.net/gh/oooldking/script@1.1.7/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 +} -while :; do echo - read -p " 请输入数字选择: " selection - if [[ ! $selection =~ ^[1-5]$ ]]; then - echo -ne " ${RED}输入错误${PLAIN}, 请输入正确的数字!" +speed_test(){ + speedLog="./speedtest.log" + true > $speedLog + speedtest-cli/speedtest -p no -s $1 --accept-license > $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 - break + local cerror="ERROR" fi -done - -[[ ${selection} == 2 ]] && exit 1 +} -# install speedtest -if [ ! -e '/tmp/speedtest.py' ]; then - wget --no-check-certificate -P /tmp https://raw.github.com/sivel/speedtest-cli/master/speedtest.py > /dev/null 2>&1 -fi -chmod a+rx /tmp/speedtest.py +preinfo() { + echo "———————————————————SuperSpeed 全面测速版——————————————————" + echo " bash <(curl -Lso- https://git.io/superspeed)" + echo " 全部节点列表: https://git.io/superspeedList" + echo " 节点更新: 2019/12/23 | 脚本更新: 2020/04/09" + echo "——————————————————————————————————————————————————————————" +} -speed_test(){ - temp=$(python /tmp/speedtest.py --server $1 --share 2>&1) - is_down=$(echo "$temp" | grep 'Download') - if [[ ${is_down} ]]; then - local REDownload=$(echo "$temp" | awk -F ':' '/Download/{print $2}') - local reupload=$(echo "$temp" | awk -F ':' '/Upload/{print $2}') - local relatency=$(echo "$temp" | awk -F ':' '/Hosted/{print $2}') - temp=$(echo "$relatency" | awk -F '.' '{print $1}') - if [[ ${temp} -gt 1000 ]]; then - relatency=" > 1 s" - fi - local nodeID=$1 - local nodeLocation=$2 - local nodeISP=$3 - - strnodeLocation="${nodeLocation}      " - - #LANG=zh_CN.GB2312 - #echo $LANG - #printf "${RED}%-6s${YELLOW}%s%s${GREEN}%-8s${CYAN}%-16s${BLUE}%-16s${PURPLE}%-10s${PLAIN}\n" "${nodeID}" "${nodeISP}" "|" "${strnodeLocation:0:8}" "${reupload}" "${REDownload}" "${relatency}" - - LANG=C - #echo $LANG - printf "${RED}%-6s${YELLOW}%s%s${GREEN}%-24s${CYAN}%-16s${BLUE}%-16s${PURPLE}%-10s${PLAIN}\n" "${nodeID}" "${nodeISP}" "|" "${strnodeLocation:0:24}" "${reupload}" "${REDownload}" "${relatency}" - - else - local cerror="ERROR" - fi +selecttest() { + echo -e " 选择测速类型: ${GREEN}1.${PLAIN} 三网测速 ${GREEN}3.${PLAIN} 电信节点测速" + echo -e " ${GREEN}2.${PLAIN} 取消本次测速 ${GREEN}4.${PLAIN} 联通节点测速" + echo -ne " ${GREEN}5.${PLAIN} 移动节点测速" + while :; do echo + read -p " 请输入数字选择: " selection + if [[ ! $selection =~ ^[1-5]$ ]]; then + echo -ne " ${RED}输入错误${PLAIN}, 请输入正确的数字!" + else + break + fi + done } -if [[ ${selection} == 1 ]]; then - echo "——————————————————————————————————————————————————————————————————————" - echo "ID 测速服务器信息 上传速度 下载速度 延迟" - start=$(date +%s) +runtest() { + [[ ${selection} == 2 ]] && exit 1 + + if [[ ${selection} == 1 ]]; then + echo "——————————————————————————————————————————————————————————" + echo "ID 测速服务器信息 上传/Mbps 下载/Mbps 延迟/ms" + start=$(date +%s) - speed_test '3633' '上海' '电信' - speed_test '28139' '上海5G' '电信' - speed_test '6168' '云南昆明' '电信' - speed_test '27539' '云南昆明5G' '电信' - speed_test '24012' '内蒙古呼和浩特' '电信' - speed_test '21470' '内蒙古鄂尔多斯' '电信' - # speed_test '4751' '北京' '电信' - speed_test '27377' '北京5G' '电信' - speed_test '4624' '四川成都' '电信' - speed_test '6714' '天津' '电信' - speed_test '17145' '安徽安徽合肥' '电信' - # speed_test '9151' '广东广州' '电信' - # speed_test '10775' '广东广州' '电信' - # speed_test '17251' '广东广州' '电信' - speed_test '27594' '广东广州5G' '电信' - speed_test '5081' '广东深圳' '电信' - speed_test '10192' '广西南宁' '电信' - speed_test '10305' '广西南宁' '电信' - speed_test '22724' '广西南宁' '电信' - speed_test '27810' '广西南宁' '电信' - speed_test '27304' '新疆乌鲁木齐' '电信' - speed_test '27575' '新疆乌鲁木齐' '电信' - # speed_test '5316' '江苏南京' '电信' - speed_test '26352' '江苏南京5G' '电信' - speed_test '5324' '江苏徐州' '电信' - speed_test '5396' '江苏苏州' '电信' - # speed_test '5317' '江苏连云港' '电信' - speed_test '6345' '江西南昌' '电信' - speed_test '6473' '江西南昌' '电信' - speed_test '7643' '江西南昌' '电信' - speed_test '16399' '江西南昌' '电信' - speed_test '4595' '河南郑州' '电信' - speed_test '7509' '浙江杭州' '电信' - speed_test '20038' '湖北武汉' '电信' - speed_test '23665' '湖北武汉' '电信' - # speed_test '23844' '湖北武汉' '电信' - speed_test '24011' '湖北武汉' '电信' - speed_test '6435' '湖北襄阳' '电信' - speed_test '12637' '湖北襄阳' '电信' - speed_test '6132' '湖南长沙' '电信' - speed_test '28225' '湖南长沙' '电信' - speed_test '3973' '甘肃兰州' '电信' - speed_test '6592' '重庆' '电信' - speed_test '16983' '重庆' '电信' - speed_test '19076' '重庆' '电信' - speed_test '19918' '青海西宁' '电信' + speed_test '3633' '上海' '电信' + speed_test '28139' '上海5G' '电信' + speed_test '6168' '云南昆明' '电信' + speed_test '27539' '云南昆明5G' '电信' + speed_test '24012' '内蒙古呼和浩特' '电信' + speed_test '21470' '内蒙古鄂尔多斯' '电信' + # speed_test '4751' '北京' '电信' + speed_test '27377' '北京5G' '电信' + speed_test '4624' '四川成都' '电信' + speed_test '6714' '天津' '电信' + speed_test '17145' '安徽合肥' '电信' + # speed_test '9151' '广东广州' '电信' + # speed_test '10775' '广东广州' '电信' + # speed_test '17251' '广东广州' '电信' + speed_test '27594' '广东广州5G' '电信' + speed_test '5081' '广东深圳' '电信' + speed_test '10192' '广西南宁' '电信' + speed_test '10305' '广西南宁' '电信' + speed_test '22724' '广西南宁' '电信' + speed_test '27810' '广西南宁' '电信' + speed_test '27304' '新疆乌鲁木齐' '电信' + speed_test '27575' '新疆乌鲁木齐' '电信' + # speed_test '5316' '江苏南京' '电信' + speed_test '26352' '江苏南京5G' '电信' + speed_test '5324' '江苏徐州' '电信' + speed_test '5396' '江苏苏州' '电信' + # speed_test '5317' '江苏连云港' '电信' + speed_test '6345' '江西南昌' '电信' + speed_test '6473' '江西南昌' '电信' + speed_test '7643' '江西南昌' '电信' + speed_test '16399' '江西南昌' '电信' + speed_test '4595' '河南郑州' '电信' + speed_test '7509' '浙江杭州' '电信' + speed_test '20038' '湖北武汉' '电信' + speed_test '23665' '湖北武汉' '电信' + speed_test '23844' '湖北武汉' '电信' + speed_test '24011' '湖北武汉' '电信' + speed_test '6435' '湖北襄阳' '电信' + speed_test '12637' '湖北襄阳' '电信' + speed_test '6132' '湖南长沙' '电信' + speed_test '28225' '湖南长沙' '电信' + speed_test '3973' '甘肃兰州' '电信' + speed_test '6592' '重庆' '电信' + speed_test '16983' '重庆' '电信' + speed_test '19076' '重庆' '电信' + speed_test '19918' '青海西宁' '电信' - # speed_test '5083' '上海' '联通' - # speed_test '21005' '上海' '联通' - speed_test '24447' '上海5G' '联通' - speed_test '5103' '云南昆明' '联通' - speed_test '5465' '内蒙古呼和浩特' '联通' - speed_test '5145' '北京' '联通' - # speed_test '5505' '北京' '联通' - # speed_test '18462' '北京' '联通' - speed_test '9484' '吉林长春' '联通' - # speed_test '10742' '吉林长春' '联通' - speed_test '2461' '四川成都' '联通' - # speed_test '5475' '天津' '联通' - speed_test '27154' '天津5G' '联通' - # speed_test '5509' '宁夏' '联通' - speed_test '5724' '安徽合肥' '联通' - # speed_test '5039' '山东济南' '联通' - # speed_test '12538' '山东济南' '联通' - speed_test '26180' '山东济南5G' '联通' - # speed_test '5710' '山东青岛' '联通' - speed_test '12516' '山西太原' '联通' - speed_test '12868' '山西太原' '联通' - speed_test '19736' '山西太原' '联通' - # speed_test '3891' '广东广州' '联通' - speed_test '26678' '广东广州5G' '联通' - speed_test '10201' '广东深圳' '联通' - speed_test '5674' '广西南宁' '联通' - speed_test '6144' '新疆乌鲁木齐' '联通' - speed_test '5446' '江苏南京' '联通' - speed_test '13704' '江苏南京' '联通' - speed_test '5097' '江西南昌' '联通' - speed_test '7230' '江西南昌' '联通' - speed_test '5131' '河南郑州' '联通' - speed_test '6810' '河南郑州' '联通' - speed_test '6245' '浙江宁波' '联通' - speed_test '5300' '浙江杭州' '联通' - speed_test '5985' '海南海口' '联通' - speed_test '5485' '湖北武汉' '联通' - # speed_test '26677' '湖南株洲' '联通' - # speed_test '4870' '湖南长沙' '联通' - speed_test '4690' '甘肃兰州' '联通' - speed_test '5506' '福建厦门' '联通' - speed_test '4884' '福建福州' '联通' - speed_test '5750' '西藏拉萨' '联通' - speed_test '5017' '辽宁沈阳' '联通' - speed_test '5726' '重庆' '联通' - speed_test '5992' '青海西宁' '联通' - speed_test '5460' '黑龙江哈尔滨' '联通' + # speed_test '5083' '上海' '联通' + # speed_test '21005' '上海' '联通' + speed_test '24447' '上海5G' '联通' + speed_test '5103' '云南昆明' '联通' + speed_test '5465' '内蒙古呼和浩特' '联通' + speed_test '5145' '北京' '联通' + # speed_test '5505' '北京' '联通' + # speed_test '18462' '北京' '联通' + speed_test '9484' '吉林长春' '联通' + # speed_test '10742' '吉林长春' '联通' + speed_test '2461' '四川成都' '联通' + # speed_test '5475' '天津' '联通' + speed_test '27154' '天津5G' '联通' + # speed_test '5509' '宁夏' '联通' + speed_test '5724' '安徽合肥' '联通' + # speed_test '5039' '山东济南' '联通' + # speed_test '12538' '山东济南' '联通' + speed_test '26180' '山东济南5G' '联通' + # speed_test '5710' '山东青岛' '联通' + speed_test '12516' '山西太原' '联通' + speed_test '12868' '山西太原' '联通' + speed_test '19736' '山西太原' '联通' + # speed_test '3891' '广东广州' '联通' + speed_test '26678' '广东广州5G' '联通' + speed_test '10201' '广东深圳' '联通' + speed_test '5674' '广西南宁' '联通' + speed_test '6144' '新疆乌鲁木齐' '联通' + speed_test '5446' '江苏南京' '联通' + speed_test '13704' '江苏南京' '联通' + speed_test '5097' '江西南昌' '联通' + speed_test '7230' '江西南昌' '联通' + speed_test '5131' '河南郑州' '联通' + speed_test '6810' '河南郑州' '联通' + speed_test '6245' '浙江宁波' '联通' + speed_test '5300' '浙江杭州' '联通' + speed_test '5985' '海南海口' '联通' + speed_test '5485' '湖北武汉' '联通' + # speed_test '26677' '湖南株洲' '联通' + # speed_test '4870' '湖南长沙' '联通' + speed_test '4690' '甘肃兰州' '联通' + speed_test '5506' '福建厦门' '联通' + speed_test '4884' '福建福州' '联通' + speed_test '5750' '西藏拉萨' '联通' + speed_test '5017' '辽宁沈阳' '联通' + speed_test '5726' '重庆' '联通' + speed_test '5992' '青海西宁' '联通' + speed_test '5460' '黑龙江哈尔滨' '联通' - # speed_test '4665' '上海' '移动' - # speed_test '16719' '上海' '移动' - # speed_test '16803' '上海' '移动' - speed_test '25637' '上海5G' '移动' - # speed_test '5892' '云南昆明' '移动' - # speed_test '26728' '云南昆明' '移动' - # speed_test '17085' '内蒙古呼和浩特' '移动' - # speed_test '27019' '内蒙古呼和浩特' '移动' - # speed_test '17230' '内蒙古阿拉善' '移动' - # speed_test '4713' '北京' '移动' - # speed_test '25858' '北京' '移动' - speed_test '16375' '吉林长春' '移动' - # speed_test '4575' '四川成都' '移动' - speed_test '24337' '四川成都' '移动' - # speed_test '28211' '四川成都' '移动' - speed_test '17184' '天津' '移动' - # speed_test '16392' '宁夏银川' '移动' - # speed_test '26940' '宁夏银川' '移动' - # speed_test '4377' '安徽合肥' '移动' - # speed_test '26404' '安徽合肥' '移动' - # speed_test '17388' '山东临沂' '移动' - # speed_test '16314' '山东济南' '移动' - # speed_test '17480' '山东济南' '移动' - speed_test '25881' '山东济南' '移动' - # speed_test '17432' '山东青岛' '移动' - # speed_test '16005' '山西太原' '移动' - # speed_test '6611' '广东广州' '移动' - speed_test '4515' '广东深圳' '移动' - speed_test '15863' '广西南宁' '移动' - # speed_test '3784' '新疆乌鲁木齐' '移动' - # speed_test '16858' '新疆乌鲁木齐' '移动' - speed_test '26938' '新疆乌鲁木齐5G' '移动' - # speed_test '17228' '新疆伊犁' '移动' - # speed_test '17227' '新疆和田' '移动' - # speed_test '17245' '新疆喀什' '移动' - # speed_test '17222' '新疆阿勒泰' '移动' - # speed_test '21590' '江苏南京' '移动' - # speed_test '27249' '江苏南京5G' '移动' - # speed_test '21530' '江苏南通' '移动' - # speed_test '21722' '江苏宿迁' '移动' - # speed_test '21845' '江苏常州' '移动' - # speed_test '22349' '江苏徐州' '移动' - # speed_test '21600' '江苏扬州' '移动' - # speed_test '5122' '江苏无锡' '移动' - # speed_test '21973' '江苏无锡' '移动' - # speed_test '26850' '江苏无锡5G' '移动' - # speed_test '21642' '江苏泰州' '移动' - # speed_test '22037' '江苏淮安' '移动' - # speed_test '21946' '江苏盐城' '移动' - # speed_test '3927' '江苏苏州' '移动' - # speed_test '21472' '江苏苏州' '移动' - # speed_test '21584' '江苏连云港' '移动' - # speed_test '17320' '江苏镇江' '移动' - # speed_test '16294' '江西南昌' '移动' - # speed_test '16332' '江西南昌' '移动' - # speed_test '25883' '江西南昌' '移动' - # speed_test '17223' '河北石家庄' '移动' - # speed_test '10939' '河南商丘' '移动' - # speed_test '4486' '河南郑州' '移动' - # speed_test '18970' '河南郑州' '移动' - # speed_test '26331' '河南郑州5G' '移动' - speed_test '6715' '浙江宁波' '移动' - # speed_test '4647' '浙江杭州' '移动' - # speed_test '12278' '浙江杭州' '移动' - speed_test '16503' '海南海口' '移动' - # speed_test '16395' '湖北武汉' '移动' - # speed_test '26357' '湖北武汉' '移动' - # speed_test '26547' '湖北武汉' '移动' - # speed_test '15862' '湖南长沙' '移动' - # speed_test '28491' '湖南长沙5G' '移动' - # speed_test '16145' '甘肃兰州' '移动' - # speed_test '16171' '福建福州' '移动' - # speed_test '17494' '西藏拉萨' '移动' - # speed_test '18444' '西藏拉萨' '移动' - # speed_test '7404' '贵州贵阳' '移动' - speed_test '16398' '贵州贵阳' '移动' - # speed_test '25728' '辽宁大连' '移动' - # speed_test '16167' '辽宁沈阳' '移动' - # speed_test '16409' '重庆' '移动' - speed_test '17584' '重庆' '移动' - # speed_test '26380' '陕西西安' '移动' - # speed_test '16915' '青海西宁' '移动' - # speed_test '18504' '青海西宁' '移动' - speed_test '29083' '青海西宁5G' '移动' - # speed_test '17437' '黑龙江哈尔滨' '移动' - speed_test '26656' '黑龙江哈尔滨5G' '移动' + # speed_test '4665' '上海' '移动' + # speed_test '16719' '上海' '移动' + # speed_test '16803' '上海' '移动' + speed_test '25637' '上海5G' '移动' + # speed_test '5892' '云南昆明' '移动' + # speed_test '26728' '云南昆明' '移动' + # speed_test '17085' '内蒙古呼和浩特' '移动' + # speed_test '27019' '内蒙古呼和浩特' '移动' + # speed_test '17230' '内蒙古阿拉善' '移动' + # speed_test '4713' '北京' '移动' + # speed_test '25858' '北京' '移动' + speed_test '16375' '吉林长春' '移动' + # speed_test '4575' '四川成都' '移动' + speed_test '24337' '四川成都' '移动' + # speed_test '28211' '四川成都' '移动' + speed_test '17184' '天津' '移动' + # speed_test '16392' '宁夏银川' '移动' + # speed_test '26940' '宁夏银川' '移动' + # speed_test '4377' '安徽合肥' '移动' + # speed_test '26404' '安徽合肥' '移动' + # speed_test '17388' '山东临沂' '移动' + # speed_test '16314' '山东济南' '移动' + # speed_test '17480' '山东济南' '移动' + speed_test '25881' '山东济南' '移动' + # speed_test '17432' '山东青岛' '移动' + # speed_test '16005' '山西太原' '移动' + # speed_test '6611' '广东广州' '移动' + speed_test '4515' '广东深圳' '移动' + speed_test '15863' '广西南宁' '移动' + # speed_test '3784' '新疆乌鲁木齐' '移动' + # speed_test '16858' '新疆乌鲁木齐' '移动' + speed_test '26938' '新疆乌鲁木齐5G' '移动' + # speed_test '17228' '新疆伊犁' '移动' + # speed_test '17227' '新疆和田' '移动' + # speed_test '17245' '新疆喀什' '移动' + # speed_test '17222' '新疆阿勒泰' '移动' + # speed_test '21590' '江苏南京' '移动' + # speed_test '27249' '江苏南京5G' '移动' + # speed_test '21530' '江苏南通' '移动' + # speed_test '21722' '江苏宿迁' '移动' + # speed_test '21845' '江苏常州' '移动' + # speed_test '22349' '江苏徐州' '移动' + # speed_test '21600' '江苏扬州' '移动' + # speed_test '5122' '江苏无锡' '移动' + # speed_test '21973' '江苏无锡' '移动' + # speed_test '26850' '江苏无锡5G' '移动' + # speed_test '21642' '江苏泰州' '移动' + # speed_test '22037' '江苏淮安' '移动' + # speed_test '21946' '江苏盐城' '移动' + # speed_test '3927' '江苏苏州' '移动' + # speed_test '21472' '江苏苏州' '移动' + # speed_test '21584' '江苏连云港' '移动' + # speed_test '17320' '江苏镇江' '移动' + # speed_test '16294' '江西南昌' '移动' + # speed_test '16332' '江西南昌' '移动' + # speed_test '25883' '江西南昌' '移动' + # speed_test '17223' '河北石家庄' '移动' + # speed_test '10939' '河南商丘' '移动' + # speed_test '4486' '河南郑州' '移动' + # speed_test '18970' '河南郑州' '移动' + # speed_test '26331' '河南郑州5G' '移动' + speed_test '6715' '浙江宁波' '移动' + # speed_test '4647' '浙江杭州' '移动' + # speed_test '12278' '浙江杭州' '移动' + speed_test '16503' '海南海口' '移动' + # speed_test '16395' '湖北武汉' '移动' + # speed_test '26357' '湖北武汉' '移动' + # speed_test '26547' '湖北武汉' '移动' + # speed_test '15862' '湖南长沙' '移动' + # speed_test '28491' '湖南长沙5G' '移动' + # speed_test '16145' '甘肃兰州' '移动' + # speed_test '16171' '福建福州' '移动' + # speed_test '17494' '西藏拉萨' '移动' + # speed_test '18444' '西藏拉萨' '移动' + # speed_test '7404' '贵州贵阳' '移动' + speed_test '16398' '贵州贵阳' '移动' + # speed_test '25728' '辽宁大连' '移动' + # speed_test '16167' '辽宁沈阳' '移动' + # speed_test '16409' '重庆' '移动' + speed_test '17584' '重庆' '移动' + # speed_test '26380' '陕西西安' '移动' + # speed_test '16915' '青海西宁' '移动' + # speed_test '18504' '青海西宁' '移动' + speed_test '29083' '青海西宁5G' '移动' + # speed_test '17437' '黑龙江哈尔滨' '移动' + speed_test '26656' '黑龙江哈尔滨5G' '移动' - end=$(date +%s) - rm -rf /tmp/speedtest.py - 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} 秒" + 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 $(date +%Y-%m-%d" "%H:%M:%S) + echo -e " ${GREEN}# 三网测速中为避免节点数不均及测试过久,每部分未使用所${PLAIN}" + echo -e " ${GREEN}# 有节点,如果需要使用全部节点,可分别选择三网节点检测${PLAIN}" fi - echo -ne "\n 当前时间: " - echo $(date +%Y-%m-%d" "%H:%M:%S) - echo -e " ${GREEN}# 三网测速中为避免节点数不均及测试过久,每部分未使用所有节点,${PLAIN}" - echo -e " ${GREEN}# 如果需要使用全部节点,可分别选择三网节点检测。${PLAIN}" -fi -if [[ ${selection} == 3 ]]; then - echo "——————————————————————————————————————————————————————————————————————" - echo "ID 测速服务器信息 上传速度 下载速度 延迟" - start=$(date +%s) + if [[ ${selection} == 3 ]]; then + echo "——————————————————————————————————————————————————————————" + echo "ID 测速服务器信息 上传/Mbps 下载/Mbps 延迟/ms" + start=$(date +%s) - speed_test '3633' '上海' '电信' - speed_test '28139' '上海5G' '电信' - speed_test '6168' '云南昆明' '电信' - speed_test '27539' '云南昆明5G' '电信' - speed_test '24012' '内蒙古呼和浩特' '电信' - speed_test '21470' '内蒙古鄂尔多斯' '电信' - speed_test '4751' '北京' '电信' - speed_test '27377' '北京5G' '电信' - speed_test '4624' '四川成都' '电信' - speed_test '6714' '天津' '电信' - speed_test '17145' '安徽安徽合肥' '电信' - speed_test '9151' '广东广州' '电信' - speed_test '10775' '广东广州' '电信' - speed_test '17251' '广东广州' '电信' - speed_test '27594' '广东广州5G' '电信' - speed_test '5081' '广东深圳' '电信' - speed_test '10192' '广西南宁' '电信' - speed_test '10305' '广西南宁' '电信' - speed_test '22724' '广西南宁' '电信' - speed_test '27810' '广西南宁' '电信' - speed_test '27304' '新疆乌鲁木齐' '电信' - speed_test '27575' '新疆乌鲁木齐' '电信' - speed_test '5316' '江苏南京' '电信' - speed_test '26352' '江苏南京5G' '电信' - speed_test '5324' '江苏徐州' '电信' - speed_test '5396' '江苏苏州' '电信' - speed_test '5317' '江苏连云港' '电信' - speed_test '6345' '江西南昌' '电信' - speed_test '6473' '江西南昌' '电信' - speed_test '7643' '江西南昌' '电信' - speed_test '16399' '江西南昌' '电信' - speed_test '4595' '河南郑州' '电信' - speed_test '7509' '浙江杭州' '电信' - speed_test '20038' '湖北武汉' '电信' - speed_test '23665' '湖北武汉' '电信' - speed_test '23844' '湖北武汉' '电信' - speed_test '24011' '湖北武汉' '电信' - speed_test '6435' '湖北襄阳' '电信' - speed_test '12637' '湖北襄阳' '电信' - speed_test '6132' '湖南长沙' '电信' - speed_test '28225' '湖南长沙' '电信' - speed_test '3973' '甘肃兰州' '电信' - speed_test '6592' '重庆' '电信' - speed_test '16983' '重庆' '电信' - speed_test '19076' '重庆' '电信' - speed_test '19918' '青海西宁' '电信' + speed_test '3633' '上海' '电信' + speed_test '28139' '上海5G' '电信' + speed_test '6168' '云南昆明' '电信' + speed_test '27539' '云南昆明5G' '电信' + speed_test '24012' '内蒙古呼和浩特' '电信' + speed_test '21470' '内蒙古鄂尔多斯' '电信' + speed_test '4751' '北京' '电信' + speed_test '27377' '北京5G' '电信' + speed_test '4624' '四川成都' '电信' + speed_test '6714' '天津' '电信' + speed_test '17145' '安徽合肥' '电信' + speed_test '9151' '广东广州' '电信' + speed_test '10775' '广东广州' '电信' + speed_test '17251' '广东广州' '电信' + speed_test '27594' '广东广州5G' '电信' + speed_test '5081' '广东深圳' '电信' + speed_test '10192' '广西南宁' '电信' + speed_test '10305' '广西南宁' '电信' + speed_test '22724' '广西南宁' '电信' + speed_test '27810' '广西南宁' '电信' + speed_test '27304' '新疆乌鲁木齐' '电信' + speed_test '27575' '新疆乌鲁木齐' '电信' + speed_test '5316' '江苏南京' '电信' + speed_test '26352' '江苏南京5G' '电信' + speed_test '5324' '江苏徐州' '电信' + speed_test '5396' '江苏苏州' '电信' + speed_test '5317' '江苏连云港' '电信' + speed_test '6345' '江西南昌' '电信' + speed_test '6473' '江西南昌' '电信' + speed_test '7643' '江西南昌' '电信' + speed_test '16399' '江西南昌' '电信' + speed_test '4595' '河南郑州' '电信' + speed_test '7509' '浙江杭州' '电信' + speed_test '20038' '湖北武汉' '电信' + speed_test '23665' '湖北武汉' '电信' + speed_test '23844' '湖北武汉' '电信' + speed_test '24011' '湖北武汉' '电信' + speed_test '6435' '湖北襄阳' '电信' + speed_test '12637' '湖北襄阳' '电信' + speed_test '6132' '湖南长沙' '电信' + speed_test '28225' '湖南长沙' '电信' + speed_test '3973' '甘肃兰州' '电信' + speed_test '6592' '重庆' '电信' + speed_test '16983' '重庆' '电信' + speed_test '19076' '重庆' '电信' + speed_test '19918' '青海西宁' '电信' - end=$(date +%s) - rm -rf /tmp/speedtest.py - 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} 秒" + 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 $(date +%Y-%m-%d" "%H:%M:%S) fi - echo -ne "\n 当前时间: " - echo $(date +%Y-%m-%d" "%H:%M:%S) -fi -if [[ ${selection} == 4 ]]; then - echo "——————————————————————————————————————————————————————————————————————" - echo "ID 测速服务器信息 上传速度 下载速度 延迟" - start=$(date +%s) + if [[ ${selection} == 4 ]]; then + echo "——————————————————————————————————————————————————————————" + echo "ID 测速服务器信息 上传/Mbps 下载/Mbps 延迟/ms" + start=$(date +%s) - speed_test '5083' '上海' '联通' - speed_test '21005' '上海' '联通' - speed_test '24447' '上海5G' '联通' - speed_test '5103' '云南昆明' '联通' - speed_test '5465' '内蒙古呼和浩特' '联通' - speed_test '5145' '北京' '联通' - speed_test '5505' '北京' '联通' - speed_test '18462' '北京' '联通' - speed_test '9484' '吉林长春' '联通' - speed_test '10742' '吉林长春' '联通' - speed_test '2461' '四川成都' '联通' - speed_test '5475' '天津' '联通' - speed_test '27154' '天津5G' '联通' - speed_test '5509' '宁夏' '联通' - speed_test '5724' '安徽合肥' '联通' - speed_test '5039' '山东济南' '联通' - speed_test '12538' '山东济南' '联通' - speed_test '26180' '山东济南5G' '联通' - speed_test '5710' '山东青岛' '联通' - speed_test '12516' '山西太原' '联通' - speed_test '12868' '山西太原' '联通' - speed_test '19736' '山西太原' '联通' - speed_test '3891' '广东广州' '联通' - speed_test '26678' '广东广州' '联通' - speed_test '10201' '广东深圳' '联通' - speed_test '5674' '广西南宁' '联通' - speed_test '6144' '新疆乌鲁木齐' '联通' - speed_test '5446' '江苏南京' '联通' - speed_test '13704' '江苏南京' '联通' - speed_test '5097' '江西南昌' '联通' - speed_test '7230' '江西南昌' '联通' - speed_test '5131' '河南郑州' '联通' - speed_test '6810' '河南郑州' '联通' - speed_test '6245' '浙江宁波' '联通' - speed_test '5300' '浙江杭州' '联通' - speed_test '5985' '海南海口' '联通' - speed_test '5485' '湖北武汉' '联通' - speed_test '26677' '湖南株洲' '联通' - speed_test '4870' '湖南长沙' '联通' - speed_test '4690' '甘肃兰州' '联通' - speed_test '5506' '福建厦门' '联通' - speed_test '4884' '福建福州' '联通' - speed_test '5750' '西藏拉萨' '联通' - speed_test '5017' '辽宁沈阳' '联通' - speed_test '5726' '重庆' '联通' - speed_test '5992' '青海西宁' '联通' - speed_test '5460' '黑龙江哈尔滨' '联通' + speed_test '5083' '上海' '联通' + speed_test '21005' '上海' '联通' + speed_test '24447' '上海5G' '联通' + speed_test '5103' '云南昆明' '联通' + speed_test '5465' '内蒙古呼和浩特' '联通' + speed_test '5145' '北京' '联通' + speed_test '5505' '北京' '联通' + speed_test '18462' '北京' '联通' + speed_test '9484' '吉林长春' '联通' + speed_test '10742' '吉林长春' '联通' + speed_test '2461' '四川成都' '联通' + speed_test '5475' '天津' '联通' + speed_test '27154' '天津5G' '联通' + speed_test '5509' '宁夏' '联通' + speed_test '5724' '安徽合肥' '联通' + speed_test '5039' '山东济南' '联通' + speed_test '12538' '山东济南' '联通' + speed_test '26180' '山东济南5G' '联通' + speed_test '5710' '山东青岛' '联通' + speed_test '12516' '山西太原' '联通' + speed_test '12868' '山西太原' '联通' + speed_test '19736' '山西太原' '联通' + speed_test '3891' '广东广州' '联通' + speed_test '26678' '广东广州' '联通' + speed_test '10201' '广东深圳' '联通' + speed_test '5674' '广西南宁' '联通' + speed_test '6144' '新疆乌鲁木齐' '联通' + speed_test '5446' '江苏南京' '联通' + speed_test '13704' '江苏南京' '联通' + speed_test '5097' '江西南昌' '联通' + speed_test '7230' '江西南昌' '联通' + speed_test '5131' '河南郑州' '联通' + speed_test '6810' '河南郑州' '联通' + speed_test '6245' '浙江宁波' '联通' + speed_test '5300' '浙江杭州' '联通' + speed_test '5985' '海南海口' '联通' + speed_test '5485' '湖北武汉' '联通' + speed_test '26677' '湖南株洲' '联通' + speed_test '4870' '湖南长沙' '联通' + speed_test '4690' '甘肃兰州' '联通' + speed_test '5506' '福建厦门' '联通' + speed_test '4884' '福建福州' '联通' + speed_test '5750' '西藏拉萨' '联通' + speed_test '5017' '辽宁沈阳' '联通' + speed_test '5726' '重庆' '联通' + speed_test '5992' '青海西宁' '联通' + speed_test '5460' '黑龙江哈尔滨' '联通' - end=$(date +%s) - rm -rf /tmp/speedtest.py - 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} 秒" + 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 $(date +%Y-%m-%d" "%H:%M:%S) fi - echo -ne "\n 当前时间: " - echo $(date +%Y-%m-%d" "%H:%M:%S) -fi -if [[ ${selection} == 5 ]]; then - echo "——————————————————————————————————————————————————————————————————————" - echo "ID 测速服务器信息 上传速度 下载速度 延迟" - start=$(date +%s) + if [[ ${selection} == 5 ]]; then + echo "——————————————————————————————————————————————————————————" + echo "ID 测速服务器信息 上传/Mbps 下载/Mbps 延迟/ms" + start=$(date +%s) - speed_test '4665' '上海' '移动' - speed_test '16719' '上海' '移动' - speed_test '16803' '上海' '移动' - speed_test '25637' '上海5G' '移动' - speed_test '5892' '云南昆明' '移动' - speed_test '26728' '云南昆明' '移动' - speed_test '17085' '内蒙古呼和浩特' '移动' - speed_test '27019' '内蒙古呼和浩特' '移动' - speed_test '17230' '内蒙古阿拉善' '移动' - speed_test '4713' '北京' '移动' - speed_test '25858' '北京' '移动' - speed_test '16375' '吉林长春' '移动' - speed_test '4575' '四川成都' '移动' - speed_test '24337' '四川成都' '移动' - speed_test '28211' '四川成都' '移动' - speed_test '17184' '天津' '移动' - speed_test '16392' '宁夏银川' '移动' - speed_test '26940' '宁夏银川' '移动' - speed_test '4377' '安徽合肥' '移动' - speed_test '26404' '安徽合肥' '移动' - speed_test '17388' '山东临沂' '移动' - speed_test '16314' '山东济南' '移动' - speed_test '17480' '山东济南' '移动' - speed_test '25881' '山东济南' '移动' - speed_test '17432' '山东青岛' '移动' - speed_test '16005' '山西太原' '移动' - speed_test '6611' '广东广州' '移动' - speed_test '4515' '广东深圳' '移动' - speed_test '15863' '广西南宁' '移动' - speed_test '3784' '新疆乌鲁木齐' '移动' - speed_test '16858' '新疆乌鲁木齐' '移动' - speed_test '26938' '新疆乌鲁木齐5G' '移动' - speed_test '17228' '新疆伊犁' '移动' - speed_test '17227' '新疆和田' '移动' - speed_test '17245' '新疆喀什' '移动' - speed_test '17222' '新疆阿勒泰' '移动' - speed_test '21590' '江苏南京' '移动' - speed_test '27249' '江苏南京5G' '移动' - speed_test '21530' '江苏南通' '移动' - speed_test '21722' '江苏宿迁' '移动' - speed_test '21845' '江苏常州' '移动' - speed_test '22349' '江苏徐州' '移动' - speed_test '21600' '江苏扬州' '移动' - speed_test '5122' '江苏无锡' '移动' - speed_test '21973' '江苏无锡' '移动' - speed_test '26850' '江苏无锡5G' '移动' - speed_test '21642' '江苏泰州' '移动' - speed_test '22037' '江苏淮安' '移动' - speed_test '21946' '江苏盐城' '移动' - speed_test '3927' '江苏苏州' '移动' - speed_test '21472' '江苏苏州' '移动' - speed_test '21584' '江苏连云港' '移动' - speed_test '17320' '江苏镇江' '移动' - speed_test '16294' '江西南昌' '移动' - speed_test '16332' '江西南昌' '移动' - speed_test '25883' '江西南昌' '移动' - speed_test '17223' '河北石家庄' '移动' - speed_test '10939' '河南商丘' '移动' - speed_test '4486' '河南郑州' '移动' - speed_test '18970' '河南郑州' '移动' - speed_test '26331' '河南郑州5G' '移动' - speed_test '6715' '浙江宁波' '移动' - speed_test '4647' '浙江杭州' '移动' - speed_test '12278' '浙江杭州' '移动' - speed_test '16503' '海南海口' '移动' - speed_test '16395' '湖北武汉' '移动' - speed_test '26357' '湖北武汉' '移动' - speed_test '26547' '湖北武汉' '移动' - speed_test '15862' '湖南长沙' '移动' - speed_test '28491' '湖南长沙5G' '移动' - speed_test '16145' '甘肃兰州' '移动' - speed_test '16171' '福建福州' '移动' - speed_test '17494' '西藏拉萨' '移动' - speed_test '18444' '西藏拉萨' '移动' - speed_test '7404' '贵州贵阳' '移动' - speed_test '16398' '贵州贵阳' '移动' - speed_test '25728' '辽宁大连' '移动' - speed_test '16167' '辽宁沈阳' '移动' - speed_test '16409' '重庆' '移动' - speed_test '17584' '重庆' '移动' - speed_test '26380' '陕西西安' '移动' - speed_test '16915' '青海西宁' '移动' - speed_test '18504' '青海西宁' '移动' - speed_test '29083' '青海西宁5G' '移动' - speed_test '17437' '黑龙江哈尔滨' '移动' - speed_test '26656' '黑龙江哈尔滨5G' '移动' + speed_test '4665' '上海' '移动' + speed_test '16719' '上海' '移动' + speed_test '16803' '上海' '移动' + speed_test '25637' '上海5G' '移动' + speed_test '5892' '云南昆明' '移动' + speed_test '26728' '云南昆明' '移动' + speed_test '17085' '内蒙古呼和浩特' '移动' + speed_test '27019' '内蒙古呼和浩特' '移动' + speed_test '17230' '内蒙古阿拉善' '移动' + speed_test '4713' '北京' '移动' + speed_test '25858' '北京' '移动' + speed_test '16375' '吉林长春' '移动' + speed_test '4575' '四川成都' '移动' + speed_test '24337' '四川成都' '移动' + speed_test '28211' '四川成都' '移动' + speed_test '17184' '天津' '移动' + speed_test '16392' '宁夏银川' '移动' + speed_test '26940' '宁夏银川' '移动' + speed_test '4377' '安徽合肥' '移动' + speed_test '26404' '安徽合肥' '移动' + speed_test '17388' '山东临沂' '移动' + speed_test '16314' '山东济南' '移动' + speed_test '17480' '山东济南' '移动' + speed_test '25881' '山东济南' '移动' + speed_test '17432' '山东青岛' '移动' + speed_test '16005' '山西太原' '移动' + speed_test '6611' '广东广州' '移动' + speed_test '4515' '广东深圳' '移动' + speed_test '15863' '广西南宁' '移动' + speed_test '3784' '新疆乌鲁木齐' '移动' + speed_test '16858' '新疆乌鲁木齐' '移动' + speed_test '26938' '新疆乌鲁木齐5G' '移动' + speed_test '17228' '新疆伊犁' '移动' + speed_test '17227' '新疆和田' '移动' + speed_test '17245' '新疆喀什' '移动' + speed_test '17222' '新疆阿勒泰' '移动' + speed_test '21590' '江苏南京' '移动' + speed_test '27249' '江苏南京5G' '移动' + speed_test '21530' '江苏南通' '移动' + speed_test '21722' '江苏宿迁' '移动' + speed_test '21845' '江苏常州' '移动' + speed_test '22349' '江苏徐州' '移动' + speed_test '21600' '江苏扬州' '移动' + speed_test '5122' '江苏无锡' '移动' + speed_test '21973' '江苏无锡' '移动' + speed_test '26850' '江苏无锡5G' '移动' + speed_test '21642' '江苏泰州' '移动' + speed_test '22037' '江苏淮安' '移动' + speed_test '21946' '江苏盐城' '移动' + speed_test '3927' '江苏苏州' '移动' + speed_test '21472' '江苏苏州' '移动' + speed_test '21584' '江苏连云港' '移动' + speed_test '17320' '江苏镇江' '移动' + speed_test '16294' '江西南昌' '移动' + speed_test '16332' '江西南昌' '移动' + speed_test '25883' '江西南昌' '移动' + speed_test '17223' '河北石家庄' '移动' + speed_test '10939' '河南商丘' '移动' + speed_test '4486' '河南郑州' '移动' + speed_test '18970' '河南郑州' '移动' + speed_test '26331' '河南郑州5G' '移动' + speed_test '6715' '浙江宁波' '移动' + speed_test '4647' '浙江杭州' '移动' + speed_test '12278' '浙江杭州' '移动' + speed_test '16503' '海南海口' '移动' + speed_test '16395' '湖北武汉' '移动' + speed_test '26357' '湖北武汉' '移动' + speed_test '26547' '湖北武汉' '移动' + speed_test '15862' '湖南长沙' '移动' + speed_test '28491' '湖南长沙5G' '移动' + speed_test '16145' '甘肃兰州' '移动' + speed_test '16171' '福建福州' '移动' + speed_test '17494' '西藏拉萨' '移动' + speed_test '18444' '西藏拉萨' '移动' + speed_test '7404' '贵州贵阳' '移动' + speed_test '16398' '贵州贵阳' '移动' + speed_test '25728' '辽宁大连' '移动' + speed_test '16167' '辽宁沈阳' '移动' + speed_test '16409' '重庆' '移动' + speed_test '17584' '重庆' '移动' + speed_test '26380' '陕西西安' '移动' + speed_test '16915' '青海西宁' '移动' + speed_test '18504' '青海西宁' '移动' + speed_test '29083' '青海西宁5G' '移动' + speed_test '17437' '黑龙江哈尔滨' '移动' + speed_test '26656' '黑龙江哈尔滨5G' '移动' - end=$(date +%s) - rm -rf /tmp/speedtest.py - 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} 秒" + 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 $(date +%Y-%m-%d" "%H:%M:%S) fi - echo -ne "\n 当前时间: " - echo $(date +%Y-%m-%d" "%H:%M:%S) -fi \ No newline at end of file +} + +runall() { + checkroot; + checksystem; + checkpython; + checkcurl; + checkwget; + checkspeedtest; + clear + speed_test; + preinfo; + selecttest; + runtest; + rm -rf speedtest* +} + +runall From 0c823aa3e4b64427947943c66499f784451b7849 Mon Sep 17 00:00:00 2001 From: ernie Date: Thu, 9 Apr 2020 19:43:29 +0800 Subject: [PATCH 42/52] Add files via upload --- SuperSpeed.png | Bin 0 -> 106154 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 SuperSpeed.png diff --git a/SuperSpeed.png b/SuperSpeed.png new file mode 100644 index 0000000000000000000000000000000000000000..6dd550accb17c29598d7a30d322c471ea20938c6 GIT binary patch literal 106154 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 $S`(Q)iz<+-+#?Iybi3o3im` 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 Date: Thu, 9 Apr 2020 19:43:54 +0800 Subject: [PATCH 43/52] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 56e6f8d..cba545c 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ bash <(curl -Lso- https://git.io/superspeed) [查看全部节点列表](https://git.io/superspeedList) -![测速图](https://i.loli.net/2019/12/23/H8WtjGTgDqVsUaL.jpg) +![测速图](SuperSpeed.png) --- From e89b7d691adbd2c951065d167653ee90f8150597 Mon Sep 17 00:00:00 2001 From: ernie Date: Thu, 9 Apr 2020 19:46:14 +0800 Subject: [PATCH 44/52] Update README.md --- README.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/README.md b/README.md index cba545c..eb45d06 100644 --- a/README.md +++ b/README.md @@ -12,6 +12,4 @@ bash <(curl -Lso- https://git.io/superspeed) --- -Modified from Oldking's script. Original Info: -- Description: Test your server's network with Speedtest to China -- Copyright (C) 2018 Oldking +Modified from Oldking's script. From 528f9d0ce03abb4c9e1d40099cd3bc1e8026b415 Mon Sep 17 00:00:00 2001 From: ernie Date: Thu, 9 Apr 2020 20:16:55 +0800 Subject: [PATCH 45/52] =?UTF-8?q?=E9=87=8D=E5=86=99=E3=80=81=E6=9B=B4?= =?UTF-8?q?=E6=8D=A2=E6=B5=8B=E9=80=9F=E6=96=B9=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- superspeed.sh | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/superspeed.sh b/superspeed.sh index ac61cbe..0e001db 100644 --- a/superspeed.sh +++ b/superspeed.sh @@ -74,7 +74,7 @@ checkwget() { checkspeedtest() { if [ ! -e './speedtest-cli/speedtest' ]; then echo "正在安装 Speedtest-cli" - wget --no-check-certificate -qO speedtest.tgz https://cdn.jsdelivr.net/gh/oooldking/script@1.1.7/speedtest_cli/ookla-speedtest-1.0.0-$(uname -m)-linux.tgz > /dev/null 2>&1 + 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 fi mkdir -p speedtest-cli && tar zxvf speedtest.tgz -C ./speedtest-cli/ > /dev/null 2>&1 && chmod a+rx ./speedtest-cli/speedtest } @@ -115,11 +115,10 @@ preinfo() { } selecttest() { - echo -e " 选择测速类型: ${GREEN}1.${PLAIN} 三网测速 ${GREEN}3.${PLAIN} 电信节点测速" - echo -e " ${GREEN}2.${PLAIN} 取消本次测速 ${GREEN}4.${PLAIN} 联通节点测速" - echo -ne " ${GREEN}5.${PLAIN} 移动节点测速" + echo -e " 测速类型: ${GREEN}1.${PLAIN} 三网测速 ${GREEN}2.${PLAIN} 取消测速" + echo -ne " ${GREEN}3.${PLAIN} 电信节点 ${GREEN}4.${PLAIN} 联通节点 ${GREEN}5.${PLAIN} 移动节点" while :; do echo - read -p " 请输入数字选择: " selection + read -p " 请输入数字选择测速类型: " selection if [[ ! $selection =~ ^[1-5]$ ]]; then echo -ne " ${RED}输入错误${PLAIN}, 请输入正确的数字!" else From 7171e7f69ad756811858ddab17c5f11dd5f11ef2 Mon Sep 17 00:00:00 2001 From: ernie Date: Thu, 9 Apr 2020 20:21:01 +0800 Subject: [PATCH 46/52] Update README.md --- README.md | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index eb45d06..88cb36a 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ -## Superspeed -Superspeed.sh with updated server lists. +## Superspeed.sh[1](#脚注1) +使用全国各地三大运营商[2](#脚注2)的 speedtest 测速节点进行全面的测速[3](#脚注3) -## Usage +## 使用方法 ``` bash <(curl -Lso- https://git.io/superspeed) ``` @@ -12,4 +12,8 @@ bash <(curl -Lso- https://git.io/superspeed) --- -Modified from Oldking's script. +1: Modified from Oldking's script + +2: 仅包括中国大陆地区电信、联通、移动节点 + +3: 使用 [ookla](https://bintray.com/ookla/download/download_file?file_path=ookla-speedtest-1.0.0-x86_64-linux.tgz) 提供的测速程序 From 9c81e9407255738a77abe946d5f6ab281ce3e155 Mon Sep 17 00:00:00 2001 From: ernie Date: Thu, 9 Apr 2020 23:51:20 +0800 Subject: [PATCH 47/52] =?UTF-8?q?=E9=87=8D=E5=86=99=E3=80=81=E6=9B=B4?= =?UTF-8?q?=E6=8D=A2=E6=B5=8B=E9=80=9F=E6=96=B9=E5=BC=8F=E3=80=81=E6=9B=B4?= =?UTF-8?q?=E6=96=B0=E6=B5=8B=E9=80=9F=E8=8A=82=E7=82=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- superspeed.sh | 350 ++++++++++++-------------------------------------- 1 file changed, 85 insertions(+), 265 deletions(-) diff --git a/superspeed.sh b/superspeed.sh index 0e001db..943701b 100644 --- a/superspeed.sh +++ b/superspeed.sh @@ -110,7 +110,7 @@ preinfo() { echo "———————————————————SuperSpeed 全面测速版——————————————————" echo " bash <(curl -Lso- https://git.io/superspeed)" echo " 全部节点列表: https://git.io/superspeedList" - echo " 节点更新: 2019/12/23 | 脚本更新: 2020/04/09" + echo " 节点更新: 2020/04/09 | 脚本更新: 2020/04/09" echo "——————————————————————————————————————————————————————————" } @@ -136,186 +136,96 @@ runtest() { start=$(date +%s) speed_test '3633' '上海' '电信' - speed_test '28139' '上海5G' '电信' - speed_test '6168' '云南昆明' '电信' - speed_test '27539' '云南昆明5G' '电信' speed_test '24012' '内蒙古呼和浩特' '电信' - speed_test '21470' '内蒙古鄂尔多斯' '电信' - # speed_test '4751' '北京' '电信' speed_test '27377' '北京5G' '电信' - speed_test '4624' '四川成都' '电信' - speed_test '6714' '天津' '电信' - speed_test '17145' '安徽合肥' '电信' - # speed_test '9151' '广东广州' '电信' - # speed_test '10775' '广东广州' '电信' - # speed_test '17251' '广东广州' '电信' + speed_test '29026' '四川成都' '电信' + # speed_test '29071' '四川成都' '电信' + speed_test '17145' '安徽合肥5G' '电信' speed_test '27594' '广东广州5G' '电信' - speed_test '5081' '广东深圳' '电信' - speed_test '10192' '广西南宁' '电信' - speed_test '10305' '广西南宁' '电信' - speed_test '22724' '广西南宁' '电信' - speed_test '27810' '广西南宁' '电信' - speed_test '27304' '新疆乌鲁木齐' '电信' + # speed_test '27810' '广西南宁' '电信' speed_test '27575' '新疆乌鲁木齐' '电信' - # speed_test '5316' '江苏南京' '电信' - speed_test '26352' '江苏南京5G' '电信' - speed_test '5324' '江苏徐州' '电信' - speed_test '5396' '江苏苏州' '电信' - # speed_test '5317' '江苏连云港' '电信' - speed_test '6345' '江西南昌' '电信' - speed_test '6473' '江西南昌' '电信' - speed_test '7643' '江西南昌' '电信' - speed_test '16399' '江西南昌' '电信' - speed_test '4595' '河南郑州' '电信' - speed_test '7509' '浙江杭州' '电信' - speed_test '20038' '湖北武汉' '电信' - speed_test '23665' '湖北武汉' '电信' - speed_test '23844' '湖北武汉' '电信' - speed_test '24011' '湖北武汉' '电信' - speed_test '6435' '湖北襄阳' '电信' - speed_test '12637' '湖北襄阳' '电信' - speed_test '6132' '湖南长沙' '电信' - speed_test '28225' '湖南长沙' '电信' + # speed_test '26352' '江苏南京5G' '电信' + speed_test '5396' '江苏苏州5G' '电信' + # speed_test '5317' '江苏连云港5G' '电信' + # speed_test '7509' '浙江杭州' '电信' + # speed_test '23844' '湖北武汉' '电信' + speed_test '29353' '湖北武汉5G' '电信' + speed_test '28225' '湖南长沙5G' '电信' speed_test '3973' '甘肃兰州' '电信' - speed_test '6592' '重庆' '电信' - speed_test '16983' '重庆' '电信' - speed_test '19076' '重庆' '电信' - speed_test '19918' '青海西宁' '电信' - - # speed_test '5083' '上海' '联通' + # speed_test '19076' '重庆' '电信' + #*** # speed_test '21005' '上海' '联通' speed_test '24447' '上海5G' '联通' - speed_test '5103' '云南昆明' '联通' - speed_test '5465' '内蒙古呼和浩特' '联通' - speed_test '5145' '北京' '联通' + # speed_test '5103' '云南昆明' '联通' + # speed_test '5145' '北京' '联通' # speed_test '5505' '北京' '联通' - # speed_test '18462' '北京' '联通' - speed_test '9484' '吉林长春' '联通' - # speed_test '10742' '吉林长春' '联通' + # speed_test '9484' '吉林长春' '联通' speed_test '2461' '四川成都' '联通' - # speed_test '5475' '天津' '联通' speed_test '27154' '天津5G' '联通' - # speed_test '5509' '宁夏' '联通' - speed_test '5724' '安徽合肥' '联通' - # speed_test '5039' '山东济南' '联通' - # speed_test '12538' '山东济南' '联通' + # speed_test '5509' '宁夏银川' '联通' + # speed_test '5724' '安徽合肥' '联通' + speed_test '5039' '山东济南' '联通' speed_test '26180' '山东济南5G' '联通' - # speed_test '5710' '山东青岛' '联通' - speed_test '12516' '山西太原' '联通' - speed_test '12868' '山西太原' '联通' - speed_test '19736' '山西太原' '联通' - # speed_test '3891' '广东广州' '联通' speed_test '26678' '广东广州5G' '联通' - speed_test '10201' '广东深圳' '联通' - speed_test '5674' '广西南宁' '联通' - speed_test '6144' '新疆乌鲁木齐' '联通' - speed_test '5446' '江苏南京' '联通' - speed_test '13704' '江苏南京' '联通' - speed_test '5097' '江西南昌' '联通' - speed_test '7230' '江西南昌' '联通' - speed_test '5131' '河南郑州' '联通' - speed_test '6810' '河南郑州' '联通' - speed_test '6245' '浙江宁波' '联通' - speed_test '5300' '浙江杭州' '联通' - speed_test '5985' '海南海口' '联通' + speed_test '16192' '广东深圳' '联通' + # speed_test '6144' '新疆乌鲁木齐' '联通' + # speed_test '13704' '江苏南京' '联通' speed_test '5485' '湖北武汉' '联通' # speed_test '26677' '湖南株洲' '联通' - # speed_test '4870' '湖南长沙' '联通' - speed_test '4690' '甘肃兰州' '联通' - speed_test '5506' '福建厦门' '联通' - speed_test '4884' '福建福州' '联通' - speed_test '5750' '西藏拉萨' '联通' - speed_test '5017' '辽宁沈阳' '联通' - speed_test '5726' '重庆' '联通' - speed_test '5992' '青海西宁' '联通' - speed_test '5460' '黑龙江哈尔滨' '联通' - - # speed_test '4665' '上海' '移动' - # speed_test '16719' '上海' '移动' - # speed_test '16803' '上海' '移动' - speed_test '25637' '上海5G' '移动' - # speed_test '5892' '云南昆明' '移动' + speed_test '4870' '湖南长沙' '联通' + # speed_test '4690' '甘肃兰州' '联通' + # speed_test '4884' '福建福州' '联通' + # speed_test '31985' '重庆' '联通' + speed_test '4863' '陕西西安' '联通' + #*** + # speed_test '30154' '上海' '移动' + # speed_test '25637' '上海5G' '移动' # speed_test '26728' '云南昆明' '移动' - # speed_test '17085' '内蒙古呼和浩特' '移动' # speed_test '27019' '内蒙古呼和浩特' '移动' - # speed_test '17230' '内蒙古阿拉善' '移动' - # speed_test '4713' '北京' '移动' - # speed_test '25858' '北京' '移动' + speed_test '30232' '内蒙呼和浩特5G' '移动' + # speed_test '30293' '内蒙古通辽5G' '移动' + speed_test '25858' '北京' '移动' speed_test '16375' '吉林长春' '移动' - # speed_test '4575' '四川成都' '移动' - speed_test '24337' '四川成都' '移动' - # speed_test '28211' '四川成都' '移动' - speed_test '17184' '天津' '移动' - # speed_test '16392' '宁夏银川' '移动' + # speed_test '24337' '四川成都' '移动' + speed_test '17184' '天津5G' '移动' # speed_test '26940' '宁夏银川' '移动' - # speed_test '4377' '安徽合肥' '移动' - # speed_test '26404' '安徽合肥' '移动' - # speed_test '17388' '山东临沂' '移动' - # speed_test '16314' '山东济南' '移动' - # speed_test '17480' '山东济南' '移动' - speed_test '25881' '山东济南' '移动' - # speed_test '17432' '山东青岛' '移动' - # speed_test '16005' '山西太原' '移动' + # speed_test '31815' '宁夏银川' '移动' + # speed_test '26404' '安徽合肥5G' '移动' + speed_test '27151' '山东临沂5G' '移动' + # speed_test '25881' '山东济南5G' '移动' + # speed_test '27100' '山东青岛5G' '移动' + # speed_test '26501' '山西太原5G' '移动' + speed_test '31520' '广东中山' '移动' # speed_test '6611' '广东广州' '移动' - speed_test '4515' '广东深圳' '移动' - speed_test '15863' '广西南宁' '移动' - # speed_test '3784' '新疆乌鲁木齐' '移动' + # speed_test '4515' '广东深圳' '移动' + # speed_test '15863' '广西南宁' '移动' # speed_test '16858' '新疆乌鲁木齐' '移动' speed_test '26938' '新疆乌鲁木齐5G' '移动' - # speed_test '17228' '新疆伊犁' '移动' # speed_test '17227' '新疆和田' '移动' # speed_test '17245' '新疆喀什' '移动' # speed_test '17222' '新疆阿勒泰' '移动' - # speed_test '21590' '江苏南京' '移动' # speed_test '27249' '江苏南京5G' '移动' - # speed_test '21530' '江苏南通' '移动' - # speed_test '21722' '江苏宿迁' '移动' - # speed_test '21845' '江苏常州' '移动' - # speed_test '22349' '江苏徐州' '移动' - # speed_test '21600' '江苏扬州' '移动' - # speed_test '5122' '江苏无锡' '移动' - # speed_test '21973' '江苏无锡' '移动' + # speed_test '21845' '江苏常州5G' '移动' # speed_test '26850' '江苏无锡5G' '移动' - # speed_test '21642' '江苏泰州' '移动' - # speed_test '22037' '江苏淮安' '移动' - # speed_test '21946' '江苏盐城' '移动' - # speed_test '3927' '江苏苏州' '移动' - # speed_test '21472' '江苏苏州' '移动' - # speed_test '21584' '江苏连云港' '移动' - # speed_test '17320' '江苏镇江' '移动' - # speed_test '16294' '江西南昌' '移动' - # speed_test '16332' '江西南昌' '移动' - # speed_test '25883' '江西南昌' '移动' + # speed_test '17320' '江苏镇江5G' '移动' + speed_test '25883' '江西南昌5G' '移动' # speed_test '17223' '河北石家庄' '移动' - # speed_test '10939' '河南商丘' '移动' - # speed_test '4486' '河南郑州' '移动' - # speed_test '18970' '河南郑州' '移动' # speed_test '26331' '河南郑州5G' '移动' - speed_test '6715' '浙江宁波' '移动' + # speed_test '6715' '浙江宁波5G' '移动' # speed_test '4647' '浙江杭州' '移动' - # speed_test '12278' '浙江杭州' '移动' - speed_test '16503' '海南海口' '移动' - # speed_test '16395' '湖北武汉' '移动' - # speed_test '26357' '湖北武汉' '移动' - # speed_test '26547' '湖北武汉' '移动' - # speed_test '15862' '湖南长沙' '移动' + # speed_test '16503' '海南海口' '移动' # speed_test '28491' '湖南长沙5G' '移动' # speed_test '16145' '甘肃兰州' '移动' - # speed_test '16171' '福建福州' '移动' - # speed_test '17494' '西藏拉萨' '移动' + speed_test '16171' '福建福州' '移动' # speed_test '18444' '西藏拉萨' '移动' - # speed_test '7404' '贵州贵阳' '移动' speed_test '16398' '贵州贵阳' '移动' - # speed_test '25728' '辽宁大连' '移动' + speed_test '25728' '辽宁大连' '移动' # speed_test '16167' '辽宁沈阳' '移动' - # speed_test '16409' '重庆' '移动' - speed_test '17584' '重庆' '移动' + # speed_test '17584' '重庆' '移动' # speed_test '26380' '陕西西安' '移动' - # speed_test '16915' '青海西宁' '移动' - # speed_test '18504' '青海西宁' '移动' - speed_test '29083' '青海西宁5G' '移动' - # speed_test '17437' '黑龙江哈尔滨' '移动' - speed_test '26656' '黑龙江哈尔滨5G' '移动' + # speed_test '29105' '陕西西安5G' '移动' + # speed_test '29083' '青海西宁5G' '移动' + # speed_test '26656' '黑龙江哈尔滨' '移动' end=$(date +%s) rm -rf speedtest* @@ -340,51 +250,23 @@ runtest() { start=$(date +%s) speed_test '3633' '上海' '电信' - speed_test '28139' '上海5G' '电信' - speed_test '6168' '云南昆明' '电信' - speed_test '27539' '云南昆明5G' '电信' speed_test '24012' '内蒙古呼和浩特' '电信' - speed_test '21470' '内蒙古鄂尔多斯' '电信' - speed_test '4751' '北京' '电信' speed_test '27377' '北京5G' '电信' - speed_test '4624' '四川成都' '电信' - speed_test '6714' '天津' '电信' - speed_test '17145' '安徽合肥' '电信' - speed_test '9151' '广东广州' '电信' - speed_test '10775' '广东广州' '电信' - speed_test '17251' '广东广州' '电信' + speed_test '29026' '四川成都' '电信' + speed_test '29071' '四川成都' '电信' + speed_test '17145' '安徽合肥5G' '电信' speed_test '27594' '广东广州5G' '电信' - speed_test '5081' '广东深圳' '电信' - speed_test '10192' '广西南宁' '电信' - speed_test '10305' '广西南宁' '电信' - speed_test '22724' '广西南宁' '电信' speed_test '27810' '广西南宁' '电信' - speed_test '27304' '新疆乌鲁木齐' '电信' speed_test '27575' '新疆乌鲁木齐' '电信' - speed_test '5316' '江苏南京' '电信' speed_test '26352' '江苏南京5G' '电信' - speed_test '5324' '江苏徐州' '电信' - speed_test '5396' '江苏苏州' '电信' - speed_test '5317' '江苏连云港' '电信' - speed_test '6345' '江西南昌' '电信' - speed_test '6473' '江西南昌' '电信' - speed_test '7643' '江西南昌' '电信' - speed_test '16399' '江西南昌' '电信' - speed_test '4595' '河南郑州' '电信' + speed_test '5396' '江苏苏州5G' '电信' + speed_test '5317' '江苏连云港5G' '电信' speed_test '7509' '浙江杭州' '电信' - speed_test '20038' '湖北武汉' '电信' - speed_test '23665' '湖北武汉' '电信' speed_test '23844' '湖北武汉' '电信' - speed_test '24011' '湖北武汉' '电信' - speed_test '6435' '湖北襄阳' '电信' - speed_test '12637' '湖北襄阳' '电信' - speed_test '6132' '湖南长沙' '电信' - speed_test '28225' '湖南长沙' '电信' + speed_test '29353' '湖北武汉5G' '电信' + speed_test '28225' '湖南长沙5G' '电信' speed_test '3973' '甘肃兰州' '电信' - speed_test '6592' '重庆' '电信' - speed_test '16983' '重庆' '电信' speed_test '19076' '重庆' '电信' - speed_test '19918' '青海西宁' '电信' end=$(date +%s) rm -rf speedtest* @@ -406,53 +288,29 @@ runtest() { echo "ID 测速服务器信息 上传/Mbps 下载/Mbps 延迟/ms" start=$(date +%s) - speed_test '5083' '上海' '联通' speed_test '21005' '上海' '联通' speed_test '24447' '上海5G' '联通' speed_test '5103' '云南昆明' '联通' - speed_test '5465' '内蒙古呼和浩特' '联通' speed_test '5145' '北京' '联通' speed_test '5505' '北京' '联通' - speed_test '18462' '北京' '联通' speed_test '9484' '吉林长春' '联通' - speed_test '10742' '吉林长春' '联通' speed_test '2461' '四川成都' '联通' - speed_test '5475' '天津' '联通' speed_test '27154' '天津5G' '联通' - speed_test '5509' '宁夏' '联通' + speed_test '5509' '宁夏银川' '联通' speed_test '5724' '安徽合肥' '联通' speed_test '5039' '山东济南' '联通' - speed_test '12538' '山东济南' '联通' speed_test '26180' '山东济南5G' '联通' - speed_test '5710' '山东青岛' '联通' - speed_test '12516' '山西太原' '联通' - speed_test '12868' '山西太原' '联通' - speed_test '19736' '山西太原' '联通' - speed_test '3891' '广东广州' '联通' - speed_test '26678' '广东广州' '联通' - speed_test '10201' '广东深圳' '联通' - speed_test '5674' '广西南宁' '联通' + speed_test '26678' '广东广州5G' '联通' + speed_test '16192' '广东深圳' '联通' speed_test '6144' '新疆乌鲁木齐' '联通' - speed_test '5446' '江苏南京' '联通' speed_test '13704' '江苏南京' '联通' - speed_test '5097' '江西南昌' '联通' - speed_test '7230' '江西南昌' '联通' - speed_test '5131' '河南郑州' '联通' - speed_test '6810' '河南郑州' '联通' - speed_test '6245' '浙江宁波' '联通' - speed_test '5300' '浙江杭州' '联通' - speed_test '5985' '海南海口' '联通' speed_test '5485' '湖北武汉' '联通' speed_test '26677' '湖南株洲' '联通' speed_test '4870' '湖南长沙' '联通' speed_test '4690' '甘肃兰州' '联通' - speed_test '5506' '福建厦门' '联通' speed_test '4884' '福建福州' '联通' - speed_test '5750' '西藏拉萨' '联通' - speed_test '5017' '辽宁沈阳' '联通' - speed_test '5726' '重庆' '联通' - speed_test '5992' '青海西宁' '联通' - speed_test '5460' '黑龙江哈尔滨' '联通' + speed_test '31985' '重庆' '联通' + speed_test '4863' '陕西西安' '联通' end=$(date +%s) rm -rf speedtest* @@ -474,92 +332,54 @@ runtest() { echo "ID 测速服务器信息 上传/Mbps 下载/Mbps 延迟/ms" start=$(date +%s) - speed_test '4665' '上海' '移动' - speed_test '16719' '上海' '移动' - speed_test '16803' '上海' '移动' + speed_test '30154' '上海' '移动' speed_test '25637' '上海5G' '移动' - speed_test '5892' '云南昆明' '移动' speed_test '26728' '云南昆明' '移动' - speed_test '17085' '内蒙古呼和浩特' '移动' speed_test '27019' '内蒙古呼和浩特' '移动' - speed_test '17230' '内蒙古阿拉善' '移动' - speed_test '4713' '北京' '移动' + speed_test '30232' '内蒙呼和浩特5G' '移动' + speed_test '30293' '内蒙古通辽5G' '移动' speed_test '25858' '北京' '移动' speed_test '16375' '吉林长春' '移动' - speed_test '4575' '四川成都' '移动' speed_test '24337' '四川成都' '移动' - speed_test '28211' '四川成都' '移动' - speed_test '17184' '天津' '移动' - speed_test '16392' '宁夏银川' '移动' + speed_test '17184' '天津5G' '移动' speed_test '26940' '宁夏银川' '移动' - speed_test '4377' '安徽合肥' '移动' - speed_test '26404' '安徽合肥' '移动' - speed_test '17388' '山东临沂' '移动' - speed_test '16314' '山东济南' '移动' - speed_test '17480' '山东济南' '移动' - speed_test '25881' '山东济南' '移动' - speed_test '17432' '山东青岛' '移动' - speed_test '16005' '山西太原' '移动' + speed_test '31815' '宁夏银川' '移动' + speed_test '26404' '安徽合肥5G' '移动' + speed_test '27151' '山东临沂5G' '移动' + speed_test '25881' '山东济南5G' '移动' + speed_test '27100' '山东青岛5G' '移动' + speed_test '26501' '山西太原5G' '移动' + speed_test '31520' '广东中山' '移动' speed_test '6611' '广东广州' '移动' speed_test '4515' '广东深圳' '移动' speed_test '15863' '广西南宁' '移动' - speed_test '3784' '新疆乌鲁木齐' '移动' speed_test '16858' '新疆乌鲁木齐' '移动' speed_test '26938' '新疆乌鲁木齐5G' '移动' - speed_test '17228' '新疆伊犁' '移动' speed_test '17227' '新疆和田' '移动' speed_test '17245' '新疆喀什' '移动' speed_test '17222' '新疆阿勒泰' '移动' - speed_test '21590' '江苏南京' '移动' speed_test '27249' '江苏南京5G' '移动' - speed_test '21530' '江苏南通' '移动' - speed_test '21722' '江苏宿迁' '移动' - speed_test '21845' '江苏常州' '移动' - speed_test '22349' '江苏徐州' '移动' - speed_test '21600' '江苏扬州' '移动' - speed_test '5122' '江苏无锡' '移动' - speed_test '21973' '江苏无锡' '移动' + speed_test '21845' '江苏常州5G' '移动' speed_test '26850' '江苏无锡5G' '移动' - speed_test '21642' '江苏泰州' '移动' - speed_test '22037' '江苏淮安' '移动' - speed_test '21946' '江苏盐城' '移动' - speed_test '3927' '江苏苏州' '移动' - speed_test '21472' '江苏苏州' '移动' - speed_test '21584' '江苏连云港' '移动' - speed_test '17320' '江苏镇江' '移动' - speed_test '16294' '江西南昌' '移动' - speed_test '16332' '江西南昌' '移动' - speed_test '25883' '江西南昌' '移动' + speed_test '17320' '江苏镇江5G' '移动' + speed_test '25883' '江西南昌5G' '移动' speed_test '17223' '河北石家庄' '移动' - speed_test '10939' '河南商丘' '移动' - speed_test '4486' '河南郑州' '移动' - speed_test '18970' '河南郑州' '移动' speed_test '26331' '河南郑州5G' '移动' - speed_test '6715' '浙江宁波' '移动' + speed_test '6715' '浙江宁波5G' '移动' speed_test '4647' '浙江杭州' '移动' - speed_test '12278' '浙江杭州' '移动' speed_test '16503' '海南海口' '移动' - speed_test '16395' '湖北武汉' '移动' - speed_test '26357' '湖北武汉' '移动' - speed_test '26547' '湖北武汉' '移动' - speed_test '15862' '湖南长沙' '移动' speed_test '28491' '湖南长沙5G' '移动' speed_test '16145' '甘肃兰州' '移动' speed_test '16171' '福建福州' '移动' - speed_test '17494' '西藏拉萨' '移动' speed_test '18444' '西藏拉萨' '移动' - speed_test '7404' '贵州贵阳' '移动' speed_test '16398' '贵州贵阳' '移动' speed_test '25728' '辽宁大连' '移动' speed_test '16167' '辽宁沈阳' '移动' - speed_test '16409' '重庆' '移动' speed_test '17584' '重庆' '移动' speed_test '26380' '陕西西安' '移动' - speed_test '16915' '青海西宁' '移动' - speed_test '18504' '青海西宁' '移动' + speed_test '29105' '陕西西安5G' '移动' speed_test '29083' '青海西宁5G' '移动' - speed_test '17437' '黑龙江哈尔滨' '移动' - speed_test '26656' '黑龙江哈尔滨5G' '移动' + speed_test '26656' '黑龙江哈尔滨' '移动' end=$(date +%s) rm -rf speedtest* From 7a133657e208fc4066d7e98d7646375877c49116 Mon Sep 17 00:00:00 2001 From: ernie Date: Thu, 9 Apr 2020 23:51:52 +0800 Subject: [PATCH 48/52] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E6=B5=8B=E9=80=9F?= =?UTF-8?q?=E8=8A=82=E7=82=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ServerList.md | 297 +++++++++++++++++--------------------------------- 1 file changed, 100 insertions(+), 197 deletions(-) diff --git a/ServerList.md b/ServerList.md index 55382fa..fea03db 100644 --- a/ServerList.md +++ b/ServerList.md @@ -1,204 +1,107 @@ -更新日期:2019/12/23 +更新日期:2020/04/09 -注:在“三网全面测速”中,为了避免三网测试数量不均以及测试时长过久,每部分并未采用所有节点,如果需要全部检测,可以选择三网单独检测。 +注:在“三网测速”中,为了避免三网测试数量不均以及测试时长过久,每部分并未采用所有节点,如果需要全部检测,可以选择三网单独检测。 - +电信: - - - -
电信节点联通节点移动节点
+| 服务器ID | 运营商 | 位置 | +| ----- | ---- | -------------- | +| 3633 | 电信 | 上海 | +| 3973 | 电信 | 甘肃兰州 | +| 5317 | 电信 | 江苏连云港5G | +| 5396 | 电信 | 江苏苏州5G | +| 7509 | 电信 | 浙江杭州 | +| 17145 | 电信 | 安徽合肥5G | +| 19076 | 电信 | 重庆 | +| 23844 | 电信 | 湖北武汉 | +| 24012 | 电信 | 内蒙古呼和浩特 | +| 26352 | 电信 | 江苏南京5G | +| 27377 | 电信 | 北京5G | +| 27575 | 电信 | 新疆乌鲁木齐 | +| 27594 | 电信 | 广东广州5G | +| 27810 | 电信 | 广西南宁 | +| 28225 | 电信 | 湖南长沙5G | +| 29026 | 电信 | 四川成都 | +| 29071 | 电信 | 四川成都 | +| 29353 | 电信 | 湖北武汉5G | -| 服务器ID | 位置 | -| -------- | -------------- | -| 3633 | 上海 | -| 28139 | 上海5G | -| 6168 | 云南昆明 | -| 27539 | 云南昆明5G | -| 24012 | 内蒙古呼和浩特 | -| 21470 | 内蒙古鄂尔多斯 | -| 4751 | 北京 | -| 27377 | 北京5G | -| 4624 | 四川成都 | -| 6714 | 天津 | -| 17145 | 安徽安徽合肥 | -| 9151 | 广东广州 | -| 10775 | 广东广州 | -| 17251 | 广东广州 | -| 27594 | 广东广州5G | -| 5081 | 广东深圳 | -| 10192 | 广西南宁 | -| 10305 | 广西南宁 | -| 22724 | 广西南宁 | -| 27810 | 广西南宁 | -| 27304 | 新疆乌鲁木齐 | -| 27575 | 新疆乌鲁木齐 | -| 5316 | 江苏南京 | -| 26352 | 江苏南京5G | -| 5324 | 江苏徐州 | -| 5396 | 江苏苏州 | -| 5317 | 江苏连云港 | -| 6345 | 江西南昌 | -| 6473 | 江西南昌 | -| 7643 | 江西南昌 | -| 16399 | 江西南昌 | -| 4595 | 河南郑州 | -| 7509 | 浙江杭州 | -| 20038 | 湖北武汉 | -| 23665 | 湖北武汉 | -| 23844 | 湖北武汉 | -| 24011 | 湖北武汉 | -| 6435 | 湖北襄阳 | -| 12637 | 湖北襄阳 | -| 6132 | 湖南长沙 | -| 28225 | 湖南长沙 | -| 3973 | 甘肃兰州 | -| 6592 | 重庆 | -| 16983 | 重庆 | -| 19076 | 重庆 | -| 19918 | 青海西宁 | +联通: - +| 服务器ID | 运营商 | 位置 | +| ----- | ---- | -------------- | +| 2461 | 联通 | 四川成都 | +| 4690 | 联通 | 甘肃兰州 | +| 4863 | 联通 | 陕西西安 | +| 4870 | 联通 | 湖南长沙 | +| 4884 | 联通 | 福建福州 | +| 5039 | 联通 | 山东济南 | +| 5103 | 联通 | 云南昆明 | +| 5145 | 联通 | 北京 | +| 5485 | 联通 | 湖北武汉 | +| 5505 | 联通 | 北京 | +| 5509 | 联通 | 宁夏银川 | +| 5724 | 联通 | 安徽合肥 | +| 6144 | 联通 | 新疆乌鲁木齐 | +| 9484 | 联通 | 吉林长春 | +| 13704 | 联通 | 江苏南京 | +| 16192 | 联通 | 广东深圳 | +| 21005 | 联通 | 上海 | +| 24447 | 联通 | 上海5G | +| 26180 | 联通 | 山东济南5G | +| 26677 | 联通 | 湖南株洲 | +| 26678 | 联通 | 广东广州5G | +| 27154 | 联通 | 天津5G | +| 31985 | 联通 | 重庆 | -| 服务器ID | 位置 | -| -------- | -------------- | -| 5083 | 上海 | -| 21005 | 上海 | -| 24447 | 上海5G | -| 5103 | 云南昆明 | -| 5465 | 内蒙古呼和浩特 | -| 5145 | 北京 | -| 5505 | 北京 | -| 18462 | 北京 | -| 9484 | 吉林长春 | -| 10742 | 吉林长春 | -| 2461 | 四川成都 | -| 5475 | 天津 | -| 27154 | 天津5G | -| 5509 | 宁夏 | -| 5724 | 安徽合肥 | -| 5039 | 山东济南 | -| 12538 | 山东济南 | -| 26180 | 山东济南5G | -| 5710 | 山东青岛 | -| 12516 | 山西太原 | -| 12868 | 山西太原 | -| 19736 | 山西太原 | -| 3891 | 广东广州 | -| 26678 | 广东广州5G | -| 10201 | 广东深圳 | -| 5674 | 广西南宁 | -| 6144 | 新疆乌鲁木齐 | -| 5446 | 江苏南京 | -| 13704 | 江苏南京 | -| 5097 | 江西南昌 | -| 7230 | 江西南昌 | -| 5131 | 河南郑州 | -| 6810 | 河南郑州 | -| 6245 | 浙江宁波 | -| 5300 | 浙江杭州 | -| 5985 | 海南海口 | -| 5485 | 湖北武汉 | -| 26677 | 湖南株洲 | -| 4870 | 湖南长沙 | -| 4690 | 甘肃兰州 | -| 5506 | 福建厦门 | -| 4884 | 福建福州 | -| 5750 | 西藏拉萨 | -| 5017 | 辽宁沈阳 | -| 5726 | 重庆 | -| 5992 | 青海西宁 | -| 5460 | 黑龙江哈尔滨 | +移动: - - -| 服务器ID | 位置 | -| -------- | ---------------- | -| 4665 | 上海 | -| 16719 | 上海 | -| 16803 | 上海 | -| 25637 | 上海5G | -| 5892 | 云南昆明 | -| 26728 | 云南昆明 | -| 17085 | 内蒙古呼和浩特 | -| 27019 | 内蒙古呼和浩特 | -| 17230 | 内蒙古阿拉善 | -| 4713 | 北京 | -| 25858 | 北京 | -| 16375 | 吉林长春 | -| 4575 | 四川成都 | -| 24337 | 四川成都 | -| 28211 | 四川成都 | -| 17184 | 天津 | -| 16392 | 宁夏银川 | -| 26940 | 宁夏银川 | -| 4377 | 安徽合肥 | -| 26404 | 安徽合肥 | -| 17388 | 山东临沂 | -| 16314 | 山东济南 | -| 17480 | 山东济南 | -| 25881 | 山东济南 | -| 17432 | 山东青岛 | -| 16005 | 山西太原 | -| 6611 | 广东广州 | -| 4515 | 广东深圳 | -| 15863 | 广西南宁 | -| 3784 | 新疆乌鲁木齐 | -| 16858 | 新疆乌鲁木齐 | -| 26938 | 新疆乌鲁木齐5G | -| 17228 | 新疆伊犁 | -| 17227 | 新疆和田 | -| 17245 | 新疆喀什 | -| 17222 | 新疆阿勒泰 | -| 21590 | 江苏南京 | -| 27249 | 江苏南京5G | -| 21530 | 江苏南通 | -| 21722 | 江苏宿迁 | -| 21845 | 江苏常州 | -| 22349 | 江苏徐州 | -| 21600 | 江苏扬州 | -| 5122 | 江苏无锡 | -| 21973 | 江苏无锡 | -| 26850 | 江苏无锡5G | -| 21642 | 江苏泰州 | -| 22037 | 江苏淮安 | -| 21946 | 江苏盐城 | -| 3927 | 江苏苏州 | -| 21472 | 江苏苏州 | -| 21584 | 江苏连云港 | -| 17320 | 江苏镇江 | -| 16294 | 江西南昌 | -| 16332 | 江西南昌 | -| 25883 | 江西南昌 | -| 17223 | 河北石家庄 | -| 10939 | 河南商丘 | -| 4486 | 河南郑州 | -| 18970 | 河南郑州 | -| 26331 | 河南郑州5G | -| 6715 | 浙江宁波 | -| 4647 | 浙江杭州 | -| 12278 | 浙江杭州 | -| 16503 | 海南海口 | -| 16395 | 湖北武汉 | -| 26357 | 湖北武汉 | -| 26547 | 湖北武汉 | -| 15862 | 湖南长沙 | -| 28491 | 湖南长沙5G | -| 16145 | 甘肃兰州 | -| 16171 | 福建福州 | -| 17494 | 西藏拉萨 | -| 18444 | 西藏拉萨 | -| 7404 | 贵州贵阳 | -| 16398 | 贵州贵阳 | -| 25728 | 辽宁大连 | -| 16167 | 辽宁沈阳 | -| 16409 | 重庆 | -| 17584 | 重庆 | -| 26380 | 陕西西安 | -| 16915 | 青海西宁 | -| 18504 | 青海西宁 | -| 29083 | 青海西宁5G | -| 17437 | 黑龙江哈尔滨 | -| 26656 | 黑龙江哈尔滨5G | - -
+| 服务器ID | 运营商 | 位置 | +| ----- | ---- | ------------------ | +| 4515 | 移动 | 广东深圳 | +| 4647 | 移动 | 浙江杭州 | +| 6611 | 移动 | 广东广州 | +| 6715 | 移动 | 浙江宁波5G | +| 15863 | 移动 | 广西南宁 | +| 16145 | 移动 | 甘肃兰州 | +| 16167 | 移动 | 辽宁沈阳 | +| 16171 | 移动 | 福建福州 | +| 16375 | 移动 | 吉林长春 | +| 16398 | 移动 | 贵州贵阳 | +| 16503 | 移动 | 海南海口 | +| 16858 | 移动 | 新疆乌鲁木齐 | +| 17184 | 移动 | 天津5G | +| 17222 | 移动 | 新疆阿勒泰 | +| 17223 | 移动 | 河北石家庄 | +| 17227 | 移动 | 新疆和田 | +| 17245 | 移动 | 新疆喀什 | +| 17320 | 移动 | 江苏镇江5G | +| 17584 | 移动 | 重庆 | +| 18444 | 移动 | 西藏拉萨 | +| 21845 | 移动 | 江苏常州5G | +| 24337 | 移动 | 四川成都 | +| 25637 | 移动 | 上海5G | +| 25728 | 移动 | 辽宁大连 | +| 25858 | 移动 | 北京 | +| 25881 | 移动 | 山东济南5G | +| 25883 | 移动 | 江西南昌5G | +| 26331 | 移动 | 河南郑州5G | +| 26380 | 移动 | 陕西西安 | +| 26404 | 移动 | 安徽合肥5G | +| 26501 | 移动 | 山西太原5G | +| 26656 | 移动 | 黑龙江哈尔滨 | +| 26728 | 移动 | 云南昆明 | +| 26850 | 移动 | 江苏无锡5G | +| 26938 | 移动 | 新疆乌鲁木齐5G | +| 26940 | 移动 | 宁夏银川 | +| 27019 | 移动 | 内蒙古呼和浩特 | +| 27100 | 移动 | 山东青岛5G | +| 27151 | 移动 | 山东临沂5G | +| 27249 | 移动 | 江苏南京5G | +| 28491 | 移动 | 湖南长沙5G | +| 29083 | 移动 | 青海西宁5G | +| 29105 | 移动 | 陕西西安5G | +| 30154 | 移动 | 上海 | +| 30232 | 移动 | 内蒙古呼和浩特5G | +| 30293 | 移动 | 内蒙古通辽5G | +| 31520 | 移动 | 广东中山 | +| 31815 | 移动 | 宁夏银川 | \ No newline at end of file From c785a6446ea058c3b012dfa0688fe0a86784f8b0 Mon Sep 17 00:00:00 2001 From: ernie Date: Thu, 9 Apr 2020 23:54:44 +0800 Subject: [PATCH 49/52] Update README.md --- README.md | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 88cb36a..e010775 100644 --- a/README.md +++ b/README.md @@ -1,19 +1,22 @@ ## Superspeed.sh[1](#脚注1) -使用全国各地三大运营商[2](#脚注2)的 speedtest 测速节点进行全面的测速[3](#脚注3) +使用全国各地三大运营商[2](#脚注2)的 speedtest 测速节点进行全面测速[3](#脚注3)。 ## 使用方法 ``` bash <(curl -Lso- https://git.io/superspeed) ``` -[查看全部节点列表](https://git.io/superspeedList) +## 节点列表 +[查看全部节点列表(更新日期:2020/04/09)](https://git.io/superspeedList) +## 截图 ![测速图](SuperSpeed.png) --- -1: Modified from Oldking's script +1: Modified from Oldking's script。 -2: 仅包括中国大陆地区电信、联通、移动节点 +2: 仅包括中国大陆地区电信、联通、移动节点。 3: 使用 [ookla](https://bintray.com/ookla/download/download_file?file_path=ookla-speedtest-1.0.0-x86_64-linux.tgz) 提供的测速程序 +。 From 62d1725f788d3f4843a3cf437d8395da342bcf31 Mon Sep 17 00:00:00 2001 From: ernie Date: Mon, 8 Jun 2020 16:13:09 +0800 Subject: [PATCH 50/52] Update superspeed.sh --- superspeed.sh | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/superspeed.sh b/superspeed.sh index 943701b..45484ef 100644 --- a/superspeed.sh +++ b/superspeed.sh @@ -139,20 +139,20 @@ runtest() { speed_test '24012' '内蒙古呼和浩特' '电信' speed_test '27377' '北京5G' '电信' speed_test '29026' '四川成都' '电信' - # speed_test '29071' '四川成都' '电信' + speed_test '29071' '四川成都' '电信' speed_test '17145' '安徽合肥5G' '电信' speed_test '27594' '广东广州5G' '电信' - # speed_test '27810' '广西南宁' '电信' + speed_test '27810' '广西南宁' '电信' speed_test '27575' '新疆乌鲁木齐' '电信' - # speed_test '26352' '江苏南京5G' '电信' + speed_test '26352' '江苏南京5G' '电信' speed_test '5396' '江苏苏州5G' '电信' - # speed_test '5317' '江苏连云港5G' '电信' - # speed_test '7509' '浙江杭州' '电信' - # speed_test '23844' '湖北武汉' '电信' + speed_test '5317' '江苏连云港5G' '电信' + speed_test '7509' '浙江杭州' '电信' + speed_test '23844' '湖北武汉' '电信' speed_test '29353' '湖北武汉5G' '电信' speed_test '28225' '湖南长沙5G' '电信' speed_test '3973' '甘肃兰州' '电信' - # speed_test '19076' '重庆' '电信' + speed_test '19076' '重庆' '电信' #*** # speed_test '21005' '上海' '联通' speed_test '24447' '上海5G' '联通' From 29303a5c23fece528787edca58b8441904ab2fcf Mon Sep 17 00:00:00 2001 From: ernie Date: Mon, 8 Jun 2020 17:01:20 +0800 Subject: [PATCH 51/52] Update superspeed.sh --- superspeed.sh | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/superspeed.sh b/superspeed.sh index 45484ef..ad795d1 100644 --- a/superspeed.sh +++ b/superspeed.sh @@ -139,25 +139,25 @@ runtest() { speed_test '24012' '内蒙古呼和浩特' '电信' speed_test '27377' '北京5G' '电信' speed_test '29026' '四川成都' '电信' - speed_test '29071' '四川成都' '电信' + # speed_test '29071' '四川成都' '电信' speed_test '17145' '安徽合肥5G' '电信' speed_test '27594' '广东广州5G' '电信' - speed_test '27810' '广西南宁' '电信' + # speed_test '27810' '广西南宁' '电信' speed_test '27575' '新疆乌鲁木齐' '电信' - speed_test '26352' '江苏南京5G' '电信' + # speed_test '26352' '江苏南京5G' '电信' speed_test '5396' '江苏苏州5G' '电信' - speed_test '5317' '江苏连云港5G' '电信' - speed_test '7509' '浙江杭州' '电信' + # speed_test '5317' '江苏连云港5G' '电信' + # speed_test '7509' '浙江杭州' '电信' speed_test '23844' '湖北武汉' '电信' speed_test '29353' '湖北武汉5G' '电信' speed_test '28225' '湖南长沙5G' '电信' speed_test '3973' '甘肃兰州' '电信' - speed_test '19076' '重庆' '电信' + # speed_test '19076' '重庆' '电信' #*** # speed_test '21005' '上海' '联通' speed_test '24447' '上海5G' '联通' # speed_test '5103' '云南昆明' '联通' - # speed_test '5145' '北京' '联通' + speed_test '5145' '北京' '联通' # speed_test '5505' '北京' '联通' # speed_test '9484' '吉林长春' '联通' speed_test '2461' '四川成都' '联通' @@ -169,13 +169,13 @@ runtest() { speed_test '26678' '广东广州5G' '联通' speed_test '16192' '广东深圳' '联通' # speed_test '6144' '新疆乌鲁木齐' '联通' - # speed_test '13704' '江苏南京' '联通' + speed_test '13704' '江苏南京' '联通' speed_test '5485' '湖北武汉' '联通' # speed_test '26677' '湖南株洲' '联通' speed_test '4870' '湖南长沙' '联通' # speed_test '4690' '甘肃兰州' '联通' # speed_test '4884' '福建福州' '联通' - # speed_test '31985' '重庆' '联通' + speed_test '31985' '重庆' '联通' speed_test '4863' '陕西西安' '联通' #*** # speed_test '30154' '上海' '移动' From d9f33ddf82c34c66c7b7ce3e9874a0dc01672a17 Mon Sep 17 00:00:00 2001 From: ernie Date: Tue, 9 Jun 2020 20:04:31 +0800 Subject: [PATCH 52/52] Update superspeed.sh --- superspeed.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/superspeed.sh b/superspeed.sh index ad795d1..2d60cd0 100644 --- a/superspeed.sh +++ b/superspeed.sh @@ -164,10 +164,10 @@ runtest() { speed_test '27154' '天津5G' '联通' # speed_test '5509' '宁夏银川' '联通' # speed_test '5724' '安徽合肥' '联通' - speed_test '5039' '山东济南' '联通' + # speed_test '5039' '山东济南' '联通' speed_test '26180' '山东济南5G' '联通' speed_test '26678' '广东广州5G' '联通' - speed_test '16192' '广东深圳' '联通' + # speed_test '16192' '广东深圳' '联通' # speed_test '6144' '新疆乌鲁木齐' '联通' speed_test '13704' '江苏南京' '联通' speed_test '5485' '湖北武汉' '联通' @@ -175,7 +175,7 @@ runtest() { speed_test '4870' '湖南长沙' '联通' # speed_test '4690' '甘肃兰州' '联通' # speed_test '4884' '福建福州' '联通' - speed_test '31985' '重庆' '联通' + # speed_test '31985' '重庆' '联通' speed_test '4863' '陕西西安' '联通' #*** # speed_test '30154' '上海' '移动'