def get_name_servers(self, uri): """ Returns a list of name servers for uri (authority). If it does not found any NS for uri, it retries with the upper level. It uses a shared dictionary internally (across all threads) to avoid redoing the same query multiple times. """ res = None r = self.myresolver try: res = r.query(uri, 'NS') except dns.resolver.NoAnswer: # This may be CNAME redirected red = self.detect_cname_redirected(uri) if red != []: res = self.get_name_servers(red[-1][2]) except Exception: res = [] # give up (NXDOMAIN or Timeout or NoNameservers) if res is None: # try to go up if uri != reg_dom.split_domainname(uri)[2]: new_uri = uri[uri.find('.') + 1:] res = self.get_name_servers(new_uri) else: # We just tested a TLD and we did not found any NS? # We may have a problem here :-( res = [] if type(res) == dns.resolver.Answer: res = [a.to_text() for a in res] return res
def get_name_servers(self, uri): """ Returns a list of name servers for uri (authority). If it does not found any NS for uri, it retries with the upper level. It uses a shared dictionary internally (across all threads) to avoid redoing the same query multiple times. """ res = None r = self.myresolver try: res = r.query(uri, "NS") except dns.resolver.NoAnswer: # This may be CNAME redirected red = self.detect_cname_redirected(uri) if red != []: res = self.get_name_servers(red[-1][2]) except Exception: res = [] # give up (NXDOMAIN or Timeout or NoNameservers) if res is None: # try to go up if uri != reg_dom.split_domainname(uri)[2]: new_uri = uri[uri.find(".") + 1 :] res = self.get_name_servers(new_uri) else: # We just tested a TLD and we did not found any NS? # We may have a problem here :-( res = [] if type(res) == dns.resolver.Answer: res = [a.to_text() for a in res] return res
def authority_info(auth): ''' Get the registered domain, the TLD and the AS number of auth. ''' if auth == '': return '', '', '' try: # Sometime, auth can be an IP... dns.inet.af_for_address(auth) return '', '', '' except Exception: # If it's IPv6, it's written between square brackets try: dns.inet.af_for_address(auth[1:-1]) return '', '', '' except Exception: pass (garbage, rd, tld) = reg_dom.split_domainname(auth) return rd + '.' + tld, tld, get_asn(auth)
def authority_info(auth): """ Get the registered domain, the TLD and the AS number of auth. """ if auth == "": return "", "", "" try: # Sometime, auth can be an IP... dns.inet.af_for_address(auth) return "", "", "" except Exception: # If it's IPv6, it's written between square brackets try: dns.inet.af_for_address(auth[1:-1]) return "", "", "" except Exception: pass (garbage, rd, tld) = reg_dom.split_domainname(auth) return rd + "." + tld, tld, get_asn(auth)