Guest User

Untitled

a guest
Nov 24th, 2017
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.47 KB | None | 0 0
  1. # need pip install dnspython
  2. import dns.name, dns.query, dns.resolver
  3. import socket
  4.  
  5. def wait_for_dns(new_domain: str) -> typing.List[str]:
  6. """
  7. Waits until a dns record becomes awailable, resolves it and returns the corresponding ip addresses.
  8. NOTE: Amazon route53 will report status as INSYNC even though the changes have not propogated to
  9. the authorative nameserver.
  10. :param new_domain: The domain to query for
  11. :return: A list of corresponding ip addresses
  12. """
  13. authority_nameservers = \
  14. dns.query.udp(dns.message.make_query(new_domain, dns.rdatatype.NS), PUBLIC_NAMESERVER).authority
  15. if len(authority_nameservers) == 0:
  16. raise ValueError("Could not find authorative nameserver, aborting")
  17.  
  18. # authority_ns.to_string() will return something like this:
  19. # 'aws.g.is. 899 IN SOA ns-1834.awsdns-37.co.uk. awsdns-hostmaster.amazon.com. 1 7200 900 1209600 86400'
  20. authority_ns = authority_nameservers[0].to_text().split()[4].rstrip('.')
  21.  
  22. domain_resolver = dns.resolver.Resolver(configure=False)
  23. print("Using %s as authorative nameserver" % (authority_ns,))
  24. domain_resolver.nameservers = [socket.gethostbyname(authority_ns)]
  25. while True:
  26. try:
  27. result = domain_resolver.query(new_domain, 'A')
  28. print()
  29. break
  30. except (dns.resolver.NXDOMAIN, dns.resolver.NoAnswer):
  31. sys.stdout.write('.')
  32. sys.stdout.flush()
  33. time.sleep(1)
  34. return [r.to_text() for r in result]
Add Comment
Please, Sign In to add comment