添加 nws.sh
This commit is contained in:
commit
475724c39f
888
nws.sh
Normal file
888
nws.sh
Normal file
@ -0,0 +1,888 @@
|
||||
#!/usr/bin/env bash
|
||||
#
|
||||
# Description: A Network Benchmark Script by <sh@suh.ovh>
|
||||
# Copyright (C) 2022 - 2024 <sh@suh.ovh>
|
||||
# URL: https://nws.sh/
|
||||
# https://github.com/su-haris/simple-network-speedtest
|
||||
#
|
||||
trap _exit INT QUIT TERM
|
||||
|
||||
_red() {
|
||||
printf '\033[0;31;31m%b\033[0m' "$1"
|
||||
}
|
||||
|
||||
_green() {
|
||||
printf '\033[0;31;32m%b\033[0m' "$1"
|
||||
}
|
||||
|
||||
_yellow() {
|
||||
printf '\033[0;31;33m%b\033[0m' "$1"
|
||||
}
|
||||
|
||||
_blue() {
|
||||
printf '\033[0;31;36m%b\033[0m' "$1"
|
||||
}
|
||||
|
||||
_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 "\nThe script has been terminated.\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 "%-75s\n" "-" | sed 's/\s/-/g'
|
||||
}
|
||||
|
||||
speed_test() {
|
||||
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 [ "$nodeName" = "Nearest" ]; then
|
||||
local isp=$(grep -Po 'ISP: \K.*' ./speedtest-cli/speedtest.log)
|
||||
echo -e "\n ISP: $(_blue "$isp") \n"
|
||||
fi
|
||||
|
||||
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 dl_speed_num=$(awk '/Download/{print $3}' ./speedtest-cli/speedtest.log)
|
||||
local up_speed_num=$(awk '/Upload/{print $3}' ./speedtest-cli/speedtest.log)
|
||||
|
||||
local latency=$(awk '/Latency/{print $3" "$4}' ./speedtest-cli/speedtest.log)
|
||||
local server_details=$(grep -Po 'Server: \K[^(]+' ./speedtest-cli/speedtest.log)
|
||||
local packet_loss=$(awk '/Packet Loss/{print $3}' ./speedtest-cli/speedtest.log)
|
||||
|
||||
local dl_data_used=$(awk '/Download/{print $7}' ./speedtest-cli/speedtest.log)
|
||||
local dl_data_units=$(awk '/Download/{print $8}' ./speedtest-cli/speedtest.log)
|
||||
|
||||
local up_data_used=$(awk '/Upload/{print $7}' ./speedtest-cli/speedtest.log)
|
||||
local up_data_units=$(awk '/Upload/{print $8}' ./speedtest-cli/speedtest.log)
|
||||
|
||||
if [[ "$dl_data_units" =~ "GB" ]]; then
|
||||
dl_data_used=$(awk "BEGIN {print $dl_data_used*1024; exit}")
|
||||
fi
|
||||
|
||||
if [[ "$up_data_units" =~ "GB" ]]; then
|
||||
up_data_used=$(awk "BEGIN {print $up_data_used*1024; exit}")
|
||||
fi
|
||||
|
||||
if [[ "$packet_loss" =~ "Not" ]]; then
|
||||
packet_loss="N/A"
|
||||
fi
|
||||
|
||||
if grep -q "Limit reached" ./speedtest-cli/speedtest.log; then
|
||||
printf "%-18s%-12s%-8s%-15s%-15s%-12s\n" " ${nodeName}" "FAILED - IP has been rate limited. Try again after 1 hour."
|
||||
elif [[ -n "${dl_speed}" && -n "${up_speed}" && -n "${latency}" ]]; then
|
||||
printf "%-18s%-12s%-8s%-15s%-15s%-12s\n" " ${nodeName}" "${latency}" "${packet_loss}" "${dl_speed}" "${up_speed}" "${server_details}"
|
||||
|
||||
DL_USED=$(awk "BEGIN {print $dl_data_used+$DL_USED; exit}")
|
||||
UL_USED=$(awk "BEGIN {print $up_data_used+$UL_USED; exit}")
|
||||
|
||||
SUCCESS_TEST=$((SUCCESS_TEST + 1))
|
||||
AVG_DL_SPEED=$(awk "BEGIN {print $AVG_DL_SPEED+$dl_speed_num; exit}")
|
||||
AVG_UL_SPEED=$(awk "BEGIN {print $AVG_UL_SPEED+$up_speed_num; exit}")
|
||||
else
|
||||
printf "%-18s%-12s%-8s%-15s%-15s%-12s\n" " ${nodeName}" "FAILED"
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
speed() {
|
||||
DL_USED=0
|
||||
UL_USED=0
|
||||
|
||||
AVG_DL_SPEED=0
|
||||
AVG_UL_SPEED=0
|
||||
SUCCESS_TEST=0
|
||||
|
||||
speed_test '' 'Nearest'
|
||||
echo -e
|
||||
|
||||
if [ "$REGION" = "india" ]; then
|
||||
speed_test '15171' 'Mumbai, MH'
|
||||
speed_test '6879' 'Mumbai, MH'
|
||||
speed_test '33603' 'Pune, MH'
|
||||
speed_test '12939' 'Hyderabad, AP/TL'
|
||||
speed_test '52216' 'Bangalore, KA'
|
||||
speed_test '7379' 'Bangalore, KA'
|
||||
speed_test '35402' 'Mangalore, KA'
|
||||
#speed_test '19117' 'Chennai, TN'
|
||||
#speed_test '22796' 'Chennai, TN'
|
||||
speed_test '67859' 'Chennai, TN'
|
||||
# speed_test '20107' 'Coimbatore, TN'
|
||||
speed_test '9286' 'Coimbatore, TN'
|
||||
speed_test '34444' 'Madurai, TN'
|
||||
speed_test '10112' 'Kochi, KL'
|
||||
speed_test '29372' 'Kochi, KL'
|
||||
speed_test '62260' 'Trivandrum, KL'
|
||||
speed_test '12221' 'Kolkata, WB'
|
||||
speed_test '16273' 'Ahmedabad, GJ'
|
||||
speed_test '47162' 'Jaipur, RJ'
|
||||
speed_test '36668' 'Lucknow, UP'
|
||||
speed_test '15797' 'Delhi, DL'
|
||||
speed_test '10020' 'Gurgaon, HR'
|
||||
speed_test '49231' 'Patna, BH'
|
||||
speed_test '60294' 'Aizawl, MZ'
|
||||
elif [ "$REGION" = "asia" ]; then
|
||||
speed_test '50686' 'Tokyo, JP'
|
||||
speed_test '18445' 'Tapei, TW'
|
||||
#speed_test '24447' 'China Unicom'
|
||||
#speed_test '3633' 'China Telecom'
|
||||
speed_test '26352' 'China Telecom'
|
||||
speed_test '24447' 'China Unicom'
|
||||
# speed_test '41910' 'China Mobile'
|
||||
speed_test '25858' 'China Mobile'
|
||||
speed_test '22126' 'Hong Kong, CN'
|
||||
echo -e
|
||||
# speed_test '18250' 'Ho Chi Minh, VN'
|
||||
speed_test '17758' 'Ho Chi Minh, VN'
|
||||
speed_test '2552' 'Hanoi, VN'
|
||||
speed_test '8990' 'Bangkok, TH'
|
||||
speed_test '7167' 'Manila, PH'
|
||||
echo -e
|
||||
speed_test '5935' 'Singapore, SG'
|
||||
speed_test '4235' 'Singapore, SG'
|
||||
speed_test '13039' 'Jakarta, ID'
|
||||
speed_test '56633' 'Surabaya, ID'
|
||||
speed_test '19302' 'Kuala Lum, MY'
|
||||
echo -e
|
||||
speed_test '23647' 'Mumbai, IN'
|
||||
speed_test '67859' 'Chennai, IN'
|
||||
speed_test '52216' 'Bangalore, IN'
|
||||
speed_test '32238' 'Karachi, PK'
|
||||
# speed_test '9716' 'Lahore, PK'
|
||||
speed_test '35816' 'Islamabad, PK'
|
||||
speed_test '54919' 'Kathmandu, NP'
|
||||
speed_test '60180' 'Colombo, SL'
|
||||
speed_test '30815' 'Dhaka, BD'
|
||||
echo -e
|
||||
speed_test '6430' 'Novosibirsk, RU'
|
||||
speed_test '38516' 'Almaty, KZ'
|
||||
echo -e
|
||||
speed_test '4317' 'Tehran, IR'
|
||||
speed_test '17336' 'Dubai, AE'
|
||||
speed_test '1733' 'Jeddah, SA'
|
||||
speed_test '3151' 'Istanbul, TR'
|
||||
elif [ "$REGION" = "middle-east" ]; then
|
||||
speed_test '1692' 'Abu Dhabi, AE'
|
||||
speed_test '22129' 'Dubai, AE'
|
||||
speed_test '34240' 'Fujairah, AE'
|
||||
speed_test '1717' 'Muscat, OM'
|
||||
speed_test '11271' 'Seeb, OM'
|
||||
speed_test '15570' 'Sanaa, YE'
|
||||
speed_test '6193' 'Doha, QA'
|
||||
# speed_test '51657' 'Rayan, QA'
|
||||
speed_test '51669' 'Lusail, QA'
|
||||
speed_test '17574' 'Manama, BH'
|
||||
speed_test '52650' 'Rifa, BH'
|
||||
speed_test '25444' 'Kuwait, KW'
|
||||
speed_test '3290' 'Kuwait, KW'
|
||||
speed_test '1402' 'Riyadh, SA'
|
||||
speed_test '16051' 'Dammam, SA'
|
||||
speed_test '3196' 'Jeddah, SA'
|
||||
speed_test '14580' 'Jeddah, SA'
|
||||
echo -e
|
||||
speed_test '4317' 'Tehran, IR'
|
||||
speed_test '39247' 'Baghdad, IQ'
|
||||
speed_test '27570' 'Beirut, LB'
|
||||
speed_test '54384' 'Nicosia, CY'
|
||||
speed_test '38212' 'Tel Aviv, IL'
|
||||
speed_test '31160' 'Amman, JO'
|
||||
speed_test '41251' 'Cairo, EG'
|
||||
speed_test '34283' 'Cairo, EG'
|
||||
speed_test '3151' 'Istanbul, TR'
|
||||
elif [ "$REGION" = "na" ]; then
|
||||
speed_test '3049' 'Vancouver, BC'
|
||||
#speed_test '3575' 'Toronto, ON'
|
||||
speed_test '4207' 'Calgary, AB'
|
||||
speed_test '1493' 'Winnipeg, MB'
|
||||
speed_test '53393' 'Toronto, ON'
|
||||
speed_test '46416' 'Montreal, QC'
|
||||
echo -e
|
||||
speed_test '36817' 'New York, NY'
|
||||
speed_test '32493' 'Ashburn, VA'
|
||||
speed_test '58326' 'Durham, NC'
|
||||
speed_test '35608' 'Atlanta, GA'
|
||||
speed_test '35987' 'Miami, FL'
|
||||
speed_test '43860' 'Dallas, TX'
|
||||
speed_test '1763' 'Houston, TX'
|
||||
speed_test '13628' 'Kansas, MO'
|
||||
speed_test '15869' 'Minneapolis, MN'
|
||||
speed_test '34707' 'Chicago, IL'
|
||||
speed_test '15062' 'Cleveland, OH'
|
||||
speed_test '1773' 'Albuquerque, NM'
|
||||
speed_test '56839' 'Denver, CO'
|
||||
speed_test '10162' 'Portland, OR'
|
||||
speed_test '53984' 'Las Vegas, NV'
|
||||
speed_test '54751' 'Salt Lake, UT'
|
||||
speed_test '27746' 'Phoenix, AZ'
|
||||
speed_test '34840' 'Los Angeles, CA'
|
||||
#speed_test '48240' 'Santa Clara, CA'
|
||||
speed_test '49365' 'San Jose, CA'
|
||||
speed_test '58291' 'Spokane, WA'
|
||||
speed_test '50679' 'Seattle, WA'
|
||||
# speed_test '980' 'Anchorage, AK'
|
||||
echo -e
|
||||
speed_test '3499' 'Hermosillo, MX'
|
||||
speed_test '7945' 'Guadalajara, MX'
|
||||
speed_test '54754' 'Mexico City, MX'
|
||||
#speed_test '9176' 'Merida, MX'
|
||||
elif [ "$REGION" = "sa" ]; then
|
||||
speed_test '21568' 'Sao Paulo, BR'
|
||||
speed_test '3065' 'Rio, BR'
|
||||
speed_test '21836' 'Salvador, BR'
|
||||
speed_test '5181' 'Buenos, AR'
|
||||
speed_test '46678' 'Buenos, AR'
|
||||
speed_test '58966' 'Cordoba, AR'
|
||||
speed_test '58822' 'Rosario, AR'
|
||||
speed_test '20212' 'Montevideo, UY'
|
||||
speed_test '8017' 'Santiago, CL'
|
||||
speed_test '21436' 'Santiago, CL'
|
||||
speed_test '3455' 'Lima, PE'
|
||||
speed_test '4992' 'Lima, PE'
|
||||
speed_test '21800' 'Quito, EC'
|
||||
speed_test '49339' 'Caracas, VE'
|
||||
speed_test '44095' 'Bogota, CO'
|
||||
elif [ "$REGION" = "eu" ]; then
|
||||
speed_test '31183' 'London, UK'
|
||||
# speed_test '38157' 'Edinburgh, UK'
|
||||
speed_test '23968' 'Manchester, UK'
|
||||
speed_test '38092' 'Dublin, IE'
|
||||
speed_test '37363' 'Amsterdam, NL'
|
||||
# speed_test '60666' 'Eygelshoen, NL'
|
||||
# speed_test '62493' 'Paris, FR'
|
||||
speed_test '61933' 'Paris, FR'
|
||||
speed_test '61301' 'Marseille, FR'
|
||||
speed_test '14979' 'Madrid, ES'
|
||||
speed_test '1695' 'Barcelona, ES'
|
||||
speed_test '29467' 'Lisbon, PT'
|
||||
speed_test '3243' 'Rome, IT'
|
||||
#speed_test '4302' 'Milan, IT'
|
||||
speed_test '7839' 'Milan, IT'
|
||||
speed_test '23969' 'Zurich, CH'
|
||||
speed_test '23095' 'Frankfurt, DE'
|
||||
speed_test '55665' 'Berlin, DE'
|
||||
speed_test '50599' 'Vienna, AT'
|
||||
speed_test '7842' 'Budapest, HU'
|
||||
speed_test '23123' 'Krakow, PL'
|
||||
speed_test '4166' 'Warsaw, PL'
|
||||
speed_test '29259' 'Lviv, UA'
|
||||
speed_test '62769' 'Kyiv, UA'
|
||||
# speed_test '27486' 'Minsk, BY'
|
||||
# speed_test '16457' 'Bucharest, RO'
|
||||
speed_test '45318' 'Bucharest, RO'
|
||||
speed_test '11500' 'Timisoara, RO'
|
||||
speed_test '22669' 'Helsinki, FI'
|
||||
speed_test '44597' 'Stockholm, SE'
|
||||
speed_test '31861' 'Oslo, NO'
|
||||
# speed_test '3682' 'Moscow, RU'
|
||||
speed_test '1907' 'Moscow, RU'
|
||||
speed_test '6051' 'Petersburg, RU'
|
||||
speed_test '31851' 'Istanbul, TR'
|
||||
# speed_test '11945' 'Tbilisi, GE'
|
||||
elif [ "$REGION" = "au" ]; then
|
||||
speed_test '18473' 'Brisbane'
|
||||
speed_test '44735' 'Sydney'
|
||||
speed_test '12492' 'Sydney'
|
||||
speed_test '15136' 'Perth'
|
||||
speed_test '12494' 'Perth'
|
||||
speed_test '43024' 'Melbourne'
|
||||
speed_test '12491' 'Melbourne'
|
||||
speed_test '13277' 'Adelaide'
|
||||
speed_test '18711' 'Canberra'
|
||||
echo -e
|
||||
speed_test '4953' 'Auckland'
|
||||
speed_test '5749' 'Auckland'
|
||||
speed_test '11327' 'Auckland'
|
||||
elif [ "$REGION" = "africa" ]; then
|
||||
speed_test '2962' 'Cape Town, ZA'
|
||||
speed_test '1491' 'Cape Town, ZA'
|
||||
speed_test '21570' 'Johannesburg, ZA'
|
||||
speed_test '56612' 'Harare, ZW'
|
||||
speed_test '28816' 'Maputo, MZ'
|
||||
speed_test '7755' 'Antananarivo, MG'
|
||||
speed_test '3846' 'Darusalaam, TZ'
|
||||
speed_test '8402' 'Nairobi, KE'
|
||||
speed_test '48973' 'Addis Ababa, ET'
|
||||
speed_test '34283' 'Cairo, EG'
|
||||
speed_test '26790' 'Alexandria, EG'
|
||||
speed_test '54524' 'Rabat, MA'
|
||||
speed_test '15631' 'Algiers, DZ'
|
||||
speed_test '33159' 'Lagos, NG'
|
||||
elif [ "$REGION" = "iran" ]; then
|
||||
speed_test '4317' 'Tehran'
|
||||
speed_test '21031' 'Tehran'
|
||||
speed_test '19534' 'Tehran'
|
||||
speed_test '43844' 'Tehran'
|
||||
speed_test '10076' 'Mashhad'
|
||||
speed_test '22295' 'Mashhad'
|
||||
speed_test '22297' 'Shiraz'
|
||||
speed_test '22245' 'Isfahan'
|
||||
speed_test '9888' 'Tabriz'
|
||||
elif [ "$REGION" = "russia" ]; then
|
||||
speed_test '1907' 'Moscow'
|
||||
speed_test '48192' 'Moscow'
|
||||
speed_test '10987' 'Moscow'
|
||||
speed_test '44806' 'Moscow'
|
||||
speed_test '45191' 'Moscow'
|
||||
echo -e
|
||||
speed_test '6051' 'Petersburg'
|
||||
speed_test '42152' 'Petersburg'
|
||||
speed_test '39860' 'Kazan'
|
||||
speed_test '22240' 'Kazan'
|
||||
speed_test '65185' 'Sevastopol'
|
||||
speed_test '41096' 'Kaliningrad'
|
||||
speed_test '37042' 'Volgograd'
|
||||
echo -e
|
||||
speed_test '39503' 'Omsk'
|
||||
speed_test '6430' 'Novosibirsk'
|
||||
speed_test '3545' 'Krasnoyarsk'
|
||||
speed_test '9679' 'Yakutsk'
|
||||
speed_test '54169' 'Vladivostok'
|
||||
elif [ "$REGION" = "indonesia" ]; then
|
||||
speed_test '14325' 'Jakarta'
|
||||
speed_test '49585' 'Jakarta'
|
||||
speed_test '56632' 'Jakarta'
|
||||
speed_test '13039' 'Jakarta'
|
||||
speed_test '11118' 'Jakarta'
|
||||
echo -e
|
||||
speed_test '5065' 'Bandung'
|
||||
speed_test '32223' 'Bekasi'
|
||||
speed_test '63223' 'Bogor'
|
||||
speed_test '40832' 'Malang'
|
||||
speed_test '47972' 'Semarang'
|
||||
speed_test '46091' 'Surabaya'
|
||||
speed_test '24587' 'Yogyakarta'
|
||||
echo -e
|
||||
speed_test '59117' 'Banda Aceh'
|
||||
speed_test '61882' 'Medan'
|
||||
speed_test '50465' 'Palembang'
|
||||
speed_test '53101' 'Pekanbaru'
|
||||
echo -e
|
||||
# speed_test '21959' 'Bali'
|
||||
speed_test '46113' 'Makassar'
|
||||
speed_test '45520' 'Depok'
|
||||
speed_test '47361' 'Tangerang'
|
||||
elif [ "$REGION" = "china" ]; then
|
||||
speed_test '24447' 'CU - Shanghai'
|
||||
# speed_test '3633' 'CT - Shanghai'
|
||||
speed_test '25858' 'CM - Beijing'
|
||||
speed_test '43752' 'CU - Beijing'
|
||||
speed_test '26352' 'CT - Nanjing'
|
||||
speed_test '60584' 'CT - Shenzen'
|
||||
speed_test '36663' 'CT - Zhenjiang'
|
||||
speed_test '37235' 'CU - Shenyang'
|
||||
speed_test '5396' 'CT - Suzhou'
|
||||
speed_test '5317' 'CT - Yangzhou'
|
||||
speed_test '54312' 'CM - Hangzhou'
|
||||
speed_test '59386' 'CT - Hangzhou'
|
||||
speed_test '36646' 'CU - Zhengzhou'
|
||||
speed_test '28225' 'CT - Changsha'
|
||||
speed_test '4870' 'CU - Changsha'
|
||||
speed_test '4575' 'CM - Chengdu'
|
||||
# speed_test '23844' 'CT - Wuhan'
|
||||
speed_test '45170' 'CU - Wu Xi'
|
||||
speed_test '17145' 'CT - Hefei'
|
||||
speed_test '34115' 'CT - TianJin'
|
||||
speed_test '62416' 'CT - XiNing'
|
||||
speed_test '59387' 'CT - NingBo'
|
||||
speed_test '60794' 'CM - Guangzhou'
|
||||
echo -e
|
||||
speed_test '32155' 'CM - Kwai Chung'
|
||||
speed_test '37639' 'CM - Hong Kong'
|
||||
speed_test '37695' 'CU - Hong Kong'
|
||||
# speed_test '34555' 'Hong Kong'
|
||||
speed_test '28912' 'Hong Kong'
|
||||
speed_test '44745' 'Hong Kong'
|
||||
# echo -e
|
||||
# speed_test '62147' 'CUG - Tokyo'
|
||||
# speed_test '62146' 'CUG - Singapore'
|
||||
# speed_test '61417' 'CUG - LosAngeles'
|
||||
# speed_test '61451' 'CUG - London'
|
||||
else
|
||||
speed_test '29372' 'Kochi, IN'
|
||||
speed_test '52216' 'Bangalore, IN'
|
||||
speed_test '67859' 'Chennai, IN'
|
||||
speed_test '47668' 'Mumbai, IN'
|
||||
speed_test '29658' 'Delhi, IN'
|
||||
echo -e
|
||||
speed_test '1782' 'Seattle, US'
|
||||
speed_test '34840' 'Los Angeles, US'
|
||||
speed_test '43860' 'Dallas, US'
|
||||
speed_test '53685' 'Miami, US'
|
||||
speed_test '46120' 'New York, US'
|
||||
speed_test '46143' 'Toronto, CA'
|
||||
speed_test '54754' 'Mexico City, MX'
|
||||
echo -e
|
||||
speed_test '37536' 'London, UK'
|
||||
speed_test '23094' 'Amsterdam, NL'
|
||||
speed_test '28308' 'Paris, FR'
|
||||
speed_test '35692' 'Frankfurt, DE'
|
||||
speed_test '37249' 'Warsaw, PL'
|
||||
speed_test '18902' 'Bucharest, RO'
|
||||
speed_test '22050' 'Moscow, RU'
|
||||
echo -e
|
||||
speed_test '14580' 'Jeddah, SA'
|
||||
# speed_test '4845' 'Dubai, AE'
|
||||
speed_test '17336' 'Dubai, AE'
|
||||
# speed_test '34240' 'Fujairah, AE'
|
||||
speed_test '31851' 'Istanbul, TR'
|
||||
speed_test '18512' 'Tehran, IR'
|
||||
speed_test '24409' 'Cairo, EG'
|
||||
echo -e
|
||||
speed_test '50686' 'Tokyo, JP'
|
||||
# speed_test '48463' 'Tokyo, JP'
|
||||
speed_test '24447' 'Shanghai, CU-CN'
|
||||
# speed_test '45170' 'Wu Xi, CU-CN'
|
||||
#speed_test '37235' 'Shenyang, CU-CN'
|
||||
# speed_test '26352' 'Nanjing, CT-CN'
|
||||
speed_test '5396' 'Suzhou, CT-CN'
|
||||
# speed_test '1536' 'Hong Kong, CN'
|
||||
speed_test '44745' 'Hong Kong, CN'
|
||||
speed_test '367' 'Singapore, SG'
|
||||
speed_test '63138' 'Jakarta, ID'
|
||||
fi
|
||||
|
||||
|
||||
TOTAL_DATA=$(awk -v dl="$DL_USED" -v ul="$UL_USED" 'BEGIN { total=dl+ul; printf "%.2f\n", total }')
|
||||
TOTAL_DATA_IN_GB=$(awk -v total="$TOTAL_DATA" 'BEGIN { printf "%.2f\n", total/1024 }')
|
||||
|
||||
DL_USED_IN_GB=$(awk -v dl="$DL_USED" 'BEGIN { printf "%.2f\n", dl/1024 }')
|
||||
UL_USED_IN_GB=$(awk -v ul="$UL_USED" 'BEGIN { printf "%.2f\n", ul/1024 }')
|
||||
|
||||
AVG_DL_SPEED=$(awk -v avg_dl="$AVG_DL_SPEED" -v success="$SUCCESS_TEST" 'BEGIN { if (success != 0) printf "%.2f\n", avg_dl/success; else print "0.00" }')
|
||||
AVG_UL_SPEED=$(awk -v avg_ul="$AVG_UL_SPEED" -v success="$SUCCESS_TEST" 'BEGIN { if (success != 0) printf "%.2f\n", avg_ul/success; else print "0.00" }')
|
||||
}
|
||||
|
||||
io_test() {
|
||||
(LANG=C dd if=/dev/zero of=benchtest_$$ bs=512k count=$1 conv=fdatasync && rm -f benchtest_$$ ) 2>&1 | awk -F, '{io=$NF} END { print io}' | sed 's/^[ \t]*//;s/[ \t]*$//'
|
||||
}
|
||||
|
||||
calc_size() {
|
||||
local raw=$1
|
||||
local total_size=0
|
||||
local num=1
|
||||
local unit="KB"
|
||||
if ! [[ ${raw} =~ ^[0-9]+$ ]] ; then
|
||||
echo ""
|
||||
return
|
||||
fi
|
||||
if [ "${raw}" -ge 1073741824 ]; then
|
||||
num=1073741824
|
||||
unit="TB"
|
||||
elif [ "${raw}" -ge 1048576 ]; then
|
||||
num=1048576
|
||||
unit="GB"
|
||||
elif [ "${raw}" -ge 1024 ]; then
|
||||
num=1024
|
||||
unit="MB"
|
||||
elif [ "${raw}" -eq 0 ]; then
|
||||
echo "${total_size}"
|
||||
return
|
||||
fi
|
||||
total_size=$( awk 'BEGIN{printf "%.1f", '$raw' / '$num'}' )
|
||||
echo "${total_size} ${unit}"
|
||||
}
|
||||
|
||||
ip_info() {
|
||||
echo " Basic Network Info"
|
||||
next
|
||||
local net_type="$(wget -T 5 -qO- http://ip6.me/api/ | cut -d, -f1)"
|
||||
|
||||
local ipv4_check=$((ping -4 -c 1 -W 4 ipv4.google.com >/dev/null 2>&1 && echo true) || wget -qO- -T 5 -4 icanhazip.com 2> /dev/null)
|
||||
local ipv6_check=$((ping -6 -c 1 -W 4 ipv6.google.com >/dev/null 2>&1 && echo true) || wget -qO- -T 5 -6 icanhazip.com 2> /dev/null)
|
||||
|
||||
local net_ip="$(wget -T 5 -qO- ipconfig.io)"
|
||||
|
||||
# IP-API Details - IPv6/IPv4
|
||||
local response=$(wget -qO- -T 5 http://ip-api.com/json/$net_ip)
|
||||
|
||||
local country=$(echo "$response" | grep -Po '"country": *\K"[^"]*"')
|
||||
local country=${country//\"}
|
||||
|
||||
local region=$(echo "$response" | grep -Po '"regionName": *\K"[^"]*"')
|
||||
local region=${region//\"}
|
||||
|
||||
local region_code=$(echo "$response" | grep -Po '"region": *\K"[^"]*"')
|
||||
local region_code=${region_code//\"}
|
||||
|
||||
local city=$(echo "$response" | grep -Po '"city": *\K"[^"]*"')
|
||||
local city=${city//\"}
|
||||
|
||||
local isp=$(echo "$response" | grep -Po '"isp": *\K"[^"]*"')
|
||||
local isp=${isp//\"}
|
||||
|
||||
local org=$(echo "$response" | grep -Po '"org": *\K"[^"]*"')
|
||||
local org=${org//\"}
|
||||
|
||||
local as=$(echo "$response" | grep -Po '"as": *\K"[^"]*"')
|
||||
local as=${as//\"}
|
||||
|
||||
# IPINFO.IO Details - IPv4 only
|
||||
|
||||
local response_ipv4=$(wget -qO- -T 5 ipinfo.io)
|
||||
|
||||
local ipv4_city=$(echo "$response_ipv4" | grep -Po '"city": *\K"[^"]*"')
|
||||
local ipv4_city=${ipv4_city//\"}
|
||||
|
||||
local ipv4_region=$(echo "$response_ipv4" | grep -Po '"region": *\K"[^"]*"')
|
||||
local ipv4_region=${ipv4_region//\"}
|
||||
|
||||
local ipv4_country=$(echo "$response_ipv4" | grep -Po '"country": *\K"[^"]*"')
|
||||
local ipv4_country=${ipv4_country//\"}
|
||||
|
||||
local ipv4_asn=$(echo "$response_ipv4" | grep -Po '"org": *\K"[^"]*"')
|
||||
local ipv4_asn=${ipv4_asn//\"}
|
||||
|
||||
if [[ -n "$net_type" ]]; then
|
||||
echo " Primary Network : $(_green "$net_type")"
|
||||
fi
|
||||
|
||||
if [[ -n "$ipv6_check" ]]; then
|
||||
echo " IPv6 Access : $(_green "\xE2\x9C\x94 Online")"
|
||||
else
|
||||
echo " IPv6 Access : $(_red "\xE2\x9D\x8C Offline")"
|
||||
fi
|
||||
|
||||
if [[ -n "$ipv4_check" ]]; then
|
||||
echo " IPv4 Access : $(_green "\xE2\x9C\x94 Online")"
|
||||
else
|
||||
echo " IPv4 Access : $(_red "\xE2\x9D\x8C Offline")"
|
||||
fi
|
||||
|
||||
if [[ -n "$isp" ]]; then
|
||||
echo " ISP : $(_blue "$isp")"
|
||||
else
|
||||
echo " ISP : Unknown"
|
||||
fi
|
||||
|
||||
if [[ -n "$as" ]]; then
|
||||
echo " ASN : $(_blue "$as")"
|
||||
else
|
||||
echo " ASN : Unknown"
|
||||
fi
|
||||
|
||||
if [[ "$ipv4_asn" != "$as" ]]; then
|
||||
echo " ASN (IPv4) : $(_blue "$ipv4_asn")"
|
||||
fi
|
||||
|
||||
if [[ -n "$org" ]]; then
|
||||
echo " Host : $(_blue "$org")"
|
||||
fi
|
||||
|
||||
if [[ -n "$city" && -n "$region" && -n "$country" ]]; then
|
||||
echo " Location : $(_yellow "$city, $region-$region_code, $country")"
|
||||
fi
|
||||
|
||||
if [[ "$ipv4_city" != "$city" && "$ipv4_region" != "$region" && -n "$ipv4_city" && -n "$ipv4_region" && -n "$ipv4_country" ]]; then
|
||||
echo " Location (IPv4) : $(_yellow "$ipv4_city, $ipv4_region, $ipv4_country")"
|
||||
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.2.0-linux-${sys_bit}.tgz"
|
||||
url2="https://dl.lamp.sh/files/ookla-speedtest-1.2.0-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
|
||||
echo " Speedtest.net (Region: $REGION_NAME)"
|
||||
next
|
||||
printf "%-18s%-12s%-8s%-15s%-15s%-12s\n" " Location" "Latency" "Loss" "DL Speed" "UP Speed" "Server"
|
||||
}
|
||||
|
||||
print_intro() {
|
||||
#echo "---------------------------- network-speed.xyz ----------------------------"
|
||||
echo "---------------------------------- nws.sh ---------------------------------"
|
||||
echo " A simple script to bench network performance using speedtest-cli "
|
||||
next
|
||||
echo " Version : $(_green v2025.01.28)"
|
||||
echo " Global Speedtest : $(_red "wget -qO- nws.sh | bash")"
|
||||
echo " Region Speedtest : $(_red "wget -qO- nws.sh | bash -s -- -r <region>")"
|
||||
}
|
||||
|
||||
# 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: '/model name/ {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]*$//' )
|
||||
cpu_aes=$( grep -i 'aes' /proc/cpuinfo )
|
||||
cpu_virt=$( grep -Ei 'vmx|svm' /proc/cpuinfo )
|
||||
tram=$( LANG=C; free | awk '/Mem/ {print $2}' )
|
||||
tram=$( calc_size $tram )
|
||||
uram=$( LANG=C; free | awk '/Mem/ {print $3}' )
|
||||
uram=$( calc_size $uram )
|
||||
swap=$( LANG=C; free | awk '/Swap/ {print $2}' )
|
||||
swap=$( calc_size $swap )
|
||||
uswap=$( LANG=C; free | awk '/Swap/ {print $3}' )
|
||||
uswap=$( calc_size $uswap )
|
||||
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_total_size=$( LANG=C; df -t simfs -t ext2 -t ext3 -t ext4 -t btrfs -t xfs -t vfat -t ntfs -t swap --total 2>/dev/null | grep total | awk '{ print $2 }' )
|
||||
disk_total_size=$( calc_size $disk_total_size )
|
||||
disk_used_size=$( LANG=C; df -t simfs -t ext2 -t ext3 -t ext4 -t btrfs -t xfs -t vfat -t ntfs -t swap --total 2>/dev/null | grep total | awk '{ print $3 }' )
|
||||
disk_used_size=$( calc_size $disk_used_size )
|
||||
tcpctrl=$( sysctl net.ipv4.tcp_congestion_control | awk -F ' ' '{print $3}' )
|
||||
|
||||
virt_type=$(systemd-detect-virt)
|
||||
virt_type=${virt_type^^} || virt="UNKNOWN"
|
||||
}
|
||||
# Print System information
|
||||
print_system_info() {
|
||||
echo " Basic System Info"
|
||||
next
|
||||
|
||||
if [ -n "$cname" ]; then
|
||||
echo " CPU Model : $(_blue "$cname")"
|
||||
else
|
||||
echo " CPU Model : $(_blue "CPU model not detected")"
|
||||
fi
|
||||
if [ -n "$freq" ]; then
|
||||
echo " CPU Cores : $(_blue "$cores @ $freq MHz")"
|
||||
else
|
||||
echo " CPU Cores : $(_blue "$cores")"
|
||||
fi
|
||||
if [ -n "$ccache" ]; then
|
||||
echo " CPU Cache : $(_blue "$ccache")"
|
||||
fi
|
||||
if [ -n "$cpu_aes" ]; then
|
||||
echo " AES-NI : $(_green "\xE2\x9C\x94 Enabled")"
|
||||
else
|
||||
echo " AES-NI : $(_red "\xE2\x9D\x8C Disabled")"
|
||||
fi
|
||||
if [ -n "$cpu_virt" ]; then
|
||||
echo " VM-x/AMD-V : $(_green "\xE2\x9C\x94 Enabled")"
|
||||
else
|
||||
echo " VM-x/AMD-V : $(_red "\xE2\x9D\x8C Disabled")"
|
||||
fi
|
||||
echo " Total Disk : $(_yellow "$disk_total_size") $(_blue "($disk_used_size Used)")"
|
||||
echo " Total RAM : $(_yellow "$tram") $(_blue "($uram Used)")"
|
||||
if [ "$swap" != "0" ]; then
|
||||
echo " Total Swap : $(_blue "$swap ($uswap Used)")"
|
||||
fi
|
||||
echo " System uptime : $(_blue "$up")"
|
||||
echo " Load average : $(_blue "$load")"
|
||||
echo " OS : $(_blue "$opsy")"
|
||||
echo " Arch : $(_blue "$arch ($lbit Bit)")"
|
||||
echo " Kernel : $(_blue "$kern")"
|
||||
echo " Virtualization : $(_blue "$virt_type")"
|
||||
echo " TCP Control : $(_blue "$tcpctrl")"
|
||||
}
|
||||
|
||||
print_network_statistics() {
|
||||
echo " Avg DL Speed : $AVG_DL_SPEED Mbps"
|
||||
echo " Avg UL Speed : $AVG_UL_SPEED Mbps"
|
||||
echo -e
|
||||
echo " Total DL Data : $DL_USED_IN_GB GB"
|
||||
echo " Total UL Data : $UL_USED_IN_GB GB"
|
||||
echo " Total Data : $TOTAL_DATA_IN_GB GB"
|
||||
}
|
||||
|
||||
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 " Duration : ${min} min ${sec} sec"
|
||||
else
|
||||
echo " Duration : ${time} sec"
|
||||
fi
|
||||
date_time=$(date '+%d/%m/%Y - %H:%M:%S %Z')
|
||||
echo " System Time : $date_time"
|
||||
|
||||
}
|
||||
|
||||
get_runs_counter() {
|
||||
local counter=$(wget -qO- https://runs.nws.sh/)
|
||||
|
||||
if [[ -n "$counter" ]]; then
|
||||
echo " Total Script Runs : $(_green "$counter")"
|
||||
fi
|
||||
}
|
||||
|
||||
run_speed_sh() {
|
||||
! _exists "wget" && _red "nws.sh is unable to run.\nError: wget command not found.\n" && kill -INT $$ && exit 1
|
||||
! _exists "free" && _red "nws.sh is unable to run.\nError: free command not found.\n" && kill -INT $$ && exit 1
|
||||
|
||||
start_time=$(date +%s)
|
||||
get_system_info
|
||||
clear
|
||||
print_intro
|
||||
next
|
||||
print_system_info
|
||||
next
|
||||
ip_info
|
||||
next
|
||||
install_speedtest
|
||||
speed
|
||||
rm -fr speedtest-cli
|
||||
next
|
||||
print_network_statistics
|
||||
next
|
||||
print_end_time
|
||||
get_runs_counter
|
||||
next
|
||||
}
|
||||
|
||||
REGION="global"
|
||||
REGION_NAME="GLOBAL"
|
||||
|
||||
while getopts ":r:" opt; do
|
||||
case $opt in
|
||||
r)
|
||||
case $OPTARG in
|
||||
india)
|
||||
REGION="india"
|
||||
REGION_NAME="INDIA | भारत"
|
||||
;;
|
||||
asia)
|
||||
REGION="asia"
|
||||
REGION_NAME="ASIA"
|
||||
;;
|
||||
middle-east)
|
||||
REGION="middle-east"
|
||||
REGION_NAME="MIDDLE EAST | الشرق الأوسط"
|
||||
;;
|
||||
na)
|
||||
REGION="na"
|
||||
REGION_NAME="NORTH AMERICA"
|
||||
;;
|
||||
sa)
|
||||
REGION="sa"
|
||||
REGION_NAME="SOUTH AMERICA | LA AMÉRICA DEL SUR"
|
||||
;;
|
||||
eu)
|
||||
REGION="eu"
|
||||
REGION_NAME="EUROPE"
|
||||
;;
|
||||
au)
|
||||
REGION="au"
|
||||
REGION_NAME="AUSTRALIA/NZ"
|
||||
;;
|
||||
africa)
|
||||
REGION="africa"
|
||||
REGION_NAME="AFRICA"
|
||||
;;
|
||||
iran)
|
||||
REGION="iran"
|
||||
REGION_NAME="IRAN | ایران"
|
||||
;;
|
||||
china)
|
||||
REGION="china"
|
||||
REGION_NAME="CHINA | 中華人民共和國"
|
||||
;;
|
||||
indonesia)
|
||||
REGION="indonesia"
|
||||
REGION_NAME="INDONESIA"
|
||||
;;
|
||||
russia)
|
||||
REGION="russia"
|
||||
REGION_NAME="RUSSIA | Россия"
|
||||
;;
|
||||
*)
|
||||
echo "Invalid REGION: $OPTARG" >&2
|
||||
echo "Valid Regions: na, sa, eu, au, asia, africa, middle-east, india, china, iran, russia"
|
||||
echo "Visit nws.sh for instructions."
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
\?)
|
||||
echo "Invalid option: -$OPTARG" >&2
|
||||
echo "Visit nws.sh for instructions."
|
||||
exit 1
|
||||
;;
|
||||
:)
|
||||
echo "Option -$OPTARG requires an argument." >&2
|
||||
echo "Visit nws.sh for instructions."
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
|
||||
# run_speed_sh
|
||||
run_speed_sh | tee >(sed $'s/\033[[][^A-Za-z]*[A-Za-z]//g' > network-speed.txt)
|
||||
|
||||
if command -v curl >/dev/null; then
|
||||
share_link=$(curl -s -X POST -F 'file=@network-speed.txt' -F "region=$REGION" https://result.nws.sh/upload)
|
||||
if [ $? -ne 0 ]; then
|
||||
echo " Unable to share result online"
|
||||
echo " Result stored locally in $PWD/network-speed.txt"
|
||||
else
|
||||
if echo "$share_link" | grep -qE '^https?://.+'; then
|
||||
echo " Result : $share_link"
|
||||
rm network-speed.txt
|
||||
else
|
||||
echo " Unable to share result online - There is some issue with the online uploader."
|
||||
echo " Result stored locally in $PWD/network-speed.txt"
|
||||
fi
|
||||
fi
|
||||
else
|
||||
echo " curl is not installed, Unable to share result online"
|
||||
echo " Result stored locally in $PWD/network-speed.txt"
|
||||
fi
|
||||
|
||||
next
|
Loading…
Reference in New Issue
Block a user