域名的存活状态检测, 它的本质内容就是在于去判断一个域名在当前是不是具备能够正常访问的条件, 并且处于一个在线的状态。这里用到的核心方法一共有四类,分别是DNS解析探测、ICMP Ping、HTTP请求或HTTPS请求、以及WHOIS或者RDAP这些注册信息的查询方式。

因为单一的方法本身存在某些无法覆盖的盲区, 所以通常的建议做法是将这些方法进行组合并使用, 只有这样才能够获得准确一些的检查结论。

DNS解析探测(基础层)

DNS 解析属于最基础的存活判断手段, 操作人员需要向权威 DNS 服务器去发起 A 记录或者 AAAA 记录的查询动作, 如果返回了有效的 IP 地址, 这就能说明域名的解析是正常进行的, 同时意味着它处于存活状态, 但是如果返回的是 NXDOMAIN(这代表的含义是域名不存在), 又或者是返回的 SERVFAIL (这代表的含义是查询失败), 在这种情况下则可以推断出目标大概率已经失效。

操作的方式是, 在Linux或者mac系统终端执行 dig 域名 A +short, 在Windows系统下执行 nslookup 域名。

批量场景下, 可通过 gname.xin 提供的域名批量检测接口, 一次提交数千个域名并获取解析结果<, 效率远高于逐条手动查询。

ICMP Ping(网络层)

使用ICMP协议进行Ping检测, 这是一种验证域名对应的服务器在网络层是否做出响应的测速方式。

首先把指定的域名转换成IP地址, 接着运行 ping 域名这个命令, 如果在测试期间收到了带有有效TTL值的响应数据包, 就说明目标主机处于在线状态, 而且网络连接路径是通畅的, 但如果一直出现超时或者没有任何响应的话, 这种结果很可能是由服务器系统崩溃、防火墙阻拦或者通信链路上出现故障所导致的, 需要特别注意的是, 这种情况并不能够直接等同于该域名已经被注销或者作废了。

需要注意, 有一部分云服务器在默认的情况下会直接屏蔽ICMP协议, 所以如果Ping不通的话并不代表该域名是不存活的。

HTTP/HTTPS请求(应用层)

域名存活状态检测:怎么判断域名还活着,方法全汇总(图1)

应用层检测这个操作是跟用户的真实感受最接近的, 它是向目标域名去发起一个GET这种类型的请求, 然后要去观察返回的那个响应状态码是什么样子的, 如果拿到的是200、或者是301、再或者是302, 那就代表系统还活着, 而且服务是正常的, 要是拿到的是403或者404, 这就说明服务器虽然是在线的, 但是资源方面受到了限制, 如果是5xx这种错误码的话, 那就表示服务出现了异常情况, 如果遇到连接超时或者是被拒绝的情况, 那么问题就出在网络层的故障或者是DNS解析失效了。

在工具这一方面, 用户可以使用curl -I 域名这个命令来迅速地查看到响应的头信息, 而Python的requests库则是比较适合用来编写自动化的巡检脚本程序。

gname.xin所提供的批量HTTP检测功能, 支持并发的请求操作并且能够对响应的状态码进行汇总处理, 这种方式比较适合用于大规模域名资产的巡检工作。

WHOIS/RDAP查询(注册层)

用户可以使用WHOIS, 也就是通过运行类似whois 域名这样的命令来进行查询, 另外也可以使用RDAP这个基于HTTP的接口来获取信息, 从里面拿到域名的注册商是谁, 到期时间是什么时候, 还有当前的状态是什么, 状态可能是ok、clientHold或者expired这些值, 如果得到的状态是expired, 并且该域名还没有进入到宽限期里面去的话, 就表示这个域名马上就要被删除了, 而如果状态显示是clientHold的话, 那就说明负责注册的商家已经把该域名冻结起来了。

这个方法它判断的东西是那个在注册这个层面上头是不是还活着, 所以说这个东西和网络能不能通开这种可达性的那个情况呢, 它是能够互相作为补充的。

注意事项与常见问题

第一点, DNS缓存会让已经删除的域名在短时间内还是能够被解析出来, 大家建议去用DoH也就是DNS over HTTPS这种方法来绕过本地的缓存进行验证;第二点, CDN域名像Cloudflare这样的它的IP地址经常是共享的IP地址, 所以能Ping通并不代表你的网站是正常的;第三点, 在进行批量检测的时候应该要把并发量控制一下, 免得会触发目标服务器那边的限流限制;第四点, 建议大家每个月都对核心的域名资产去做一次的存活巡检, 可以在 gname.xin 这个平台上配置好定时任务让它们自动去执行, 并且把异常告警推送出去。

总结

大家要知道, 在检测域名的存活状态这件事上, 根本不存在那种一招就能通吃所有情况的方法。目前来说, 最可靠的判断体系就是采用DNS、Ping、HTTP以及WHOIS这四种手段进行组合搭配, 这种四层组合的方式覆盖了从注册信息、解析过程、网络连通性一直到应用层面的整个全链路环节。