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

tmt*_*tmt 9 python whois python-3.x

目的

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

我尝试了什么?

  1. WHOIS是进行检查的明显方式,现有的Python库就像流行的python-whois是我的第一次尝试.问题是它似乎无法检索某些顶级域名(例如.run)的信息,而它对大型顶级域名(例如.com)的效果最佳.
  2. 因此,如果python-whois不可靠,也许只是Linux的whois包装器会更好.我尝试过whois库,不幸的是它只支持一组有限的TLD,显然是为了确保它总能解析结果.
  3. 因为我不需要解析结果,所以我将代码从whois库中删除,并尝试通过自己调用Linux的whois来进行查询:

    p = subprocess.Popen(['whois', 'example.com'], stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
    r = p.communicate()[0]
    print(r.decode())
    
    Run Code Online (Sandbox Code Playgroud)

    这样做效果更好.除了它不那么可靠.我尝试了一个特定的域名,并且"超出您的连接限制.请放慢速度,稍后再试." 好吧,超出限制的不是我.在一个巨大的办公室里,在一个IP后面意味着其他人可能会在我进行查询之前达到极限.

  4. 另一个想法是不使用WHOIS而是进行DNS查找.但是,我需要在到期后处理已注册或处于受保护阶段的域,并且没有DNS记录,因此这显然是不可能的.
  5. 最后的想法是通过某些第三方服务API进行查询.问题是对这些服务的信任,因为它们可能会抢夺我检查的可用域.

类似的问题

已有类似的问题:

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

Pat*_*zek 5

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

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

  1. 根据给定的域名使用适当的 whois 服务器
  2. 考虑到 whois 服务器是限速的,因此如果您不小心批量查询它们,您将首先遇到延迟,然后甚至冒着将您的 IP 列入黑名单的风险。

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

对于第一点,在我在这里的另一个回复中:https : //unix.stackexchange.com/a/407030/211833,您可以根据您使用的 whois 的包装器和一些对策来找到对您观察到的内容的一些解释。另请参阅我的其他回复:https : //webmasters.stackexchange.com/a/111639/75842,特别是第 2 点。

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

此外,为什么您在一般意义上是正确的,使用第三方有其弱点,如果您找到一个有价值的注册商,既可以访问许多注册机构,又可以为您提供 API,然后您可以根据自己的需要使用它。

简而言之,我不相信您可以在所有情况下(100% 可靠性、100% TLD 等)完成这项任务。您将需要做出一些妥协,但这取决于您最初的需求。

同样非常重要的是:不要跑出去运行 whois 命令,这会造成许多安全和性能问题。使用您的编程语言中的适当库进行 whois 查询,或者只是在端口 43 上打开一个 TCP 套接字并在以 CR+LF 终止的一行上发送您的查询,读回一团文本,这基本上只是 RFC3912 中定义的内容.