Beispiel #1
0
 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
Beispiel #2
0
 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
Beispiel #3
0
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)
Beispiel #4
0
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)