Giter Site home page Giter Site logo

dnsperftest's Introduction

DNS Performance Test

Shell script to test the performance of the most popular DNS resolvers from your location.

Includes by default:

  • CloudFlare 1.1.1.1
  • Level3 4.2.2.1
  • Google 8.8.8.8
  • Quad9 9.9.9.9
  • Freenom 80.80.80.80
  • OpenDNS
  • Norton
  • CleanBrowsing
  • Yandex
  • AdGuard
  • Neustar
  • Comodo
  • NextDNS

Required

You need to install bc and dig.

For Ubuntu:

 $ sudo apt-get install bc dnsutils

For macOS using homebrew:

 $ brew install bc bind

Utilization

 $ git clone --depth=1 https://github.com/cleanbrowsing/dnsperftest/
 $ cd dnsperftest
 $ bash ./dnstest.sh 
               test1   test2   test3   test4   test5   test6   test7   test8   test9   test10  Average 
cloudflare     1 ms    1 ms    1 ms    2 ms    1 ms    1 ms    1 ms    1 ms    1 ms    1 ms      1.10
google         22 ms   1 ms    4 ms    24 ms   1 ms    19 ms   3 ms    56 ms   21 ms   21 ms     17.20
quad9          10 ms   19 ms   10 ms   10 ms   10 ms   10 ms   10 ms   10 ms   10 ms   55 ms     15.40
opendns        39 ms   2 ms    2 ms    20 ms   2 ms    72 ms   2 ms    39 ms   39 ms   3 ms      22.00
norton         2 ms    2 ms    2 ms    2 ms    1 ms    2 ms    2 ms    1 ms    2 ms    2 ms      1.80
cleanbrowsing  11 ms   14 ms   11 ms   11 ms   10 ms   10 ms   11 ms   36 ms   11 ms   13 ms     13.80
yandex         175 ms  209 ms  175 ms  181 ms  188 ms  179 ms  178 ms  179 ms  177 ms  208 ms    184.90
adguard        200 ms  200 ms  200 ms  199 ms  202 ms  200 ms  202 ms  200 ms  199 ms  248 ms    205.00
neustar        2 ms    2 ms    2 ms    2 ms    1 ms    2 ms    2 ms    2 ms    2 ms    2 ms      1.90
comodo         21 ms   22 ms   22 ms   22 ms   22 ms   22 ms   22 ms   21 ms   22 ms   24 ms     22.00

To sort with the fastest first, add sort -k 22 -n at the end of the command:

  $ bash ./dnstest.sh |sort -k 22 -n
               test1   test2   test3   test4   test5   test6   test7   test8   test9   test10  Average 
cloudflare     1 ms    1 ms    1 ms    4 ms    1 ms    1 ms    1 ms    1 ms    1 ms    1 ms      1.30
norton         2 ms    2 ms    2 ms    2 ms    2 ms    2 ms    2 ms    2 ms    2 ms    2 ms      2.00
neustar        2 ms    2 ms    2 ms    2 ms    1 ms    2 ms    2 ms    2 ms    2 ms    22 ms     3.90
cleanbrowsing  11 ms   23 ms   11 ms   11 ms   11 ms   11 ms   11 ms   13 ms   12 ms   11 ms     12.50
google         4 ms    4 ms    3 ms    21 ms   21 ms   61 ms   3 ms    21 ms   21 ms   22 ms     18.10
opendns        2 ms    2 ms    2 ms    39 ms   2 ms    75 ms   2 ms    21 ms   39 ms   13 ms     19.70
comodo         22 ms   23 ms   22 ms   22 ms   22 ms   22 ms   22 ms   22 ms   22 ms   23 ms     22.20
quad9          10 ms   37 ms   10 ms   10 ms   10 ms   145 ms  10 ms   10 ms   10 ms   20 ms     27.20
yandex         177 ms  216 ms  178 ms  182 ms  186 ms  177 ms  183 ms  174 ms  186 ms  222 ms    188.10
adguard        199 ms  210 ms  200 ms  201 ms  202 ms  202 ms  199 ms  200 ms  198 ms  201 ms    201.20

To test using the IPv6 addresses, add the IPv6 option:

  $ bash ./dnstest.sh ipv6| sort -k 22 -n
                     test1   test2   test3   test4   test5   test6   test7   test8   test9   test10  Average 
cleanbrowsing-v6     1 ms    1 ms    1 ms    1 ms    1 ms    1 ms    1 ms    1 ms    1 ms    1 ms      1.00
cloudflare-v6        1 ms    1 ms    1 ms    1 ms    1 ms    1 ms    5 ms    1 ms    1 ms    1 ms      1.40
quad9-v6             1 ms    1 ms    1 ms    1 ms    1 ms    1 ms    1 ms    1 ms    1 ms    21 ms     3.00
8.8.8.8              7 ms    1 ms    16 ms   1 ms    1 ms    24 ms   1 ms    8 ms    1 ms    7 ms      6.70
neustar-v6           1 ms    1 ms    1 ms    1 ms    1 ms    1 ms    1 ms    1 ms    1 ms    60 ms     6.90
opendns-v6           1 ms    1 ms    1 ms    1 ms    1 ms    62 ms   1 ms    1 ms    29 ms   1 ms      9.90
google-v6            8 ms    8 ms    7 ms    8 ms    14 ms   67 ms   1 ms    7 ms    8 ms    61 ms     18.90
adguard-v6           52 ms   55 ms   52 ms   53 ms   52 ms   56 ms   52 ms   55 ms   52 ms   57 ms     53.60
yandex-v6            177 ms  178 ms  178 ms  179 ms  179 ms  178 ms  179 ms  178 ms  178 ms  223 ms    182.70

