所谓域名存活状态检测, 这是利用技术手段去判定某个域名的当下情况, 看看它到底还是不是处在能让人们访问、能让系统解析的那种叫做活着的的状态。这里面的核心判断依据, 主要是分成三个维度的。
第一个维度是看那个DNS能不能够完成解析任务, 第二个维度是检查目标服务器在网络上是不是能够被联系到并且可以到达的, 第三个维度是验证通过HTTP或者HTTPS协议提供出去的服务能不能正常给出响应结果。
只有当上述这所有的三项条件全都同时得到满足的时候, 才能对这个域名进行一个存活的判定;要是其中的任何任何一个环节出现了失败的情况, 那么就要认为它是属于异常情况或者是已经发生了失效的变化了。
01域名存活状态的判断标准
1. DNS解析层: 这意味着域名能够成功返回至少一条A记录, 或者AAAA记录, 也就是IPv4地址, 或者IPv6地址是有效的, 并且TTL也是有效的状态。如果返回了NXDOMAIN结果, 或者SERVFAIL结果, 那就说明这个域名在权威DNS里面是不存在的, 或者是根本无法进行解析操作的。
2. 网络可达层这一部分的做法, 其实就是对那种经过解析操作之后得出的IP地址发起所谓的动作, 这个动作具体是什么样子呢, 它要么是发起ICMP Echo也就是俗称的ping检测, 要么就是发起针对TCP端口的探测工作, 这里常用的端口号一般会是80或者是443, 只要你收到了对方发回来的响应信息, 那么这就足以说明那个服务器确实是处于在线的状态了。
3. 针对目标IP地址, 向它的80端口或者443端口发送HTTP请求, 也可能会发送HTTPS请求, 如果是收到了像状态码200这样的正常响应, 或者是状态码31那样的正常响应, 又或者是状态码302这样的正常响应, 那么这个情况说明Web服务正在正常运行之中。
这三个层级是逐个推进的, 只有前一个层级通过了, 才有必要去检测后一个层级。在实际的业务操作里, 通常是把第三层也就是HTTP响应这块内容, 当作最终判定系统是否存活的唯一标准。
02常用检测方法与操作路径
命令行手动检测
执行代码框中的 nslookup 目标域名命令, 或者执行代码框中的 dig 目标域名 A 命令, 然后查看DNS解析结果。
执行对目标域名进行 ping 目标域名 操作, 以实现对网络层连通性的测试工作。
执行 curl -I https://目标域名,查看HTTP响应状态码。
批量在线检测
面对那些需要同时进行监测的任务, 监测目标的数量往往能够达到数百个, 甚至数千个之多。针对如此庞大的域名数量, 我们建议大家采取一种通过脚本来进行批量探测的方法。
具体来看, 大家可以去编写专门用于Python语言的脚本程序, 然后调用代码库dnspython来完成有关DNS解析的工作步骤。除此之外, 还可以进一步结合代码库requests来发出相关的HTTP请求操作。
最终, 我们要把收集到的这些结果妥善地写入到CSV格式的文件中, 或者保存到数据库里。建议把检测频率设置为不低于每5分钟一次, 这样能够把那些由于域名过期所导致的变化给捕获到, 同时也能够把那些因域名被转移而引起的变化给抓住, 另外还能发现服务器宕机时的状态发生变动。
借助专业工具
有一部分站长还有运维团队, 会选择用域名监控平台。这个平台, 像是像那个由 gz88.cn 这样的域名信息服务站点所提供的那个在线检测入口, 就是用来快速完成单次或者周期性的检测的。这种方式, 是适合那些没有技术背景的用户来使用的。
当进行实际操作的时候, 用户只需要在那个输入框里输入自己想要查询的那个域名就行了。然后, 系统就会自动返回很多关键信息了, 比如说 DNS 的状态情况、 IP 地址归属的情况, 还有 HTTP 响应的相关信息等等。
03高频疑难与解决方案
04检测时的注意事项
检测请求应当去使用独立的IP地址, 这样可以避免被目标站点上的WAF系统识别为恶意扫描行为, 进而触发拦截措施, 从而造成误判。
对于HTTPS站点来说, 我们需要去校验证书的有效性。虽然证书过期的时候是可以建立TCP连接的, 但是我们还是应该把它标记为“异常存活”。
在进行批量检测操作的时候, 务必要对并发数量加以控制, 这里给出的一个建议数值是不要超过五十个并发, 这样做的主要目的是为了防范由于请求的数量变得过大而导致的被对方系统进行限速处罚的状况发生, 进而去保障最终结果的准确性能够不受影响。
上面说的, 就是域名存活状态检测的一个完整的判断逻辑, 还有对应的操作路径, 它把从单次的人工手动检查, 到大规模自动化的实时监控这些全部的情况都给覆盖到了。


