通过检查NS或SOA(授权开始)记录的存在来确定域名可用性的准确程度如何?
如果没有,如何在不诉诸WHOIS的情况下尽可能准确地确定?例如,如果不存在NS记录,是否值得检查MX记录?
我对.co.za域名特别感兴趣,但在.co.za命名空间中检查可用性的唯一官方,万无一失的方法是使用http://co.za/whois.shtml,它限制IP地址的连续检查。
检查域可用性的唯一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记录表明域名正在使用中。
直接的原因是它通常比依赖本地名称服务器的递归查询快得多。
确定域是否可用的唯一方法是在该注册表数据库中查询该域。通常,您可以通过在注册管理机构WHOIS界面上执行WHOIS查询来实现此目的。
有几个原因可以解释为什么DNS检查不安全。
最简单的解释是因为您可以注册域而不将其指向任何位置。这就像一所房子。你可以买房子,但你没有被迫建造一条通往它的道路。
可用域提供程序的大部分强制您指向DNS,否则它们会设置默认值。但是你没有被迫,这不是一种强制性的域名要求。
第二个原因是因为实际上存在域名注册但不可用的情况。其中一个案例是通常称为赎回期的时期。域名过期后,此期限会持续几天,且当前所有者不会续订。多个注册管理机构禁用域名,这意味着它不再可通过DNS访问,但域名仍然存在,并且只能由原始所有者兑换(通常)。
DNS检查很便宜,有时更快。如果您需要检查域是否存在,那么您可以先尝试DNS查询,如果失败,则回退到WHOIS查询。换句话说,如果DNS查询成功,则WHOIS查询几乎毫无意义。但是你不能这样做,因为如果DNS查询失败,并不意味着域名没有注册。
Whois是检查域可用性的规范方法。速率限制是故意让人们不要超载whois服务器。 SOA记录的存在可能是一个很好的猜测,但它不是一个确定的答案。
如果您打算进行批量检查,您很快就会对内置的DNS解析器感到失望 - 它是同步的。有一个很漂亮的可爱图书馆名为ADNS(http://www.gnu.org/software/adns/),提供异步DNS查询。它伴随着一个小的命令行工具adnshost
,我将它与N-DJBDNS(http://pjp.dgplug.org/ndjbdns/)结合使用作为递归解析器。
确切的论据是adnshost -a -tns -f
输出中的第4列将包含结果代码:
检查1.2M域名大约需要4-6个小时,但这会随着网络速度/拥塞而变化。
实际上,DNS查找在99%的时间内都有效。如果你写像Ajaxwhois,我建议走这条路。如果您要检查一百万个名字,我会先进行DNS查询,然后对您可能考虑购买的那些进行第二次传递。
dig co.za. NS
显示.co.za TLD名称服务器。 Ping TLD服务器并使用最接近的服务器以避免不必要的递归查询。谢谢你的回答。
我也一直在使用dig方法在注册之前测试域的存在,但是大约10%的时间,它返回不可用的域。这是因为域的所有者尚未为域设置任何记录。所以我决定做的是:
人们将经历一堆不可用的域,这不会浪费UniForum提供的已分配请求。只有当某些内容可用时才会检查co.za本身。在我看来,这是唯一可靠的方法,因为发送了一百万个请求而没有失去对co.za/whois.shtml的访问权限:)
尝试了whois,它给了我奇怪的结果(google.fr免费!)所以我尝试了一个Windows命令:nslookup yourdomain
,如果它被注册,你会得到它的IP
。