To test both IPv6 and IPv4, add the "all" option:

  $ bash ./dnstest.sh all| sort -k 22 -n
                     test1   test2   test3   test4   test5   test6   test7   test8   test9   test10  Average 
cleanbrowsing        1 ms    1 ms    1 ms    1 ms    1 ms    1 ms    1 ms    1 ms    1 ms    1 ms      1.00
cleanbrowsing-v6     1 ms    1 ms    1 ms    1 ms    1 ms    1 ms    1 ms    1 ms    1 ms    1 ms      1.00
cloudflare-v6        1 ms    1 ms    1 ms    1 ms    1 ms    1 ms    1 ms    1 ms    1 ms    1 ms      1.00
neustar              1 ms    1 ms    1 ms    1 ms    1 ms    1 ms    1 ms    1 ms    1 ms    1 ms      1.00
nextdns              1 ms    1 ms    1 ms    1 ms    1 ms    1 ms    1 ms    1 ms    1 ms    1 ms      1.00
quad9-v6             1 ms    1 ms    1 ms    1 ms    1 ms    1 ms    1 ms    1 ms    1 ms    1 ms      1.00
cloudflare           1 ms    1 ms    1 ms    1 ms    1 ms    2 ms    1 ms    1 ms    1 ms    1 ms      1.10
quad9                1 ms    1 ms    1 ms    2 ms    1 ms    1 ms    1 ms    1 ms    1 ms    1 ms      1.10
google               1 ms    1 ms    6 ms    1 ms    1 ms    6 ms    1 ms    7 ms    9 ms    7 ms      4.00
8.8.8.8              6 ms    1 ms    25 ms   1 ms    1 ms    6 ms    1 ms    7 ms    1 ms    7 ms      5.60
neustar-v6           1 ms    1 ms    1 ms    1 ms    1 ms    1 ms    1 ms    1 ms    1 ms    64 ms     7.30
opendns-v6           7 ms    1 ms    21 ms   8 ms    1 ms    1 ms    1 ms    6 ms    1 ms    29 ms     7.60
opendns              1 ms    1 ms    27 ms   27 ms   1 ms    67 ms   1 ms    6 ms    1 ms    27 ms     15.90
comodo               1 ms    1 ms    1 ms    1 ms    4 ms    1 ms    1 ms    1 ms    1 ms    150 ms    16.20
google-v6            7 ms    6 ms    33 ms   7 ms    7 ms    87 ms   7 ms    8 ms    8 ms    25 ms     19.50
level3               27 ms   26 ms   25 ms   27 ms   27 ms   25 ms   27 ms   27 ms   25 ms   28 ms     26.40
norton               28 ms   26 ms   28 ms   26 ms   26 ms   28 ms   27 ms   27 ms   27 ms   27 ms     27.00
adguard-v6           52 ms   54 ms   55 ms   56 ms   52 ms   52 ms   52 ms   53 ms   53 ms   54 ms     53.30
adguard              58 ms   58 ms   58 ms   58 ms   60 ms   58 ms   60 ms   60 ms   58 ms   60 ms     58.80
freenom              140 ms  140 ms  140 ms  145 ms  135 ms  140 ms  140 ms  140 ms  140 ms  134 ms    139.40
yandex-v6            178 ms  179 ms  178 ms  179 ms  178 ms  178 ms  178 ms  179 ms  179 ms  205 ms    181.10
yandex               178 ms  178 ms  177 ms  179 ms  178 ms  174 ms  180 ms  178 ms  179 ms  222 ms    182.30

For Windows users using the Linux subsystem

If you receive an error $'\r': command not found, convert the file to a Linux-compatible line endings using:

tr -d '\15\32' < dnstest.sh > dnstest-2.sh

Then run bash ./dnstest-2.sh

dnsperftest's People

Contributors

andre3k1 avatar chadlevy avatar cleanbrowsing avatar flaviomartins avatar fruitl00p avatar joelschopp avatar mrmartineau avatar mtzfederico avatar ngharo avatar nudin avatar patrick330602 avatar sharils avatar thomasmerz avatar tssva avatar vltr avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

dnsperftest's Issues

does not work if `resolv.conf` uses tabs instead of spaces

Running this script on synology out-of-the-box incorrectly gathers invalid nameservers for the host.

cat /etc/resolv.conf | grep ^nameserver | cut -d " " -f 2 | sed 's/\(.*\)/&#&/'
nameserver	192.168.1.1#nameserver	192.168.1.1

...this is resolved by adding cut -f 2 (which uses the default tab delimiter for cut) and it also continues to work on other OSes where the space is used. I'll create a PR for this change.

Every result is 1000ms

Iโ€™m not sure if I did something wrong but I installed bc and bind with brew install bc bind and ran the script with bash ./dnstest.sh |sort -k 22 -n

This is what it showed when it finished:
CleanShot 2024-03-31 at 09 25 27

This is on an M1 MBA running macOS 14.3.1

Dig vs Dog time differences

Apologies - I wasn't able to locate an answer using google or stackoverflow.

Why is there a large time difference caused when substituting the dig command for the dog command?

To replicate, replace:

ttime=`$dig +tries=1 +time=2 +stats @$pip $d |grep "Query time:" | cut -d : -f 2- | cut -d " " -f 2`

with

ttime=`$dog $d @$pip --time | grep "Ran in" | cut -c 8-15 | cut -d "m" -f 1`

also add the following at the top of the file after ~line 5/6


