def test_two_A_responses(): qname = "dualstack.mc-12555-1019789594.us-east-1.elb.amazonaws.com." T = Tester() T.newtest(testname="py.test") response = dbdns.query(T, qname, dns.rdatatype.A) count = 0 for rrset in response.answer: for rr in rrset: if rr.rdtype == dns.rdatatype.A: print("IP address for {} is {}".format(qname, rr.address)) count += 1 assert count >= 2
def test_a_read(): qname = "google-public-dns-a.google.com." T = Tester() T.newtest(testname="py.test") response = dbdns.query(T, qname, dns.rdatatype.A) count = 0 for rrset in response.answer: for rr in rrset: if rr.rdtype == dns.rdatatype.A: print("IP addr for {} is {}".format(qname, rr.address)) assert rr.address == "8.8.8.8" count += 1 assert count > 0
def test_read_tlsa(): """Verify that a TLSA record can be read""" qname = "_443._tcp.good.dane.verisignlabs.com" T = Tester() T.newtest(testname="py.test") response = dbdns.query(T, qname, dns.rdatatype.TLSA) count = 0 for rrset in response.answer: for rr in rrset: if rr.rdtype == dns.rdatatype.TLSA: print("{}: {} {} {} {}".format(qname, rr.usage, rr.selector, rr.mtype, hexdump(rr.cert))) count += 1 assert count > 0
def test_dnssec_response_notpresent(): qname = "www.google.com" T = Tester() T.newtest(testname="py.test") response = dbdns.query(T, qname, dns.rdatatype.A) count = 0 for rrset in response.answer: for rr in rrset: if rr.rdtype == dns.rdatatype.A: dnssec = response.flags & dns.flags.AD print("IP address for {} is {} DNSSEC: {}".format(qname, rr.address, dnssec)) if dnssec: count += 1 assert count == 0
def test_cname_read(): # This test makes use of the fact that a.nitroba.org is set as a cname to b.nitroba.org qname = "a.nitroba.org" T = Tester() T.newtest(testname="py.test") response = dbdns.query(T, qname, dns.rdatatype.CNAME) count = 0 for rset in response.answer: for rr in rset: if rr.rdtype == dns.rdatatype.CNAME: print("cname for a.nitroba.org is {}".format(rr.target)) assert str(rr.target) == "b.nitroba.org." count += 1 assert count > 0 # no response?
def get_pubkey(T,email): """Returns the DNS cert for email""" import re,codecs try: response = dbdns.query(T,email_to_dns(email), "TYPE61") except dns.resolver.NXDOMAIN: return None except dns.resolver.Timeout: return None # response.answer[0] is in wire format. # I've been unable to parse it, so I convert it to RFC 3597-format text, # which I then parse. It's not that slow. data = response.answer[0][0].to_text() r = re.compile(r"\\# (\d+) (.*)") m = r.search(data) if m: hexdata = codecs.decode(m.group(2).replace(" ",""),"hex") return hexdata
print("") print("===================") print("") if args.demo: if len(args.name)!=1: print("Error: One name must be provided") exit(1) name = args.name[0] print("DBDNS DEMO") T = Tester() T.newtest(testname="dig") print("dig -t {} {}".format(args.t,name)) print("TestID: {}".format(T.testid)) response = dbdns.query(T,name,args.t) for part in range(len(response.answer)): print("ANSWER PART {}:".format(part)) for i in range(len(response.answer[part])): print("RR {}: {} {}".format(i,response.answer[part][i],type(response.answer[part][i]))) T.commit() print("\n\n\nReplay:") response = dbdns.query(T,name,args.t,replay=True) for part in range(len(response.answer)): print("ANSWER PART {}:".format(part)) for i in range(len(b.answer[part])): print("RR {}: {} {}".format(i, response.answer[part][i], type(response.answer[part][i])))