一、云厂导出所有域名子域名解析
1、下载所有主域名子记录 TXT文本
2、导出记录文件
3、通过文件名获取所有主域名
#解压文件,进入目录dnspod_records_2024-03-28_10-47-33
ls|awk -F'_' '{print $2}' > ../domain_list
4、整理获取最终所有子域名
#获取所有子域名、排序、去重、过滤非业务子域名
cat domain_list | while read mdomain; do cat dnspod_records_2024-03-28_10-47-33/*_"${mdomain}"_*.txt | awk -v domain="${mdomain}" '{print $1"."domain}'; done |grep -v 最后操作时间|grep -v ^'_dnsauth.'|sort |uniq > all_sub_domain.txt
####去掉@、* 字符###
#vi all_sub_domain.txt
:%s/@.//g
:%s/*./1./g
:wq
二、脚本获取过滤近期过期子域名
2.1 检测过期脚本
cat async_check_ssl.py
#-*- coding: UTF-8 -*-
import asyncio
import ssl
import socket
import dns.resolver
from datetime import datetime
import traceback
"""
使用 ssl.create_default_context() 创建一个默认的SSL上下文,用于管理设置和选项。
接着,我们使用 socket.create_connection() 创建一个到目标服务器的连接,并设置超时为3秒。
最后,使用 context.wrap_socket() 将普通的socket包装成SSL socket,这样就可以安全地进行通信并获取证书信息。
方法的优点是它提供了更底层的控制,并且可以在连接时直接处理SSL握手,从而允许你检查SSL证书的有效性。
不过,请注意,这种同步操作需要在异步环境中正确管理,以避免阻塞事件循环。
我们通过在异步函数中使用 async with semaphore 来限制并发,确保不会因为同时打开过多连接而导致资源耗尽。
"""
async def check_ssl(domain, semaphore):
async with semaphore: # 使用semaphore限制并发
resolver = dns.resolver.Resolver(configure=False)
resolver.nameservers = ['8.8.8.8']
try:
a_records = resolver.resolve(domain, 'A')
ip_address = str(a_records[0])
context = ssl.create_default_context()
with socket.create_connection((ip_address, 443), timeout=3) as sock:
with context.wrap_socket(sock, server_hostname=domain) as ssock:
cert = ssock.getpeercert()
exp_date = datetime.strptime(cert['notAfter'], '%b %d %H:%M:%S %Y %Z')
print(f"SSL Certificate for {domain} is valid until {exp_date}.")
except Exception as e:
print(f"Error: {str(e)} for domain {domain}")
#traceback.print_exc()
async def main():
all_subdomain_list = []
file = open("/tmp/wps.cn.txt", 'r')
for line in file:
all_subdomain_list.append(line.strip())
file.close()
semaphore = asyncio.Semaphore(4) # 创建Semaphore
tasks = [check_ssl(domain, semaphore) for domain in all_subdomain_list]
await asyncio.gather(*tasks)
if __name__ == "__main__":
asyncio.run(main())
2.2 执行检测、过滤
## python async_check_ssl.py
SSL Certificate for a.cn is valid until 2025-04-09 23:59:59.
SSL Certificate for act.a.cn is valid until 2025-04-09 23:59:59.
Error: The DNS response does not contain an answer to the question: mail._domainkey.act.wps.cn. IN A for domain mail._domainkey.act.a.cn
Error: All nameservers failed to answer the query api.s.wps.cn. IN A: Server 8.8.8.8 UDP port 53 answered SERVFAIL for domain api.s.a.cn
Error: All nameservers failed to answer the query api.s.wps.cn. IN A: Server 8.8.8.8 UDP port 53 answered SERVFAIL for domain api.s.a.cn
Error: timed out for domain csdyn.wps.cn
Error: timed out for domain dyn.wps.cn
SSL Certificate for ic.a.cn is valid until 2025-03-31 23:59:59.
SSL Certificate for ic.a.cn is valid until 2025-03-31 23:59:59.
Error: timed out for domain info.a.cn
Error: timed out for domain info.a.cn
Error: timed out for domain minfo.a.cn
Error: timed out for domain minfo.a.cn
Error: timed out for domain qdyn.a.cn
......
#过滤四月到期子域名
# python async_check_ssl.py.py |grep -E 'valid until 2024-04-'
##也可 后台执行
nohup python async_check_ssl.py >> all_subdomain_sslinfo.txt &
#cat all_subdomain_sslinfo.txt|grep -E '2024-03|2024-04-0'
2.3 更新 或 通知业务处理即将过期域名证书
· 提前申请、更新域名证书
· 未使用的业务子域名可以申请回收解析、下线相关服务