Home

Awesome

DNS Blast

A DNS performance testing utility

Go Report Card

Currently Supported Protocols
UDP DNS
TCP DNS
TCP DNS over TLS

Documentation

Take a look at the Wiki for testing instructions.

New Features

Sat Mar 14 00:28:50 DST 2020

Installation

Download the executable

v1

Go to downloads

Build for your platform

Requirements
go get github.com/sandeeprenjith/dnsblast

Build for other platforms

Requirements
$ git clone https://github.com/sandeeprenjith/dnsblast.git
$ cd dnsblast
$ make

This creates a directory named "builds". The directory contains archives with executables for different platforms.

╰$ tree builds
builds
├ dnsblast-v1-darwin-386.tar.gz
├ dnsblast-v1-darwin-amd64.tar.gz
├ dnsblast-v1-linux-386.tar.gz
├ dnsblast-v1-linux-amd64.tar.gz
├ dnsblast-v1-linux-arm.tar.gz
├ dnsblast-v1-linux-arm64.tar.gz

The archives contain the executable for the platform which the name of the archive suggests.

$ tar -tf builds/dnsblast-v1-linux-386.tar.gz
dnsblast

Usage

$ ./dnsblast
  -c int
        Value 0 for random QNAMES (for uncached responses), 100 for Predictable QNAMES (for cached responses)
  -f string
        Input file with query names
  -l int
        Duration to run load (default 60)
  -noverify
        Skip SSL verification ( to be used with '-proto tls')
  -p string
        The destination UDP port (default "53")
  -proto string
        Protocol to use for DNS queries ( udp, tcp, tls) (default "udp")
  -q int
        Concurrent queries to send (default 10)
  -r int
        Packets per second to send (default 1000)
  -s string
        [Required] The address of the target server
  -t int
        Number of threads (default 2)

Sample Output

DNS (UDP)

Tested against BIND configured to provide fake responses. Details of configuration available here

$ ./dnsblast -s 192.168.130.9 -r 40000 -q 200 -l 10

EXECUTING TEST
+-----------------------------------------------------------+
2020/03/15 03:45:26 QPS/Thread:  6000  Latency:  16.677117ms
2020/03/15 03:45:27 QPS/Thread:  11800  Latency:  15.787841ms
2020/03/15 03:45:28 QPS/Thread:  6400  Latency:  45.398035ms
2020/03/15 03:45:29 QPS/Thread:  18400  Latency:  20.184322ms
2020/03/15 03:45:30 QPS/Thread:  6200  Latency:  75.833313ms
2020/03/15 03:45:31 QPS/Thread:  19000  Latency:  30.486501ms
2020/03/15 03:45:32 QPS/Thread:  12000  Latency:  55.365939ms
2020/03/15 03:45:33 QPS/Thread:  6000  Latency:  126.906884ms
2020/03/15 03:45:34 QPS/Thread:  5800  Latency:  149.469651ms
2020/03/15 03:45:35 QPS/Thread:  8400  Latency:  116.027951ms
+-----------------------------------------------------------+

  REPORT
+---------------------+------------------------+
| Target Server       | udp://192.168.130.9:53 |
| Test                | Uncached Responses     |
| Send Rate           | 40000 Queries/Sec      |
| Threads             | 2                      |
| Duration of test    | 10 Sec                 |
| Protocol            | UDP                    |
| Average Queries/Sec | 20933                  |
| Average Latency     | 80.066453ms            |
+---------------------+------------------------+

DNS over TLS

Tested against Coredns running DNS over TLS with erratic plugin configured to give fake responses. Details on configuration available here

$ ./dnsblast -s 192.168.130.9 -l 10 -r 1000 -q 20 -proto tls -noverify

EXECUTING TEST
+-----------------------------------------------------------+
2020/03/15 03:24:37 QPS/Thread:  140  Latency:  84.2214ms
2020/03/15 03:24:38 QPS/Thread:  300  Latency:  81.66225ms
2020/03/15 03:24:39 QPS/Thread:  300  Latency:  114.151156ms
2020/03/15 03:24:40 QPS/Thread:  300  Latency:  154.465046ms
2020/03/15 03:24:41 QPS/Thread:  280  Latency:  213.839306ms
2020/03/15 03:24:42 QPS/Thread:  300  Latency:  229.693182ms
2020/03/15 03:24:43 QPS/Thread:  320  Latency:  272.623912ms
2020/03/15 03:24:44 QPS/Thread:  300  Latency:  309.042142ms
2020/03/15 03:24:45 QPS/Thread:  320  Latency:  350.795333ms
2020/03/15 03:24:46 QPS/Thread:  160  Latency:  774.228763ms
+-----------------------------------------------------------+

  REPORT
+---------------------+-------------------------+
| Target Server       | tls://192.168.130.9:853 |
| Test                | Uncached Responses      |
| Send Rate           | 1000 Queries/Sec        |
| Threads             | 2                       |
| Duration of test    | 10 Sec                  |
| Protocol            | TCP-TLS                 |
| Average Queries/Sec | 506                     |
| Average Latency     | 301.643311ms            |
+---------------------+-------------------------+

IPv6

$ ./dnsblast -s dead:face::2 -r 500 -q 2 -proto tls -noverify  -l 10

EXECUTING TEST
+-----------------------------------------------------------+
2020/03/17 23:26:15 QPS/Thread:  36  Latency:  32.141583ms
2020/03/17 23:26:16 QPS/Thread:  32  Latency:  70.730121ms
2020/03/17 23:26:17 QPS/Thread:  114  Latency:  33.450903ms
2020/03/17 23:26:18 QPS/Thread:  88  Latency:  57.15537ms
2020/03/17 23:26:19 QPS/Thread:  88  Latency:  73.337146ms
2020/03/17 23:26:20 QPS/Thread:  42  Latency:  182.624116ms
2020/03/17 23:26:21 QPS/Thread:  34  Latency:  258.311857ms
2020/03/17 23:26:22 QPS/Thread:  34  Latency:  292.833628ms
2020/03/17 23:26:23 QPS/Thread:  36  Latency:  309.374108ms
2020/03/17 23:26:24 QPS/Thread:  236  Latency:  54.491316ms
2020/03/17 23:26:25 QPS/Thread:  88  Latency:  158.465191ms
2020/03/17 23:26:26 QPS/Thread:  46  Latency:  328.005638ms
2020/03/17 23:26:27 QPS/Thread:  44  Latency:  370.920222ms
+-----------------------------------------------------------+

  REPORT
+---------------------+------------------------+
| Target Server       | tls://dead:face::2:853 |
| Test                | Uncached Responses     |
| Send Rate           | 500 Queries/Sec        |
| Threads             | 2                      |
| Duration of test    | 10 Sec                 |
| Protocol            | TCP-TLS                |
| Average Queries/Sec | 196                    |
| Average Latency     | 53.629597ms            |
+---------------------+------------------------+

Credit where due