예제 #1
0
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)
예제 #3
0
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)
예제 #4
0
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]
예제 #5
0
def _domain_from_element(element):
    try:
        return extract_domain_tld(element)[0]
    except WrongDomainException:
        return element