|
|
#!/usr/bin/env bash
|
|
|
|
|
|
ver="2022.06.09"
|
|
|
changeLog="融合怪四代目(集合百家之长)(专为测评频道小鸡而生)"
|
|
|
|
|
|
checkroot(){
|
|
|
[[ $EUID -ne 0 ]] && echo -e "${RED}请使用 root 用户运行本脚本!${PLAIN}" && exit 1
|
|
|
}
|
|
|
|
|
|
checksystem() {
|
|
|
if [ -f /etc/redhat-release ]; then
|
|
|
release="centos"
|
|
|
elif cat /etc/issue | grep -Eqi "debian"; then
|
|
|
release="debian"
|
|
|
elif cat /etc/issue | grep -Eqi "ubuntu"; then
|
|
|
release="ubuntu"
|
|
|
elif cat /etc/issue | grep -Eqi "centos|red hat|redhat"; then
|
|
|
release="centos"
|
|
|
elif cat /proc/version | grep -Eqi "debian"; then
|
|
|
release="debian"
|
|
|
elif cat /proc/version | grep -Eqi "ubuntu"; then
|
|
|
release="ubuntu"
|
|
|
elif cat /proc/version | grep -Eqi "centos|red hat|redhat"; then
|
|
|
release="centos"
|
|
|
fi
|
|
|
}
|
|
|
|
|
|
checkpython() {
|
|
|
if [ ! -e '/usr/bin/python' ]; then
|
|
|
echo "正在安装 Python"
|
|
|
if [ "${release}" == "centos" ]; then
|
|
|
yum update > /dev/null 2>&1
|
|
|
yum -y install python > /dev/null 2>&1
|
|
|
else
|
|
|
apt-get update > /dev/null 2>&1
|
|
|
apt-get -y install python > /dev/null 2>&1
|
|
|
fi
|
|
|
|
|
|
fi
|
|
|
}
|
|
|
|
|
|
checkcurl() {
|
|
|
if [ ! -e '/usr/bin/curl' ]; then
|
|
|
echo "正在安装 Curl"
|
|
|
if [ "${release}" == "centos" ]; then
|
|
|
yum update > /dev/null 2>&1
|
|
|
yum -y install curl > /dev/null 2>&1
|
|
|
else
|
|
|
apt-get update > /dev/null 2>&1
|
|
|
apt-get -y install curl > /dev/null 2>&1
|
|
|
fi
|
|
|
fi
|
|
|
}
|
|
|
|
|
|
checkwget() {
|
|
|
if [ ! -e '/usr/bin/wget' ]; then
|
|
|
echo "正在安装 Wget"
|
|
|
if [ "${release}" == "centos" ]; then
|
|
|
yum update > /dev/null 2>&1
|
|
|
yum -y install wget > /dev/null 2>&1
|
|
|
else
|
|
|
apt-get update > /dev/null 2>&1
|
|
|
apt-get -y install wget > /dev/null 2>&1
|
|
|
fi
|
|
|
fi
|
|
|
}
|
|
|
|
|
|
checkspeedtest() {
|
|
|
if [ ! -e './speedtest-cli/speedtest' ]; then
|
|
|
echo "正在安装 Speedtest-cli"
|
|
|
arch=$(uname -m)
|
|
|
if [ "${arch}" == "i686" ]; then
|
|
|
arch="i386"
|
|
|
fi
|
|
|
wget --no-check-certificate -qO speedtest.tgz https://cdn.jsdelivr.net/gh/oooldking/script@1.1.7/speedtest_cli/ookla-speedtest-1.0.0-${arch}-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-${arch}-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
|
|
|
}
|
|
|
|
|
|
test_area=("广州电信" "广州联通" "广州移动")
|
|
|
test_ip=("58.60.188.222" "210.21.196.6" "120.196.165.2")
|
|
|
TEMP_FILE='ip.test'
|
|
|
TEMP_FILE2='backtrace.test'
|
|
|
|
|
|
SystemInfo_GetOSRelease() {
|
|
|
if [ -f "/etc/centos-release" ]; then # CentOS
|
|
|
Var_OSRelease="centos"
|
|
|
local Var_OSReleaseFullName="$(cat /etc/os-release | awk -F '[= "]' '/PRETTY_NAME/{print $3,$4}')"
|
|
|
if [ "$(rpm -qa | grep -o el6 | sort -u)" = "el6" ]; then
|
|
|
Var_CentOSELRepoVersion="6"
|
|
|
local Var_OSReleaseVersion="$(cat /etc/centos-release | awk '{print $3}')"
|
|
|
elif [ "$(rpm -qa | grep -o el7 | sort -u)" = "el7" ]; then
|
|
|
Var_CentOSELRepoVersion="7"
|
|
|
local Var_OSReleaseVersion="$(cat /etc/centos-release | awk '{print $4}')"
|
|
|
elif [ "$(rpm -qa | grep -o el8 | sort -u)" = "el8" ]; then
|
|
|
Var_CentOSELRepoVersion="8"
|
|
|
local Var_OSReleaseVersion="$(cat /etc/centos-release | awk '{print $4}')"
|
|
|
else
|
|
|
local Var_CentOSELRepoVersion="unknown"
|
|
|
local Var_OSReleaseVersion="<Unknown Release>"
|
|
|
fi
|
|
|
local Var_OSReleaseArch="$(arch)"
|
|
|
LBench_Result_OSReleaseFullName="$Var_OSReleaseFullName $Var_OSReleaseVersion ($Var_OSReleaseArch)"
|
|
|
elif [ -f "/etc/redhat-release" ]; then # RedHat
|
|
|
Var_OSRelease="rhel"
|
|
|
local Var_OSReleaseFullName="$(cat /etc/os-release | awk -F '[= "]' '/PRETTY_NAME/{print $3,$4}')"
|
|
|
if [ "$(rpm -qa | grep -o el6 | sort -u)" = "el6" ]; then
|
|
|
Var_RedHatELRepoVersion="6"
|
|
|
local Var_OSReleaseVersion="$(cat /etc/redhat-release | awk '{print $3}')"
|
|
|
elif [ "$(rpm -qa | grep -o el7 | sort -u)" = "el7" ]; then
|
|
|
Var_RedHatELRepoVersion="7"
|
|
|
local Var_OSReleaseVersion="$(cat /etc/redhat-release | awk '{print $4}')"
|
|
|
elif [ "$(rpm -qa | grep -o el8 | sort -u)" = "el8" ]; then
|
|
|
Var_RedHatELRepoVersion="8"
|
|
|
local Var_OSReleaseVersion="$(cat /etc/redhat-release | awk '{print $4}')"
|
|
|
else
|
|
|
local Var_RedHatELRepoVersion="unknown"
|
|
|
local Var_OSReleaseVersion="<Unknown Release>"
|
|
|
fi
|
|
|
local Var_OSReleaseArch="$(arch)"
|
|
|
LBench_Result_OSReleaseFullName="$Var_OSReleaseFullName $Var_OSReleaseVersion ($Var_OSReleaseArch)"
|
|
|
elif [ -f "/etc/fedora-release" ]; then # Fedora
|
|
|
Var_OSRelease="fedora"
|
|
|
local Var_OSReleaseFullName="$(cat /etc/os-release | awk -F '[= "]' '/PRETTY_NAME/{print $3}')"
|
|
|
local Var_OSReleaseVersion="$(cat /etc/fedora-release | awk '{print $3,$4,$5,$6,$7}')"
|
|
|
local Var_OSReleaseArch="$(arch)"
|
|
|
LBench_Result_OSReleaseFullName="$Var_OSReleaseFullName $Var_OSReleaseVersion ($Var_OSReleaseArch)"
|
|
|
elif [ -f "/etc/lsb-release" ]; then # Ubuntu
|
|
|
Var_OSRelease="ubuntu"
|
|
|
local Var_OSReleaseFullName="$(cat /etc/os-release | awk -F '[= "]' '/NAME/{print $3}' | head -n1)"
|
|
|
local Var_OSReleaseVersion="$(cat /etc/os-release | awk -F '[= "]' '/VERSION/{print $3,$4,$5,$6,$7}' | head -n1)"
|
|
|
local Var_OSReleaseArch="$(arch)"
|
|
|
LBench_Result_OSReleaseFullName="$Var_OSReleaseFullName $Var_OSReleaseVersion ($Var_OSReleaseArch)"
|
|
|
Var_OSReleaseVersion_Short="$(cat /etc/lsb-release | awk -F '[= "]' '/DISTRIB_RELEASE/{print $2}')"
|
|
|
elif [ -f "/etc/debian_version" ]; then # Debian
|
|
|
Var_OSRelease="debian"
|
|
|
local Var_OSReleaseFullName="$(cat /etc/os-release | awk -F '[= "]' '/PRETTY_NAME/{print $3,$4}')"
|
|
|
local Var_OSReleaseVersion="$(cat /etc/debian_version | awk '{print $1}')"
|
|
|
local Var_OSReleaseVersionShort="$(cat /etc/debian_version | awk '{printf "%d\n",$1}')"
|
|
|
if [ "${Var_OSReleaseVersionShort}" = "7" ]; then
|
|
|
Var_OSReleaseVersion_Short="7"
|
|
|
Var_OSReleaseVersion_Codename="wheezy"
|
|
|
local Var_OSReleaseFullName="${Var_OSReleaseFullName} \"Wheezy\""
|
|
|
elif [ "${Var_OSReleaseVersionShort}" = "8" ]; then
|
|
|
Var_OSReleaseVersion_Short="8"
|
|
|
Var_OSReleaseVersion_Codename="jessie"
|
|
|
local Var_OSReleaseFullName="${Var_OSReleaseFullName} \"Jessie\""
|
|
|
elif [ "${Var_OSReleaseVersionShort}" = "9" ]; then
|
|
|
Var_OSReleaseVersion_Short="9"
|
|
|
Var_OSReleaseVersion_Codename="stretch"
|
|
|
local Var_OSReleaseFullName="${Var_OSReleaseFullName} \"Stretch\""
|
|
|
elif [ "${Var_OSReleaseVersionShort}" = "10" ]; then
|
|
|
Var_OSReleaseVersion_Short="10"
|
|
|
Var_OSReleaseVersion_Codename="buster"
|
|
|
local Var_OSReleaseFullName="${Var_OSReleaseFullName} \"Buster\""
|
|
|
else
|
|
|
Var_OSReleaseVersion_Short="sid"
|
|
|
Var_OSReleaseVersion_Codename="sid"
|
|
|
local Var_OSReleaseFullName="${Var_OSReleaseFullName} \"Sid (Testing)\""
|
|
|
fi
|
|
|
local Var_OSReleaseArch="$(arch)"
|
|
|
LBench_Result_OSReleaseFullName="$Var_OSReleaseFullName $Var_OSReleaseVersion ($Var_OSReleaseArch)"
|
|
|
elif [ -f "/etc/alpine-release" ]; then # Alpine Linux
|
|
|
Var_OSRelease="alpinelinux"
|
|
|
local Var_OSReleaseFullName="$(cat /etc/os-release | awk -F '[= "]' '/NAME/{print $3,$4}' | head -n1)"
|
|
|
local Var_OSReleaseVersion="$(cat /etc/alpine-release | awk '{print $1}')"
|
|
|
local Var_OSReleaseArch="$(arch)"
|
|
|
LBench_Result_OSReleaseFullName="$Var_OSReleaseFullName $Var_OSReleaseVersion ($Var_OSReleaseArch)"
|
|
|
else
|
|
|
Var_OSRelease="unknown" # 未知系统分支
|
|
|
LBench_Result_OSReleaseFullName="[Error: Unknown Linux Branch !]"
|
|
|
fi
|
|
|
}
|
|
|
|
|
|
function Global_UnlockTest() {
|
|
|
echo ""
|
|
|
echo "============[ Multination ]============"
|
|
|
MediaUnlockTest_Dazn ${1}
|
|
|
MediaUnlockTest_HotStar ${1}
|
|
|
MediaUnlockTest_DisneyPlus ${1}
|
|
|
MediaUnlockTest_Netflix ${1}
|
|
|
MediaUnlockTest_YouTube_Premium ${1}
|
|
|
MediaUnlockTest_PrimeVideo_Region ${1}
|
|
|
MediaUnlockTest_TVBAnywhere ${1}
|
|
|
MediaUnlockTest_iQYI_Region ${1}
|
|
|
MediaUnlockTest_Viu.com ${1}
|
|
|
MediaUnlockTest_YouTube_CDN ${1}
|
|
|
MediaUnlockTest_NetflixCDN ${1}
|
|
|
MediaUnlockTest_Spotify ${1}
|
|
|
GameTest_Steam ${1}
|
|
|
echo "======================================="
|
|
|
}
|
|
|
|
|
|
|
|
|
# =============== 检查 SysBench 组件 ===============
|
|
|
Check_SysBench() {
|
|
|
if [ ! -f "/usr/bin/sysbench" ] && [ ! -f "/usr/local/bin/sysbench" ]; then
|
|
|
SystemInfo_GetOSRelease
|
|
|
SystemInfo_GetSystemBit
|
|
|
if [ "${Var_OSRelease}" = "centos" ] || [ "${Var_OSRelease}" = "rhel" ]; then
|
|
|
echo -e "${Msg_Warning}Sysbench Module not found, installing ..."
|
|
|
yum -y install epel-release
|
|
|
yum -y install sysbench
|
|
|
elif [ "${Var_OSRelease}" = "ubuntu" ]; then
|
|
|
echo -e "${Msg_Warning}Sysbench Module not found, installing ..."
|
|
|
apt-get install -y sysbench
|
|
|
elif [ "${Var_OSRelease}" = "debian" ]; then
|
|
|
echo -e "${Msg_Warning}Sysbench Module not found, installing ..."
|
|
|
local mirrorbase="https://raindrop.ilemonrain.com/LemonBench"
|
|
|
local componentname="Sysbench"
|
|
|
local version="1.0.19-1"
|
|
|
local arch="debian"
|
|
|
local codename="${Var_OSReleaseVersion_Codename}"
|
|
|
local bit="${LBench_Result_SystemBit_Full}"
|
|
|
local filenamebase="sysbench"
|
|
|
local filename="${filenamebase}_${version}_${bit}.deb"
|
|
|
local downurl="${mirrorbase}/include/${componentname}/${version}/${arch}/${codename}/${filename}"
|
|
|
mkdir -p ${WorkDir}/download/
|
|
|
pushd ${WorkDir}/download/ >/dev/null
|
|
|
wget -U "${UA_LemonBench}" -O ${filenamebase}_${version}_${bit}.deb ${downurl}
|
|
|
dpkg -i ./${filename}
|
|
|
apt-get install -f -y
|
|
|
popd
|
|
|
if [ ! -f "/usr/bin/sysbench" ] && [ ! -f "/usr/local/bin/sysbench" ]; then
|
|
|
echo -e "${Msg_Warning}Sysbench Module Install Failed!"
|
|
|
fi
|
|
|
elif [ "${Var_OSRelease}" = "fedora" ]; then
|
|
|
echo -e "${Msg_Warning}Sysbench Module not found, installing ..."
|
|
|
dnf -y install sysbench
|
|
|
elif [ "${Var_OSRelease}" = "alpinelinux" ]; then
|
|
|
echo -e "${Msg_Warning}Sysbench Module not found, installing ..."
|
|
|
echo -e "${Msg_Warning}SysBench Current not support Alpine Linux, Skipping..."
|
|
|
Var_Skip_SysBench="1"
|
|
|
fi
|
|
|
fi
|
|
|
# 垂死挣扎 (尝试编译安装)
|
|
|
if [ ! -f "/usr/bin/sysbench" ] && [ ! -f "/usr/local/bin/sysbench" ]; then
|
|
|
echo -e "${Msg_Warning}Sysbench Module install Failure, trying compile modules ..."
|
|
|
Check_Sysbench_InstantBuild >/dev/null 2>&1
|
|
|
fi
|
|
|
# 最终检测
|
|
|
if [ ! -f "/usr/bin/sysbench" ] && [ ! -f "/usr/local/bin/sysbench" ]; then
|
|
|
echo -e "${Msg_Error}SysBench Moudle install Failure! Try Restart Bench or Manually install it! (/usr/bin/sysbench)"
|
|
|
# exit 1
|
|
|
fi
|
|
|
}
|
|
|
|
|
|
Check_Sysbench_InstantBuild() {
|
|
|
SystemInfo_GetOSRelease
|
|
|
SystemInfo_GetCPUInfo
|
|
|
if [ "${Var_OSRelease}" = "centos" ] || [ "${Var_OSRelease}" = "rhel" ]; then
|
|
|
echo -e "${Msg_Info}Release Detected: ${Var_OSRelease}"
|
|
|
echo -e "${Msg_Info}Preparing compile enviorment ..."
|
|
|
yum install -y epel-release
|
|
|
yum install -y wget curl make gcc gcc-c++ make automake libtool pkgconfig libaio-devel
|
|
|
echo -e "${Msg_Info}Release Detected: ${Var_OSRelease}"
|
|
|
echo -e "${Msg_Info}Downloading Source code (Version 1.0.17)..."
|
|
|
mkdir -p /tmp/_LBench/src/
|
|
|
wget -U "${UA_LemonBench}" -O /tmp/_LBench/src/sysbench.zip https://github.com/akopytov/sysbench/archive/1.0.17.zip
|
|
|
echo -e "${Msg_Info}Compiling Sysbench Module ..."
|
|
|
cd /tmp/_LBench/src/
|
|
|
unzip sysbench.zip && cd sysbench-1.0.17
|
|
|
./autogen.sh && ./configure --without-mysql && make -j8 && make install
|
|
|
echo -e "${Msg_Info}Cleaning up ..."
|
|
|
cd /tmp && rm -rf /tmp/_LBench/src/sysbench* >/dev/null 2>&1
|
|
|
elif [ "${Var_OSRelease}" = "ubuntu" ] || [ "${Var_OSRelease}" = "debian" ]; then
|
|
|
echo -e "${Msg_Info}Release Detected: ${Var_OSRelease}"
|
|
|
echo -e "${Msg_Info}Preparing compile enviorment ..."
|
|
|
apt-get update
|
|
|
apt -y install --no-install-recommends curl wget make automake libtool pkg-config libaio-dev unzip
|
|
|
echo -e "${Msg_Info}Downloading Source code (Version 1.0.17)..."
|
|
|
mkdir -p /tmp/_LBench/src/
|
|
|
wget -U "${UA_LemonBench}" -O /tmp/_LBench/src/sysbench.zip https://github.com/akopytov/sysbench/archive/1.0.17.zip
|
|
|
echo -e "${Msg_Info}Compiling Sysbench Module ..."
|
|
|
cd /tmp/_LBench/src/
|
|
|
unzip sysbench.zip && cd sysbench-1.0.17
|
|
|
./autogen.sh && ./configure --without-mysql && make -j8 && make install
|
|
|
echo -e "${Msg_Info}Cleaning up ..."
|
|
|
cd /tmp && rm -rf /tmp/_LBench/src/sysbench* >/dev/null 2>&1
|
|
|
elif [ "${Var_OSRelease}" = "fedora" ]; then
|
|
|
echo -e "${Msg_Info}Release Detected: ${Var_OSRelease}"
|
|
|
echo -e "${Msg_Info}Preparing compile enviorment ..."
|
|
|
dnf install -y wget curl gcc gcc-c++ make automake libtool pkgconfig libaio-devel
|
|
|
echo -e "${Msg_Info}Downloading Source code (Version 1.0.17)..."
|
|
|
mkdir -p /tmp/_LBench/src/
|
|
|
wget -U "${UA_LemonBench}" -O /tmp/_LBench/src/sysbench.zip https://github.com/akopytov/sysbench/archive/1.0.17.zip
|
|
|
echo -e "${Msg_Info}Compiling Sysbench Module ..."
|
|
|
cd /tmp/_LBench/src/
|
|
|
unzip sysbench.zip && cd sysbench-1.0.17
|
|
|
./autogen.sh && ./configure --without-mysql && make -j8 && make install
|
|
|
echo -e "${Msg_Info}Cleaning up ..."
|
|
|
cd /tmp && rm -rf /tmp/_LBench/src/sysbench* >/dev/null 2>&1
|
|
|
else
|
|
|
echo -e "${Msg_Error}Cannot compile on current enviorment! (Only Support CentOS/Debian/Ubuntu/Fedora) "
|
|
|
fi
|
|
|
}
|
|
|
|
|
|
Function_CheckTracemode() {
|
|
|
if [ "${Flag_TracerouteModeisSet}" = "1" ]; then
|
|
|
if [ "${GlobalVar_TracerouteMode}" = "icmp" ]; then
|
|
|
echo -e "${Msg_Info}Traceroute/BestTrace Tracemode is set to: ${Font_SkyBlue}ICMP Mode${Font_Suffix}"
|
|
|
elif [ "${GlobalVar_TracerouteMode}" = "tcp" ]; then
|
|
|
echo -e "${Msg_Info}Traceroute/BestTrace Tracemode is set to: ${Font_SkyBlue}TCP Mode${Font_Suffix}"
|
|
|
fi
|
|
|
else
|
|
|
GlobalVar_TracerouteMode="tcp"
|
|
|
fi
|
|
|
}
|
|
|
|
|
|
# =============== 测试启动与结束动作 ===============
|
|
|
|
|
|
#Function_BenchFinish() {
|
|
|
# # 清理临时文件
|
|
|
# LBench_Result_BenchFinishTime="$(date +"%Y-%m-%d %H:%M:%S")"
|
|
|
# LBench_Result_BenchFinishTimestamp="$(date +%s)"
|
|
|
# LBench_Result_TimeElapsedSec="$(echo "$LBench_Result_BenchFinishTimestamp $LBench_Result_BenchStartTimestamp" | awk '{print $1-$2}')"
|
|
|
# echo -e " ${Msg_Info}${Font_Yellow}Bench Finish Time:${Font_Suffix} ${Font_SkyBlue}${LBench_Result_BenchFinishTime}${Font_Suffix}"
|
|
|
# echo -e " ${Msg_Info}${Font_Yellow}Time Elapsed:${Font_Suffix} ${Font_SkyBlue}${LBench_Result_TimeElapsedSec} seconds${Font_Suffix}"
|
|
|
#}
|
|
|
|
|
|
|
|
|
# =============== SysBench - CPU性能 部分 ===============
|
|
|
Run_SysBench_CPU() {
|
|
|
# 调用方式: Run_SysBench_CPU "线程数" "测试时长(s)" "测试遍数" "说明"
|
|
|
# 变量初始化
|
|
|
mkdir -p ${WorkDir}/SysBench/CPU/ >/dev/null 2>&1
|
|
|
maxtestcount="$3"
|
|
|
local count="1"
|
|
|
local TestScore="0"
|
|
|
local TotalScore="0"
|
|
|
# 运行测试
|
|
|
while [ $count -le $maxtestcount ]; do
|
|
|
echo -e "\r ${Font_Yellow}$4: ${Font_Suffix}\t\t$count/$maxtestcount \c"
|
|
|
local TestResult="$(sysbench --test=cpu --num-threads=$1 --cpu-max-prime=10000 --max-requests=1000000 --max-time=$2 run 2>&1)"
|
|
|
local TestScore="$(echo ${TestResult} | grep -oE "events per second: [0-9]+" | grep -oE "[0-9]+")"
|
|
|
local TotalScore="$(echo "${TotalScore} ${TestScore}" | awk '{printf "%d",$1+$2}')"
|
|
|
let count=count+1
|
|
|
local TestResult=""
|
|
|
local TestScore="0"
|
|
|
done
|
|
|
local ResultScore="$(echo "${TotalScore} ${maxtestcount}" | awk '{printf "%d",$1/$2}')"
|
|
|
if [ "$1" = "1" ]; then
|
|
|
echo -e "\r ${Font_Yellow}$4: ${Font_Suffix}\t\t${Font_SkyBlue}${ResultScore}${Font_Suffix} ${Font_Yellow}Scores${Font_Suffix}"
|
|
|
echo -e " $4:\t\t\t${ResultScore} Scores" >>${WorkDir}/SysBench/CPU/result.txt
|
|
|
elif [ "$1" -ge "2" ]; then
|
|
|
echo -e "\r ${Font_Yellow}$4: ${Font_Suffix}\t\t${Font_SkyBlue}${ResultScore}${Font_Suffix} ${Font_Yellow}Scores${Font_Suffix}"
|
|
|
echo -e " $4:\t\t${ResultScore} Scores" >>${WorkDir}/SysBench/CPU/result.txt
|
|
|
fi
|
|
|
}
|
|
|
|
|
|
Function_SysBench_CPU_Fast() {
|
|
|
mkdir -p ${WorkDir}/SysBench/CPU/ >/dev/null 2>&1
|
|
|
echo -e " ${Font_Yellow}-> CPU 测试中 (Fast Mode, 1-Pass @ 5sec)${Font_Suffix}\n"
|
|
|
echo -e " -> CPU 测试中 (Fast Mode, 1-Pass @ 5sec)\n" >>${WorkDir}/SysBench/CPU/result.txt
|
|
|
Run_SysBench_CPU "1" "5" "1" "1 线程测试(1核)得分"
|
|
|
if [ "${LBench_Result_CPUThreadNumber}" -ge "2" ]; then
|
|
|
Run_SysBench_CPU "${LBench_Result_CPUThreadNumber}" "5" "1" "${LBench_Result_CPUThreadNumber} 线程测试(多核)得分"
|
|
|
elif [ "${LBench_Result_CPUProcessorNumber}" -ge "2" ]; then
|
|
|
Run_SysBench_CPU "${LBench_Result_CPUProcessorNumber}" "5" "1" "${LBench_Result_CPUProcessorNumber} 线程测试(多核)得分"
|
|
|
fi
|
|
|
# 完成FLAG
|
|
|
LBench_Flag_FinishSysBenchCPUFast="1"
|
|
|
}
|
|
|
|
|
|
|
|
|
# =============== SystemInfo模块 部分 ===============
|
|
|
SystemInfo_GetHostname() {
|
|
|
LBench_Result_Hostname="$(hostname)"
|
|
|
}
|
|
|
|
|
|
|
|
|
SystemInfo_GetCPUInfo() {
|
|
|
mkdir -p ${WorkDir}/data >/dev/null 2>&1
|
|
|
cat /proc/cpuinfo >${WorkDir}/data/cpuinfo
|
|
|
local ReadCPUInfo="cat ${WorkDir}/data/cpuinfo"
|
|
|
LBench_Result_CPUModelName="$($ReadCPUInfo | awk -F ': ' '/model name/{print $2}' | sort -u)"
|
|
|
local CPUFreqCount="$($ReadCPUInfo | awk -F ': ' '/cpu MHz/{print $2}' | sort -run | wc -l)"
|
|
|
if [ "${CPUFreqCount}" -ge "2" ]; then
|
|
|
local CPUFreqArray="$(cat /proc/cpuinfo | awk -F ': ' '/cpu MHz/{print $2}' | sort -run)"
|
|
|
local CPUFreq_Min="$(echo "$CPUFreqArray" | grep -oE '[0-9]+.[0-9]{3}' | awk 'BEGIN {min = 2147483647} {if ($1+0 < min+0) min=$1} END {print min}')"
|
|
|
local CPUFreq_Max="$(echo "$CPUFreqArray" | grep -oE '[0-9]+.[0-9]{3}' | awk 'BEGIN {max = 0} {if ($1+0 > max+0) max=$1} END {print max}')"
|
|
|
LBench_Result_CPUFreqMinGHz="$(echo $CPUFreq_Min | awk '{printf "%.2f\n",$1/1000}')"
|
|
|
LBench_Result_CPUFreqMaxGHz="$(echo $CPUFreq_Max | awk '{printf "%.2f\n",$1/1000}')"
|
|
|
Flag_DymanicCPUFreqDetected="1"
|
|
|
else
|
|
|
LBench_Result_CPUFreqMHz="$($ReadCPUInfo | awk -F ': ' '/cpu MHz/{print $2}' | sort -u)"
|
|
|
LBench_Result_CPUFreqGHz="$(echo $LBench_Result_CPUFreqMHz | awk '{printf "%.2f\n",$1/1000}')"
|
|
|
Flag_DymanicCPUFreqDetected="0"
|
|
|
fi
|
|
|
LBench_Result_CPUCacheSize="$($ReadCPUInfo | awk -F ': ' '/cache size/{print $2}' | sort -u)"
|
|
|
LBench_Result_CPUPhysicalNumber="$($ReadCPUInfo | awk -F ': ' '/physical id/{print $2}' | sort -u | wc -l)"
|
|
|
LBench_Result_CPUCoreNumber="$($ReadCPUInfo | awk -F ': ' '/cpu cores/{print $2}' | sort -u)"
|
|
|
LBench_Result_CPUThreadNumber="$($ReadCPUInfo | awk -F ': ' '/cores/{print $2}' | wc -l)"
|
|
|
LBench_Result_CPUProcessorNumber="$($ReadCPUInfo | awk -F ': ' '/processor/{print $2}' | wc -l)"
|
|
|
LBench_Result_CPUSiblingsNumber="$($ReadCPUInfo | awk -F ': ' '/siblings/{print $2}' | sort -u)"
|
|
|
LBench_Result_CPUTotalCoreNumber="$($ReadCPUInfo | awk -F ': ' '/physical id/&&/0/{print $2}' | wc -l)"
|
|
|
|
|
|
# 虚拟化能力检测
|
|
|
SystemInfo_GetVirtType
|
|
|
if [ "${Var_VirtType}" = "dedicated" ] || [ "${Var_VirtType}" = "wsl" ]; then
|
|
|
LBench_Result_CPUIsPhysical="1"
|
|
|
local VirtCheck="$(cat /proc/cpuinfo | grep -oE 'vmx|svm' | uniq)"
|
|
|
if [ "${VirtCheck}" != "" ]; then
|
|
|
LBench_Result_CPUVirtualization="1"
|
|
|
local VirtualizationType="$(lscpu | awk /Virtualization:/'{print $2}')"
|
|
|
LBench_Result_CPUVirtualizationType="${VirtualizationType}"
|
|
|
else
|
|
|
LBench_Result_CPUVirtualization="0"
|
|
|
fi
|
|
|
elif [ "${Var_VirtType}" = "kvm" ] || [ "${Var_VirtType}" = "hyperv" ] || [ "${Var_VirtType}" = "microsoft" ] || [ "${Var_VirtType}" = "vmware" ]; then
|
|
|
LBench_Result_CPUIsPhysical="0"
|
|
|
local VirtCheck="$(cat /proc/cpuinfo | grep -oE 'vmx|svm' | uniq)"
|
|
|
if [ "${VirtCheck}" = "vmx" ] || [ "${VirtCheck}" = "svm" ]; then
|
|
|
LBench_Result_CPUVirtualization="2"
|
|
|
local VirtualizationType="$(lscpu | awk /Virtualization:/'{print $2}')"
|
|
|
LBench_Result_CPUVirtualizationType="${VirtualizationType}"
|
|
|
else
|
|
|
LBench_Result_CPUVirtualization="0"
|
|
|
fi
|
|
|
else
|
|
|
LBench_Result_CPUIsPhysical="0"
|
|
|
fi
|
|
|
}
|
|
|
|
|
|
SystemInfo_GetCPUStat() {
|
|
|
local CPUStat_Result="$(top -bn1 | grep Cpu)"
|
|
|
# 原始数据
|
|
|
LBench_Result_CPUStat_user="$(Function_ReadCPUStat "${CPUStat_Result}" "us")"
|
|
|
LBench_Result_CPUStat_system="$(Function_ReadCPUStat "${CPUStat_Result}" "sy")"
|
|
|
LBench_Result_CPUStat_anice="$(Function_ReadCPUStat "${CPUStat_Result}" "ni")"
|
|
|
LBench_Result_CPUStat_idle="$(Function_ReadCPUStat "${CPUStat_Result}" "id")"
|
|
|
LBench_Result_CPUStat_iowait="$(Function_ReadCPUStat "${CPUStat_Result}" "wa")"
|
|
|
LBench_Result_CPUStat_hardint="$(Function_ReadCPUStat "${CPUStat_Result}" "hi")"
|
|
|
LBench_Result_CPUStat_softint="$(Function_ReadCPUStat "${CPUStat_Result}" "si")"
|
|
|
LBench_Result_CPUStat_steal="$(Function_ReadCPUStat "${CPUStat_Result}" "st")"
|
|
|
# 加工后的数据
|
|
|
LBench_Result_CPUStat_UsedAll="$(echo ${LBench_Result_CPUStat_user} ${LBench_Result_CPUStat_system} ${LBench_Result_CPUStat_nice} | awk '{printf "%.1f\n",$1+$2+$3}')"
|
|
|
}
|
|
|
|
|
|
Function_ReadCPUStat() {
|
|
|
if [ "$1" == "" ]; then
|
|
|
echo -n "nil"
|
|
|
else
|
|
|
local result="$(echo $1 | grep -oE "[0-9]{1,2}.[0-9]{1} $2" | awk '{print $1}')"
|
|
|
echo $result
|
|
|
fi
|
|
|
}
|
|
|
|
|
|
SystemInfo_GetKernelVersion() {
|
|
|
local version="$(uname -r)"
|
|
|
LBench_Result_KernelVersion="${version}"
|
|
|
}
|
|
|
|
|
|
SystemInfo_GetNetworkCCMethod() {
|
|
|
local val_cc="$(sysctl -n net.ipv4.tcp_congestion_control)"
|
|
|
local val_qdisc="$(sysctl -n net.core.default_qdisc)"
|
|
|
LBench_Result_NetworkCCMethod="${val_cc} + ${val_qdisc}"
|
|
|
}
|
|
|
|
|
|
SystemInfo_GetSystemBit() {
|
|
|
local sysarch="$(uname -m)"
|
|
|
if [ "${sysarch}" = "unknown" ] || [ "${sysarch}" = "" ]; then
|
|
|
local sysarch="$(arch)"
|
|
|
fi
|
|
|
if [ "${sysarch}" = "x86_64" ]; then
|
|
|
# X86平台 64位
|
|
|
LBench_Result_SystemBit_Short="64"
|
|
|
LBench_Result_SystemBit_Full="amd64"
|
|
|
rm -rf dp
|
|
|
wget -O dp https://github.com/sjlleo/VerifyDisneyPlus/releases/download/1.01/dp_1.01_linux_amd64 && chmod +x dp
|
|
|
rm -rf nf
|
|
|
wget -O nf https://github.com/sjlleo/netflix-verify/releases/download/v3.0/nf_linux_amd64 && chmod +x nf
|
|
|
rm -rf tubecheck
|
|
|
wget -O tubecheck https://github.com/sjlleo/TubeCheck/releases/download/1.0Beta/tubecheck_1.0beta_linux_amd64 && chmod +x tubecheck
|
|
|
elif [ "${sysarch}" = "i386" ] || [ "${sysarch}" = "i686" ]; then
|
|
|
# X86平台 32位
|
|
|
LBench_Result_SystemBit_Short="32"
|
|
|
LBench_Result_SystemBit_Full="i386"
|
|
|
rm -rf dp
|
|
|
wget -O dp https://github.com/sjlleo/VerifyDisneyPlus/releases/download/1.01/dp_1.01_linux_386 && chmod +x dp
|
|
|
rm -rf nf
|
|
|
wget -O nf https://github.com/sjlleo/netflix-verify/releases/download/v3.0/nf_linux_amd64 && chmod +x nf
|
|
|
rm -rf tubecheck
|
|
|
wget -O tubecheck https://github.com/sjlleo/TubeCheck/releases/download/1.0Beta/tubecheck_1.0beta_linux_386 && chmod +x tubecheck
|
|
|
elif [ "${sysarch}" = "armv7l" ] || [ "${sysarch}" = "armv8" ] || [ "${sysarch}" = "armv8l" ] || [ "${sysarch}" = "aarch64" ]; then
|
|
|
# ARM平台 暂且将32位/64位统一对待
|
|
|
LBench_Result_SystemBit_Short="arm"
|
|
|
LBench_Result_SystemBit_Full="arm"
|
|
|
rm -rf dp
|
|
|
wget -O dp https://github.com/sjlleo/VerifyDisneyPlus/releases/download/1.01/dp_1.01_linux_arm && chmod +x dp
|
|
|
rm -rf nf
|
|
|
wget -O nf https://github.com/sjlleo/netflix-verify/releases/download/v3.1.0/nf_linux_arm64 && chmod +x nf
|
|
|
rm -rf tubecheck
|
|
|
wget -O tubecheck https://github.com/sjlleo/TubeCheck/releases/download/1.0Beta/tubecheck_1.0beta_linux_arm && chmod +x tubecheck
|
|
|
else
|
|
|
LBench_Result_SystemBit_Short="unknown"
|
|
|
LBench_Result_SystemBit_Full="unknown"
|
|
|
rm -rf dp
|
|
|
wget -O dp https://github.com/sjlleo/VerifyDisneyPlus/releases/download/1.01/dp_1.01_linux_amd64 && chmod +x dp
|
|
|
rm -rf nf
|
|
|
wget -O nf https://github.com/sjlleo/netflix-verify/releases/download/v3.0/nf_linux_amd64 && chmod +x nf
|
|
|
rm -rf tubecheck
|
|
|
wget -O tubecheck https://github.com/sjlleo/TubeCheck/releases/download/1.0Beta/tubecheck_1.0beta_linux_amd64 && chmod +x tubecheck
|
|
|
fi
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
SystemInfo_GetVirtType() {
|
|
|
if [ -f "/usr/bin/systemd-detect-virt" ]; then
|
|
|
Var_VirtType="$(/usr/bin/systemd-detect-virt)"
|
|
|
# 虚拟机检测
|
|
|
if [ "${Var_VirtType}" = "qemu" ]; then
|
|
|
LBench_Result_VirtType="QEMU"
|
|
|
elif [ "${Var_VirtType}" = "kvm" ]; then
|
|
|
LBench_Result_VirtType="KVM"
|
|
|
elif [ "${Var_VirtType}" = "zvm" ]; then
|
|
|
LBench_Result_VirtType="S390 Z/VM"
|
|
|
elif [ "${Var_VirtType}" = "vmware" ]; then
|
|
|
LBench_Result_VirtType="VMware"
|
|
|
elif [ "${Var_VirtType}" = "microsoft" ]; then
|
|
|
LBench_Result_VirtType="Microsoft Hyper-V"
|
|
|
elif [ "${Var_VirtType}" = "xen" ]; then
|
|
|
LBench_Result_VirtType="Xen Hypervisor"
|
|
|
elif [ "${Var_VirtType}" = "bochs" ]; then
|
|
|
LBench_Result_VirtType="BOCHS"
|
|
|
elif [ "${Var_VirtType}" = "uml" ]; then
|
|
|
LBench_Result_VirtType="User-mode Linux"
|
|
|
elif [ "${Var_VirtType}" = "parallels" ]; then
|
|
|
LBench_Result_VirtType="Parallels"
|
|
|
elif [ "${Var_VirtType}" = "bhyve" ]; then
|
|
|
LBench_Result_VirtType="FreeBSD Hypervisor"
|
|
|
# 容器虚拟化检测
|
|
|
elif [ "${Var_VirtType}" = "openvz" ]; then
|
|
|
LBench_Result_VirtType="OpenVZ"
|
|
|
elif [ "${Var_VirtType}" = "lxc" ]; then
|
|
|
LBench_Result_VirtType="LXC"
|
|
|
elif [ "${Var_VirtType}" = "lxc-libvirt" ]; then
|
|
|
LBench_Result_VirtType="LXC (libvirt)"
|
|
|
elif [ "${Var_VirtType}" = "systemd-nspawn" ]; then
|
|
|
LBench_Result_VirtType="Systemd nspawn"
|
|
|
elif [ "${Var_VirtType}" = "docker" ]; then
|
|
|
LBench_Result_VirtType="Docker"
|
|
|
elif [ "${Var_VirtType}" = "rkt" ]; then
|
|
|
LBench_Result_VirtType="RKT"
|
|
|
# 特殊处理
|
|
|
elif [ -c "/dev/lxss" ]; then # 处理WSL虚拟化
|
|
|
Var_VirtType="wsl"
|
|
|
LBench_Result_VirtType="Windows Subsystem for Linux (WSL)"
|
|
|
# 未匹配到任何结果, 或者非虚拟机
|
|
|
elif [ "${Var_VirtType}" = "none" ]; then
|
|
|
Var_VirtType="dedicated"
|
|
|
LBench_Result_VirtType="None"
|
|
|
local Var_BIOSVendor="$(dmidecode -s bios-vendor)"
|
|
|
if [ "${Var_BIOSVendor}" = "SeaBIOS" ]; then
|
|
|
Var_VirtType="Unknown"
|
|
|
LBench_Result_VirtType="Unknown with SeaBIOS BIOS"
|
|
|
else
|
|
|
Var_VirtType="dedicated"
|
|
|
LBench_Result_VirtType="Dedicated with ${Var_BIOSVendor} BIOS"
|
|
|
fi
|
|
|
fi
|
|
|
elif [ ! -f "/usr/sbin/virt-what" ]; then
|
|
|
Var_VirtType="Unknown"
|
|
|
LBench_Result_VirtType="[Error: virt-what not found !]"
|
|
|
elif [ -f "/.dockerenv" ]; then # 处理Docker虚拟化
|
|
|
Var_VirtType="docker"
|
|
|
LBench_Result_VirtType="Docker"
|
|
|
elif [ -c "/dev/lxss" ]; then # 处理WSL虚拟化
|
|
|
Var_VirtType="wsl"
|
|
|
LBench_Result_VirtType="Windows Subsystem for Linux (WSL)"
|
|
|
else # 正常判断流程
|
|
|
Var_VirtType="$(virt-what | xargs)"
|
|
|
local Var_VirtTypeCount="$(echo $Var_VirtTypeCount | wc -l)"
|
|
|
if [ "${Var_VirtTypeCount}" -gt "1" ]; then # 处理嵌套虚拟化
|
|
|
LBench_Result_VirtType="echo ${Var_VirtType}"
|
|
|
Var_VirtType="$(echo ${Var_VirtType} | head -n1)" # 使用检测到的第一种虚拟化继续做判断
|
|
|
elif [ "${Var_VirtTypeCount}" -eq "1" ] && [ "${Var_VirtType}" != "" ]; then # 只有一种虚拟化
|
|
|
LBench_Result_VirtType="${Var_VirtType}"
|
|
|
else
|
|
|
local Var_BIOSVendor="$(dmidecode -s bios-vendor)"
|
|
|
if [ "${Var_BIOSVendor}" = "SeaBIOS" ]; then
|
|
|
Var_VirtType="Unknown"
|
|
|
LBench_Result_VirtType="Unknown with SeaBIOS BIOS"
|
|
|
else
|
|
|
Var_VirtType="dedicated"
|
|
|
LBench_Result_VirtType="Dedicated with ${Var_BIOSVendor} BIOS"
|
|
|
fi
|
|
|
fi
|
|
|
fi
|
|
|
}
|
|
|
|
|
|
Function_GenerateResult_SysBench_MemoryTest() {
|
|
|
sleep 0.1
|
|
|
if [ -f "${WorkDir}/SysBench/Memory/result.txt" ]; then
|
|
|
cp -f ${WorkDir}/SysBench/Memory/result.txt ${WorkDir}/result/05-memorytest.result
|
|
|
fi
|
|
|
}
|
|
|
|
|
|
# 生成结果文件
|
|
|
Function_GenerateResult() {
|
|
|
# echo -e "${Msg_Info} Please wait, collecting results ..."
|
|
|
mkdir -p /tmp/ >/dev/null 2>&1
|
|
|
mkdir -p ${WorkDir}/result >/dev/null 2>&1
|
|
|
Function_GenerateResult_SysBench_CPUTest >/dev/null
|
|
|
Function_GenerateResult_DiskTest >/dev/null
|
|
|
Function_GenerateResult_SysBench_MemoryTest >/dev/null
|
|
|
# echo -e "${Msg_Info} Generating Report ..."
|
|
|
local finalresultfile="${WorkDir}/result/finalresult.txt"
|
|
|
sleep 0.2
|
|
|
if [ -f "${WorkDir}/result/01-systeminfo.result" ]; then
|
|
|
cat ${WorkDir}/result/01-systeminfo.result >>${WorkDir}/result/finalresult.txt
|
|
|
fi
|
|
|
sleep 0.2
|
|
|
if [ -f "${WorkDir}/result/04-cputest.result" ]; then
|
|
|
cat ${WorkDir}/result/04-cputest.result >>${WorkDir}/result/finalresult.txt
|
|
|
fi
|
|
|
sleep 0.2
|
|
|
if [ -f "${WorkDir}/result/05-memorytest.result" ]; then
|
|
|
cat ${WorkDir}/result/05-memorytest.result >>${WorkDir}/result/finalresult.txt
|
|
|
fi
|
|
|
sleep 0.2
|
|
|
if [ -f "${WorkDir}/result/06-disktest.result" ]; then
|
|
|
cat ${WorkDir}/result/06-disktest.result >>${WorkDir}/result/finalresult.txt
|
|
|
fi
|
|
|
sleep 0.2
|
|
|
# echo -e "${Msg_Info} Saving local Report ..."
|
|
|
cp ${WorkDir}/result/finalresult.txt $HOME/LemonBench.Result.txt
|
|
|
sleep 0.1
|
|
|
# echo -e "${Msg_Info} Generating Report URL ..."
|
|
|
cat ${WorkDir}/result/finalresult.txt | PasteBin_Upload
|
|
|
}
|
|
|
|
|
|
|
|
|
Function_GenerateResult_SysBench_CPUTest() {
|
|
|
sleep 0.1
|
|
|
if [ -f "${WorkDir}/SysBench/CPU/result.txt" ]; then
|
|
|
cp -f ${WorkDir}/SysBench/CPU/result.txt ${WorkDir}/result/04-cputest.result
|
|
|
fi
|
|
|
}
|
|
|
|
|
|
Function_GenerateResult_DiskTest() {
|
|
|
sleep 0.1
|
|
|
if [ -f "${WorkDir}/DiskTest/result.txt" ]; then
|
|
|
cp -f ${WorkDir}/DiskTest/result.txt ${WorkDir}/result/06-disktest.result
|
|
|
fi
|
|
|
}
|
|
|
|
|
|
Global_Exit_Action() {
|
|
|
rm -rf ${WorkDir}/
|
|
|
}
|
|
|
|
|
|
PasteBin_Upload() {
|
|
|
local uploadresult="$(curl -fsL -X POST \
|
|
|
--url https://paste.ubuntu.com \
|
|
|
--output /dev/null \
|
|
|
--write-out "%{url_effective}\n" \
|
|
|
--data-urlencode "content@${PASTEBIN_CONTENT:-/dev/stdin}" \
|
|
|
--data "poster=${PASTEBIN_POSTER:-LemonBench}" \
|
|
|
--data "expiration=${PASTEBIN_EXPIRATION:-}" \
|
|
|
--data "syntax=${PASTEBIN_SYNTAX:-text}")"
|
|
|
if [ "$?" = "0" ]; then
|
|
|
# echo -e "${Msg_Success} Report Generate Success!Please save the follwing link:"
|
|
|
echo -e "${Msg_Info} 上述测试报告(需登陆查看): ${uploadresult}"
|
|
|
else
|
|
|
echo -e "${Msg_Warning} Report Generate Failure, But you can still read $HOME/LemonBench.Result.txt to get this result!"
|
|
|
fi
|
|
|
echo "----------------------------------------------------------------------"
|
|
|
}
|
|
|
|
|
|
|
|
|
Entrance_SysBench_CPU_Fast() {
|
|
|
Check_SysBench >/dev/null 2>&1
|
|
|
SystemInfo_GetCPUInfo
|
|
|
Function_SysBench_CPU_Fast
|
|
|
# Function_BenchFinish
|
|
|
}
|
|
|
|
|
|
#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
|
|
|
# printf "\033[0;33m%-18s\033[0;32m%-18s\033[0;31m%-20s\033[0;36m%-12s\033[0m\n" "${strnodeLocation:0:20}" "${reupload}"Mbps "${REDownload}"Mbps "${relatency}"ms
|
|
|
# fi
|
|
|
# else
|
|
|
# local cerror="ERROR"
|
|
|
# fi
|
|
|
#}
|
|
|
|
|
|
speed_test2() {
|
|
|
local nodeName="$2"
|
|
|
[ -z "$1" ] && ./speedtest-cli/speedtest --progress=no --accept-license --accept-gdpr > ./speedtest-cli/speedtest.log 2>&1 || \
|
|
|
./speedtest-cli/speedtest --progress=no --server-id=$1 --accept-license --accept-gdpr > ./speedtest-cli/speedtest.log 2>&1
|
|
|
if [ $? -eq 0 ]; then
|
|
|
local dl_speed=$(awk '/Download/{print $3" "$4}' ./speedtest-cli/speedtest.log)
|
|
|
local up_speed=$(awk '/Upload/{print $3" "$4}' ./speedtest-cli/speedtest.log)
|
|
|
local latency=$(awk '/Latency/{print $2" "$3}' ./speedtest-cli/speedtest.log)
|
|
|
if [[ -n "${dl_speed}" && -n "${up_speed}" && -n "${latency}" ]]; then
|
|
|
echo -e "${nodeName}\t ${up_speed}\t ${dl_speed}\t ${latency}"
|
|
|
fi
|
|
|
fi
|
|
|
}
|
|
|
|
|
|
function MediaUnlockTest_Dazn() {
|
|
|
echo -n -e " Dazn:\t\t\t\t\t->\c"
|
|
|
local tmpresult=$(curl $useNIC $xForward -${1} -sS --max-time 10 -X POST -H "Content-Type: application/json" -d '{"LandingPageKey":"generic","Languages":"zh-CN,zh,en","Platform":"web","PlatformAttributes":{},"Manufacturer":"","PromoCode":"","Version":"2"}' "https://startup.core.indazn.com/misl/v5/Startup" 2>&1)
|
|
|
|
|
|
if [[ "$tmpresult" == "curl"* ]]; then
|
|
|
echo -n -e "\r Dazn:\t\t\t\t\t${Font_Red}Failed (Network Connection)${Font_Suffix}\n"
|
|
|
return
|
|
|
fi
|
|
|
isAllowed=$(echo $tmpresult | python -m json.tool 2>/dev/null | grep 'isAllowed' | awk '{print $2}' | cut -f1 -d',')
|
|
|
local result=$(echo $tmpresult | python -m json.tool 2>/dev/null | grep '"GeolocatedCountry":' | awk '{print $2}' | cut -f2 -d'"')
|
|
|
|
|
|
if [[ "$isAllowed" == "true" ]]; then
|
|
|
local CountryCode=$(echo $result | tr [:lower:] [:upper:])
|
|
|
echo -n -e "\r Dazn:\t\t\t\t\t${Font_Green}Yes (Region: ${CountryCode})${Font_Suffix}\n"
|
|
|
return
|
|
|
elif [[ "$isAllowed" == "false" ]]; then
|
|
|
echo -n -e "\r Dazn:\t\t\t\t\t${Font_Red}No${Font_Suffix}\n"
|
|
|
return
|
|
|
else
|
|
|
echo -n -e "\r Dazn:\t\t\t\t\t${Font_Red}Unsupport${Font_Suffix}\n"
|
|
|
return
|
|
|
fi
|
|
|
}
|
|
|
|
|
|
function MediaUnlockTest_Netflix() {
|
|
|
echo -n -e " Netflix:\t\t\t\t->\c"
|
|
|
local result1=$(curl $useNIC $xForward -${1} --user-agent "${UA_Browser}" -fsL --write-out %{http_code} --output /dev/null --max-time 10 "https://www.netflix.com/title/81215567" 2>&1)
|
|
|
|
|
|
if [[ "$result1" == "404" ]]; then
|
|
|
echo -n -e "\r Netflix:\t\t\t\t${Font_Yellow}Originals Only${Font_Suffix}\n"
|
|
|
return
|
|
|
elif [[ "$result1" == "403" ]]; then
|
|
|
echo -n -e "\r Netflix:\t\t\t\t${Font_Red}No${Font_Suffix}\n"
|
|
|
return
|
|
|
elif [[ "$result1" == "200" ]]; then
|
|
|
local region=$(curl $useNIC $xForward -${1} --user-agent "${UA_Browser}" -fs --max-time 10 --write-out %{redirect_url} --output /dev/null "https://www.netflix.com/title/80018499" | cut -d '/' -f4 | cut -d '-' -f1 | tr [:lower:] [:upper:])
|
|
|
if [[ ! -n "$region" ]]; then
|
|
|
region="US"
|
|
|
fi
|
|
|
echo -n -e "\r Netflix:\t\t\t\t${Font_Green}Yes (Region: ${region})${Font_Suffix}\n"
|
|
|
return
|
|
|
elif [[ "$result1" == "000" ]]; then
|
|
|
echo -n -e "\r Netflix:\t\t\t\t${Font_Red}Failed (Network Connection)${Font_Suffix}\n"
|
|
|
return
|
|
|
fi
|
|
|
}
|
|
|
|
|
|
function MediaUnlockTest_HotStar() {
|
|
|
echo -n -e " HotStar:\t\t\t\t->\c"
|
|
|
local result=$(curl $useNIC $xForward --user-agent "${UA_Browser}" -${1} ${ssll} -fsL --write-out %{http_code} --output /dev/null --max-time 10 "https://api.hotstar.com/o/v1/page/1557?offset=0&size=20&tao=0&tas=20")
|
|
|
if [ "$result" = "000" ]; then
|
|
|
echo -n -e "\r HotStar:\t\t\t\t${Font_Red}Failed (Network Connection)${Font_Suffix}\n"
|
|
|
return
|
|
|
elif [ "$result" = "401" ]; then
|
|
|
local region=$(curl $useNIC $xForward --user-agent "${UA_Browser}" -${1} ${ssll} -sI "https://www.hotstar.com" | grep 'geo=' | sed 's/.*geo=//' | cut -f1 -d",")
|
|
|
local site_region=$(curl $useNIC $xForward -${1} ${ssll} -s -o /dev/null -L --max-time 10 -w '%{url_effective}\n' "https://www.hotstar.com" | sed 's@.*com/@@' | tr [:lower:] [:upper:])
|
|
|
if [ -n "$region" ] && [ "$region" = "$site_region" ]; then
|
|
|
echo -n -e "\r HotStar:\t\t\t\t${Font_Green}Yes (Region: $region)${Font_Suffix}\n"
|
|
|
return
|
|
|
else
|
|
|
echo -n -e "\r HotStar:\t\t\t\t${Font_Red}No${Font_Suffix}\n"
|
|
|
return
|
|
|
fi
|
|
|
elif [ "$result" = "475" ]; then
|
|
|
echo -n -e "\r HotStar:\t\t\t\t${Font_Red}No${Font_Suffix}\n"
|
|
|
return
|
|
|
else
|
|
|
echo -n -e "\r HotStar:\t\t\t\t${Font_Red}Failed${Font_Suffix}\n"
|
|
|
fi
|
|
|
|
|
|
}
|
|
|
|
|
|
function MediaUnlockTest_DisneyPlus() {
|
|
|
echo -n -e " Disney+:\t\t\t\t->\c"
|
|
|
local PreAssertion=$(curl $useNIC $xForward -${1} --user-agent "${UA_Browser}" -s --max-time 10 -X POST "https://global.edge.bamgrid.com/devices" -H "authorization: Bearer ZGlzbmV5JmJyb3dzZXImMS4wLjA.Cu56AgSfBTDag5NiRA81oLHkDZfu5L3CKadnefEAY84" -H "content-type: application/json; charset=UTF-8" -d '{"deviceFamily":"browser","applicationRuntime":"chrome","deviceProfile":"windows","attributes":{}}' 2>&1)
|
|
|
if [[ "$PreAssertion" == "curl"* ]] && [[ "$1" == "6" ]]; then
|
|
|
echo -n -e "\r Disney+:\t\t\t\t${Font_Red}IPv6 Not Support${Font_Suffix}\n"
|
|
|
return
|
|
|
elif [[ "$PreAssertion" == "curl"* ]]; then
|
|
|
echo -n -e "\r Disney+:\t\t\t\t${Font_Red}Failed (Network Connection)${Font_Suffix}\n"
|
|
|
return
|
|
|
fi
|
|
|
|
|
|
local assertion=$(echo $PreAssertion | python -m json.tool 2>/dev/null | grep assertion | cut -f4 -d'"')
|
|
|
local PreDisneyCookie=$(curl -s --max-time 10 "https://raw.githubusercontent.com/lmc999/RegionRestrictionCheck/main/cookies" | sed -n '1p')
|
|
|
local disneycookie=$(echo $PreDisneyCookie | sed "s/DISNEYASSERTION/${assertion}/g")
|
|
|
local TokenContent=$(curl $useNIC $xForward -${1} --user-agent "${UA_Browser}" -s --max-time 10 -X POST "https://global.edge.bamgrid.com/token" -H "authorization: Bearer ZGlzbmV5JmJyb3dzZXImMS4wLjA.Cu56AgSfBTDag5NiRA81oLHkDZfu5L3CKadnefEAY84" -d "$disneycookie")
|
|
|
local isBanned=$(echo $TokenContent | python -m json.tool 2>/dev/null | grep 'forbidden-location')
|
|
|
local is403=$(echo $TokenContent | grep '403 ERROR')
|
|
|
|
|
|
if [ -n "$isBanned" ] || [ -n "$is403" ]; then
|
|
|
echo -n -e "\r Disney+:\t\t\t\t${Font_Red}No${Font_Suffix}\n"
|
|
|
return
|
|
|
fi
|
|
|
|
|
|
local fakecontent=$(curl -s --max-time 10 "https://raw.githubusercontent.com/lmc999/RegionRestrictionCheck/main/cookies" | sed -n '8p')
|
|
|
local refreshToken=$(echo $TokenContent | python -m json.tool 2>/dev/null | grep 'refresh_token' | awk '{print $2}' | cut -f2 -d'"')
|
|
|
local disneycontent=$(echo $fakecontent | sed "s/ILOVEDISNEY/${refreshToken}/g")
|
|
|
local tmpresult=$(curl $useNIC $xForward -${1} --user-agent "${UA_Browser}" -X POST -sSL --max-time 10 "https://disney.api.edge.bamgrid.com/graph/v1/device/graphql" -H "authorization: ZGlzbmV5JmJyb3dzZXImMS4wLjA.Cu56AgSfBTDag5NiRA81oLHkDZfu5L3CKadnefEAY84" -d "$disneycontent" 2>&1)
|
|
|
local previewcheck=$(curl $useNIC $xForward -${1} -s -o /dev/null -L --max-time 10 -w '%{url_effective}\n' "https://disneyplus.com" | grep preview)
|
|
|
local isUnabailable=$(echo $previewcheck | grep 'unavailable')
|
|
|
local region=$(echo $tmpresult | python -m json.tool 2>/dev/null | grep 'countryCode' | cut -f4 -d'"')
|
|
|
local inSupportedLocation=$(echo $tmpresult | python -m json.tool 2>/dev/null | grep 'inSupportedLocation' | awk '{print $2}' | cut -f1 -d',')
|
|
|
|
|
|
if [[ "$region" == "JP" ]]; then
|
|
|
echo -n -e "\r Disney+:\t\t\t\t${Font_Green}Yes (Region: JP)${Font_Suffix}\n"
|
|
|
return
|
|
|
elif [ -n "$region" ] && [[ "$inSupportedLocation" == "false" ]] && [ -z "$isUnabailable" ]; then
|
|
|
echo -n -e "\r Disney+:\t\t\t\t${Font_Yellow}Available For [Disney+ $region] Soon${Font_Suffix}\n"
|
|
|
return
|
|
|
elif [ -n "$region" ] && [ -n "$isUnavailable" ]; then
|
|
|
echo -n -e "\r Disney+:\t\t\t\t${Font_Red}No${Font_Suffix}\n"
|
|
|
return
|
|
|
elif [ -n "$region" ] && [[ "$inSupportedLocation" == "true" ]]; then
|
|
|
echo -n -e "\r Disney+:\t\t\t\t${Font_Green}Yes (Region: $region)${Font_Suffix}\n"
|
|
|
return
|
|
|
elif [ -z "$region" ]; then
|
|
|
echo -n -e "\r Disney+:\t\t\t\t${Font_Red}No${Font_Suffix}\n"
|
|
|
return
|
|
|
else
|
|
|
echo -n -e "\r Disney+:\t\t\t\t${Font_Red}Failed${Font_Suffix}\n"
|
|
|
return
|
|
|
fi
|
|
|
|
|
|
}
|
|
|
|
|
|
function MediaUnlockTest_NetflixCDN() {
|
|
|
echo -n -e " Netflix Preferred CDN:\t\t\t->\c"
|
|
|
local tmpresult=$(curl $useNIC $xForward -${1} ${ssll} -s --max-time 10 "https://api.fast.com/netflix/speedtest/v2?https=true&token=YXNkZmFzZGxmbnNkYWZoYXNkZmhrYWxm&urlCount=1")
|
|
|
if [ -z "$tmpresult" ]; then
|
|
|
echo -n -e "\r Netflix Preferred CDN:\t\t\t${Font_Red}Failed${Font_Suffix}\n"
|
|
|
return
|
|
|
elif [ -n "$(echo $tmpresult | grep '>403<')" ]; then
|
|
|
echo -n -e "\r Netflix Preferred CDN:\t\t\t${Font_Red}Failed (IP Banned By Netflix)${Font_Suffix}\n"
|
|
|
return
|
|
|
fi
|
|
|
|
|
|
local CDNAddr=$(echo $tmpresult | sed 's/.*"url":"//' | cut -f3 -d"/")
|
|
|
if [[ "$1" == "6" ]]; then
|
|
|
nslookup -q=AAAA $CDNAddr >~/v6_addr.txt
|
|
|
ifAAAA=$(cat ~/v6_addr.txt | grep 'AAAA address' | awk '{print $NF}')
|
|
|
if [ -z "$ifAAAA" ]; then
|
|
|
CDNIP=$(cat ~/v6_addr.txt | grep Address | sed -n '$p' | awk '{print $NF}')
|
|
|
else
|
|
|
CDNIP=${ifAAAA}
|
|
|
fi
|
|
|
else
|
|
|
CDNIP=$(nslookup $CDNAddr | sed '/^\s*$/d' | awk 'END {print}' | awk '{print $2}')
|
|
|
fi
|
|
|
|
|
|
if [ -z "$CDNIP" ]; then
|
|
|
echo -n -e "\r Netflix Preferred CDN:\t\t\t${Font_Red}Failed (CDN IP Not Found)${Font_Suffix}\n"
|
|
|
rm -rf ~/v6_addr.txt
|
|
|
return
|
|
|
fi
|
|
|
|
|
|
local CDN_ISP=$(curl $useNIC $xForward --user-agent "${UA_Browser}" -s --max-time 20 "https://api.ip.sb/geoip/$CDNIP" | python -m json.tool 2>/dev/null | grep 'isp' | cut -f4 -d'"')
|
|
|
local iata=$(echo $CDNAddr | cut -f3 -d"-" | sed 's/.\{3\}$//' | tr [:lower:] [:upper:])
|
|
|
local isIataFound1=$(curl -s --max-time 10 "https://raw.githubusercontent.com/lmc999/RegionRestrictionCheck/main/reference/IATACode.txt" | grep $iata)
|
|
|
local isIataFound2=$(curl -s --max-time 10 "https://raw.githubusercontent.com/lmc999/RegionRestrictionCheck/main/reference/IATACode2.txt" | grep $iata)
|
|
|
|
|
|
if [ -n "$isIataFound1" ]; then
|
|
|
local lineNo=$(curl $useNIC $xForward -s --max-time 10 "https://raw.githubusercontent.com/lmc999/RegionRestrictionCheck/main/reference/IATACode.txt" | cut -f3 -d"|" | sed -n "/${iata}/=")
|
|
|
local location=$(curl $useNIC $xForward -s --max-time 10 "https://raw.githubusercontent.com/lmc999/RegionRestrictionCheck/main/reference/IATACode.txt" | awk "NR==${lineNo}" | cut -f1 -d"|" | sed -e 's/^[[:space:]]*//')
|
|
|
elif [ -z "$isIataFound1" ] && [ -n "$isIataFound2" ]; then
|
|
|
local lineNo=$(curl $useNIC $xForward -s --max-time 10 "https://raw.githubusercontent.com/lmc999/RegionRestrictionCheck/main/reference/IATACode2.txt" | awk '{print $1}' | sed -n "/${iata}/=")
|
|
|
local location=$(curl $useNIC $xForward -s --max-time 10 "https://raw.githubusercontent.com/lmc999/RegionRestrictionCheck/main/reference/IATACode2.txt" | awk "NR==${lineNo}" | cut -f2 -d"," | sed -e 's/^[[:space:]]*//' | tr [:upper:] [:lower:] | sed 's/\b[a-z]/\U&/g')
|
|
|
fi
|
|
|
|
|
|
if [ -n "$location" ] && [[ "$CDN_ISP" == "Netflix Streaming Services" ]]; then
|
|
|
echo -n -e "\r Netflix Preferred CDN:\t\t\t${Font_Green}$location ${Font_Suffix}\n"
|
|
|
rm -rf ~/v6_addr.txt
|
|
|
return
|
|
|
elif [ -n "$location" ] && [[ "$CDN_ISP" != "Netflix Streaming Services" ]]; then
|
|
|
echo -n -e "\r Netflix Preferred CDN:\t\t\t${Font_Yellow}Associated with [$CDN_ISP] in [$location]${Font_Suffix}\n"
|
|
|
rm -rf ~/v6_addr.txt
|
|
|
return
|
|
|
elif [ -n "$location" ] && [ -z "$CDN_ISP" ]; then
|
|
|
echo -n -e "\r Netflix Preferred CDN:\t\t\t${Font_Red}No ISP Info Founded${Font_Suffix}\n"
|
|
|
rm -rf ~/v6_addr.txt
|
|
|
return
|
|
|
fi
|
|
|
}
|
|
|
|
|
|
function MediaUnlockTest_YouTube_Premium() {
|
|
|
echo -n -e " YouTube Premium:\t\t\t->\c"
|
|
|
local tmpresult=$(curl $useNIC $xForward --user-agent "${UA_Browser}" -${1} --max-time 10 -sSL -H "Accept-Language: en" -b "YSC=BiCUU3-5Gdk; CONSENT=YES+cb.20220301-11-p0.en+FX+700; GPS=1; VISITOR_INFO1_LIVE=4VwPMkB7W5A; PREF=tz=Asia.Shanghai; _gcl_au=1.1.1809531354.1646633279" "https://www.youtube.com/premium" 2>&1)
|
|
|
|
|
|
if [[ "$tmpresult" == "curl"* ]]; then
|
|
|
echo -n -e "\r YouTube Premium:\t\t\t${Font_Red}Failed (Network Connection)${Font_Suffix}\n"
|
|
|
return
|
|
|
fi
|
|
|
|
|
|
local isCN=$(echo $tmpresult | grep 'www.google.cn')
|
|
|
if [ -n "$isCN" ]; then
|
|
|
echo -n -e "\r YouTube Premium:\t\t\t${Font_Red}No${Font_Suffix} ${Font_Green} (Region: CN)${Font_Suffix} \n"
|
|
|
return
|
|
|
fi
|
|
|
local isNotAvailable=$(echo $tmpresult | grep 'Premium is not available in your country')
|
|
|
local region=$(echo $tmpresult | grep "countryCode" | sed 's/.*"countryCode"//' | cut -f2 -d'"')
|
|
|
local isAvailable=$(echo $tmpresult | grep 'manageSubscriptionButton')
|
|
|
|
|
|
if [ -n "$isNotAvailable" ]; then
|
|
|
echo -n -e "\r YouTube Premium:\t\t\t${Font_Red}No${Font_Suffix} \n"
|
|
|
return
|
|
|
elif [ -n "$isAvailable" ] && [ -n "$region" ]; then
|
|
|
echo -n -e "\r YouTube Premium:\t\t\t${Font_Green}Yes (Region: $region)${Font_Suffix}\n"
|
|
|
return
|
|
|
elif [ -z "$region" ] && [ -n "$isAvailable" ]; then
|
|
|
echo -n -e "\r YouTube Premium:\t\t\t${Font_Green}Yes${Font_Suffix}\n"
|
|
|
return
|
|
|
else
|
|
|
echo -n -e "\r YouTube Premium:\t\t\t${Font_Red}Failed${Font_Suffix}\n"
|
|
|
fi
|
|
|
|
|
|
}
|
|
|
|
|
|
function MediaUnlockTest_PrimeVideo_Region() {
|
|
|
echo -n -e " Amazon Prime Video:\t\t\t->\c"
|
|
|
local tmpresult=$(curl $useNIC $xForward -${1} ${ssll} --user-agent "${UA_Browser}" -s --max-time 10 "https://www.primevideo.com")
|
|
|
|
|
|
if [[ "$tmpresult" = "curl"* ]]; then
|
|
|
echo -n -e "\r Amazon Prime Video:\t\t\t${Font_Red}Failed (Network Connection)${Font_Suffix}\n"
|
|
|
return
|
|
|
fi
|
|
|
|
|
|
local result=$(echo $tmpresult | grep '"currentTerritory":' | sed 's/.*currentTerritory//' | cut -f3 -d'"' | head -n 1)
|
|
|
if [ -n "$result" ]; then
|
|
|
echo -n -e "\r Amazon Prime Video:\t\t\t${Font_Green}Yes (Region: $result)${Font_Suffix}\n"
|
|
|
return
|
|
|
else
|
|
|
echo -n -e "\r Amazon Prime Video:\t\t\t${Font_Red}Unsupported${Font_Suffix}\n"
|
|
|
return
|
|
|
fi
|
|
|
|
|
|
}
|
|
|
|
|
|
function MediaUnlockTest_TVBAnywhere() {
|
|
|
echo -n -e " TVBAnywhere+:\t\t\t\t->\c"
|
|
|
local tmpresult=$(curl $useNIC $xForward -${1} ${ssll} -s --max-time 10 "https://uapisfm.tvbanywhere.com.sg/geoip/check/platform/android")
|
|
|
if [ -z "$tmpresult" ]; then
|
|
|
echo -n -e "\r TVBAnywhere+:\t\t\t\t${Font_Red}Failed (Network Connection)${Font_Suffix}\n"
|
|
|
return
|
|
|
fi
|
|
|
|
|
|
local result=$(echo $tmpresult | python -m json.tool 2>/dev/null | grep 'allow_in_this_country' | awk '{print $2}' | cut -f1 -d",")
|
|
|
if [[ "$result" == "true" ]]; then
|
|
|
echo -n -e "\r TVBAnywhere+:\t\t\t\t${Font_Green}Yes${Font_Suffix}\n"
|
|
|
return
|
|
|
elif [[ "$result" == "false" ]]; then
|
|
|
echo -n -e "\r TVBAnywhere+:\t\t\t\t${Font_Red}No${Font_Suffix}\n"
|
|
|
return
|
|
|
else
|
|
|
echo -n -e "\r TVBAnywhere+:\t\t\t\t${Font_Red}Failed${Font_Suffix}\n"
|
|
|
fi
|
|
|
|
|
|
}
|
|
|
|
|
|
function MediaUnlockTest_iQYI_Region() {
|
|
|
echo -n -e " iQyi Oversea Region:\t\t\t->\c"
|
|
|
curl $useNIC $xForward -${1} ${ssll} -s -I --max-time 10 "https://www.iq.com/" >~/iqiyi
|
|
|
|
|
|
if [ $? -eq 1 ]; then
|
|
|
echo -n -e "\r iQyi Oversea Region:\t\t\t${Font_Red}Failed (Network Connection)${Font_Suffix}\n"
|
|
|
return
|
|
|
fi
|
|
|
|
|
|
result=$(cat ~/iqiyi | grep 'mod=' | awk '{print $2}' | cut -f2 -d'=' | cut -f1 -d';')
|
|
|
rm ~/iqiyi >/dev/null 2>&1
|
|
|
|
|
|
if [ -n "$result" ]; then
|
|
|
if [[ "$result" == "ntw" ]]; then
|
|
|
result=TW
|
|
|
echo -n -e "\r iQyi Oversea Region:\t\t\t${Font_Green}${result}${Font_Suffix}\n"
|
|
|
return
|
|
|
else
|
|
|
result=$(echo $result | tr [:lower:] [:upper:])
|
|
|
echo -n -e "\r iQyi Oversea Region:\t\t\t${Font_Green}${result}${Font_Suffix}\n"
|
|
|
return
|
|
|
fi
|
|
|
else
|
|
|
echo -n -e "\r iQyi Oversea Region:\t\t\t${Font_Red}Failed${Font_Suffix}\n"
|
|
|
return
|
|
|
fi
|
|
|
}
|
|
|
|
|
|
function MediaUnlockTest_Viu.com() {
|
|
|
echo -n -e " Viu.com:\t\t\t\t->\c"
|
|
|
local tmpresult=$(curl $useNIC $xForward -${1} ${ssll} -s -o /dev/null -L --max-time 10 -w '%{url_effective}\n' "https://www.viu.com/")
|
|
|
if [ "$tmpresult" = "000" ]; then
|
|
|
echo -n -e "\r Viu.com:\t\t\t\t${Font_Red}Failed (Network Connection)${Font_Suffix}\n"
|
|
|
return
|
|
|
fi
|
|
|
|
|
|
result=$(echo $tmpresult | cut -f5 -d"/")
|
|
|
if [ -n "$result" ]; then
|
|
|
if [[ "$result" == "no-service" ]]; then
|
|
|
echo -n -e "\r Viu.com:\t\t\t\t${Font_Red}No${Font_Suffix}\n"
|
|
|
return
|
|
|
else
|
|
|
result=$(echo $result | tr [:lower:] [:upper:])
|
|
|
echo -n -e "\r Viu.com:\t\t\t\t${Font_Green}Yes (Region: ${result})${Font_Suffix}\n"
|
|
|
return
|
|
|
fi
|
|
|
|
|
|
else
|
|
|
echo -n -e "\r Viu.com:\t\t\t\t${Font_Red}Failed${Font_Suffix}\n"
|
|
|
return
|
|
|
fi
|
|
|
}
|
|
|
|
|
|
function MediaUnlockTest_YouTube_CDN() {
|
|
|
echo -n -e " YouTube CDN:\t\t\t\t->\c"
|
|
|
local tmpresult=$(curl $useNIC $xForward -${1} ${ssll} -sS --max-time 10 "https://redirector.googlevideo.com/report_mapping" 2>&1)
|
|
|
|
|
|
if [[ "$tmpresult" == "curl"* ]]; then
|
|
|
echo -n -e "\r YouTube Region:\t\t\t${Font_Red}Check Failed (Network Connection)${Font_Suffix}\n"
|
|
|
return
|
|
|
fi
|
|
|
|
|
|
local iata=$(echo $tmpresult | grep router | cut -f2 -d'"' | cut -f2 -d"." | sed 's/.\{2\}$//' | tr [:lower:] [:upper:])
|
|
|
local checkfailed=$(echo $tmpresult | grep "=>")
|
|
|
if [ -z "$iata" ] && [ -n "$checkfailed" ]; then
|
|
|
CDN_ISP=$(echo $checkfailed | awk '{print $3}' | cut -f1 -d"-" | tr [:lower:] [:upper:])
|
|
|
echo -n -e "\r YouTube CDN:\t\t\t\t${Font_Yellow}Associated with [$CDN_ISP]${Font_Suffix}\n"
|
|
|
return
|
|
|
elif [ -n "$iata" ]; then
|
|
|
local lineNo=$(curl $useNIC $xForward -s --max-time 10 "https://raw.githubusercontent.com/lmc999/RegionRestrictionCheck/main/reference/IATACode.txt" | cut -f3 -d"|" | sed -n "/${iata}/=")
|
|
|
local location=$(curl $useNIC $xForward -s --max-time 10 "https://raw.githubusercontent.com/lmc999/RegionRestrictionCheck/main/reference/IATACode.txt" | awk "NR==${lineNo}" | cut -f1 -d"|" | sed -e 's/^[[:space:]]*//')
|
|
|
echo -n -e "\r YouTube CDN:\t\t\t\t${Font_Green}$location${Font_Suffix}\n"
|
|
|
return
|
|
|
else
|
|
|
echo -n -e "\r YouTube CDN:\t\t\t\t${Font_Red}Undetectable${Font_Suffix}\n"
|
|
|
return
|
|
|
fi
|
|
|
|
|
|
}
|
|
|
|
|
|
function MediaUnlockTest_NetflixCDN() {
|
|
|
echo -n -e " Netflix Preferred CDN:\t\t\t->\c"
|
|
|
local tmpresult=$(curl $useNIC $xForward -${1} ${ssll} -s --max-time 10 "https://api.fast.com/netflix/speedtest/v2?https=true&token=YXNkZmFzZGxmbnNkYWZoYXNkZmhrYWxm&urlCount=1")
|
|
|
if [ -z "$tmpresult" ]; then
|
|
|
echo -n -e "\r Netflix Preferred CDN:\t\t\t${Font_Red}Failed${Font_Suffix}\n"
|
|
|
return
|
|
|
elif [ -n "$(echo $tmpresult | grep '>403<')" ]; then
|
|
|
echo -n -e "\r Netflix Preferred CDN:\t\t\t${Font_Red}Failed (IP Banned By Netflix)${Font_Suffix}\n"
|
|
|
return
|
|
|
fi
|
|
|
|
|
|
local CDNAddr=$(echo $tmpresult | sed 's/.*"url":"//' | cut -f3 -d"/")
|
|
|
if [[ "$1" == "6" ]]; then
|
|
|
nslookup -q=AAAA $CDNAddr >~/v6_addr.txt
|
|
|
ifAAAA=$(cat ~/v6_addr.txt | grep 'AAAA address' | awk '{print $NF}')
|
|
|
if [ -z "$ifAAAA" ]; then
|
|
|
CDNIP=$(cat ~/v6_addr.txt | grep Address | sed -n '$p' | awk '{print $NF}')
|
|
|
else
|
|
|
CDNIP=${ifAAAA}
|
|
|
fi
|
|
|
else
|
|
|
CDNIP=$(nslookup $CDNAddr | sed '/^\s*$/d' | awk 'END {print}' | awk '{print $2}')
|
|
|
fi
|
|
|
|
|
|
if [ -z "$CDNIP" ]; then
|
|
|
echo -n -e "\r Netflix Preferred CDN:\t\t\t${Font_Red}Failed (CDN IP Not Found)${Font_Suffix}\n"
|
|
|
rm -rf ~/v6_addr.txt
|
|
|
return
|
|
|
fi
|
|
|
|
|
|
local CDN_ISP=$(curl $useNIC $xForward --user-agent "${UA_Browser}" -s --max-time 20 "https://api.ip.sb/geoip/$CDNIP" | python -m json.tool 2>/dev/null | grep 'isp' | cut -f4 -d'"')
|
|
|
local iata=$(echo $CDNAddr | cut -f3 -d"-" | sed 's/.\{3\}$//' | tr [:lower:] [:upper:])
|
|
|
local isIataFound1=$(curl -s --max-time 10 "https://raw.githubusercontent.com/lmc999/RegionRestrictionCheck/main/reference/IATACode.txt" | grep $iata)
|
|
|
local isIataFound2=$(curl -s --max-time 10 "https://raw.githubusercontent.com/lmc999/RegionRestrictionCheck/main/reference/IATACode2.txt" | grep $iata)
|
|
|
|
|
|
if [ -n "$isIataFound1" ]; then
|
|
|
local lineNo=$(curl $useNIC $xForward -s --max-time 10 "https://raw.githubusercontent.com/lmc999/RegionRestrictionCheck/main/reference/IATACode.txt" | cut -f3 -d"|" | sed -n "/${iata}/=")
|
|
|
local location=$(curl $useNIC $xForward -s --max-time 10 "https://raw.githubusercontent.com/lmc999/RegionRestrictionCheck/main/reference/IATACode.txt" | awk "NR==${lineNo}" | cut -f1 -d"|" | sed -e 's/^[[:space:]]*//')
|
|
|
elif [ -z "$isIataFound1" ] && [ -n "$isIataFound2" ]; then
|
|
|
local lineNo=$(curl $useNIC $xForward -s --max-time 10 "https://raw.githubusercontent.com/lmc999/RegionRestrictionCheck/main/reference/IATACode2.txt" | awk '{print $1}' | sed -n "/${iata}/=")
|
|
|
local location=$(curl $useNIC $xForward -s --max-time 10 "https://raw.githubusercontent.com/lmc999/RegionRestrictionCheck/main/reference/IATACode2.txt" | awk "NR==${lineNo}" | cut -f2 -d"," | sed -e 's/^[[:space:]]*//' | tr [:upper:] [:lower:] | sed 's/\b[a-z]/\U&/g')
|
|
|
fi
|
|
|
|
|
|
if [ -n "$location" ] && [[ "$CDN_ISP" == "Netflix Streaming Services" ]]; then
|
|
|
echo -n -e "\r Netflix Preferred CDN:\t\t\t${Font_Green}$location ${Font_Suffix}\n"
|
|
|
rm -rf ~/v6_addr.txt
|
|
|
return
|
|
|
elif [ -n "$location" ] && [[ "$CDN_ISP" != "Netflix Streaming Services" ]]; then
|
|
|
echo -n -e "\r Netflix Preferred CDN:\t\t\t${Font_Yellow}Associated with [$CDN_ISP] in [$location]${Font_Suffix}\n"
|
|
|
rm -rf ~/v6_addr.txt
|
|
|
return
|
|
|
elif [ -n "$location" ] && [ -z "$CDN_ISP" ]; then
|
|
|
echo -n -e "\r Netflix Preferred CDN:\t\t\t${Font_Red}No ISP Info Founded${Font_Suffix}\n"
|
|
|
rm -rf ~/v6_addr.txt
|
|
|
return
|
|
|
fi
|
|
|
}
|
|
|
|
|
|
function MediaUnlockTest_Spotify() {
|
|
|
local tmpresult=$(curl $useNIC $xForward -${1} ${ssll} --user-agent "${UA_Browser}" -s --max-time 10 -X POST "https://spclient.wg.spotify.com/signup/public/v1/account" -d "birth_day=11&birth_month=11&birth_year=2000&collect_personal_info=undefined&creation_flow=&creation_point=https%3A%2F%2Fwww.spotify.com%2Fhk-en%2F&displayname=Gay%20Lord&gender=male&iagree=1&key=a1e486e2729f46d6bb368d6b2bcda326&platform=www&referrer=&send-email=0&thirdpartyemail=0&identifier_token=AgE6YTvEzkReHNfJpO114514" -H "Accept-Language: en")
|
|
|
local region=$(echo $tmpresult | python -m json.tool 2>/dev/null | grep '"country":' | cut -f4 -d'"')
|
|
|
local isLaunched=$(echo $tmpresult | python -m json.tool 2>/dev/null | grep is_country_launched | cut -f1 -d',' | awk '{print $2}')
|
|
|
local StatusCode=$(echo $tmpresult | python -m json.tool 2>/dev/null | grep status | cut -f1 -d',' | awk '{print $2}')
|
|
|
echo -n -e " Spotify Registration:\t\t\t->\c"
|
|
|
|
|
|
if [ "$tmpresult" = "000" ]; then
|
|
|
echo -n -e "\r Spotify Registration:\t\t\t${Font_Red}Failed (Network Connection)${Font_Suffix}\n"
|
|
|
return
|
|
|
elif [ "$StatusCode" = "320" ]; then
|
|
|
echo -n -e "\r Spotify Registration:\t\t\t${Font_Red}No${Font_Suffix}\n"
|
|
|
return
|
|
|
elif [ "$StatusCode" = "311" ] && [ "$isLaunched" = "true" ]; then
|
|
|
echo -n -e "\r Spotify Registration:\t\t\t${Font_Green}Yes (Region: $region)${Font_Suffix}\n"
|
|
|
return
|
|
|
fi
|
|
|
}
|
|
|
|
|
|
function GameTest_Steam() {
|
|
|
echo -n -e " Steam Currency:\t\t\t->\c"
|
|
|
local result=$(curl $useNIC $xForward --user-agent "${UA_Browser}" -${1} -fsSL --max-time 10 "https://store.steampowered.com/app/761830" 2>&1 | grep priceCurrency | cut -d '"' -f4)
|
|
|
|
|
|
if [ ! -n "$result" ]; then
|
|
|
echo -n -e "\r Steam Currency:\t\t\t${Font_Red}Failed (Network Connection)${Font_Suffix}\n"
|
|
|
else
|
|
|
echo -n -e "\r Steam Currency:\t\t\t${Font_Green}${result}${Font_Suffix}\n"
|
|
|
fi
|
|
|
}
|
|
|
|
|
|
trap _exit INT QUIT TERM
|
|
|
|
|
|
_red() { echo -e "\033[31m\033[01m$@\033[0m"; }
|
|
|
|
|
|
_green() { echo -e "\033[32m\033[01m$@\033[0m"; }
|
|
|
|
|
|
_yellow() { echo -e "\033[33m\033[01m$@\033[0m"; }
|
|
|
|
|
|
_blue() { echo -e "\033[36m\033[01m$@\033[0m"; }
|
|
|
|
|
|
_exists() {
|
|
|
local cmd="$1"
|
|
|
if eval type type > /dev/null 2>&1; then
|
|
|
eval type "$cmd" > /dev/null 2>&1
|
|
|
elif command > /dev/null 2>&1; then
|
|
|
command -v "$cmd" > /dev/null 2>&1
|
|
|
else
|
|
|
which "$cmd" > /dev/null 2>&1
|
|
|
fi
|
|
|
local rt=$?
|
|
|
return ${rt}
|
|
|
}
|
|
|
|
|
|
_exit() {
|
|
|
_red "\n检测到退出操作,脚本终止!\n"
|
|
|
# clean up
|
|
|
rm -fr speedtest.tgz speedtest-cli benchtest_*
|
|
|
exit 1
|
|
|
}
|
|
|
|
|
|
get_opsy() {
|
|
|
[ -f /etc/redhat-release ] && awk '{print $0}' /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() {
|
|
|
speed_test2 '' 'speedtest'
|
|
|
speed_test2 '21541' '洛杉矶\t'
|
|
|
speed_test2 '13623' '新加坡\t'
|
|
|
speed_test2 '44988' '日本东京'
|
|
|
speed_test2 '16176' '中国香港'
|
|
|
speed_test2 '3633' '电信上海' '电信'
|
|
|
# speed_test '27594' '电信广东广州5G' '电信'
|
|
|
speed_test2 '5396' '电信江苏苏州5G' '电信'
|
|
|
speed_test2 '24447' '联通上海' '联通'
|
|
|
speed_test2 '26678' '联通广东广州5G' '联通'
|
|
|
# speed_test '4870' '联通湖南长沙' '联通'
|
|
|
# speed_test '15863' '移动广西南宁' '移动'
|
|
|
speed_test2 '16398' '移动贵州贵阳' '移动'
|
|
|
speed_test2 '27249' '移动江苏南京5G' '移动'
|
|
|
#https://raw.githubusercontent.com/zq/superspeed/master/superspeed.sh
|
|
|
}
|
|
|
|
|
|
# =============== 磁盘测试 部分 ===============
|
|
|
Run_DiskTest_DD() {
|
|
|
# 调用方式: Run_DiskTest_DD "测试文件名" "块大小" "写入次数" "测试项目名称"
|
|
|
mkdir -p ${WorkDir}/DiskTest/ >/dev/null 2>&1
|
|
|
SystemInfo_GetVirtType
|
|
|
mkdir -p /.tmp_LBench/DiskTest >/dev/null 2>&1
|
|
|
mkdir -p ${WorkDir}/data >/dev/null 2>&1
|
|
|
local Var_DiskTestResultFile="${WorkDir}/data/disktest_result"
|
|
|
# 将先测试读, 后测试写
|
|
|
echo -n -e " $4\t\t->\c"
|
|
|
# 清理缓存, 避免影响测试结果
|
|
|
sync
|
|
|
if [ "${Var_VirtType}" != "docker" ] && [ "${Var_VirtType}" != "openvz" ] && [ "${Var_VirtType}" != "lxc" ] && [ "${Var_VirtType}" != "wsl" ]; then
|
|
|
echo 3 >/proc/sys/vm/drop_caches
|
|
|
fi
|
|
|
# 避免磁盘压力过高, 启动测试前暂停1s
|
|
|
sleep 1
|
|
|
# 正式写测试
|
|
|
dd if=/dev/zero of=/.tmp_LBench/DiskTest/$1 bs=$2 count=$3 oflag=direct 2>${Var_DiskTestResultFile}
|
|
|
local DiskTest_WriteSpeed_ResultRAW="$(cat ${Var_DiskTestResultFile} | grep -oE "[0-9]{1,4} kB\/s|[0-9]{1,4}.[0-9]{1,2} kB\/s|[0-9]{1,4} KB\/s|[0-9]{1,4}.[0-9]{1,2} KB\/s|[0-9]{1,4} MB\/s|[0-9]{1,4}.[0-9]{1,2} MB\/s|[0-9]{1,4} GB\/s|[0-9]{1,4}.[0-9]{1,2} GB\/s|[0-9]{1,4} TB\/s|[0-9]{1,4}.[0-9]{1,2} TB\/s|[0-9]{1,4} kB\/秒|[0-9]{1,4}.[0-9]{1,2} kB\/秒|[0-9]{1,4} KB\/秒|[0-9]{1,4}.[0-9]{1,2} KB\/秒|[0-9]{1,4} MB\/秒|[0-9]{1,4}.[0-9]{1,2} MB\/秒|[0-9]{1,4} GB\/秒|[0-9]{1,4}.[0-9]{1,2} GB\/秒|[0-9]{1,4} TB\/秒|[0-9]{1,4}.[0-9]{1,2} TB\/秒")"
|
|
|
DiskTest_WriteSpeed="$(echo "${DiskTest_WriteSpeed_ResultRAW}" | sed "s/秒/s/")"
|
|
|
local DiskTest_WriteTime_ResultRAW="$(cat ${Var_DiskTestResultFile} | grep -oE "[0-9]{1,}.[0-9]{1,} s|[0-9]{1,}.[0-9]{1,} s|[0-9]{1,}.[0-9]{1,} 秒|[0-9]{1,}.[0-9]{1,} 秒")"
|
|
|
DiskTest_WriteTime="$(echo ${DiskTest_WriteTime_ResultRAW} | awk '{print $1}')"
|
|
|
DiskTest_WriteIOPS="$(echo ${DiskTest_WriteTime} $3 | awk '{printf "%d\n",$2/$1}')"
|
|
|
DiskTest_WritePastTime="$(echo ${DiskTest_WriteTime} | awk '{printf "%.2f\n",$1}')"
|
|
|
if [ "${DiskTest_WriteIOPS}" -ge "10000" ]; then
|
|
|
DiskTest_WriteIOPS="$(echo ${DiskTest_WriteIOPS} 1000 | awk '{printf "%.2f\n",$2/$1}')"
|
|
|
echo -n -e "\r $4\t\t${Font_SkyBlue}${DiskTest_WriteSpeed} (${DiskTest_WriteIOPS}K IOPS, ${DiskTest_WritePastTime}s)${Font_Suffix}\t\t->\c"
|
|
|
else
|
|
|
echo -n -e "\r $4\t\t${Font_SkyBlue}${DiskTest_WriteSpeed} (${DiskTest_WriteIOPS} IOPS, ${DiskTest_WritePastTime}s)${Font_Suffix}\t\t->\c"
|
|
|
fi
|
|
|
# 清理结果文件, 准备下一次测试
|
|
|
rm -f ${Var_DiskTestResultFile}
|
|
|
# 清理缓存, 避免影响测试结果
|
|
|
sync
|
|
|
if [ "${Var_VirtType}" != "docker" ] && [ "${Var_VirtType}" != "wsl" ]; then
|
|
|
echo 3 >/proc/sys/vm/drop_caches
|
|
|
fi
|
|
|
sleep 0.5
|
|
|
# 正式读测试
|
|
|
dd if=/.tmp_LBench/DiskTest/$1 of=/dev/null bs=$2 count=$3 iflag=direct 2>${Var_DiskTestResultFile}
|
|
|
local DiskTest_ReadSpeed_ResultRAW="$(cat ${Var_DiskTestResultFile} | grep -oE "[0-9]{1,4} kB\/s|[0-9]{1,4}.[0-9]{1,2} kB\/s|[0-9]{1,4} KB\/s|[0-9]{1,4}.[0-9]{1,2} KB\/s|[0-9]{1,4} MB\/s|[0-9]{1,4}.[0-9]{1,2} MB\/s|[0-9]{1,4} GB\/s|[0-9]{1,4}.[0-9]{1,2} GB\/s|[0-9]{1,4} TB\/s|[0-9]{1,4}.[0-9]{1,2} TB\/s|[0-9]{1,4} kB\/秒|[0-9]{1,4}.[0-9]{1,2} kB\/秒|[0-9]{1,4} KB\/秒|[0-9]{1,4}.[0-9]{1,2} KB\/秒|[0-9]{1,4} MB\/秒|[0-9]{1,4}.[0-9]{1,2} MB\/秒|[0-9]{1,4} GB\/秒|[0-9]{1,4}.[0-9]{1,2} GB\/秒|[0-9]{1,4} TB\/秒|[0-9]{1,4}.[0-9]{1,2} TB\/秒")"
|
|
|
DiskTest_ReadSpeed="$(echo "${DiskTest_ReadSpeed_ResultRAW}" | sed "s/s/s/")"
|
|
|
local DiskTest_ReadTime_ResultRAW="$(cat ${Var_DiskTestResultFile} | grep -oE "[0-9]{1,}.[0-9]{1,} s|[0-9]{1,}.[0-9]{1,} s|[0-9]{1,}.[0-9]{1,} 秒|[0-9]{1,}.[0-9]{1,} 秒")"
|
|
|
DiskTest_ReadTime="$(echo ${DiskTest_ReadTime_ResultRAW} | awk '{print $1}')"
|
|
|
DiskTest_ReadIOPS="$(echo ${DiskTest_ReadTime} $3 | awk '{printf "%d\n",$2/$1}')"
|
|
|
DiskTest_ReadPastTime="$(echo ${DiskTest_ReadTime} | awk '{printf "%.2f\n",$1}')"
|
|
|
rm -f ${Var_DiskTestResultFile}
|
|
|
# 输出结果
|
|
|
echo -n -e "\r $4\t\t${Font_SkyBlue}${DiskTest_WriteSpeed} (${DiskTest_WriteIOPS} IOPS, ${DiskTest_WritePastTime}s)${Font_Suffix}\t\t${Font_SkyBlue}${DiskTest_ReadSpeed} (${DiskTest_ReadIOPS} IOPS, ${DiskTest_ReadPastTime}s)${Font_Suffix}\n"
|
|
|
echo -e " $4\t\t${DiskTest_WriteSpeed} (${DiskTest_WriteIOPS} IOPS, ${DiskTest_WritePastTime} s)\t\t${DiskTest_ReadSpeed} (${DiskTest_ReadIOPS} IOPS, ${DiskTest_ReadPastTime} s)" >>${WorkDir}/DiskTest/result.txt
|
|
|
rm -rf /.tmp_LBench/DiskTest/
|
|
|
}
|
|
|
|
|
|
Function_DiskTest_Fast() {
|
|
|
mkdir -p ${WorkDir}/DiskTest/ >/dev/null 2>&1
|
|
|
echo -e " ${Font_Yellow}-> 磁盘IO测试中 (4K Block/1M Block, Direct Mode)${Font_Suffix}\n"
|
|
|
echo -e " -> 磁盘IO测试中 (4K Block/1M Block, Direct Mode)\n" >>${WorkDir}/DiskTest/result.txt
|
|
|
SystemInfo_GetVirtType
|
|
|
SystemInfo_GetOSRelease
|
|
|
if [ "${Var_VirtType}" = "docker" ] || [ "${Var_VirtType}" = "wsl" ]; then
|
|
|
echo -e " ${Msg_Warning}Due to virt architecture limit, the result may affect by the cache !\n"
|
|
|
fi
|
|
|
echo -e " ${Font_Yellow}测试操作\t\t写速度\t\t\t\t\t读速度${Font_Suffix}"
|
|
|
echo -e " Test Name\t\tWrite Speed\t\t\t\tRead Speed" >>${WorkDir}/DiskTest/result.txt
|
|
|
Run_DiskTest_DD "100MB.test" "4k" "25600" "100MB-4K Block"
|
|
|
Run_DiskTest_DD "1GB.test" "1M" "1000" "1GB-1M Block"
|
|
|
# 执行完成, 标记FLAG
|
|
|
LBench_Flag_FinishDiskTestFast="1"
|
|
|
sleep 1
|
|
|
}
|
|
|
|
|
|
# =============== SysBench - 内存性能 部分 ===============
|
|
|
Run_SysBench_Memory() {
|
|
|
# 调用方式: Run_SysBench_Memory "线程数" "测试时长(s)" "测试遍数" "测试模式(读/写)" "读写方式(顺序/随机)" "说明"
|
|
|
# 变量初始化
|
|
|
mkdir -p ${WorkDir}/SysBench/Memory/ >/dev/null 2>&1
|
|
|
maxtestcount="$3"
|
|
|
local count="1"
|
|
|
local TestScore="0.00"
|
|
|
local TestSpeed="0.00"
|
|
|
local TotalScore="0.00"
|
|
|
local TotalSpeed="0.00"
|
|
|
if [ "$1" -ge "2" ]; then
|
|
|
MultiThread_Flag="1"
|
|
|
else
|
|
|
MultiThread_Flag="0"
|
|
|
fi
|
|
|
# 运行测试
|
|
|
while [ $count -le $maxtestcount ]; do
|
|
|
if [ "$1" -ge "2" ] && [ "$4" = "write" ]; then
|
|
|
echo -e "\r ${Font_Yellow}$6:${Font_Suffix}\t$count/$maxtestcount \c"
|
|
|
else
|
|
|
echo -e "\r ${Font_Yellow}$6:${Font_Suffix}\t\t$count/$maxtestcount \c"
|
|
|
fi
|
|
|
local TestResult="$(sysbench --test=memory --num-threads=$1 --memory-block-size=1M --memory-total-size=102400G --memory-oper=$4 --max-time=$2 --memory-access-mode=$5 run 2>&1)"
|
|
|
# 判断是MB还是MiB
|
|
|
echo "${TestResult}" | grep -oE "MiB" >/dev/null 2>&1
|
|
|
if [ $? -eq 0 ]; then
|
|
|
local MiB_Flag="1"
|
|
|
else
|
|
|
local MiB_Flag="0"
|
|
|
fi
|
|
|
local TestScore="$(echo "${TestResult}" | grep -oE "[0-9]{1,}.[0-9]{1,2} ops\/sec|[0-9]{1,}.[0-9]{1,2} per second" | grep -oE "[0-9]{1,}.[0-9]{1,2}")"
|
|
|
local TestSpeed="$(echo "${TestResult}" | grep -oE "[0-9]{1,}.[0-9]{1,2} MB\/sec|[0-9]{1,}.[0-9]{1,2} MiB\/sec" | grep -oE "[0-9]{1,}.[0-9]{1,2}")"
|
|
|
local TotalScore="$(echo "${TotalScore} ${TestScore}" | awk '{printf "%.2f",$1+$2}')"
|
|
|
local TotalSpeed="$(echo "${TotalSpeed} ${TestSpeed}" | awk '{printf "%.2f",$1+$2}')"
|
|
|
let count=count+1
|
|
|
local TestResult=""
|
|
|
local TestScore="0.00"
|
|
|
local TestSpeed="0.00"
|
|
|
done
|
|
|
ResultScore="$(echo "${TotalScore} ${maxtestcount} 1000" | awk '{printf "%.2f",$1/$2/$3}')"
|
|
|
if [ "${MiB_Flag}" = "1" ]; then
|
|
|
# MiB to MB
|
|
|
ResultSpeed="$(echo "${TotalSpeed} ${maxtestcount} 1048576 1000000" | awk '{printf "%.2f",$1/$2/$3*$4}')"
|
|
|
else
|
|
|
# 直接输出
|
|
|
ResultSpeed="$(echo "${TotalSpeed} ${maxtestcount}" | awk '{printf "%.2f",$1/$2}')"
|
|
|
fi
|
|
|
# 1线程的测试结果写入临时变量,方便与后续的多线程变量做对比
|
|
|
if [ "$1" = "1" ] && [ "$4" = "read" ]; then
|
|
|
LBench_Result_MemoryReadSpeedSingle="${ResultSpeed}"
|
|
|
elif [ "$1" = "1" ] &&[ "$4" = "write" ]; then
|
|
|
LBench_Result_MemoryWriteSpeedSingle="${ResultSpeed}"
|
|
|
fi
|
|
|
if [ "${MultiThread_Flag}" = "1" ]; then
|
|
|
# 如果是多线程测试,输出与1线程测试对比的倍率
|
|
|
if [ "$1" -ge "2" ] && [ "$4" = "read" ]; then
|
|
|
LBench_Result_MemoryReadSpeedMulti="${ResultSpeed}"
|
|
|
local readmultiple="$(echo "${LBench_Result_MemoryReadSpeedMulti} ${LBench_Result_MemoryReadSpeedSingle}" | awk '{printf "%.2f", $1/$2}')"
|
|
|
echo -e "\r ${Font_Yellow}$6:${Font_Suffix}\t\t${Font_SkyBlue}${LBench_Result_MemoryReadSpeedMulti}${Font_Suffix} ${Font_Yellow}MB/s${Font_Suffix} (${readmultiple} x)"
|
|
|
elif [ "$1" -ge "2" ] && [ "$4" = "write" ]; then
|
|
|
LBench_Result_MemoryWriteSpeedMulti="${ResultSpeed}"
|
|
|
local writemultiple="$(echo "${LBench_Result_MemoryWriteSpeedMulti} ${LBench_Result_MemoryWriteSpeedSingle}" | awk '{printf "%.2f", $1/$2}')"
|
|
|
echo -e "\r ${Font_Yellow}$6:${Font_Suffix}\t\t${Font_SkyBlue}${LBench_Result_MemoryWriteSpeedMulti}${Font_Suffix} ${Font_Yellow}MB/s${Font_Suffix} (${writemultiple} x)"
|
|
|
fi
|
|
|
else
|
|
|
if [ "$4" = "read" ]; then
|
|
|
echo -e "\r ${Font_Yellow}$6:${Font_Suffix}\t\t${Font_SkyBlue}${ResultSpeed}${Font_Suffix} ${Font_Yellow}MB/s${Font_Suffix}"
|
|
|
elif [ "$4" = "write" ]; then
|
|
|
echo -e "\r ${Font_Yellow}$6:${Font_Suffix}\t\t${Font_SkyBlue}${ResultSpeed}${Font_Suffix} ${Font_Yellow}MB/s${Font_Suffix}"
|
|
|
fi
|
|
|
fi
|
|
|
# Fix
|
|
|
if [ "$1" -ge "2" ] && [ "$4" = "write" ]; then
|
|
|
echo -e " $6:\t${ResultSpeed} MB/s" >>${WorkDir}/SysBench/Memory/result.txt
|
|
|
else
|
|
|
echo -e " $6:\t\t${ResultSpeed} MB/s" >>${WorkDir}/SysBench/Memory/result.txt
|
|
|
fi
|
|
|
sleep 1
|
|
|
}
|
|
|
|
|
|
Function_SysBench_Memory_Fast() {
|
|
|
mkdir -p ${WorkDir}/SysBench/Memory/ >/dev/null 2>&1
|
|
|
echo -e " ${Font_Yellow}-> 内存测试 Test (Fast Mode, 1-Pass @ 5sec)${Font_Suffix}\n"
|
|
|
echo -e " -> 内存测试 (Fast Mode, 1-Pass @ 5sec)\n" >>${WorkDir}/SysBench/Memory/result.txt
|
|
|
Run_SysBench_Memory "1" "5" "1" "read" "seq" "单线程读测试"
|
|
|
Run_SysBench_Memory "1" "5" "1" "write" "seq" "单线程写测试"
|
|
|
# 完成FLAG
|
|
|
LBench_Flag_FinishSysBenchMemoryFast="1"
|
|
|
sleep 1
|
|
|
}
|
|
|
|
|
|
Entrance_SysBench_Memory_Fast() {
|
|
|
Function_SysBench_Memory_Fast
|
|
|
}
|
|
|
|
|
|
Entrance_DiskTest_Fast() {
|
|
|
Function_DiskTest_Fast
|
|
|
# Function_BenchFinish
|
|
|
}
|
|
|
|
|
|
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}
|
|
|
}
|
|
|
|
|
|
check_virt(){
|
|
|
_exists "dmesg" && virtualx="$(dmesg 2>/dev/null)"
|
|
|
if _exists "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 -qa docker /proc/1/cgroup; then
|
|
|
virt="Docker"
|
|
|
elif grep -qa lxc /proc/1/cgroup; then
|
|
|
virt="LXC"
|
|
|
elif grep -qa container=lxc /proc/1/environ; then
|
|
|
virt="LXC"
|
|
|
elif [[ -f /proc/user_beancounters ]]; then
|
|
|
virt="OpenVZ"
|
|
|
elif [[ "${virtualx}" == *kvm-clock* ]]; then
|
|
|
virt="KVM"
|
|
|
elif [[ "${cname}" == *KVM* ]]; then
|
|
|
virt="KVM"
|
|
|
elif [[ "${cname}" == *QEMU* ]]; then
|
|
|
virt="KVM"
|
|
|
elif [[ "${virtualx}" == *"VMware Virtual Platform"* ]]; then
|
|
|
virt="VMware"
|
|
|
elif [[ "${virtualx}" == *"Parallels Software International"* ]]; then
|
|
|
virt="Parallels"
|
|
|
elif [[ "${virtualx}" == *VirtualBox* ]]; then
|
|
|
virt="VirtualBox"
|
|
|
elif [[ -e /proc/xen ]]; then
|
|
|
if grep -q "control_d" "/proc/xen/capabilities" 2>/dev/null; then
|
|
|
virt="Xen-Dom0"
|
|
|
else
|
|
|
virt="Xen-DomU"
|
|
|
fi
|
|
|
elif [ -f "/sys/hypervisor/type" ] && grep -q "xen" "/sys/hypervisor/type"; then
|
|
|
virt="Xen"
|
|
|
elif [[ "${sys_manu}" == *"Microsoft Corporation"* ]]; then
|
|
|
if [[ "${sys_product}" == *"Virtual Machine"* ]]; then
|
|
|
if [[ "${sys_ver}" == *"7.0"* || "${sys_ver}" == *"Hyper-V" ]]; then
|
|
|
virt="Hyper-V"
|
|
|
else
|
|
|
virt="Microsoft Virtual Machine"
|
|
|
fi
|
|
|
fi
|
|
|
else
|
|
|
virt="Dedicated"
|
|
|
fi
|
|
|
}
|
|
|
|
|
|
ipv4_info() {
|
|
|
local org="$(wget -q -T10 -O- ipinfo.io/org)"
|
|
|
local city="$(wget -q -T10 -O- ipinfo.io/city)"
|
|
|
local country="$(wget -q -T10 -O- ipinfo.io/country)"
|
|
|
local region="$(wget -q -T10 -O- ipinfo.io/region)"
|
|
|
if [[ -n "$org" ]]; then
|
|
|
echo " ASN组织 : $(_blue "$org")"
|
|
|
fi
|
|
|
if [[ -n "$city" && -n "$country" ]]; then
|
|
|
echo " 位置 : $(_blue "$city / $country")"
|
|
|
fi
|
|
|
if [[ -n "$region" ]]; then
|
|
|
echo " 地区 : $(_yellow "$region")"
|
|
|
fi
|
|
|
if [[ -z "$org" ]]; then
|
|
|
echo " 地区 : $(_red "无法获取ISP信息")"
|
|
|
fi
|
|
|
}
|
|
|
|
|
|
install_speedtest() {
|
|
|
if [ ! -e "./speedtest-cli/speedtest" ]; then
|
|
|
sys_bit=""
|
|
|
local sysarch="$(uname -m)"
|
|
|
if [ "${sysarch}" = "unknown" ] || [ "${sysarch}" = "" ]; then
|
|
|
local sysarch="$(arch)"
|
|
|
fi
|
|
|
if [ "${sysarch}" = "x86_64" ]; then
|
|
|
sys_bit="x86_64"
|
|
|
fi
|
|
|
if [ "${sysarch}" = "i386" ] || [ "${sysarch}" = "i686" ]; then
|
|
|
sys_bit="i386"
|
|
|
fi
|
|
|
if [ "${sysarch}" = "armv8" ] || [ "${sysarch}" = "armv8l" ] || [ "${sysarch}" = "aarch64" ] || [ "${sysarch}" = "arm64" ]; then
|
|
|
sys_bit="aarch64"
|
|
|
fi
|
|
|
if [ "${sysarch}" = "armv7" ] || [ "${sysarch}" = "armv7l" ]; then
|
|
|
sys_bit="armhf"
|
|
|
fi
|
|
|
if [ "${sysarch}" = "armv6" ]; then
|
|
|
sys_bit="armel"
|
|
|
fi
|
|
|
[ -z "${sys_bit}" ] && _red "Error: Unsupported system architecture (${sysarch}).\n" && exit 1
|
|
|
url1="https://install.speedtest.net/app/cli/ookla-speedtest-1.1.1-linux-${sys_bit}.tgz"
|
|
|
url2="https://dl.lamp.sh/files/ookla-speedtest-1.1.1-linux-${sys_bit}.tgz"
|
|
|
wget --no-check-certificate -q -T10 -O speedtest.tgz ${url1}
|
|
|
if [ $? -ne 0 ]; then
|
|
|
wget --no-check-certificate -q -T10 -O speedtest.tgz ${url2}
|
|
|
[ $? -ne 0 ] && _red "Error: Failed to download speedtest-cli.\n" && exit 1
|
|
|
fi
|
|
|
mkdir -p speedtest-cli && tar zxf speedtest.tgz -C ./speedtest-cli && chmod +x ./speedtest-cli/speedtest
|
|
|
rm -f speedtest.tgz
|
|
|
fi
|
|
|
}
|
|
|
|
|
|
print_intro() {
|
|
|
echo "--------------------- A Bench Script By spiritlhl --------------------"
|
|
|
echo " 测评频道: https://t.me/vps_reviews "
|
|
|
echo "版本:$ver"
|
|
|
echo "更新日志:$changeLog"
|
|
|
echo "-------------------感谢teddysun和misakabench的开源--------------------"
|
|
|
}
|
|
|
|
|
|
# Get System information
|
|
|
get_system_info() {
|
|
|
cname=$( awk -F: '/model name/ {name=$2} END {print name}' /proc/cpuinfo | sed 's/^[ \t]*//;s/[ \t]*$//' )
|
|
|
cores=$( awk -F: '/processor/ {core++} END {print core}' /proc/cpuinfo )
|
|
|
freq=$( awk -F'[ :]' '/cpu MHz/ {print $4;exit}' /proc/cpuinfo )
|
|
|
ccache=$( awk -F: '/cache size/ {cache=$2} END {print cache}' /proc/cpuinfo | sed 's/^[ \t]*//;s/[ \t]*$//' )
|
|
|
tram=$( LANG=C; free -m | awk '/Mem/ {print $2}' )
|
|
|
uram=$( LANG=C; free -m | awk '/Mem/ {print $3}' )
|
|
|
swap=$( LANG=C; free -m | awk '/Swap/ {print $2}' )
|
|
|
uswap=$( LANG=C; 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 )
|
|
|
if _exists "w"; then
|
|
|
load=$( LANG=C; w | head -1 | awk -F'load average:' '{print $2}' | sed 's/^[ \t]*//;s/[ \t]*$//' )
|
|
|
elif _exists "uptime"; then
|
|
|
load=$( LANG=C; uptime | head -1 | awk -F'load average:' '{print $2}' | sed 's/^[ \t]*//;s/[ \t]*$//' )
|
|
|
fi
|
|
|
opsy=$( get_opsy )
|
|
|
arch=$( uname -m )
|
|
|
if _exists "getconf"; then
|
|
|
lbit=$( getconf LONG_BIT )
|
|
|
else
|
|
|
echo ${arch} | grep -q "64" && lbit="64" || lbit="32"
|
|
|
fi
|
|
|
kern=$( uname -r )
|
|
|
disk_size1=($( LANG=C df -hPl | grep -wvE '\-|none|tmpfs|devtmpfs|by-uuid|chroot|Filesystem|udev|docker|snapd' | awk '{print $2}' ))
|
|
|
disk_size2=($( LANG=C df -hPl | grep -wvE '\-|none|tmpfs|devtmpfs|by-uuid|chroot|Filesystem|udev|docker|snapd' | 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}' )
|
|
|
}
|
|
|
# Print System information
|
|
|
print_system_info() {
|
|
|
if [ -n "$cname" ]; then
|
|
|
echo " CPU 型号 : $(_blue "$cname")"
|
|
|
else
|
|
|
echo " CPU 型号 : $(_blue "无法检测到CPU型号")"
|
|
|
fi
|
|
|
echo " CPU 核心数 : $(_blue "$cores")"
|
|
|
if [ -n "$freq" ]; then
|
|
|
echo " CPU 频率 : $(_blue "$freq MHz")"
|
|
|
fi
|
|
|
if [ -n "$ccache" ]; then
|
|
|
echo " CPU 缓存 : $(_blue "$ccache")"
|
|
|
fi
|
|
|
echo " 硬盘空间 : $(_yellow "$disk_total_size GB") $(_blue "($disk_used_size GB 已用)")"
|
|
|
echo " 内存 : $(_yellow "$tram MB") $(_blue "($uram MB 已用)")"
|
|
|
echo " Swap : $(_blue "$swap MB ($uswap MB 已用)")"
|
|
|
echo " 系统在线时间 : $(_blue "$up")"
|
|
|
echo " 负载 : $(_blue "$load")"
|
|
|
echo " 系统 : $(_blue "$opsy")"
|
|
|
echo " 架构 : $(_blue "$arch ($lbit Bit)")"
|
|
|
echo " 内核 : $(_blue "$kern")"
|
|
|
echo " TCP加速方式 : $(_yellow "$tcpctrl")"
|
|
|
echo " 虚拟化架构 : $(_blue "$virt")"
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
#print_io_test() {
|
|
|
# freespace=$( df -m . | awk 'NR==2 {print $4}' )
|
|
|
# if [ -z "${freespace}" ]; then
|
|
|
# freespace=$( df -m . | awk 'NR==3 {print $3}' )
|
|
|
# fi
|
|
|
# if [ ${freespace} -gt 1024 ]; then
|
|
|
# writemb=2048
|
|
|
# io1=$( io_test ${writemb} )
|
|
|
# echo " 磁盘I/O (第一次) : $(_yellow "$io1")"
|
|
|
# io2=$( io_test ${writemb} )
|
|
|
# echo " 磁盘I/O (第二次) : $(_yellow "$io2")"
|
|
|
# io3=$( io_test ${writemb} )
|
|
|
# echo " 磁盘I/O (第三次) : $(_yellow "$io3")"
|
|
|
# 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 " 磁盘I/O (平均结果) : $(_yellow "$ioavg MB/s")"
|
|
|
# else
|
|
|
# echo " $(_red "Not enough space for I/O Speed test!")"
|
|
|
# fi
|
|
|
#}
|
|
|
|
|
|
print_end_time() {
|
|
|
end_time=$(date +%s)
|
|
|
time=$(( ${end_time} - ${start_time} ))
|
|
|
if [ ${time} -gt 60 ]; then
|
|
|
min=$(expr $time / 60)
|
|
|
sec=$(expr $time % 60)
|
|
|
echo " 总共花费 : ${min} 分 ${sec} 秒"
|
|
|
else
|
|
|
echo " 总共花费 : ${time} 秒"
|
|
|
fi
|
|
|
date_time=$(date +%Y-%m-%d" "%H:%M:%S)
|
|
|
echo " 时间 : $date_time"
|
|
|
}
|
|
|
|
|
|
backtrace() {
|
|
|
rm -f $TEMP_FILE2
|
|
|
curl https://raw.githubusercontent.com/zhanghanyun/backtrace/main/install.sh -qsSf | sh > $TEMP_FILE2 2>&1
|
|
|
}
|
|
|
|
|
|
translate(){ [[ -n "$1" ]] && curl -ksm8 "http://fanyi.youdao.com/translate?&doctype=json&type=AUTO&i=${1//[[:space:]]/}" | cut -d \" -f18 2>/dev/null; }
|
|
|
|
|
|
check_return() {
|
|
|
rm -f $TEMP_FILE
|
|
|
IP_4=$(curl -s4m5 https:/ip.gs/json) &&
|
|
|
WAN_4=$(expr "$IP_4" : '.*ip\":\"\([^"]*\).*') &&
|
|
|
COUNTRY_4E=$(expr "$IP_4" : '.*country\":\"\([^"]*\).*') &&
|
|
|
COUNTRY_4=$(translate "$COUNTRY_4E") &&
|
|
|
ASNORG_4=$(expr "$IP_4" : '.*asn_org\":\"\([^"]*\).*') &&
|
|
|
PE_4=$(curl -sm5 ping.pe/$WAN_4) &&
|
|
|
COOKIE_4=$(echo $PE_4 | sed "s/.*document.cookie=\"\([^;]\{1,\}\).*/\1/g") &&
|
|
|
TYPE_4=$(curl -sm5 --header "cookie: $COOKIE_4" ping.pe/$WAN_4 | grep "id='page-div'" | sed "s/.*\[\(.*\)\].*/\1/g" | sed "s/.*orange'>\([^<]\{1,\}\).*/\1/g" | sed "s/hosting/数据中心/g;s/residential/家庭宽带/g") &&
|
|
|
_blue " IPv4: $WAN_4\t\t 地区: $COUNTRY_4\t 类型: $TYPE_4\t ASN: $ASNORG_4" >> $TEMP_FILE
|
|
|
|
|
|
IP_6=$(curl -s6m5 https:/ip.gs/json) &&
|
|
|
WAN_6=$(expr "$IP_6" : '.*ip\":\"\([^"]*\).*') &&
|
|
|
COUNTRY_6E=$(expr "$IP_6" : '.*country\":\"\([^"]*\).*') &&
|
|
|
COUNTRY_6=$(translate "$COUNTRY_6E") &&
|
|
|
ASNORG_6=$(expr "$IP_6" : '.*asn_org\":\"\([^"]*\).*') &&
|
|
|
PE_6=$(curl -sm5 ping6.ping.pe/$WAN_6) &&
|
|
|
COOKIE_6=$(echo $PE_6 | sed "s/.*document.cookie=\"\([^;]\{1,\}\).*/\1/g") &&
|
|
|
TYPE_6=$(curl -sm5 --header "cookie: $COOKIE_6" ping6.ping.pe/$WAN_6 | grep "id='page-div'" | sed "s/.*\[\(.*\)\].*/\1/g" | sed "s/.*orange'>\([^<]\{1,\}\).*/\1/g" | sed "s/hosting/数据中心/g;s/residential/家庭宽带/g") &&
|
|
|
_blue " IPv6: $WAN_6\t 地区: $COUNTRY_6\t 类型: $TYPE_6\t ASN: $ASNORG_6" >> $TEMP_FILE
|
|
|
|
|
|
[[ ! -e return.sh ]] && curl -qO https://raw.githubusercontent.com/fscarmen/ecs/main/return.sh
|
|
|
chmod +x return.sh >/dev/null 2>&1
|
|
|
|
|
|
_green "依次测试电信,联通,移动经过的地区及线路,核心程序来由: ipip.net ,请知悉!" >> $TEMP_FILE
|
|
|
|
|
|
for ((a=0;a<${#test_area[@]};a++)); do
|
|
|
_yellow "${test_area[a]} ${test_ip[a]}" >> $TEMP_FILE
|
|
|
./return.sh ${test_ip[a]} >> $TEMP_FILE
|
|
|
done
|
|
|
}
|
|
|
|
|
|
checkroot
|
|
|
checkwget
|
|
|
checksystem
|
|
|
checkpython
|
|
|
checkcurl
|
|
|
checkspeedtest
|
|
|
backtrace
|
|
|
check_return
|
|
|
SystemInfo_GetSystemBit
|
|
|
if [ "${release}" == "centos" ]; then
|
|
|
yum update > /dev/null 2>&1
|
|
|
yum -y install python3.7 > /dev/null 2>&1
|
|
|
else
|
|
|
apt-get update > /dev/null 2>&1
|
|
|
apt-get -y install python3.7 > /dev/null 2>&1
|
|
|
fi
|
|
|
export PYTHONIOENCODING=utf-8
|
|
|
! _exists "wget" && _red "Error: wget command not found.\n" && exit 1
|
|
|
! _exists "free" && _red "Error: free command not found.\n" && exit 1
|
|
|
start_time=$(date +%s)
|
|
|
get_system_info
|
|
|
check_virt
|
|
|
clear
|
|
|
print_intro
|
|
|
print_system_info
|
|
|
ipv4_info
|
|
|
echo "-------------------CPU测试--感谢lemonbench开源------------------------"
|
|
|
Entrance_SysBench_CPU_Fast
|
|
|
echo "-------------------内存测试--感谢lemonbench开源-----------------------"
|
|
|
Entrance_SysBench_Memory_Fast
|
|
|
echo "----------------磁盘IO读写测试--感谢lemonbench开源--------------------"
|
|
|
#print_io_test
|
|
|
Entrance_DiskTest_Fast
|
|
|
next
|
|
|
Function_GenerateResult
|
|
|
Global_Exit_Action >/dev/null 2>&1
|
|
|
install_speedtest && echo -e "测速点位置\t 上传速度\t 下载速度\t 延迟"
|
|
|
speed && rm -fr speedtest-cli
|
|
|
echo "--------------------流媒体解锁--感谢sjlleo开源-------------------------"
|
|
|
./tubecheck
|
|
|
echo ""
|
|
|
./nf
|
|
|
echo ""
|
|
|
./dp
|
|
|
echo "解锁油管,奈菲,迪士尼以上面为准,下面这三测的不准"
|
|
|
echo -e "\n---------------流媒体解锁--感谢RegionRestrictionCheck开源-------------"
|
|
|
echo " 以下为IPV4网络测试"
|
|
|
Global_UnlockTest 4
|
|
|
echo " 以下为IPV6网络测试"
|
|
|
Global_UnlockTest 6
|
|
|
echo -e "\n-----------------三网回程--感谢zhanghanyun/backtrace开源--------------"
|
|
|
cat $TEMP_FILE2
|
|
|
echo -e "\n--------------------回程路由--感谢fscarmen开源------------------------"
|
|
|
cat $TEMP_FILE
|
|
|
next
|
|
|
print_end_time
|
|
|
next
|
|
|
rm -rf return.sh
|
|
|
rm -rf speedtest.tgz*
|
|
|
rm -rf wget-log*
|
|
|
rm -rf ipip.py*
|
|
|
rm -rf dp
|
|
|
rm -rf nf
|
|
|
rm -rf tubecheck
|
|
|
rm -rf ecs.sh
|
|
|
rm -rf $TEMP_FILE $TEMP_FILE2
|
|
|
|