def run(**kwargs): for i in ['domain', 'adapter', 'use_cache', 'cache_file']: if i not in kwargs: raise Exception("La fonction n'est pas appellée correctement.") try: (domain, tld) = extract_domain_tld(kwargs['domain']) """ Petite astuce, on est sur un itérateur; on en veut le premier.""" whois_server = next( get_server_for_tld(tlds=[tld], use_cache=kwargs['use_cache'], cache_file=kwargs['cache_file']))[1] for punny_domain in derivate_domains(domain): punny = "{}.{}".format(punny_domain[1], tld) punny_reserved = "Non" if estimate_domain_is_registered(punny, whois_server=whois_server): punny_reserved = "Oui" punny_ip = lookup(punny, kwargs['adapter']) if not punny_ip: punny_ip = 'N/A' utf8 = "{}.{}".format(punny_domain[0], tld) yield [kwargs['domain'], punny, utf8, punny_reserved, punny_ip] except ParameterException as e: logger.critical(e)
def run(**kwargs): for i in [ 'domain', 'adapter', 'words_list', 'combine', 'combine_times', 'use_cache', 'cache_file' ]: if i not in kwargs: raise Exception("La fonction n'est pas appellée correctement.") try: (domain, tld) = extract_domain_tld(kwargs['domain']) for a in shuffle_words_from_lists(domain, kwargs['words_list'], kwargs['combine'], kwargs['combine_times']): for d in compute_all_domains_tld(element=a, use_cache=kwargs['use_cache'], cache_file=kwargs['cache_file']): logger.info("Analyse du domaine {} ({}).".format(*d)) is_reserved = "Non" has_ip = 'N/A' try: if estimate_domain_is_registered(domain=d[0], whois_server=d[1]): is_reserved = "Oui" has_ip = lookup(d[0], kwargs['adapter']) or 'N/A' except Exception as e: logger.warn("Une erreur s'est produite.") logger.warn(e) yield [d[0], is_reserved, has_ip] except ParameterException as e: logger.critical(e)
def query(domain, use_cache=False, cache_file=None): whois_server = None tld = extract_domain_tld(domain)[1] if use_cache: """On manipule toujours un itérateur; pour chopper le premier faut utiliser next.""" whois_server = next (get_server_for_tld (tlds = [ tld ],\ use_cache = use_cache, cache_file = cache_file))[1] raw_data = "" for i in range(1, NB_RETRY_ON_EMPTY_RESPONSE): raw_data = _do_whois_query(domain, whois_server) try: return parse(raw_data, tld) except TooManyWhoisRequestsException: logger.info( "La réponse est vide; on fait une pause et on réessaye.") time.sleep(TIME_SLEEP_BEFORE_RETRY * i) except TimeoutException as e: logger.error( "Timeout lors de l'interrogation pour {}".format(domain)) return parse("", tld)
logging.basicConfig( format="[%(asctime)s] - %(levelname)-8s - %(name)-15s - %(message)s", level=logging.DEBUG, ) logger = logging.getLogger(__name__) if __name__ == "__main__": parser = argparse.ArgumentParser() parser.add_argument ('-d', '--domain', help = 'Domaine pour lequel on veut récupérer les informations de whois.', \ type = str, required = True) parser.add_argument ('-c', '--cache-file', help = 'Emplacement du fichier de cache.', \ type = str, required = False) args = parser.parse_args() whois_server = None tld = extract_domain_tld(args.domain)[1] if args.cache_file: """Plaisir de bourgeois, le cas est traité dans la lib & elle va se connecter à l'IANA pour récupérer le serveur. Mais c'est vendredi, j'ai envie.""" try: f = open(args.cache_file, 'r') f.close() except FileNotFoundError as e: logger.error( "Le fichier de cache n'est pas accessible en lecture.") sys.exit('') whois_server = next (get_server_for_tld (tlds = [ tld ],\ use_cache = True, cache_file = args.cache_file))[1] else: """Extract whois server a la volee""" whois_server = next(get_server_for_tld(tlds=[tld], use_cache=False))[1]
def _domain_from_element(element): try: return extract_domain_tld(element)[0] except WrongDomainException: return element