11#! /usr/bin/env bash
22
33# Check for required commands
4- command -v bc > /dev/null || { echo " error: bc was not found. Please install bc." ; exit 1; }
5- { command -v drill > /dev/null && dig=drill; } || { command -v dig > /dev/null && dig=dig; } || { echo " error: dig was not found. Please install dnsutils." ; exit 1; }
4+ command -v bc > /dev/null || { echo " error: bc not found. Please install bc." ; exit 1; }
5+ command -v drill > /dev/null && dig=" drill" || { command -v dig > /dev/null && dig=" dig" || { echo " error: dig not found. Please install dnsutils." ; exit 1; } }
66
77# Extract nameservers from /etc/resolv.conf
8- NAMESERVERS=$( awk ' /^nameserver/ {print $2}' /etc/resolv.conf | sed ' s/\(.*\)/&#&/ ' )
8+ NAMESERVERS=$( awk ' /^nameserver/ {print $2}' /etc/resolv.conf)
99
1010# Define DNS providers
11- PROVIDERSV4=$( cat << EOF
11+ PROVIDERSV4="
12+ 42.247.23.161#DNS-BERSAMA
1213223.5.5.5#AliDNS
1314103.87.68.23#BebasDNS-Malware
14151.1.1.1#Cloudflare
@@ -37,10 +38,10 @@ PROVIDERSV4=$(cat <<EOF
3738198.54.117.10#SafeServe
383976.76.2.0#ControlD
3940172.104.162.222#OpenNIC
40- EOF
41- )
41+ "
4242
43- PROVIDERSV6=$( cat << EOF
43+ PROVIDERSV6="
44+ 2402:1200:155:23:43:247:23:161#DNS-BERSAMA-v6
44452400:3200::1#AliDNS-v6
45462606:4700:4700::1111#Cloudflare-v6
46472606:4700:4700::1112#CloudflareMalware-v6
@@ -57,60 +58,48 @@ PROVIDERSV6=$(cat <<EOF
57582001:470:20::2#HE.NET-v6
58592620:74:1b::1:1#Verisign-v6
59602001:df1:7340:c::beba:51d#BebasDNS-Malware-v6
60- EOF
61- )
61+ "
6262
6363# Test for IPv6 support
64- hasipv6=" "
65- if $dig +short +tries=1 +time=2 @2606:4700:4700::1111 alsyundawy.my.id | grep -q -E ' 172\.67\.134\.149|104\.21\.6\.70' ; then
66- hasipv6=" true"
64+ if $dig +short +tries=1 +time=2 @2606:4700:4700::1111 alsyundawy.my.id | grep -qE ' 172\.67\.134\.149|104\.21\.6\.70' ; then
65+ hasipv6=true
6766fi
6867
69- # Determine providers to test based on input
68+ # Determine providers to test
7069providerstotest=$PROVIDERSV4
7170case " $1 " in
7271 ipv6)
73- if [ -z " $hasipv6 " ]; then
74- echo " error: IPv6 support not found. Unable to do the ipv6 test."
75- exit 1
76- fi
72+ [ -z " $hasipv6 " ] && { echo " error: IPv6 support not found." ; exit 1; }
7773 providerstotest=$PROVIDERSV6
7874 ;;
79- ipv4)
80- providerstotest=$PROVIDERSV4
81- ;;
8275 all)
83- providerstotest=" $PROVIDERSV4 "
84- if [ -n " $hasipv6 " ]; then
85- providerstotest=" $PROVIDERSV4 $PROVIDERSV6 "
86- fi
76+ [ -n " $hasipv6 " ] && providerstotest=" $PROVIDERSV4 $PROVIDERSV6 "
8777 ;;
8878esac
8979
9080# Domains to test
9181DOMAINS2TEST=" google.com amazon.com facebook.com www.youtube.com www.reddit.com wikipedia.org twitter.com www.tokopedia.com whatsapp.com tiktok.com"
9282
9383# Display header
94- totaldomains=$( echo $DOMAINS2TEST | wc -w)
84+ totaldomains=$( wc -w <<< " $DOMAINS2TEST " )
9585printf " %-21s" " "
96- for i in $( seq 1 $totaldomains ) ; do
97- printf " %-8s" " test$i "
98- done
86+ for i in $( seq 1 $totaldomains ) ; do printf " %-8s" " test$i " ; done
9987printf " %-8s\n" " Average"
10088
10189# Perform tests
10290for p in $NAMESERVERS $providerstotest ; do
10391 pip=${p%%#* }
10492 pname=${p##*# }
10593 ftime=0
106-
10794 printf " %-21s" " $pname "
95+
10896 for d in $DOMAINS2TEST ; do
10997 ttime=$( $dig +tries=1 +time=2 +stats @$pip $d | awk ' /Query time:/ {print $4}' )
11098 ttime=${ttime:- 1000}
11199 printf " %-8s" " ${ttime} ms"
112100 ftime=$(( ftime + ttime))
113101 done
102+
114103 avg=$( bc <<< " scale=2; $ftime/$totaldomains" )
115104 printf " %-8s\n" " $avg "
116105done
0 commit comments