#!/usr/bin/env python

'''Module to quickly look up and compare NS records for differences'''

import dns.resolver
import pprint
import sys
import argparse

pp = pprint.PrettyPrinter(indent=4)


def compare_dns(nameservers, domain):
	'''Compares records between nameservers using dnspython'''

	responses = {}
	resolver = dns.resolver.Resolver(configure=False)

	for ns in nameservers:
		ns_list = []
		resolver.nameservers = ns
		answer = dns.resolver.query(domain, 'NS')
		for record in answer:
			ns_list.append(record.target)
		responses[ns] = sorted(ns_list)

	pp.pprint(responses)
	print "Determining differences"

	set_list = []
	for val in responses.values():
		set_list.append(set(val))

	differences = set.difference(*set_list)

	if len(differences) == 0 or len(nameservers) == 1:
		print "No discrepancies found"
		sys.exit(0)
	else:
		print "Discrepancies found!"
		print differences
		sys.exit(1)


parser = argparse.ArgumentParser(description='Quickly look up and compare NS records for a domain across multiple ')
parser.add_argument('-n', '--nameservers', type=str, nargs='+', help="A list of the nameservers you want to test")
parser.add_argument('-d', '--domain', type=str, nargs=1)
args = parser.parse_args()

# No args throws an exception rather than bringing up usuage
if len(sys.argv) > 1:
	dnsdiff.compare_dns(args.nameservers, args.domain[0])
else:
	print "Missing required arguments. Please refer to 'dnsdiff -h' for usuage "
	sys.exit(1)