{ command -v drill > /dev/null && dog=drill; } || { command -v dog > /dev/null && dog=dog; } || { echo "error: dog was not found. Please install dog."; exit 1; }

As an example - here are my DNS perfs (i amended so you can see which domain its hitting)

With DIG (DiG 9.10.6)

                     www.go  amazon  facebo  carous  www.re  wikipe  twitte  gmail.  instag  whatsa  Average 
192.168.1.37         57 ms   49 ms   50 ms   1000 ms 55 ms   56 ms   53 ms   50 ms   50 ms   49 ms     146.90
192.168.1.1          50 ms   50 ms   49 ms   50 ms   49 ms   50 ms   50 ms   1000 ms 58 ms   54 ms     146.00
cloudflare           54 ms   54 ms   50 ms   49 ms   51 ms   53 ms   53 ms   52 ms   52 ms   53 ms     52.10
level3               1000 ms 62 ms   53 ms   49 ms   51 ms   172 ms  49 ms   50 ms   50 ms   50 ms     158.60
google               52 ms   51 ms   50 ms   49 ms   49 ms   52 ms   49 ms   51 ms   51 ms   50 ms     50.40
quad9                50 ms   53 ms   50 ms   49 ms   53 ms   50 ms   53 ms   49 ms   51 ms   50 ms     50.80
freenom              51 ms   51 ms   49 ms   51 ms   49 ms   50 ms   50 ms   49 ms   1000 ms 58 ms     145.80
opendns              52 ms   49 ms   53 ms   49 ms   54 ms   53 ms   52 ms   49 ms   51 ms   50 ms     51.20
norton               51 ms   1000 ms 56 ms   51 ms   50 ms   52 ms   52 ms   50 ms   49 ms   52 ms     146.30
cleanbrowsing        49 ms   53 ms   55 ms   50 ms   1000 ms 57 ms   50 ms   49 ms   50 ms   49 ms     146.20
yandex               50 ms   52 ms   52 ms   50 ms   49 ms   54 ms   49 ms   51 ms   51 ms   51 ms     50.90
adguard              50 ms   51 ms   50 ms   53 ms   50 ms   49 ms   49 ms   49 ms   49 ms   50 ms     50.00
neustar              51 ms   51 ms   51 ms   51 ms   51 ms   56 ms   53 ms   53 ms   51 ms   50 ms     51.80
comodo               50 ms   54 ms   54 ms   53 ms   54 ms   53 ms   53 ms   52 ms   50 ms   49 ms     52.20
nextdns              51 ms   51 ms   53 ms   53 ms   54 ms   53 ms   1000 ms 56 ms   49 ms   50 ms     147.00

vs with DOG (Dog -v v0.1.0)

192.168.1.37         15 ms   5 ms    6 ms    12 ms   5 ms    23 ms   7 ms    16 ms   5 ms    5 ms      9.90
192.168.1.1          7 ms    9 ms    5 ms    5 ms    5 ms    5 ms    17 ms   7 ms    4 ms    5 ms      6.90

fail on drill 1.8.3

Run on archlinux docker

drill -v
drill version 1.8.3 (ldns version 1.8.3)
bash dnstest.sh 
Error: Unsupported argument after '+'
                     test1   test2   test3   test4   test5   test6   test7   test8   test9   test10  Average 
