非常好的方向 👍
我们来系统讲解并提供一份 公网域名 DNS 解析与网站响应检测脚本(Python 版,可扩展为自动监控系统)。
🧩 一、目标说明
任务:
- 解析域名(DNS 查询) → 获取 IP、CNAME、MX、NS、TXT 等记录
- 检查网站响应 → 状态码、延迟、可访问性、SSL证书有效性等
- 输出日志或告警(可后续扩展为钉钉、企业微信、邮件通知)
⚙️ 二、环境要求
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 ,循环执行 |
定时任务 | 使用 schedule 或 crontab |
告警通知 | 可集成 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 |
可扩展性 | 批量检测、日志、监控告警 | 自定义模块化 |
发表回复