检查域可用性——避免抢先运行——使用通配符或正则表达式

ult*_*tle 0 dns bash search whois zsh

我可以通过 检查单个域的可用性whois abc123.com

我不知道如何检查符合条件的整套域的可用性,例如XXX YYY. Z。其中 X 是任意 3 个相同的字母,Y 是任意 3 个相同的数字,Z 是 com、org 或 io 中的任意一个。喜欢 aaa111.org

这只是一个示例,但您明白了 -我想指定字符串、模式和结尾,并查看可用的内容。

我可以使用正则表达式进行这种字符串匹配,但我不知道如何将其应用于 shell 脚本。

我希望能够通过数组或正则表达式输入匹配条件,并输出所有匹配域的列表。

whois abc.com | grep "No match"在这里很有用,因为如果该域名未注册,则该字段为空;也许这可以成为剧本或类似内容的因素。它还将输出减少到一行,而不是whois默认输出的大量垃圾。

如果脚本可以与 bash、zsh 或 Fish 一起使用,我们将不胜感激。

您可能想知道,当您可以访问网站时,为什么还要从命令行执行此操作 - 原因是您正在寻找的域名通常在您实际搜索时就被盗用了。这是一种众所周知的现象,称为域名抢先交易,我今天就遇到了这种情况,因此我尝试了一种不经过注册商的本地自动化解决方案。

...

编辑回应评论:我不重视解决方案的“whois”方面,只是通过正则表达式或模式进行检查的能力。-- 编辑 2:事实证明“whois”对于避免误报是必要的;答案已修改以包括这方面。

Pat*_*zek 5

目前还没有实时的公共免费服务可以让您做您想做的事情,即使“很快”就有技术解决方案,它们可能要么不公开,要么不免费或受到严重限制。

\n

至少有一种可能的快捷方式(使用区域文件),但您的问题不够详细,无法确保它适合,但请参见下文。它可能比使用 DNS 工作得更好/更快,具体取决于您的用例。它有优点也有缺点。

\n

我还将讨论其他观点以正确看待问题,我的回复是通用的(适用于多个顶级域名并以多种方式)。但这不会为您提供一个现成的脚本供您使用,因为该网站不是一个书写板,而且您所概述的一些特定约束的问题太大了。

\n

我不会重复基于 DNS 查询的解决方案,因为它已经给出了,即使给出的答案可以改进(您绝对需要联系注册表名称服务器,而不是递归名称服务器!)

\n

远程访问协议

\n

首先稍微加上一点:现在,特别是在通用顶级域名 (gTLD) 中,RDAP 应该成为新标准。它比 whois 好得多,因为它是基于 HTTPS 的 JSON,因此它允许您取回结构化数据。\n它确实还包括查找和查询之间的区别,而 whois 则没有(某些注册表有“域可用性检查”) “,就像使用 Finger 一样;为此有一个 IETF 协议,称为 IRIS D-CHK,但它最多仅由 2 个注册机构实现,并且通过 UDP 压缩 XML,因此从未获得关注)。

\n

请参阅RFC 7480 \xc2\xa74

\n
\n

客户端使用 GET 方法检索响应正文,并使用
\nHEAD 方法确定服务器上是否存在数据。

\n
\n

例子:

\n
$ curl --head https://rdap.verisign.com/com/v1/domain/stackoverflow.com\nHTTP/1.1 200 OK\nContent-Length: 2264\nContent-Type: application/rdap+json\nAccess-Control-Allow-Origin: *\nStrict-Transport-Security: max-age=15768000; includeSubDomains; preload\n\n$ curl --head https://rdap.verisign.com/com/v1/domain/stackoverflow-but-does-not-exist.com\nHTTP/1.1 404 Not Found\nContent-Type: application/rdap+json\nAccess-Control-Allow-Origin: *\nStrict-Transport-Security: max-age=15768000; includeSubDomains; preload\n
Run Code Online (Sandbox Code Playgroud)\n

(如果您在第一种情况下执行 GET,您将返回一个可以处理的 JSON 文档jq或等效文档)。

\n

另请注意,“部分搜索”是在这个新协议中烘焙的,请参见4.1。部分字符串搜索。这是一个非常简单的情况,而不是正则表达式:您可以只使用通配符。当然,注册表 RDAP 服务器没有被强制执行它。

\n

其他工作正在进行中,以实现完整的“正则表达式”搜索功能,请参阅\n使用 POSIX 正则表达式进行注册数据访问协议 (RDAP) 搜索,并在较小程度上查看注册数据访问协议 (RDAP) 反向搜索功能

\n

您可以了解有关 RDAP 的更多信息:

\n\n

因此,即使您应用 DNS 然后 whois 的解决方案,我仍然强烈建议您切换到 DNS 然后 RDAP。\n警告:多个注册机构和注册商 RDAP 服务器当前行为不当/不遵守规范。将来,当 ICANN 合规性开始实施并且 RDAP 真正开始掩盖 whois 时,这一问题将会得到解决。

