Guest User

Untitled

a guest
Apr 3rd, 2020
267
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #!/usr/bin/env bash
  2.  
  3. command -v bc > /dev/null || { echo "bc was not found. Please install bc."; exit 1; }
  4. { command -v drill > /dev/null && dig=drill; } || { command -v dig > /dev/null && dig=dig; } || { echo "dig was not found. Please install dnsutils."; exit 1; }
  5.  
  6.  
  7. # Local DNS resolvers
  8. NAMESERVERS=`cat /etc/resolv.conf | grep ^nameserver | cut -d " " -f 2 | sed 's/\(.*\)/&#&/'`
  9.  
  10. # Upstream DNS resolvers
  11. # Non-standard ports may be specified e.g. 127.0.0.1:5353#mydns
  12. PROVIDERS="
  13. 149.112.121.20#canadianshield
  14. 9.9.9.9#quad9
  15. 1.1.1.2#cloudflare2
  16. "
  17.  
  18. # Number of domains to test
  19. NUM_DOMAINS2TEST=20
  20.  
  21. # Random domains to choose from
  22. RANDOM_DOMAINS=(
  23. `curl -sS https://raw.githubusercontent.com/opendns/public-domain-lists/master/opendns-top-domains.txt`
  24. `curl -sS https://raw.githubusercontent.com/opendns/public-domain-lists/master/opendns-random-domains.txt`
  25. )
  26.  
  27. heading="DOMAINS TO TEST: "; echo -n "$heading"
  28. results_indent=$((${#heading} - 3))
  29. results_tempfile=`mktemp`
  30. domains2test=""
  31. num_random_domains=${#RANDOM_DOMAINS[*]}
  32.  
  33. for ((i=1; i <= $NUM_DOMAINS2TEST; i++)); do
  34.     if [ $i -gt 1 ]; then
  35.         printf "%-${#heading}s" ""
  36.     fi
  37.  
  38.     domain_id=`printf "%5s" "($i) "`; echo -n "$domain_id"
  39.     domain_heading="   $domain_id"
  40.     results_header="$results_header$domain_heading"
  41.     random_domain=${RANDOM_DOMAINS[$RANDOM % num_random_domains]}; echo $random_domain
  42.     domains2test="$domains2test $random_domain"
  43. done
  44.  
  45. avg_heading="  AVERAGE"
  46. results_header="$results_header$avg_heading"
  47. printf "\n%-${results_indent}s" ""
  48. echo "$results_header"
  49.  
  50. for p in $NAMESERVERS $PROVIDERS; do
  51.     pip=${p%%#*}
  52.     pname=${p##*#}
  53.     ftime=0
  54.  
  55.     printf "%-${results_indent}s" "$pname" | tee -a $results_tempfile
  56.     for d in $domains2test; do
  57.         ttime=`$dig +tries=1 +time=2 +stats @${pip/:/" -p"} $d | grep "Query time:" | cut -d : -f 2- | cut -d " " -f 2`
  58.         if [ -z "$ttime" ]; then
  59.             #let's have time out be 1s = 1000ms
  60.             ttime=1000
  61.         elif [ "x$ttime" = "x0" ]; then
  62.             ttime=1
  63.         fi
  64.  
  65.         printf "%${#domain_heading}s" "$ttime ms" | tee -a $results_tempfile
  66.         ftime=$((ftime + ttime))
  67.     done
  68.     avg=`bc -lq <<< "scale=2; $ftime/$NUM_DOMAINS2TEST"`
  69.  
  70.     printf "%${#avg_heading}s\n" $avg | tee -a $results_tempfile
  71. done
  72.  
  73. printf "\n%-${results_indent}s" "SORTED BY AVG."
  74. echo "$results_header"
  75. sort -g -k$((2*$NUM_DOMAINS2TEST + 2)) $results_tempfile
  76. rm $results_tempfile
  77.  
  78.  
  79. exit 0;
RAW Paste Data

Adblocker detected! Please consider disabling it...

We've detected AdBlock Plus or some other adblocking software preventing Pastebin.com from fully loading.

We don't have any obnoxious sound, or popup ads, we actively block these annoying types of ads!

Please add Pastebin.com to your ad blocker whitelist or disable your adblocking software.

×