shell 检测 CNAME 域名输出到 Excel

#!/bin/bash
# by wangjiangyuan
# 批量检测CNAME 到期脚本

# 定义一个函数,用于提取域名信息并写入 CSV 文件
function process_domains {
    # 获取当前日期和时间(格式为YYYY-MM-DD-HHMMSS)
    current_datetime=$(date +"%Y-%m-%d-%H%M%S")

    # CSV文件名中包含当前日期和时间和操作域名
    output_file="ssl_info_${current_datetime}.csv"

    # 添加CSV文件的列标题
    echo "域名,SSL 过期日期,CNAME 地址,CDN 厂商" > "$output_file"

    # 逐行读取文件并提取域名和 SSL 过期日期,写入CSV文件
    while read -r line; do
        domain=$(echo "$line" | awk '{print $2}')
        expiration=$(echo "$line" | awk '{print $6, $7, $8, $9}')
        cname=$(dig "$domain" | grep -m 2 "ANSWER SECTION" -A 1 | awk 'NR==2 {print $5}')

        # 提取CDN CNAME 后缀
        suffix=$(echo $cname | awk -F'.' '{print $(NF-2)"."$(NF-1)}')

        case "$cname" in
            *"kunlun"*)
                cdn_vendor="阿里云";;
            *"cdngslb.com"*)
                cdn_vendor="阿里云";;
            *"tc.cdntip.com"*)
                cdn_vendor="腾讯云";;
            *"spcdntip.com"*)
                cdn_vendor="腾讯云";;
            *"dnsv1.com"*)
                cdn_vendor="腾讯云";;
            *"wscdns.com"*)
                cdn_vendor="网宿";;
            *"lxcdn.com"*)
                cdn_vendor="网宿";;
            *"cdn20.com"*)
                cdn_vendor="网宿";;
            *"wswebcdn.com"*)
                cdn_vendor="网宿";;
            *"jomodns.com"*)
                cdn_vendor="网宿";;
            *"wswebpic.com"*)
                cdn_vendor="网宿";;
            *"wswebcdn.com"*)
                cdn_vendor="百度云";;
            *"ksyuncdn.com"*)
                cdn_vendor="金山云";;
            *"ks-cdn.com"*)
                cdn_vendor="金山云";;
            *"ks-cdn1.com"*)
                cdn_vendor="金山云";;
            *"cdnhwc2.com"*)
                cdn_vendor="华为云";;
            *"qingcdn.com"*)
                cdn_vendor="白山云";;
            *"trpcdn.net"*)
                cdn_vendor="白山云";;
            *"bsclink.cn"*)
                cdn_vendor="白山云";;
            *"qiniudns.com"*)
                cdn_vendor="七牛云";;
            *"aicdn.com"*)
                cdn_vendor="又拍云";;
            *"ccgslb.com.cn"*)
                cdn_vendor="蓝汛";;
            *"dwion.com"*)
                cdn_vendor="帝联";;
            *)
                cdn_vendor="$suffix";;
        esac

        echo "$domain,$expiration,$cname,$cdn_vendor" >> "$output_file"
    done < "$1"

    echo "数据已成功导出到 $output_file"
}


# 检查位置变量是否为空
if [ -z "$1" ]; then
    echo -e 'Usage: $0 <domain>\nPlease provide a domain name. and edit domain_list.txt'
    exit 1
fi
# 定义当下年份变量
current_year=$(date +'%Y')
next_year=$((current_year + 1))

# 域名列表文件
domain_list="domain.ctxt"
# 结果输出文件
output_file="outputC.txt"

# 检查域名列表文件是否存在
if [ ! -f "$domain_list" ]; then
    echo "Domain list file not found: $domain_list"
    exit 1
fi

# 清空输出文件
> "$output_file"

# 读取域名列表文件中的每个域名并进行处理
for domain in $(cat "$domain_list"); do
    full_domain="$domain.$1"
    # echo -n "Processing domain: $full_domain" >> "$output_file"
    #echo $full_domain
    line=""
    line+="Domain: $full_domain "

    # 1. 导出 DNS 记录的 Name 和 Address 并输出在一行上,A记录检测使用
    #echo -n " Name: $domain" >> "$output_file"
    #echo  " Address: $(dig +short $full_domain)" >> "$output_file"
    #line+=" Name: $domain"
    #line+=" Address: $(dig +short $full_domain)"


     # 2. 检测端口 443 是否开放
    if nc -zvw3 "$full_domain" 443; then
        #echo  "443: open " >> "$temp_file"
        line+=" 443: open "

    else
        #echo  "443: close  " >> "$temp_file"
        line+=" 443: close "
    fi

    # 3. 获取 SSL 证书过期日期 tr -d '\n' 去掉换行符
    ssl_dates=$( echo |openssl s_client -connect "$full_domain":443 -servername "$full_domain" 2>/dev/null | openssl x509 -noout -dates | grep notAfte| tr -d '\n' )
    #echo "SSL起始日期 $ssl_dates" >> "$temp_file"
    line+="SSL $ssl_dates"
    #echo $ssl_dates

   # printf "%-50s\n"  "$line" >> "$output_file"
     echo "$line" >> "$output_file"
done


echo "批量处理完成,请查看输出文件:$output_file"

#  检测 ssl 证书到期时间是否等于等于今年
cat "$output_file" | grep -i "$current_year" | tee "$current_year.date.txt"

echo "检测完毕,'$current_year' 到期的证书已输出到 '$current_year.date.txt' 文件内"

# source ssl_info.sh  "$current_year.date.txt"

# 调用函数并传入参数
process_domains "$current_year.date.txt"

使用方法:

        脚本当前目录新建domain.ctxt 文件,将需要批量检测的 CAME 域名前缀按行填写进去,例如  www.baidu.com/bbs.baidu.com 、tieba.baidu.com 。

domain.ctxt文件内容为

www
bbs
tieba

执行方式

bash 脚本名称 一级域名

举例

bash check_ssl.sh baidu.com

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值