DNS Benchmarking in Python

Python code used to record time taken to resolve a hostname. Use in conjunction with list of 1 million most popular sites by quantcast.

Script expects 1 domain per line and nothing else, so filter out un-needed data from the downloaded list. See also Google DNS Benchmarked.

#!/usr/bin/env python
#
# Requires python-adns
# http://linux-101.org
#
 
# List of DNS Servers
servers = ("8.8.8.8","8.8.4.4","4.2.2.1","4.2.2.2","4.2.2.3","4.2.2.4","4.2.2.5","4.2.2.6","208.67.222.222","208.67.220.220")
 
# Number of times to loop through
runs = 3
 
# Number of queries to perform on each run against each server
queries = 1000
 
# Print a message every X number of queries
printCount = 10
 
 
 
 
import adns
import sys
import time
 
totalStart = time.time()
urlFile = open("top-million.txt", "r")
urlList = urlFile.readlines()
resultsFile = open("DNS-Results.txt", "a")
 
run = 0
while run < runs:
    for server in servers:
        s = adns.init(adns.iflags.noautosys,sys.stderr, "nameserver " + server)
        results2File = open("DNS-Results-" + server + "-Run" + str(run) + ".csv", "a")
        count = 0
        quickestTime = 99999
        longestTime = 1
        averageTime = 0
        print "Server: " + server + ""
        print "Run: " + str(run + 1) + ""
        while count < queries:
            timeStart = time.time()
            resolve = s.synchronous(urlList[count].strip(), adns.rr.A)
            # For asynchronis queries use below line
            #resolve = s.submit(urlList[count].strip(), adns.rr.A)
            timeEnd = time.time()
            timeTaken = timeEnd - timeStart
            timeTakenMS = timeTaken * 1000
            if timeTakenMS < quickestTime:
                quickestTime = timeTakenMS
            if timeTakenMS > longestTime:
                longestTime = timeTakenMS
            averageTime = averageTime + timeTakenMS
            if count % printCount == 0:
                print "Query: " + str(count + 1) + " "
            count = count + 1
            results2File.write(str(timeTakenMS) + "\n")
        averageTime = averageTime / queries
        print "\n"
        print ("Server: " + server + " ")
        print ("Run: " + str(run + 1) + " ")
        print ("Min: " + str(quickestTime) + " ")
        print ("Max: " + str(longestTime) + " ")
        print ("Avg: " + str(averageTime) + " ")
        print "\n"
        resultsFile.write("Server: " + server + "\n")
        resultsFile.write("Run: " + str(run + 1) + "\n")
        resultsFile.write("Min: " + str(quickestTime) + "\n")
        resultsFile.write("Max: " + str(longestTime) + "\n")
        resultsFile.write("Avg: " + str(averageTime) + "\n\n")
 
    run = run + 1
 
urlFile.close()
resultsFile.close()
totalEnd = time.time()
total = totalEnd - totalStart
totalMS = total * 1000
print "Total time taken = " + str(totalMS) + "ms"
Burtronix Banner W3C Banner