10.0.2.3             Error: Unsupported argument after '+'
1000 ms Error: Unsupported argument after '+'
1000 ms Error: Unsupported argument after '+'
1000 ms Error: Unsupported argument after '+'
1000 ms Error: Unsupported argument after '+'
1000 ms Error: Unsupported argument after '+'
1000 ms Error: Unsupported argument after '+'
1000 ms Error: Unsupported argument after '+'
1000 ms Error: Unsupported argument after '+'
1000 ms Error: Unsupported argument after '+'
1000 ms   1000.00
202.96.209.5         Error: Unsupported argument after '+'
1000 ms Error: Unsupported argument after '+'
1000 ms Error: Unsupported argument after '+'
1000 ms Error: Unsupported argument after '+'
1000 ms Error: Unsupported argument after '+'
1000 ms Error: Unsupported argument after '+'
1000 ms Error: Unsupported argument after '+'
1000 ms Error: Unsupported argument after '+'
1000 ms Error: Unsupported argument after '+'
1000 ms Error: Unsupported argument after '+'
1000 ms   1000.00
202.96.209.133       Error: Unsupported argument after '+'
1000 ms Error: Unsupported argument after '+'
1000 ms Error: Unsupported argument after '+'
1000 ms Error: Unsupported argument after '+'
1000 ms Error: Unsupported argument after '+'
1000 ms Error: Unsupported argument after '+'
1000 ms Error: Unsupported argument after '+'
1000 ms Error: Unsupported argument after '+'
1000 ms Error: Unsupported argument after '+'
1000 ms Error: Unsupported argument after '+'
1000 ms   1000.00
8.8.8.8              Error: Unsupported argument after '+'
1000 ms Error: Unsupported argument after '+'
1000 ms Error: Unsupported argument after '+'
1000 ms Error: Unsupported argument after '+'
1000 ms Error: Unsupported argument after '+'
1000 ms Error: Unsupported argument after '+'
1000 ms Error: Unsupported argument after '+'
1000 ms Error: Unsupported argument after '+'
1000 ms Error: Unsupported argument after '+'
1000 ms Error: Unsupported argument after '+'
1000 ms   1000.00
cloudflare           Error: Unsupported argument after '+'
1000 ms Error: Unsupported argument after '+'
1000 ms Error: Unsupported argument after '+'
1000 ms Error: Unsupported argument after '+'
1000 ms Error: Unsupported argument after '+'
1000 ms Error: Unsupported argument after '+'
1000 ms Error: Unsupported argument after '+'
1000 ms Error: Unsupported argument after '+'
1000 ms Error: Unsupported argument after '+'
1000 ms Error: Unsupported argument after '+'
1000 ms   1000.00
level3               Error: Unsupported argument after '+'
1000 ms Error: Unsupported argument after '+'
1000 ms Error: Unsupported argument after '+'
1000 ms Error: Unsupported argument after '+'
1000 ms Error: Unsupported argument after '+'
1000 ms Error: Unsupported argument after '+'
1000 ms Error: Unsupported argument after '+'
1000 ms Error: Unsupported argument after '+'
1000 ms Error: Unsupported argument after '+'
1000 ms Error: Unsupported argument after '+'
1000 ms   1000.00
google               Error: Unsupported argument after '+'
1000 ms Error: Unsupported argument after '+'
1000 ms Error: Unsupported argument after '+'
1000 ms Error: Unsupported argument after '+'
1000 ms Error: Unsupported argument after '+'
1000 ms Error: Unsupported argument after '+'
1000 ms Error: Unsupported argument after '+'
1000 ms Error: Unsupported argument after '+'
1000 ms Error: Unsupported argument after '+'
1000 ms Error: Unsupported argument after '+'
1000 ms   1000.00
quad9                Error: Unsupported argument after '+'
1000 ms Error: Unsupported argument after '+'
1000 ms Error: Unsupported argument after '+'
1000 ms Error: Unsupported argument after '+'
1000 ms Error: Unsupported argument after '+'
1000 ms Error: Unsupported argument after '+'
1000 ms Error: Unsupported argument after '+'
1000 ms Error: Unsupported argument after '+'
1000 ms Error: Unsupported argument after '+'
1000 ms Error: Unsupported argument after '+'
1000 ms   1000.00
freenom              Error: Unsupported argument after '+'
1000 ms Error: Unsupported argument after '+'
1000 ms Error: Unsupported argument after '+'
1000 ms Error: Unsupported argument after '+'
1000 ms Error: Unsupported argument after '+'
1000 ms Error: Unsupported argument after '+'
1000 ms Error: Unsupported argument after '+'
1000 ms Error: Unsupported argument after '+'
1000 ms Error: Unsupported argument after '+'
1000 ms Error: Unsupported argument after '+'
1000 ms   1000.00
opendns              Error: Unsupported argument after '+'
1000 ms Error: Unsupported argument after '+'
1000 ms Error: Unsupported argument after '+'
1000 ms Error: Unsupported argument after '+'
1000 ms Error: Unsupported argument after '+'
1000 ms Error: Unsupported argument after '+'
1000 ms Error: Unsupported argument after '+'
1000 ms Error: Unsupported argument after '+'
1000 ms Error: Unsupported argument after '+'
1000 ms Error: Unsupported argument after '+'
1000 ms   1000.00
norton               Error: Unsupported argument after '+'
1000 ms Error: Unsupported argument after '+'
1000 ms Error: Unsupported argument after '+'
1000 ms Error: Unsupported argument after '+'
1000 ms Error: Unsupported argument after '+'
1000 ms Error: Unsupported argument after '+'
1000 ms Error: Unsupported argument after '+'
1000 ms Error: Unsupported argument after '+'
1000 ms Error: Unsupported argument after '+'
1000 ms Error: Unsupported argument after '+'
1000 ms   1000.00
cleanbrowsing        Error: Unsupported argument after '+'
1000 ms Error: Unsupported argument after '+'
1000 ms Error: Unsupported argument after '+'
1000 ms Error: Unsupported argument after '+'
1000 ms Error: Unsupported argument after '+'
1000 ms Error: Unsupported argument after '+'
1000 ms Error: Unsupported argument after '+'
1000 ms Error: Unsupported argument after '+'
1000 ms Error: Unsupported argument after '+'
1000 ms Error: Unsupported argument after '+'
1000 ms   1000.00
yandex               Error: Unsupported argument after '+'
1000 ms Error: Unsupported argument after '+'
1000 ms Error: Unsupported argument after '+'
1000 ms Error: Unsupported argument after '+'
1000 ms Error: Unsupported argument after '+'
1000 ms Error: Unsupported argument after '+'
1000 ms Error: Unsupported argument after '+'
1000 ms Error: Unsupported argument after '+'
1000 ms Error: Unsupported argument after '+'
1000 ms Error: Unsupported argument after '+'
1000 ms   1000.00
adguard              Error: Unsupported argument after '+'
1000 ms Error: Unsupported argument after '+'
1000 ms Error: Unsupported argument after '+'
1000 ms Error: Unsupported argument after '+'
1000 ms Error: Unsupported argument after '+'
1000 ms Error: Unsupported argument after '+'
1000 ms Error: Unsupported argument after '+'
1000 ms Error: Unsupported argument after '+'
1000 ms Error: Unsupported argument after '+'
1000 ms Error: Unsupported argument after '+'
1000 ms   1000.00
neustar              Error: Unsupported argument after '+'
1000 ms Error: Unsupported argument after '+'
1000 ms Error: Unsupported argument after '+'
1000 ms Error: Unsupported argument after '+'
1000 ms Error: Unsupported argument after '+'
1000 ms Error: Unsupported argument after '+'
1000 ms Error: Unsupported argument after '+'
1000 ms Error: Unsupported argument after '+'
1000 ms Error: Unsupported argument after '+'
1000 ms Error: Unsupported argument after '+'
1000 ms   1000.00
comodo               Error: Unsupported argument after '+'
1000 ms Error: Unsupported argument after '+'
1000 ms Error: Unsupported argument after '+'
1000 ms Error: Unsupported argument after '+'
1000 ms Error: Unsupported argument after '+'
1000 ms Error: Unsupported argument after '+'
1000 ms Error: Unsupported argument after '+'
1000 ms Error: Unsupported argument after '+'
1000 ms Error: Unsupported argument after '+'
1000 ms Error: Unsupported argument after '+'
1000 ms   1000.00
nextdns              Error: Unsupported argument after '+'
1000 ms Error: Unsupported argument after '+'
1000 ms Error: Unsupported argument after '+'
1000 ms Error: Unsupported argument after '+'
1000 ms Error: Unsupported argument after '+'
1000 ms Error: Unsupported argument after '+'
1000 ms Error: Unsupported argument after '+'
1000 ms Error: Unsupported argument after '+'
1000 ms Error: Unsupported argument after '+'
1000 ms Error: Unsupported argument after '+'
1000 ms   1000.00

