实用脚本能自动检测域名是否到期?

wen 实用脚本 7

本文目录导读:

实用脚本能自动检测域名是否到期?

  1. 目录导读
  2. 为什么需要域名到期自动检测?
  3. 主流域名到期检测脚本原理
  4. 三款实用脚本详解(附代码)
  5. 脚本部署与自动化告警配置
  6. 常见问题问答(FAQ)
  7. 从被动救火到主动预防

域名到期自动检测脚本实战指南,运维人员必备!

目录导读

  1. 为什么需要域名到期自动检测?
  2. 主流域名到期检测脚本原理
  3. 三款实用脚本详解(附代码)
  4. 脚本部署与自动化告警配置
  5. 常见问题问答(FAQ)
  6. 从被动救火到主动预防

为什么需要域名到期自动检测?

对于企业或个人站长,域名到期未续费可能导致:

  • 网站突然无法访问,业务中断
  • 域名被恶意抢注,损失品牌资产
  • 搜索引擎降权,原有SEO排名丢失

传统做法是手动记录域名到期日期,但管理多个域名时极易遗漏。实用脚本能自动检测域名是否到期,并通过邮件、微信、短信等方式提前告警,将“被动救火”转变为“主动预防”。


主流域名到期检测脚本原理

所有检测脚本都基于以下核心逻辑:

  1. 查询WHOIS信息:通过系统命令(如whois)或第三方API获取域名注册日期、到期日期。
  2. 解析时间字符串:将WHOIS返回的日期(如“2025-08-15T04:00:00Z”)转换为统一格式。
  3. 计算剩余天数:用到期日期减去当前时间,若小于阈值(如30天)则触发告警。

关键注意点:WHOIS查询频繁可能被限制,建议每个域名每天查询不超过5次,或使用缓存结果。


三款实用脚本详解(附代码)

脚本1:Python版(适合通用服务器)

#!/usr/bin/env python3
import whois
import datetime
import smtplib
def check_domain_expiry(domain):
    try:
        w = whois.whois(domain)
        expiry_date = w.expiration_date
        if isinstance(expiry_date, list):
            expiry_date = expiry_date[0]
        days_left = (expiry_date - datetime.datetime.now()).days
        return days_left
    except Exception as e:
        print(f"Error checking {domain}: {e}")
        return None
domains = ["example.com", "your-site.net"]
threshold = 30
for d in domains:
    days = check_domain_expiry(d)
    if days and days < threshold:
        # 发送告警邮件(代码略)
        print(f"⚠️ {d} 将在 {days} 天后到期!")

优点:依赖少(只需pip install python-whois),适合Linux/Windows。

脚本2:Bash版(适合Linux cron任务)

#!/bin/bash
DOMAINS=("example.com" "your-site.net")
THRESHOLD=30
for DOMAIN in "${DOMAINS[@]}"; do
    EXPIRY=$(whois $DOMAIN | grep -i "Expiry Date" | head -1 | awk '{print $NF}')
    if [ -n "$EXPIRY" ]; then
        DAYS_LEFT=$(( ($(date -d "$EXPIRY" +%s) - $(date +%s)) / 86400 ))
        if [ $DAYS_LEFT -lt $THRESHOLD ]; then
            echo "⚠️ $DOMAIN 剩余 $DAYS_LEFT 天到期"
            # 可添加发送微信告警命令
        fi
    fi
done

优点:零依赖,直接利用系统whois命令。

脚本3:PowerShell版(适合Windows服务器)

$domains = @("example.com", "your-site.net")
$threshold = 30
foreach ($domain in $domains) {
    $whoisData = (whois $domain) | Out-String
    $expiry = [regex]::Match($whoisData, 'Expiry Date:\s+(\S+)').Groups[1].Value
    if ($expiry) {
        $daysLeft = ([datetime]$expiry - (Get-Date)).Days
        if ($daysLeft -lt $threshold) {
            Write-Host "⚠️ $domain 剩余 $daysLeft 天到期"
        }
    }
}

脚本部署与自动化告警配置

1 定时任务设置

  • Linux:添加cron任务,每天8点执行Bash脚本
    0 8 * * * /path/to/check_domain.sh >> /var/log/domain_check.log
  • Windows:使用任务计划程序,设为每天运行PowerShell脚本。

2 告警渠道集成

  • 邮件:使用QQ邮箱或阿里云邮件推送服务(需配置SMTP)
  • 企业微信:通过机器人Webhook发送Markdown消息
  • 短信:集成阿里云短信API(按需付费)

推荐配置:剩余30天告警 + 剩余7天再次告警 + 到期当天紧急告警


常见问题问答(FAQ)

Q1:脚本检测不到某些域名?
A:部分域名(如.club、.top)的WHOIS字段名称不同,需调整正则表达式,建议先用whois 例子.com查看实际返回格式。

Q2:如何检测子域名(如blog.your-site.com)?
A:子域名通常属于主域,WHOIS只记录顶级域名,可直接检测“your-site.com”即可覆盖所有子域。

Q3:查询频率过高被WHOIS服务商封禁怎么办?
A:可采用以下策略:

  • 增加随机延迟(如time.sleep(2)
  • 只检测剩余天数<60天的域名
  • 改用付费WHOIS API(如WhoisXMLAPI)

Q4:脚本误报到期日错一天?
A:时区问题导致,解决方案:在代码中统一使用UTC时间对比,或手动调整datetime偏移量。

Q5:此脚本能否用于批量检测?
A:完全可以,只需将域名列表写入文本文件,逐行读取即可,Python版示例:

with open("domains.txt") as f:
    for line in f:
        check_domain_expiry(line.strip())

从被动救火到主动预防

域名到期看似小事,但引发的连锁反应(网站关闭、邮件中断、品牌损失)代价高昂,通过部署域名到期自动检测脚本,运维人员可以:

  • 降低人为疏忽风险
  • 将精力聚焦在核心业务优化
  • 建立自动化运维体系

建议立即动手,用10分钟配置一个基础脚本,并搭配企业微信/邮件告警。好的工具不是让你跑得更快,而是让你在风险来临前就准备好

抱歉,评论功能暂时关闭!