域名地址到期监控

域名无法直接获取,需要使用工具whois 调用查询域名信息

通过linux的whois查询域名情况→截取相关参数→转换为sql→插入数据库→grafana数据可视化

一、安装whois

yum install -y whois

二、脚本转换

截取相关参数→转换为sql→插入数据库,配合crontab每天对数据库进行update

whois查询的域名,格式上有区别

说明:ym.txt里存你要监控的域名,循环去whois查询

提前建立了一个数据库和表,库叫yuming,表叫ym


image-20230903200338256

第一种:
image-20230903200222957

for line in `cat /home/dpan/soft/yuming/ym.txt`
do
    #拿到过期的日期,假设是非.cn 域名
    e_d=`whois $line |grep 'Expiry Date' |awk '{print $4}' |cut -d 'T' -f 1`
 
    # 为空
    #(1)针对.cn 域名(无T,关键词:Expiration Time)
    if [ -z "$e_d" ]; then
       expiry_time=`whois $line |grep 'Expiration Time' |awk '{print $3" "$4}'`
 
       while [ -z "$expiry_time" ]; do
          sleep 3
          expiry_time=`whois $line |grep 'Expiration Time' |awk '{print $3" "$4}'`
       done
 
    #(2) 针对非 .cn 域名(有T,关键字:Expiry Date)
    ## 如果不为空,对时分秒做转换(默认是UTC,少了8小时, 进行date -d 转换)
    else
       hms=`whois $line |grep 'Expiry Date1' |awk '{print $4}' |cut -d 'T' -f 2`
       e_d_hms=`date -d "$hms" | awk '{print $4}'`
       expiry_time="$e_d $e_d_hms"
    fi
 
    #计算过期时间戳
    e_d_s=`date -d "$expiry_time" +%s`
    echo "域名 $line 的过期时间戳为: ${e_d_s}"
 
    expiry_date_s=`date -d @${e_d_s}`
    #3、计算今天的时间戳
    today_s=`date +%s`
 
    #4、计算过期时间戳和今天时间戳的差值,得到剩余天数
    expiry_date=$(($(($e_d_s-$today_s))/(60*60*24)))
    echo "剩余天数: $expiry_date "
 
 
    expiry_day=`echo $expiry_time | awk '{print $1}'`
    echo "域名:  ${line} 到期日期: ${expiry_time}, 剩余: $expiry_date 天 !!!!"
 
#    if [ $expiry_date -lt 90 ];
#    then
#        DATE=`date +%F_%T`
#        echo "${line} 域名将在 $expiry_time 到期,请及时处理!!" | mail -s "${line} 域名 $expiry_time 到期通知" jty@simplesoft.com.cn
#
#        echo "域名:${line} 将在$expiry_time 到期,剩余天数: $expiry_date 天,请及时处理!!!"  |  mail -s "${line} 域名 $expiry_time 到期通知" jty@simplesoft.com.cn
#
#    fi
 
cat >> /home/dpan/soft/yuming/ym.sql <<EOF
update ym set \\`ym_end_time\\` = '${expiry_time}', \\`ym_end_day\\` = $expiry_date WHERE ym_url = '${line}';
EOF
 
done

mysql -usimple -psimple -D yuming < /home/dpan/soft/yuming/ym.sql
rm -rf /home/dpan/soft/yuming/ym.sql

第二种:
image-20230903200427714

for line in `cat /home/dpan/soft/yuming/ym.txt1`
do
    #拿到过期的日期,假设是非.cn 域名
    e_d=`whois $line |grep 'Expiry Date' |awk '{print $5}' |cut -d 'T' -f 1`

    # 为空
    #(1)针对.cn 域名(无T,关键词:Expiration Time)
    if [ -z "$e_d" ]; then
       expiry_time=`whois $line |grep 'Registry Expiry Date' |awk '{print $4" "$5}'`

       while [ -z "$expiry_time" ]; do
          sleep 3
          expiry_time=`whois $line |grep 'Registry Expiry Date' |awk '{print $4" "$5}'`
       done

    #(2) 针对非 .cn 域名(有T,关键字:Expiry Date)
    ## 如果不为空,对时分秒做转换(默认是UTC,少了8小时, 进行date -d 转换)
    else
       hms=`whois $line |grep 'Expiry Date' |awk '{print $4}' |cut -d 'T' -f 2`
       e_d_hms=`date -d "$hms" | awk '{print $4}'`
       expiry_time="$e_d $e_d_hms"
    fi

    #计算过期时间戳
    e_d_s=`date -d "$expiry_time" +%s`
    echo "域名 $line 的过期时间戳为: ${e_d_s}"

    expiry_date_s=`date -d @${e_d_s}`
    #3、计算今天的时间戳
    today_s=`date +%s`

    #4、计算过期时间戳和今天时间戳的差值,得到剩余天数
    expiry_date=$(($(($e_d_s-$today_s))/(60*60*24)))
    echo "剩余天数: $expiry_date "

    #curl 报警中,钉钉不认 $expiry_time : 时分秒这种日期,改用python发
    expiry_day=`echo $expiry_time | awk '{print $1}'`
    echo "域名:  ${line} 到期日期: ${expiry_time}, 剩余: $expiry_date 天 !!!!"

#    if [ $expiry_date -lt 90 ];
#    then
#        DATE=`date +%F_%T`
#        echo "${line} 域名将在 $expiry_time 到期,请及时处理!!" | mail -s "${line} 域名 $expiry_time 到期通知" jty@simplesoft.com.cn
#
#        echo "域名:${line} 将在$expiry_time 到期,剩余天数: $expiry_date 天,请及时处理!!!"  |  mail -s "${line} 域名 $expiry_time 到期通知" jty@simplesoft.com.cn
#
#    fi

cat >> /home/dpan/soft/yuming/ym1.sql <<EOF
update ym set \\`ym_end_time\\` = '${expiry_time}', \\`ym_end_day\\` = $expiry_date WHERE ym_url = '${line}';
EOF

done

mysql -usimple -psimple -D yuming < /home/dpan/soft/yuming/ym1.sql
rm -rf /home/dpan/soft/yuming/ym1.sql

配合crontab定时任务,每天查询完表update数据库

三、grafana

数据源设置为mysql,自定义table,最终效果如下
image-20230903200532533最后也可以配置grafana的报警推送邮箱或者企业微信等也是可以的