Как программно узнать, зарегистрировано доменное имя или нет

Я использую pywhois, чтобы определить, зарегистрировано ли доменное имя или нет. Вот мой исходный код. (все перестановки из a.net в zzz.net)

#!/usr/bin/env python
import whois  #pip install python-whois
import string
import itertools

def main():
    characters = list(string.ascii_lowercase)
    ##domain names generator
    for r in range(1, 4) :
        for name in itertools.permutations(characters, r) : #from 'a.net' to 'zzz.net'
            url = ''.join(name) + '.net'

            #check if a domain name is registered or not
            try :
                w = whois.whois(url)
            except (whois.parser.PywhoisError):  #NOT FOUND
                print(url)   #unregistered domain names?

if __name__ == '__main__':
    main()

Я получил следующие результаты:

jv.net
uli.net
vno.net
xni.net

Однако все вышеперечисленные доменные имена уже зарегистрированы. Это не точно. Кто-нибудь может это объяснить? Есть много ошибок:

fgets: Connection reset by peer
connect: No route to host
connect: Network is unreachable
connect: Connection refused
Timeout.

Есть альтернативный способ, сообщаемый здесь.

import socket   
try:    
    socket.gethostbyname_ex(url) 
except:
    print(url) #unregistered domain names?

Говоря о скорости, я использую map параллельной обработке.

def select_unregisteredd_domain_names(self, domain_names):
    #Parallelism using map
    pool = ThreadPool(16)  # Sets the pool size
    results = pool.map(query_method(), domain_names)
    pool.close()  #close the pool and wait for the work to finish
    pool.join()

    return results

1 ответ

Решение

Это сложная проблема, которую нужно решить, сложнее, чем думает большинство людей. Причина в том, что некоторые люди не хотят, чтобы вы это выяснили. Большинство регистраторов доменов применяют много черной магии (то есть множество взломов, связанных с TLD), чтобы получить хорошие списки, которые они предоставляют, и часто они ошибаются. Конечно, в конце концов они будут знать наверняка, так как у них есть доступ EPP, который будет содержать авторитетный ответ (но обычно это делается только когда вы нажимаете "заказать").

Ваш первый метод (whois) был хорошим, и я делал это в больших масштабах еще в 90-х годах, когда все было более открыто. В настоящее время многие TLD защищают эту информацию с помощью капч и препятствующих веб-интерфейсов, и тому подобное. Если ничего другого, то будут установлены квоты на количество запросов на IP. (И это может быть не зря, я получал нелепое количество спама на адреса электронной почты, используемые для регистрации доменов). Также обратите внимание, что рассылка спамом их баз данных WHOIS с запросами, как правило, нарушает условия их использования, и вы можете получить ограничение по скорости, заблокировать или даже получить отчет о нарушении для своего интернет-провайдера.

Ваш второй метод (DNS) обычно намного быстрее (но не используйте gethostbyname, используйте Twisted или какой-либо другой асинхронный DNS для эффективности). Вам необходимо выяснить, как выглядит ответ для занятых и бесплатных доменов для каждого TLD. То, что домен не разрешается, не означает, что он бесплатный (его можно просто не использовать). И наоборот, некоторые TLD имеют целевые страницы для всех несуществующих доменов. В некоторых случаях будет невозможно определить, используя только DNS.

Итак, как вы решаете это? Боюсь, не с легкостью. Для каждого TLD вам необходимо выяснить, как разумно использовать базы данных DNS и whois, начиная с DNS и прибегая к другим средствам в сложных ситуациях. Убедитесь, что базы данных whois не заполнены запросами.

Другой вариант - получить доступ API к одному из регистраторов, они могут предложить программный доступ к поиску домена.

Другие вопросы по тегам