非常好的方向 👍
我们来系统讲解并提供一份 公网域名 DNS 解析与网站响应检测脚本(Python 版,可扩展为自动监控系统)。


🧩 一、目标说明

任务:

  1. 解析域名(DNS 查询) → 获取 IP、CNAME、MX、NS、TXT 等记录
  2. 检查网站响应 → 状态码、延迟、可访问性、SSL证书有效性等
  3. 输出日志或告警(可后续扩展为钉钉、企业微信、邮件通知)

⚙️ 二、环境要求

Python >= 3.8
安装依赖包:

pip install requests dnspython


📘 三、核心脚本:dns_check.py

import requests
import dns.resolver
import socket
import ssl
import time

def dns_lookup(domain):
    """查询DNS记录"""
    result = {}
    try:
        result['A'] = [ip.to_text() for ip in dns.resolver.resolve(domain, 'A')]
    except Exception:
        result['A'] = []
    
    try:
        result['CNAME'] = [c.to_text() for c in dns.resolver.resolve(domain, 'CNAME')]
    except Exception:
        result['CNAME'] = []
    
    try:
        result['MX'] = [mx.to_text() for mx in dns.resolver.resolve(domain, 'MX')]
    except Exception:
        result['MX'] = []
    
    try:
        result['NS'] = [ns.to_text() for ns in dns.resolver.resolve(domain, 'NS')]
    except Exception:
        result['NS'] = []
    
    try:
        result['TXT'] = [txt.to_text() for txt in dns.resolver.resolve(domain, 'TXT')]
    except Exception:
        result['TXT'] = []

    return result


def check_website(url, timeout=5):
    """检测网站可用性"""
    result = {
        'url': url,
        'status_code': None,
        'elapsed': None,
        'ssl_expire_days': None,
        'error': None
    }

    try:
        start = time.time()
        response = requests.get(url, timeout=timeout)
        end = time.time()
        result['status_code'] = response.status_code
        result['elapsed'] = round(end - start, 3)
    except requests.exceptions.RequestException as e:
        result['error'] = str(e)
        return result

    # 检查SSL证书有效期
    try:
        hostname = url.replace('https://', '').replace('http://', '').split('/')[0]
        context = ssl.create_default_context()
        with socket.create_connection((hostname, 443)) as sock:
            with context.wrap_socket(sock, server_hostname=hostname) as ssock:
                cert = ssock.getpeercert()
                expire_ts = ssl.cert_time_to_seconds(cert['notAfter'])
                expire_days = int((expire_ts - time.time()) / 86400)
                result['ssl_expire_days'] = expire_days
    except Exception:
        result['ssl_expire_days'] = None

    return result


def main():
    domain = input("请输入要检测的域名(例如:example.com):").strip()
    url = f"https://{domain}"

    print(f"\n=== 🔍 DNS解析结果 ({domain}) ===")
    dns_info = dns_lookup(domain)
    for k, v in dns_info.items():
        print(f"{k}: {v}")

    print(f"\n=== 🌐 网站响应检测 ({url}) ===")
    site_info = check_website(url)

    if site_info['error']:
        print(f"❌ 无法访问:{site_info['error']}")
    else:
        print(f"✅ 状态码:{site_info['status_code']}")
        print(f"⏱ 延迟:{site_info['elapsed']} 秒")
        if site_info['ssl_expire_days'] is not None:
            print(f"🔒 SSL证书剩余:{site_info['ssl_expire_days']} 天")


if __name__ == "__main__":
    main()


📊 四、运行效果示例

请输入要检测的域名(例如:example.com):openai.com

=== 🔍 DNS解析结果 (openai.com) ===
A: ['104.18.12.123', '104.18.13.123']
CNAME: []
MX: ['alt1.aspmx.l.google.com.', 'aspmx.l.google.com.']
NS: ['ns1.cloudflare.com.', 'ns2.cloudflare.com.']
TXT: ['v=spf1 include:_spf.google.com ~all']

=== 🌐 网站响应检测 (https://openai.com) ===
✅ 状态码:200
⏱ 延迟:0.563 秒
🔒 SSL证书剩余:85 天


⚡ 五、功能扩展建议

功能实现方法
多域名批量检测读取文本文件 domains.txt,循环执行
定时任务使用 schedulecrontab
告警通知可集成 smtplib(邮件)或 requests.post(钉钉/微信机器人)
Web监控界面使用 Flask + Bootstrap 生成可视化监控平台
结果日志将结果写入 CSV 或 JSON 文件

📁 六、批量监控版本(可选)

如果你要监控多个网站,可以使用如下版本:

domains = ["openai.com", "google.com", "example.com"]

for domain in domains:
    print(f"\n=== 检测 {domain} ===")
    print(dns_lookup(domain))
    print(check_website(f"https://{domain}"))


✅ 七、总结

功能技术点模块
域名解析查询 A、CNAME、MX、NS、TXT 记录dnspython (dns.resolver)
网站连通性检查 HTTP 状态、响应延迟requests
HTTPS 有效期提取证书信息、计算过期天数ssl, socket
可扩展性批量检测、日志、监控告警自定义模块化