Dockerise dnsperftest

If anyone would like this, please +1 this issue and I'll create a PR to Dockerise dnsperftest

Windows 10?

I wonder if there is any way to test this on windows.

Command not found

When running the shell script on windows 10 using git bash, it keeps showing command not found.
image

Cloudflare test fails if default IP of 1.1.1.1 is consumed by other devices

The Cloudflare test fails if default IP of 1.1.1.1 is consumed by other (misconfigured) devices.
Perhaps the Cloudflare IP you use should be 1.0.0.1, to avoid that issue.

This is what it looks like because service provider's router also has 1.1.1.1 on it and that IP doesn't respond to DNS queries.

root@frankb-PC:/mnt/c/Users/fbulk/dnsperftest# bash ./dnstest.sh
test1 test2 test3 test4 test5 test6 test7 test8 test9 test10 Average
192.168.0.1 19 ms 25 ms 14 ms 30 ms 30 ms 38 ms 24 ms 23 ms 24 ms 24 ms 25.10
cloudflare 1000 ms 1000 ms 1000 ms 1000 ms 1000 ms 1000 ms 1000 ms 1000 ms 1000 ms 1000 ms 1000.00
level3 50 ms 41 ms 102 ms 49 ms 49 ms 39 ms 62 ms 41 ms 52 ms 42 ms 52.70

dual stack ipv4 & ipv6

hi not working dnstest with dual stack ipv4 with ipv6

my ip is

20x.xx.12.188
2x0x:1x00:155:22:20x:xx:12:188

ping6 google.com
PING google.com(sd-in-f102.1e100.net (2404:6800:4003:c0f::66)) 56 data bytes
64 bytes from sd-in-f102.1e100.net (2404:6800:4003:c0f::66): icmp_seq=1 ttl=107 time=14.7 ms
64 bytes from sd-in-f102.1e100.net (2404:6800:4003:c0f::66): icmp_seq=2 ttl=107 time=14.7 ms
64 bytes from sd-in-f102.1e100.net (2404:6800:4003:c0f::66): icmp_seq=3 ttl=107 time=14.7 ms
64 bytes from sd-in-f102.1e100.net (2404:6800:4003:c0f::66): icmp_seq=4 ttl=107 time=14.7 ms
64 bytes from sd-in-f102.1e100.net (2404:6800:4003:c0f::66): icmp_seq=5 ttl=107 time=14.7 ms
64 bytes from sd-in-f102.1e100.net (2404:6800:4003:c0f::66): icmp_seq=6 ttl=107 time=14.7 ms

./dnstest.sh ipv6 | sort -k 22 -n
error: IPv6 support not found. Unable to do the ipv6 test.

./dnstest.sh all | sort -k 22 -n
test1 test2 test3 test4 test5 test6 test7 test8 test9 test10 Average
::1 1 ms 1 ms 1 ms 1 ms 1 ms 1 ms 1 ms 1 ms 1 ms 1 ms 1.00
127.0.0.1 1 ms 1 ms 1 ms 1 ms 1 ms 1 ms 1 ms 1 ms 1 ms 1 ms 1.00
alidns 4 ms 4 ms 1 ms 4 ms 4 ms 1 ms 1 ms 1 ms 1 ms 1 ms 2.20
level3-1 12 ms 12 ms 12 ms 12 ms 12 ms 12 ms 12 ms 12 ms 12 ms 8 ms 11.60
cloudflare1 12 ms 12 ms 12 ms 12 ms 12 ms 12 ms 12 ms 16 ms 12 ms 12 ms 12.40
level3-2 12 ms 12 ms 12 ms 12 ms 12 ms 12 ms 12 ms 20 ms 8 ms 12 ms 12.40
comodo 16 ms 16 ms 16 ms 16 ms 16 ms 12 ms 16 ms 20 ms 20 ms 16 ms 16.40
cloudflare2 16 ms 16 ms 16 ms 40 ms 16 ms 12 ms 16 ms 16 ms 12 ms 16 ms 17.60
google 16 ms 16 ms 20 ms 16 ms 12 ms 12 ms 16 ms 48 ms 16 ms 20 ms 19.20
SafeDNS 16 ms 12 ms 16 ms 16 ms 16 ms 16 ms 16 ms 16 ms 16 ms 168 ms 30.80
cleanbrowsing 16 ms 16 ms 16 ms 16 ms 16 ms 16 ms 12 ms 12 ms 188 ms 20 ms 32.80
quad9 12 ms 12 ms 12 ms 16 ms 16 ms 16 ms 16 ms 16 ms 12 ms 208 ms 33.60
opendns 12 ms 12 ms 12 ms 8 ms 12 ms 248 ms 12 ms 12 ms 12 ms 60 ms 40.00
Verisign 40 ms 44 ms 44 ms 44 ms 48 ms 44 ms 44 ms 44 ms 44 ms 44 ms 44.00
HE.NET 16 ms 12 ms 12 ms 16 ms 12 ms 12 ms 16 ms 420 ms 48 ms 20 ms 58.40
neustar 44 ms 44 ms 48 ms 48 ms 44 ms 44 ms 44 ms 108 ms 320 ms 132 ms 87.60
Baidu 40 ms 44 ms 116 ms 92 ms 92 ms 220 ms 96 ms 88 ms 116 ms 124 ms 102.80
nextdns 16 ms 16 ms 20 ms 1000 ms 20 ms 16 ms 16 ms 20 ms 64 ms 164 ms 135.20
norton 44 ms 44 ms 40 ms 40 ms 44 ms 44 ms 40 ms 1000 ms 44 ms 44 ms 138.40
DynDNS 192 ms 180 ms 188 ms 180 ms 192 ms 180 ms 192 ms 196 ms 216 ms 200 ms 191.60
adguard 240 ms 240 ms 256 ms 244 ms 244 ms 236 ms 236 ms 244 ms 252 ms 240 ms 243.20
freenom 12 ms 1000 ms 56 ms 12 ms 248 ms 16 ms 208 ms 1000 ms 12 ms 184 ms 274.80
yandex 252 ms 1000 ms 228 ms 204 ms 248 ms 204 ms 220 ms 352 ms 204 ms 200 ms 311.20
OneDNS 336 ms 360 ms 332 ms 332 ms 340 ms 336 ms 332 ms 336 ms 348 ms 364 ms 341.60
DNS.Watch 1000 ms 1000 ms 1000 ms 1000 ms 1000 ms 1000 ms 1000 ms 1000 ms 1000 ms 1000 ms 1000.00

What does "google" mean?

The results include 8.8.8.8, 8.8.4.4 and google, all three have different timings (google being the best)

What is google if it is neither 8.8.8.8 nor 8.8.4.4?

what is going on with my results?

I am puzzled by my results. Google1 (8.8.8.8) and Cloudflare1 (1.1.1.1) always show what looks like exactly 5s spikes or just errors. All the others are always fine and I see no such spikes with pings.. While I guess it's not the script faults anybody has any idea what is going on?

I have DiG 9.12.1..

                  test1   test2   test3   test4   test5   test6   test7   test8   test9   test10  Average 
192.168.86.1      2 ms    14 ms   12 ms   13 ms   14 ms   14 ms   2 ms    2 ms    2 ms    13 ms     8.80
cloudflare1       10 ms   10 ms   5014 ms 5013 ms 8 ms    9 ms    8 ms    10 ms   8 ms    8 ms      1009.80
cloudflare2       9 ms    11 ms   8 ms    8 ms    10 ms   7 ms    8 ms    11 ms   8 ms    10 ms     9.00
google1           30 ms   30 ms   5036 ms Error: error sending query: Could not send or receive, because of network error
1000 ms 5048 ms 64 ms   10037 ms5037 ms Error: error sending query: Could not send or receive, because of network error
1000 ms 31 ms     2731.30
google2           31 ms   32 ms   30 ms   30 ms   40 ms   57 ms   34 ms   32 ms   30 ms   30 ms     34.60
quad9             10 ms   21 ms   13 ms   8 ms    11 ms   12 ms   8 ms    10 ms   8 ms    9 ms      11.00
opendns           15 ms   14 ms   16 ms   38 ms   16 ms   104 ms  15 ms   42 ms   16 ms   29 ms     30.50
norton            25 ms   37 ms   27 ms   27 ms   29 ms   28 ms   26 ms   26 ms   27 ms   26 ms     27.80
cleanbrowsing     28 ms   28 ms   30 ms   28 ms   27 ms   28 ms   28 ms   40 ms   28 ms   43 ms     30.80
yandex            123 ms  126 ms  123 ms  120 ms  122 ms  120 ms  124 ms  139 ms  125 ms  182 ms    130.40
adguard           91 ms   100 ms  97 ms   93 ms   116 ms  99 ms   94 ms   90 ms   100 ms  90 ms     97.00
neustar           29 ms   26 ms   26 ms   26 ms   25 ms   29 ms   26 ms   26 ms   26 ms   28 ms     26.70
comodo            21 ms   20 ms   18 ms   20 ms   18 ms   20 ms   18 ms   18 ms   19 ms   19 ms     19.10

Android Termux compatibility

Hi

I was trying to test script on my Android Termux and observed following:

  • File resolve.conf is not under the /etc folder, it is under the /data/data/com.termux/files/usr/etc one
  • Command drill does not support + options

Apart from that it looks like working OK.

Regards,
Areg

IPv6 addresses result in misaligned columns

The script apparently pulls the system's default DNS server entries. In my case, one of those is an IPv6 address (2607:fe28:0:1000::5), and because its length, pushes the columns over, so the recommend sort doesn't work correctly:

root@frankb-PC:/mnt/c/Users/fbulk/dnsperftest# bash ./dnstest.sh | sort -k 22 -n
2607:fe28:0:1000::519 ms 40 ms 22 ms 10 ms 31 ms 9 ms 24 ms 47 ms 9 ms 65 ms 27.60
test1 test2 test3 test4 test5 test6 test7 test8 test9 test10 Average
premier2 16 ms 14 ms 12 ms 13 ms 13 ms 10 ms 9 ms 11 ms 13 ms 11 ms 12.20

