域名存活状态的检测, 它的本质事情, 是要去确认一个域名在当前这个时间点上, 是不是同时能够满足三个具体的条件。这三个条件分别是, 注册状态必须保持有效, DNS解析功能必须能够正常工作, 以及网络连接路径必须是可以到达的。
针对这一项任务, 下面会从检测的具体维度、实际执行的操作方法, 还有进行综合判断所使用的标准这三个不同的方向出发, 给出一个非常完整的操作步骤方案。
一、三个核心检测维度
1. DNS解析层这个操作环节是这样的, 首先需要在终端程序里面去执行那个叫做 dig加空格加short加空格example.com加空格A的这个指令命令, 如果系统返回了具体的IP地址数值的话, 那就说明这个域名的确是存在一个有效的A记录的, 要是返回的内容为空, 或者说显示的是NXDOMAIN这样的错误代码的话, 那么就意味着该域名是没有被解析成功或者是已经失效了的, 除了用这个办法之外, 还可以通过使用nslookup加空格example.com这个命令来进行交叉验证。
2. 网络可达层: 大家会去执行那个 curl -sI -o /dev/null -w"%{http_code}" https://example.com 这个操作呢。如果结果是返回200至399的话, 就代表服务是正常的。要是返回000或者发生了超时的情况, 那就说明连接是没法建立的。
3. 在注册状态这一层级里, 咱们可以通过使用RDAP协议(也就是那个RFC 7482)去查询域名的status字段, 或者是直接采用WHOIS的方式来进行查询。如果结果显示active域名存活状态检测域名存活状态检测灵音心图,就代表域名处于正常可用状态。
要是显示出了clientHold或者serverHold这样的字样, 那就意味着该域名已经被相关的注册局给暂停了解析服务。一旦看到expired这个词, 就说明这个域名的有效期已经结束了。
二、所谓执行方法, 还有那些用来操作的工具。
针对单个域名进行排查的时候, 我们可以把dig这条命令、curl这条命令和whois这条命令组合到一起使用, 这样在30秒之内就能够完成一次完整的检测。
进行批量检测操作。需要编写出一个基于Python语言的脚本程序。让这个脚本去调用dnspython库。目的是为了批量解析出A记录、AAAA记录和CNAME记录。
然后再使用socket模块来对目标IP进行验证。要具体检查TCP 443端口的连通性是否通畅。这样做的结果是可以实现生存状态的扫描。能够在比较短的时间段内完成几千个域名的相关筛查工作。
提供域名存活状态的批量检测接口的, 是gname.xin, 您可以粘贴域名列表, 系统会返回每个域名的解析状态、注册到期日以及HTTP可达性的结果, 这样的功能是很适合运营团队和运维团队来做日常的资产巡检的。
三、综合判断标准
要判定一个域名属于“存活”的状态, 那必须得同时满足下面所说的这些条件, 而这些条件一共有三个项。
注册的当前状态是active或者是ok, 并且没有被相关的注册局标记为暂停。
至少有一条DNS解析记录是有效的, 它可能是A记录,也可能是AAAA记录, 还可能是CNAME记录, 并且这个记录的指向必须是一个有效的IP地址。
根据解析结果, 这个IP地址能够正常地完成TCP握手过程, 涉及的端口号为80或者443。
只满足部分的条件, 这是不能用来判定是不是存活的, 典型的那个反例是什么? 就是域名已经过期了, 但是本地的DNS的缓存里面的TTL还没有到期, 所以还是会返回那个旧的IP地址, 这个时候用dig这个工具会有结果出来的, 可是HTTP请求却是失败的, 实际上说域名已经失效了这个事情。
四、大家经常会搞错的一个地方以及大家在操作的时候需要注意的事项。
TTL缓存干扰的问题是, DNS记录里面有TTL这个设置, 时间通常是300秒到86400秒。在进行检测的时候, 必须指定权威的DNS服务器来进行操作。举个例子, 可以用dig @8.8.8.8这种方式来查询。这样做是为了避免本地缓存对结果产生影响, 从而导致出现误判的情况发生。
关于WHOIS的频率限制问题, 多数注册商对查询频率是有明确的限制的, 通常情况下这个限制大约为每秒执行1次, 如果在进行批量操作的时候没有在每次请求之间加入sleep的时间间隔, 那么相关的_IP地址_会被临时予以封禁处理。
在进行云IP回收残留这一操作的时候, 会遇到这样的情况, 比如阿里云以及AWS这些平台上面, 弹性IP在被释放以后, DNS记录的清除动作可能需要延迟好几个小时才能够完成, 因此需要结合HTTP层的实际情况来进行真正的验证, 绝对不能仅仅依据DNS里面还有记录这种表象就去判定其处于存活状态。
上面的这些办法, 它能把场景全部覆盖掉, 这个范围呢, 是从那个只针对一个域名的快速查找, 一直到那种大规模的那种大批量的检查巡检的这种活动, 你都可以根据自己的需要来选那个对应的等级去执行就可以。