\n

注册商 API

\n

各种注册商都允许您访问 API,其中包括搜索可用域名和/或检索某些域名列表(例如:删除名称等)。\n每个注册商提供的内容以及限制当然会有所不同,因此在那里不可能回复你。但对于任何严肃的研究来说,第一步都是:去您首选的注册商,询问它可以提供哪些服务来帮助您解决您的情况。

\n

显然,这取决于注册商获得了哪些顶级域名 (TLD) 的认可:获得注册管理机构认可的注册商拥有实时非公共渠道(使用称为 EPP 的协议)来检查域名是否存在。

\n

Whois 批量访问

\n

这种方式存在,但在大多数情况下几乎无法使用。\n对于通用顶级域名 (gTLD),注册商与 ICANN 签订了合同。如果您阅读他们的合同,您会看到以下内容:

\n
\n

3.3.6 [..]\n注册服务商应根据以下条款和条件,\n向第三方提供对第 3.3.1 小节规定\n公共访问的数据的批量访问:

\n

3.3.6.1 注册服务商应每周至少提供一 (1) 次完整的数据电子副本,供与注册服务商签订批量访问协议的第三方下载。

\n

3.3.6.2 注册服务机构可对此类数据的批量访问收取不超过 10,000 美元的年费。

\n
\n

因此,理论上,您可以访问每个注册商并要求其提供“批量 whois 访问”,这或多或少意味着完整的数据转储,但是:

\n
    \n
  • 正如上面合同中所写,它可能会很昂贵(有超过 1000 个注册商,并且由于您无法提前知道域名在哪里注册,因此您需要获得所有这些注册商)
  • \n
  • 数据不会是新鲜的
  • \n
  • 至于下面的区域文件,它不是实时查询/回复,您需要下载所有数据,存储它,处理它并使用它。
  • \n
\n

区域文件 (gTLD)

\n

同样,这主要适用于 gTLD,原因稍后解释,但有关其他情况,请参阅下一节。

\n

这不允许您进行实时查询,因为您需要下载数据(如果您想要新鲜,则每天一次),将其存储在您的基础设施上的某个位置,并采用与您之后需要执行的查询相关的格式( RDBMS 可能不是最好的存储)。

\n

但这是解决您的问题的“最简单”和最广泛的解决方案。

\n

根据与 ICANN 签订的合同,所有 gTLD 注册管理机构都必须提供对其区域文件的免费访问。区域文件将包含给定 TLD 下的所有已发布域名。这是所有注册名称的子集(很难说有多少,但即使如此,也在个位数百分比范围内),因为您可以在没有名称服务器的情况下注册域名(因此不会发布),或者该域可以由于各种原因被“搁置”并因此从区域文件中消失。因此,您将获得与使用实时 DNS 查询时相同数量的漏报:您将无法获得某些域的数据(实际上是 NXDOMAIN),但实际上它们已注册(因此无法再次注册)。

\n

因此,一切都从这里开始:https://www.icann.org/resources/pages/czds-2014-03-03-en \n以及用户帮助部分:https://czds.icann.org/help

\n

您需要创建一个帐户,签署一份合同,概述您可以使用此数据做什么和不能做什么,然后您将能够下载每个 TLD 的每日区域文件。大多数(如果不是全部)通用顶级域名 (gTLD) 都将其区域文件放在那里。它可能存在一些不同的做法,因此您需要进行搜索。

\n

区域文件将采用 DNS“主区域文件”格式。所以你会在其中看到 DNS 记录。你只需要处理“NS”一个,你就会看到所有的域名。您需要确保对它们进行标准化(大小写、最后的点等),因为每个文件的内容可能有所不同。

\n

一旦您获得了每日域名列表,您就可以应用您想要在其中搜索的任何工具,包括正则表达式。但请注意您可能创建的 CPU 和 RAM 限制,具体取决于您存储数据的方式。.com例如,原始区域文件为 13GB。

\n

与实时 DNS 查询相比,最大的缺点是它不是实时的(数据可能长达 24 小时),您需要先下载文件才能执行任何操作,但最大的好处是您可以本地“所有”域的列表,因此您可以应用更强大的工具来搜索它们。

\n

区域文件(非 gTLD)

\n

在 gTLD 之外,即 ccTLD 中,很少有可用的完整区域文件,因为许多 ccTLD 运营商认为它是专有或公开可识别的数据,并且没有人拥有有效的业务来获取此数据,因此它不可用。

\n

不过也有反例:

\n\n

PS:创造性地使用搜索引擎(site:例如查看修饰符)也有帮助;当然,他们只看到现有的网站,域名完全可以注册,但没有网站解析。

\n