正文

Domain Scanning Tool–一个基于SOA记录的域名注册扫描工具

Domain Scanning Tool–一个基于SOA记录的域名注册扫描工具

作者博客:https://dyn.im/2020/07/06/Domain-Scanning-Tool/

Github:https://github.com/dynos01/DomainScanningTool

 

使用:

git clone https://github.com/dynos01/DomainScanningTool
cd DomainScanningTool
python DomainScanningTool.py

介绍:

工具原理非常简单:RFC 1035 规定每个域名都需要有一个 SOA 记录,即注册过的域名都将会包含一个 SOA 记录,哪怕这个域名连 A 记录也没有。也就是说,要判断一个域名是否存在,只需要判断是否有 SOA 记录。

这样一来,基于 WHOIS 的查询的诸多缺陷就被规避了,其中包括:

  • 部分域名不开放 WHOIS 查询;
  • 部分域名的 WHOIS 查询限制严格;
  • 许多国别域名查询速度非常慢;
  • 需要维护专门的 WHOIS 列表。

在编写的过程中,曾经考虑了两种判断记录是否存在的方法:

  • 通过 DNS 响应的 ANCOUNT 字段,即响应包含的回答数量;
  • 通过 DNS 响应的 RCODE 字段,即响应状态。

在实际操作中发现,许多域名在部分 DNS 服务器下会报 SERVFAIL(该问题主要存在于8.8.8.8),且原因暂不明确。然而根据 RFC 2929RCODE 字段包含的信息较为丰富:0为正常,2为错误,3为域名不存在。于是,通过 RCODE 来判断更具有普适性。这也是最终采取的方案。

考虑到要构造的 DNS 请求非常简单,为了减少第三方依赖,使用了 Python 内建的库硬编码了大部分请求字段,仅有域名和 ID 变动。