如何以编程方式发现域名是否已注册



我使用pywhois来确定域名是否已注册。这是我的源代码。(所有从a.netzzz.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

这是一个棘手的问题,比大多数人意识到的要棘手。这样做的原因是有些人不希望你发现这一点。大多数域名注册商应用大量的黑魔法(即大量的tld特定的黑客),以获得他们提供的漂亮的列表,他们经常出错。当然,最后他们肯定会知道,因为他们有EPP访问权限,可以保存权威的答案(但通常只有当你点击"订购"时才会这样做)。

你的第一个方法(whois)曾经是一个很好的方法,我在90年代的时候做过大规模的这种方法,当时一切都更开放。如今,许多顶级域名通过验证码和阻碍性的web界面等来保护这些信息。不出意外的话,每个IP的查询数量将会有配额。(这也可能是有充分理由的,我曾经收到过大量的垃圾邮件,发送给用于注册域名的电子邮件地址)。另请注意,通过查询向他们的WHOIS数据库发送垃圾邮件通常违反了他们的使用条款,您可能会受到速率限制,阻止,甚至向您的ISP收到滥用报告。

第二种方法(DNS)通常要快得多(但不要使用gethostbyname,使用Twisted或其他一些异步DNS以提高效率)。您需要弄清楚每个顶级域名对已占用和空闲域名的响应情况。仅仅因为一个域名没有解析并不意味着它是免费的(它可能只是未被使用)。相反,一些顶级域名有所有不存在的域名的登陆页面。在某些情况下,仅使用DNS是不可能确定的。

怎么解呢?恐怕不容易。对于每个TLD,您需要弄清楚如何巧妙地使用DNS和whois数据库,从DNS开始,在棘手的情况下采用其他方法。请确保不要用查询淹没whois数据库。

另一个选择是获得API访问一个注册商,他们可能提供编程访问域名搜索

相关内容

  • 没有找到相关文章

最新更新