Skip to content

Instantly share code, notes, and snippets.

@guruevi
Forked from 0x9900/dnstest.py
Last active Aug 29, 2015
Embed
What would you like to do?
#!/usr/bin/env python
#
import dns.resolver
import time
import sys
from collections import defaultdict
services = {
#'local': ['192.168.1.1'],
'Google': ['8.8.8.8', '8.8.4.4'],
'OpenDNS': ['208.67.222.222', '208.67.220.220'],
'Norton': ['198.153.192.1', '198.153.194.1'],
'Verizon': ['4.2.2.1', '4.2.2.2', '4.2.2.3', '4.2.2.4', '4.2.2.5',
'4.2.2.6'],
'Level3': ['209.244.0.3', '209.244.0.4'],
'Securly': ['184.169.143.224', '184.169.161.155'],
'Comodo Secure DNS': ['8.26.56.26', '8.20.247.20'],
'DNS Advantage': ['156.154.70.1', '156.154.71.1'],
'Norton ConnectSafe': ['198.153.192.40', '198.153.194.40'],
'OpenNIC': ['74.207.247.4', '64.0.55.201'],
'SmartViper': ['208.76.50.50', '208.76.51.51'],
}
requests = (
'bakdlkkd.tz',
'dlkdkdkd.il',
'duckduckgo.com',
'klsilkkd.cn',
'twitter.com',
'www.bing.com',
'www.cnn.com',
'www.dropbox.com',
'www.facebook.com',
'www.google.com',
'www.huffingtonpost.com',
'www.msnbc.com',
'www.yahoo.com',
)
def benchmark(server):
resolver = dns.resolver.Resolver()
resolver.nameservers = [server]
start = time.time()
for host in requests:
try:
resolver.query(host, 'A')
except dns.resolver.NXDOMAIN: # the domain is not found
pass
except (dns.resolver.Timeout, dns.exception.DNSException): # cannot connect to the DNS
return -1
end = time.time() - start
return end
def run():
print 'Collecting data:',
sys.stdout.flush()
response_times = defaultdict(list)
for service, servers in services.iteritems():
for server_ip in servers:
bench = benchmark(server_ip)
if bench > 0.0:
response_times[service].append(bench)
print '.',
sys.stdout.flush()
print
return response_times
if __name__ == '__main__':
results = run()
namelen = max([len(s) for s in results.keys()])
output = "%%%ds\t%%0.3f\t%%s" % (namelen + 2)
for service, bench in results.iteritems():
print output % (service, sum(bench) / float(len(bench)),
["%.3f" % r for r in bench])
# results taken from different locations (network providers) in california
#
fred:src$ python ./dnstest.py
Collecting data: . . . . . . . . . . .
Securly 0.389 ['0.551', '0.228']
Comodo Secure DNS 0.593 ['0.795', '0.390']
SmartViper 1.586 ['1.694', '1.478']
Verizon 0.516 ['0.350', '0.626', '0.409', '0.422', '0.418', '0.870']
OpenDNS 0.301 ['0.301']
Level3 0.333 ['0.334', '0.332']
Google 0.454 ['0.520', '0.387']
OpenNIC 0.631 ['0.143', '1.119']
Norton ConnectSafe 0.273 ['0.113', '0.433']
Norton 0.320 ['0.329', '0.311']
DNS Advantage 0.614 ['1.046', '0.182']
-bash-4.2$ python2.7 dnstest.py
Collecting data: . . . . . . . . . . . .
Securly 0.471 ['0.296', '0.646']
Comodo Secure DNS 0.400 ['0.440', '0.361']
SmartViper 1.198 ['1.225', '1.171']
Verizon 0.143 ['0.124', '0.080', '0.081', '0.083', '0.079', '0.408']
OpenDNS 0.093 ['0.077', '0.109']
Level3 0.100 ['0.091', '0.109']
Google 0.248 ['0.396', '0.101']
OpenNIC 0.626 ['0.121', '1.132']
Norton ConnectSafe 1.013 ['0.183', '1.843']
Norton 0.102 ['0.102']
DNS Advantage 0.428 ['0.778', '0.077']
local 0.051 ['0.051']
-bash-4.2$ python2.7 ./dnstest.py
Collecting data: . . . . . . . . . . . .
Securly 0.200 ['0.239', '0.161']
Comodo Secure DNS 0.657 ['1.025', '0.289']
SmartViper 1.043 ['1.058', '1.028']
Verizon 0.104 ['0.040', '0.031', '0.449', '0.031', '0.036', '0.037']
OpenDNS 0.022 ['0.022', '0.021']
Level3 0.037 ['0.036', '0.037']
Google 0.152 ['0.269', '0.036']
OpenNIC 0.573 ['0.050', '1.096']
Norton ConnectSafe 0.191 ['0.038', '0.344']
Norton 0.122 ['0.043', '0.201']
DNS Advantage 0.376 ['0.723', '0.029']
local 0.025 ['0.025']
# From Comcast.
fred:src$ python ./dnstest.py
Collecting data: . . . . . . . . . . . .
Securly 0.537 ['0.537']
Comodo Secure DNS 0.509 ['0.475', '0.543']
SmartViper 1.329 ['1.355', '1.304']
Verizon 0.440 ['0.359', '0.893', '0.334', '0.366', '0.342', '0.347']
OpenDNS 0.355 ['0.349', '0.360']
Level3 0.339 ['0.343', '0.334']
Google 0.365 ['0.506', '0.224']
OpenNIC 0.783 ['0.291', '1.276']
Norton ConnectSafe 0.301 ['0.228', '0.374']
Norton 0.295 ['0.231', '0.358']
DNS Advantage 0.307 ['0.363', '0.252']
local 0.134 ['0.134']
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment