如何可靠地检查域名是否已注册或可用?

问题描述 投票:8回答:1

目的

如果任何TLD的域名已经注册或可用,我需要一种可靠的方法来检查Python。大胆的短语是我正在努力的关键点。

我尝试了什么?

  1. WHOIS是进行检查的明显方式,现有的Python库就像流行的python-whois是我的第一次尝试。问题是它似乎无法检索某些TLD的信息,例如.run,虽然它适用于较旧的,例如.COM。
  2. 因此,如果python-whois不可靠,也许只是Linux的whois包装器会更好。我尝试过whois library,不幸的是它只支持一组有限的TLD,显然是为了确保它始终可以解析结果。
  3. 因为我不需要解析结果,所以我将代码从whois库中删除,并尝试通过自己调用Linux的whois来进行查询: p = subprocess.Popen(['whois', 'example.com'], stdout=subprocess.PIPE, stderr=subprocess.STDOUT) r = p.communicate()[0] print(r.decode()) 这样做效果更好。除了它不那么可靠。我尝试了一个特定的域名,并且“超出了您的连接限制。请放慢速度,稍后再试。”好吧,超出限制的不是我。在一个巨大的办公室里,在一个IP后面意味着其他人可能会在我进行查询之前达到极限。
  4. 另一个想法是不使用WHOIS而是进行DNS查找。但是,我需要在到期后处理已注册或处于受保护阶段的域,并且没有DNS记录,因此这显然是不可能的。
  5. 最后的想法是通过某些第三方服务的API进行查询。问题是对这些服务的信任,因为他们可能snatch我检查的可用域。

类似的问题

已有类似的问题:

......但他们要么只处理一组有限的TLD,要么不会受到可靠性的困扰。

python python-3.x whois
1个回答
4
投票

如果您没有特定的访问权限(如注册商),并且您没有针对特定TLD(因为某些TLD确实有一个称为域可用性的特定公共服务),唯一有意义的工具就是查询whois服务器。

那你至少有以下两个问题:

  1. 根据给定的域名使用适当的whois服务器
  2. 考虑到whois服务器是速率限制的,所以如果你不小心批量查询它们,你将首先遇到延迟,然后甚至冒险将你的IP列入黑名单一段时间。

对于第二点,通常的方法适用(处理延迟,使用多个端点等)

第一点,在我的另一个回复中:https://unix.stackexchange.com/a/407030/211833你可以根据你使用的包装器和一些对策来找到你所观察到的一些解释。另见我的其他答复:https://webmasters.stackexchange.com/a/111639/75842,特别是第2点。

请注意,根据您的具体要求,如果您能够至少更改其中的一部分,您可能还有其他解决方案。例如,对于通用顶级域名(gTLD),如果您容忍延迟24小时,您可以使用已发布的注册管理机构区域文件来查找已注册的域名(已发布的域名,而不是所有域名)。

此外,为什么你在一般意义上说使用第三方有其弱点,如果你找到一个有价值的注册商,它既可以访问许多注册表并为你提供API,那么你就可以根据自己的需要使用它。

简而言之,我认为您无法在所有情况下完成此任务(100%可靠性,100%TLD等)。您需要妥协,但它们取决于您的初始需求。

同样非常重要的是:不要运行whois命令,这会产生许多安全性和性能问题。使用编程语言中的相应库来进行whois查询或只是在端口43上打开TCP套接字并在一行CR + LF上发送查询,读回一段文本,这基本上只是在RFC3912中定义的。

© www.soinside.com 2019 - 2024. All rights reserved.