Why did you use BC?

I've removed the bc and command dependencies and changed the average calculation to pure shell scripting in the hopes of making the script a bit more compatible with limited systems.

Instead of

command -v (...)
(...)
avg=`bc -l <<< "scale=2; $ftime/$totaldomains"`

I changed to

which (...)
(...)
avg=$((100 * ftime / totaldomains))
avg_decimal=$((avg / 100))
avg_remainder=$((avg % 100))
printf "%d.%02d\n" $avg_decimal $avg_remainder

It seems the result is correct.

Why did you use BC after all?

Issue with dig

I'm sure this is a really simple issue but I can't seem to chase it down. Running Arch and get the following error:

$./dnstest.sh
Error: Unsupported argument after '+'
test1 test2 test3 test4 test5 test6 test7 test8 test9 test10 Average
192.168.30.1 Error: Unsupported argument after '+'
1000 ms Error: Unsupported argument after '+'
1000 ms Error: Unsupported argument after '+'
1000 ms Error: Unsupported argument after '+'
1000 ms Error: Unsupported argument after '+'

Any help would be greatly appreciated.

uj

Question - on result

./dnstest.sh 
                  test1   test2   test3   test4   test5   test6   test7   test8   test9   test10  Average 
127.0.1.1         1 ms    21 ms   1 ms    1 ms    21 ms   1 ms    1 ms    1 ms    1 ms    1 ms      5.00
cloudflare        1 ms    1 ms    1 ms    1 ms    1 ms    1 ms    1 ms    1 ms    1 ms    1 ms      1.00
level3            1 ms    1 ms    1 ms    1 ms    1 ms    1 ms    1 ms    1 ms    1 ms    1 ms      1.00
google            1 ms    1 ms    1 ms    1 ms    1 ms    1 ms    1 ms    1 ms    1 ms    1 ms      1.00
quad9             1 ms    1 ms    1 ms    1 ms    1 ms    1 ms    1 ms    1 ms    1 ms    1 ms      1.00
freenom           1 ms    1 ms    1 ms    1 ms    1 ms    1 ms    1 ms    1 ms    1 ms    1 ms      1.00
opendns           1 ms    1 ms    1 ms    1 ms    1 ms    1 ms    1 ms    1 ms    1 ms    1 ms      1.00
norton            1 ms    1 ms    1 ms    1 ms    1 ms    1 ms    1 ms    1 ms    1 ms    1 ms      1.00
cleanbrowsing     1 ms    1 ms    1 ms    1 ms    1 ms    1 ms    1 ms    1 ms    1 ms    1 ms      1.00
yandex            1 ms    1 ms    1 ms    1 ms    1 ms    1 ms    1 ms    1 ms    1 ms    1 ms      1.00
adguard           1 ms    1 ms    1 ms    1 ms    1 ms    1 ms    1 ms    1 ms    1 ms    1 ms      1.00
neustar           1 ms    1 ms    1 ms    1 ms    1 ms    1 ms    1 ms    1 ms    1 ms    1 ms      1.00
comodo            1 ms    1 ms    1 ms    1 ms    1 ms    1 ms    1 ms    1 ms    1 ms    1 ms      1.00
192.168.90.1      1 ms    1 ms    1 ms    1 ms    1 ms    1 ms    1 ms    1 ms    1 ms    1 ms      1.00

why my loopback so slow ?

Change sort by fastest example

Adding any extra DNS servers will break the example sort command:
$ bash ./dnstest.sh |sort -k 22 -n

A cleaner way would be to sort by the last column automatically:
$ bash ./dnstest.sh | awk '{ print $NF,$0 }' | sort -k1,1 -n | cut -f2- -d' '

Repeated DNS Server Test Shown

I am using "Bash on Ubuntu on Windows" on Windows 10 v1709. I have my defauly DNS Server changed yesterday to 1.1.1.1 and alterantive to Open Dns One. IDK why but Cloudflare was tested 3 times, Open DNS 2x.

This is My result:
image

Mack Pro 2010 vs MacBook Air (2020, M1)

I tested the difference between two machines (see title) on a network that has -> Pihole -> Unbound. The Unbound service was hot - so I don't believe cache is an issue.

I was getting consistently slow requests across all providers on the new MacBook Air. Anyone else?

Note

  • MacBook Air - Tx Rate (104Mbps,802.11n)
  • MacBook Pro - Tx Rate (73Mbps, 802.11n)
  • The results below were repeated several times, without much change on each machine

On the new MacBook Air

*192.168.10.104    60 ms   47 ms   47 ms   47 ms   46 ms   46 ms   47 ms   48 ms   47 ms   48 ms   49 ms   47 ms   47 ms   49 ms   48 ms     48.20*
cloudflare        48 ms   48 ms   48 ms   47 ms   48 ms   48 ms   47 ms   47 ms   48 ms   48 ms   48 ms   48 ms   48 ms   48 ms   49 ms     47.86
level3            49 ms   49 ms   49 ms   1000 ms 54 ms   51 ms   1000 ms 56 ms   1000 ms 1000 ms 1000 ms 52 ms   51 ms   52 ms   1000 ms   430.86
google            57 ms   53 ms   50 ms   51 ms   52 ms   51 ms   51 ms   56 ms   52 ms   51 ms   50 ms   51 ms   50 ms   53 ms   49 ms     51.80
quad9             52 ms   52 ms   51 ms   50 ms   50 ms   181 ms  52 ms   54 ms   51 ms   51 ms   51 ms   50 ms   155 ms  50 ms   51 ms     66.73
freenom           50 ms   51 ms   51 ms   50 ms   53 ms   380 ms  57 ms   172 ms  49 ms   190 ms  81 ms   49 ms   250 ms  54 ms   580 ms    141.13
opendns           55 ms   53 ms   53 ms   51 ms   51 ms   177 ms  55 ms   53 ms   58 ms   54 ms   55 ms   52 ms   53 ms   61 ms   56 ms     62.46
norton            51 ms   51 ms   52 ms   50 ms   49 ms   51 ms   50 ms   49 ms   50 ms   52 ms   50 ms   51 ms   49 ms   51 ms   79 ms     52.33
cleanbrowsing     103 ms  51 ms   51 ms   51 ms   53 ms   50 ms   51 ms   51 ms   51 ms   51 ms   51 ms   50 ms   51 ms   51 ms   52 ms     54.53
yandex            202 ms  196 ms  203 ms  196 ms  311 ms  201 ms  197 ms  202 ms  197 ms  219 ms  1000 ms 364 ms  226 ms  188 ms  260 ms    277.46
adguard           167 ms  167 ms  181 ms  167 ms  172 ms  167 ms  167 ms  173 ms  174 ms  176 ms  166 ms  167 ms  170 ms  182 ms  179 ms    171.66
neustar           56 ms   51 ms   50 ms   50 ms   52 ms   50 ms   50 ms   50 ms   50 ms   52 ms   51 ms   50 ms   51 ms   52 ms   294 ms    67.26
comodo            57 ms   49 ms   50 ms   51 ms   50 ms   51 ms   49 ms   50 ms   50 ms   52 ms   52 ms   77 ms   50 ms   48 ms   48 ms     52.26

Old MacBook Pro 2010


                  test1   test2   test3   test4   test5   test6   test7   test8   test9   test10  test11  test12  test13  Average 
*192.168.10.104    13 ms   15 ms   13 ms   18 ms   12 ms   15 ms   12 ms   11 ms   11 ms   12 ms   12 ms   11 ms   11 ms     12*
cloudflare        15 ms   13 ms   16 ms   11 ms   12 ms   11 ms   14 ms   27 ms   12 ms   13 ms   13 ms   13 ms   12 ms     14
level3            1000 ms 11 ms   1000 ms 16 ms   1000 ms 11 ms   15 ms   11 ms   11 ms   1000 ms 15 ms   1000 ms 11 ms     392
google            12 ms   12 ms   11 ms   11 ms   11 ms   12 ms   15 ms   11 ms   12 ms   15 ms   15 ms   11 ms   100 ms    19
quad9             11 ms   12 ms   12 ms   16 ms   12 ms   13 ms   12 ms   11 ms   16 ms   62 ms   15 ms   15 ms   11 ms     16
freenom           13 ms   11 ms   12 ms   13 ms   40 ms   26 ms   11 ms   560 ms  787 ms  11 ms   207 ms  35 ms   189 ms    147
opendns           11 ms   14 ms   11 ms   13 ms   16 ms   11 ms   12 ms   11 ms   236 ms  11 ms   68 ms   12 ms   14 ms     33
norton            11 ms   12 ms   17 ms   11 ms   11 ms   11 ms   14 ms   42 ms   11 ms   15 ms   31 ms   11 ms   16 ms     16
cleanbrowsing     11 ms   12 ms   12 ms   12 ms   11 ms   12 ms   11 ms   16 ms   13 ms   11 ms   12 ms   12 ms   11 ms     12
yandex            329 ms  396 ms  331 ms  205 ms  187 ms  201 ms  196 ms  197 ms  361 ms  389 ms  210 ms  200 ms  246 ms    265
adguard           170 ms  164 ms  167 ms  171 ms  164 ms  164 ms  166 ms  167 ms  165 ms  168 ms  169 ms  170 ms  168 ms    167
neustar           11 ms   14 ms   13 ms   11 ms   23 ms   16 ms   12 ms   12 ms   11 ms   11 ms   11 ms   12 ms   15 ms     13
comodo            14 ms   12 ms   12 ms   18 ms   15 ms   14 ms   11 ms   15 ms   18 ms   20 ms   13 ms   12 ms   15 ms     14
unbound           11 ms   14 ms   11 ms   11 ms   13 ms   14 ms   11 ms   11 ms   11 ms   11 ms   13 ms   12 ms   11 ms     11
pihole            12 ms   11 ms   11 ms   13 ms   12 ms   12 ms   11 ms   15 ms   13 ms   11 ms   11 ms   15 ms   11 ms     12

How to a make it work in DSM (Synology)

Hi, I found your bash script interesting but I want to use it on my Synology server. It is possible to modify it to make it works or install something for this to happen?

Thank you in advance!

List package deps in readme

In a fresh Ubuntu container, I had to install git, bc, and dnsutils. It would be great if these were mentioned ahead of time.

dig command failed

Error

Captura de tela de 2023-11-10 17-04-16

My solution

I changed the code below
$dig +short +tries=1 +time=2 +stats @2a0d:2a00:1::1 www.google.com |grep 216.239.38.120 >/dev/null 2>&1
$dig +tries=1 +time=2 +stats @$pip $d |grep "Query time:" | cut -d : -f 2- | cut -d " " -f 2

to

dig +short +tries=1 +time=2 +stats @2a0d:2a00:1::1 www.google.com |grep 216.239.38.120 >/dev/null 2>&1
dig +tries=1 +time=2 +stats @$pip $d |grep "Query time:" | cut -d : -f 2- | cut -d " " -f 2

Result

Captura de tela de 2023-11-10 17-03-10

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.