使用DNS记录检查域名可用性

12

通过检查NSSOA(授权的起始)记录,可以多准确地确定域名的可用性?

如果不行,如何不使用WHOIS的情况下尽可能准确地确定域名的可用性?例如,如果不存在NS记录,是否值得检查MX记录?

我特别关心.co.za域名,但是在.co.za命名空间中,唯一官方、无懈可击的检查可用性方法是使用http://co.za/whois.shtml,它通过IP地址限制了连续检查。


5
一个 DNS 名称无法解析并不意味着它没有被注册。 - OMG Ponies
我知道,我正在尝试估计它的可用性,而不必求助于WHOIS。 - Petrus Theron
8个回答

13

检查域名可用性的唯一100%可靠方法是查询注册机的数据库。我不会相信whois。

您可以使用DNS进行估算。我建议不要寻找SOA记录,而只需查看是否在TLD名称服务器上列出了任何内容。对此,dig是一个很好的工具(它也可以在Windows上运行),虽然我猜你也可以使用nslookup。例如:

dig co.za. NS

该网站将提供.co.za域名的名称服务器列表,其中一个服务器是ns0.is.co.za。

接下来,直接查询该服务器以查看它们是否为您感兴趣的域名列出了任何内容:

dig ibm.co.za @ns0.is.co.za

该查询返回NS记录,但不包括SOA记录,因为SOA记录由域名服务器提供(可能在线,也可能不在线)。NS记录表示该域名正在使用。

直接查询的原因是它通常比依赖本地名称服务器进行递归查询要快得多。


因此,存在NS记录更好地表明它已被占用?您能详细说明“直接访问”是什么意思吗? - Petrus Theron
是的,NS记录是更好的指示。如果它们不存在,您将无法使用DNS获取SOA记录或任何其他有意义的内容。通过“直接查询”,我指的是仅查询TLD服务器。正常的查询过程大致如下:您的应用程序查询本地DNS,该DNS转发到共享DNS(可选;例如在路由器上),该DNS转发到您的ISP的DNS,该DNS查询根服务器以找到正确的TLD服务器,然后查询TLD服务器以找到域的服务器,然后查询域服务器。要确定域的有效性,只需查询TLD服务器;不需要其他任何内容。 - RickNZ
是否存在一个总体的.co.za顶级域名服务器?如果没有,哪个DNS服务器将提供最快的.co.za查询答案?批量检查“ANY” DNS记录似乎可以找到几乎所有注册的.co.za域名。 - Petrus Theron
以上的第一个dig查询将返回所有.co.za顶级域名服务器的列表,其中任何一个都可以处理整个域名的查询。如果您计划进行重复查询过程并且性能很重要,您可以ping所有这些服务器并查看哪一个在拓扑上最接近。 - RickNZ
好的建议。ns0.is.co.za. 似乎在中间跳数上最少。 - Petrus Theron

8
唯一确定一个域名是否可用的方法是查询该域名的注册数据库。通常情况下,您可以通过在注册机构的WHOIS界面上执行WHOIS查询来完成这项任务。
有几个原因解释为什么DNS检查不安全。
最简单的解释是因为你可以注册一个域名而不将其指向任何位置。就像房子一样,你可以买一栋房子,但不强制要求你建造道路以到达它。
大多数可用的域名提供商会强制要求您指定DNS,否则他们会设置默认值。但是你并不被强迫,这不是强制性的域名要求。
第二个原因是,实际上有时候域名已经注册但不可用。其中一种情况是通常称为“赎回期”的时间段。此期限在域名过期后的几天内持续存在,当前所有者不再续订。几个注册机构禁用该域名,这意味着它不再通过DNS可达,但该域名仍然存在,并且通常只能由原始所有者赎回。
DNS检查便宜且有时更快。如果您需要检查域名是否存在,则可以首先尝试进行DNS查询,如果失败,则回退到WHOIS查询。换句话说,如果DNS查询成功,则WHOIS查询几乎没有意义。但是,您不能反过来做,因为如果DNS查询失败,这并不意味着该域名未注册。

3
如果您计划进行批量检查,您很快就会对内置DNS解析器感到失望-它是同步的。有一个可爱的好库叫做ADNS(http://www.gnu.org/software/adns/),它提供了异步DNS查询。它还配有一个小型命令行工具adnshost,我正在与N-DJBDNS(http://pjp.dgplug.org/ndjbdns/)一起使用作为递归解析器。
确切的参数是adnshost -a -tns -f 输出中的第4列将包含结果代码:
  • 如果该域名至少分配了1个名称服务器,则为0(大多数注册机构分配默认名称服务器,直到所有者指定自己的名称服务器)。
  • 如果没有分配名称服务器,则为300或301。
检查1.2M个域名需要大约4-6小时,但这将随着网络速度/拥塞而变化。

1

Whois是检查域名可用性的规范方式。速率限制是有意为之的,以防止人们过度加载whois服务器。SOA记录的存在可能是一个好的猜测,但这并不是确定的答案。


是的,检查SOA并不完美。但是是否有更好的方法,或者与其他记录结合使用以提高准确性呢? - Petrus Theron
虽然whois可能是规范的方式,但它也是一个臭名昭著的不可靠的检查域名可用性的方式,因为每个注册机构都有自己的数据库和非统一的政策。 - RickNZ
RickNZ:这取决于顶级域名。对于绝大多数顶级域名,whois服务器由注册机构而非注册商运营。 - bortzmeyer
在.com中,例如,有多个whois记录(所谓的“thin”模型)的来源/数据库,这些记录保存在注册商处并由其运行。其中许多服务器因经常离线而声名狼藉。此外,一些顶级域甚至没有whois服务器(包括.co.za)。 - RickNZ

1

实际上,DNS查找99%的时间都是有效的。如果你想要编写像Ajaxwhois这样的代码,我建议你采用这种方法。如果你需要检查一百万个名称,我建议您先使用DNS查找进行第一轮筛选,然后在可能考虑购买的名称上进行第二轮筛选。


DNS查询失败,对于所有可以在DNS中未发布的情况下预订域名的顶级域名都是如此。 - bortzmeyer
2
在注册.co.za域名时,需要提供有效的名称服务器。 - Petrus Theron

0
  • Whois是唯一100%确定的检查.co.za域名可用性的方法。请参见http://co.za/whois.shtml
  • 我的测试表明,批量检查NS记录或任何DNS记录似乎是猜测.co.za域名是否可注册的最准确的方法。SOA记录也可以使用,但效果不如此好。
  • dig co.za. NS显示.co.za顶级域名服务器。Ping TLD服务器并使用最近的服务器以避免不必要的递归查询。

感谢您的回答。


0

我也一直在使用dig方法来测试域名是否存在,然后再进行注册。但是大约有10%的情况下,它会返回已经被占用的域名。这是因为域名所有者还没有为该域名设置任何记录。所以我决定:

  1. 首先通过dig方法检查。
  2. 如果域名看起来可用,则使用whois.shtml进行检查。

人们会浏览许多不可用的域名,这不会浪费UniForum提供的请求。只有当某些东西看起来可用时,才会在co.za上进行检查。这似乎是唯一可靠的方法,可以在不向co.za/whois.shtml发送大量请求的情况下进行操作 :)


-1

尝试使用whois查询,但结果很奇怪(例如google.fr被标记为免费!),因此我尝试了一个Windows命令:nslookup yourdomain,如果已注册,则会返回其IP


可能是whois的错误用法。我刚刚检查了一下,显然,google.fr不是免费的。学会使用你的工具。如果你想测试,goooooogle.fr是免费的。 - bortzmeyer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接