130 lines
		
	
	
		
			5.9 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			130 lines
		
	
	
		
			5.9 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| [](https://travis-ci.org/farrokhi/dnsdiag) [](https://pypi.python.org/pypi/dnsdiag/) []() []() [](https://github.com/farrokhi/dnsdiag/stargazers)
 | |
| 
 | |
| DNS Diagnostics and Performance Measurement Tools
 | |
| ==================================================
 | |
| 
 | |
| Ever been wondering if your ISP is [hijacking your DNS traffic](https://decentralize.today/is-your-isp-hijacking-your-dns-traffic-f3eb7ccb0ee7#.fevks5wyc)? Ever observed any
 | |
| misbehavior with your DNS responses? Ever been redirected to wrong address and
 | |
| suspected something is wrong with your DNS? Here we have a [set of tools](http://github.com/farrokhi/dnsdiag) to
 | |
| perform basic audits on your DNS requests and responses to make sure your DNS is
 | |
| working as you expect.
 | |
| 
 | |
| You can measure the response time of any given DNS server for arbitrary requests
 | |
| using `dnsping`. Just like traditional ping utility, it gives you similar
 | |
| functionality for DNS requests.
 | |
| 
 | |
| You can also trace the path your DNS request takes to destination to make sure
 | |
| it is not being redirected or hijacked. This can be done by comparing different
 | |
| DNS queries being sent to the same DNS server using `dnstraceroute` and observe
 | |
| if there is any difference between the path.
 | |
| 
 | |
| `dnseval` evaluates multiple DNS resolvers and helps you choose the best DNS
 | |
| server for your network. While it is highly recommended to use your own DNS
 | |
| resolver and never trust any third-party DNS server, but in case you need to
 | |
| choose the best DNS forwarder for your network, `dnseval` lets you compare
 | |
| different DNS servers from performance (latency) and reliability (loss) point
 | |
| of view.
 | |
| 
 | |
| # prerequisites
 | |
| This script requires python3 as well as latest
 | |
| [dnspython](http://www.dnspython.org/) and
 | |
| [cymruwhois](https://pythonhosted.org/cymruwhois/).
 | |
| 
 | |
| # installation
 | |
| 
 | |
| There are several ways that you can use this toolset. However using the sourcecode is always recommended.
 | |
| 
 | |
| ## From Source Code
 | |
| 
 | |
| 1. You can checkout this git repo and its submodules
 | |
| 
 | |
| ```
 | |
| git clone https://github.com/farrokhi/dnsdiag.git
 | |
| cd dnsdiag
 | |
| pip3 install -r requirements.txt
 | |
| ```
 | |
| 
 | |
| 2. You can alternatively install the package using pip:
 | |
| 
 | |
| ```
 | |
| pip3 install dnsdiag
 | |
| ```
 | |
| 
 | |
| ## From Binary
 | |
| 
 | |
| From time to time, binary version will be released for Windows, Mac OS X and Linux platforms. You can grab the latest release from [releases page](https://github.com/farrokhi/dnsdiag/releases).
 | |
| 
 | |
| # dnsping
 | |
| dnsping pings a DNS resolver by sending an arbitrary DNS query for given number
 | |
| of times:
 | |
| ```
 | |
| % ./dnsping.py -c 3 -t AAAA -s 8.8.8.8 dnsdiag.org
 | |
| dnsping.py DNS: 8.8.8.8:53, hostname: dnsdiag.org, rdatatype: AAAA
 | |
| 4 bytes from 8.8.8.8: seq=0   time=123.509 ms
 | |
| 4 bytes from 8.8.8.8: seq=1   time=115.726 ms
 | |
| 4 bytes from 8.8.8.8: seq=2   time=117.351 ms
 | |
| 
 | |
| --- 8.8.8.8 dnsping statistics ---
 | |
| 3 requests transmitted, 3 responses received,   0% lost
 | |
| min=115.726 ms, avg=118.862 ms, max=123.509 ms, stddev=4.105 ms
 | |
| ```
 | |
| This script calculates minimum, maximum and average response time as well as
 | |
| jitter (stddev)
 | |
| 
 | |
| # dnstraceroute
 | |
| dnstraceroute is a traceroute utility to figure out the path that your DNS
 | |
| request is passing through to get to its destination. You may want to compare
 | |
| it to your actual network traceroute and make sure your DNS traffic is not
 | |
| routed to any unwanted path.
 | |
| 
 | |
| ```
 | |
| % ./dnstraceroute.py --expert -C -t A -s 8.8.4.4 facebook.com
 | |
| dnstraceroute.py DNS: 8.8.4.4:53, hostname: facebook.com, rdatatype: A
 | |
| 1	192.168.0.1 (192.168.0.1) 1 ms
 | |
| 2	192.168.28.177 (192.168.28.177) 4 ms
 | |
| 3	192.168.0.1 (192.168.0.1) 693 ms
 | |
| 4	172.19.4.17 (172.19.4.17) 3 ms
 | |
| 5	google-public-dns-b.google.com (8.8.4.4) 8 ms
 | |
| 
 | |
| === Expert Hints ===
 | |
|  [*] public DNS server is next to a private IP address (possible hijacking)
 | |
| ```
 | |
| 
 | |
| Using `--expert` will instruct dnstraceroute to print expert hints (such as warnings of possible DNS traffic hijacking).
 | |
| 
 | |
| # dnseval
 | |
| dnseval is a bulk ping utility that sends an arbitrary DNS query to a give list
 | |
| of DNS servers. This script is meant for comparing response time of multiple
 | |
| DNS servers at once:
 | |
| ```
 | |
| % ./dnseval.py -t AAAA -f public-servers.txt -c10 yahoo.com
 | |
| server           avg(ms)     min(ms)     max(ms)     stddev(ms)  lost(%)  ttl     flags
 | |
| ------------------------------------------------------------------------------------------------------
 | |
| 8.8.8.8          270.791     215.599     307.498     40.630      %0       298     QR -- -- RD RA -- --
 | |
| 8.8.4.4          222.955     171.753     307.251     60.481      %10      291     QR -- -- RD RA -- --
 | |
| ns.ripe.net      174.855     160.949     187.458     10.099      %0       289     QR -- -- RD RA -- --
 | |
| 4.2.2.1          172.798     163.892     189.918     7.823       %0       287     QR -- -- RD RA -- --
 | |
| 4.2.2.2          178.594     169.158     184.696     5.067       %0       285     QR -- -- RD RA -- --
 | |
| 4.2.2.3          153.574     138.509     173.439     12.015      %0       284     QR -- -- RD RA -- --
 | |
| 4.2.2.4          153.182     141.023     162.323     6.700       %0       282     QR -- -- RD RA -- --
 | |
| 4.2.2.5          154.840     141.557     163.889     7.195       %0       281     QR -- -- RD RA -- --
 | |
| 209.244.0.3      156.270     147.320     161.365     3.958       %0       279     QR -- -- RD RA -- --
 | |
| 209.244.0.4      159.329     151.283     163.726     3.958       %0       278     QR -- -- RD RA -- --
 | |
| 195.46.39.39     171.098     163.612     181.147     5.067       %0       276     QR -- -- RD RA -- --
 | |
| 195.46.39.40     175.335     160.920     185.618     8.726       %0       274     QR -- -- RD RA -- --
 | |
| ```
 | |
| 
 | |
| ### Author
 | |
| 
 | |
| Babak Farrokhi 
 | |
| 
 | |
| - twitter: [@farrokhi](https://twitter.com/farrokhi)
 | |
| - github: [github.com/farrokhi](https://github.com/farrokhi/)
 | |
| - website: [farrokhi.net](https://farrokhi.net/)
 | |
| 
 | |
| 
 | |
| ### License
 | |
| 
 | |
| dnsdiag is released under a 2 clause BSD license.
 | |
| 
 |