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"

