网站诊断 (Website Diagnosis)
对目标域名/网站执行全方位诊断,生成结构化报告并给出综合评估。跨平台支持 Windows / macOS / Linux。
触发条件
当用户提到以下关键词时使用本技能:
- 网站诊断、站点检测、域名诊断
- 检查网站/域名 状态/健康度/安全/可访问性
- WHOIS、DNS、SSL 证书、网站内容分析
- 目标为域名或 URL 的健康检查请求
- 网站打不开、访问慢、证书过期、域名到期
使用方式
一键综合诊断(推荐)
python3 diagnose.py example.com
单项检查
python3 diagnose.py example.com --whois # WHOIS 注册信息
python3 diagnose.py example.com --dns # DNS 解析记录
python3 diagnose.py example.com --ip # IP 归属地
python3 diagnose.py example.com --ssl # SSL 证书
python3 diagnose.py example.com --http # HTTP 访问测试
python3 diagnose.py example.com --security # 安全响应头
python3 diagnose.py example.com --server # 服务器信息
python3 diagnose.py example.com --content # 网站内容分析
python3 diagnose.py example.com --skip-content # 跳过内容分析
python3 diagnose.py example.com --dns --json # JSON 格式输出
技术实现
| 功能 | 实现方式 | 跨平台 |
|---|---|---|
| WHOIS 查询 | whois.ddnsip.cn REST API |
✓ 纯 HTTP |
| DNS 解析 | dns.ddnsip.cn API |
✓ 纯 HTTP |
| IP 归属地 | ip.ddnsip.cn API (精确到省份) |
✓ 纯 HTTP |
| SSL 证书 | Python ssl 模块 + 内置 X.509 DER 解析器 |
✓ 零外部依赖 |
| HTTP 访问 | Python urllib |
✓ 标准库 |
| 安全响应头 | Python urllib 响应头解析 |
✓ 标准库 |
| 服务器信息 | 响应头指纹识别 | ✓ 标准库 |
| 内容分析 | Python HTMLParser + 可疑关键词检测 |
✓ 标准库 |
结果判断标准
运行诊断后,按以下标准对结果进行评估并告知用户。
WHOIS / 域名注册
| 情况 | 判断 | 建议 |
|---|---|---|
| 到期时间 < 30 天 | 🔴 紧急 | 立即续费,否则域名可能被抢注 |
| 到期时间 < 90 天 | 🟡 警告 | 建议尽快续费 |
域名状态含 serverHold / clientHold |
🔴 异常 | 域名被暂停解析,联系注册商 |
域名状态含 pendingDelete |
🔴 危险 | 域名即将删除,立即处理 |
| 注册商为未知/低信誉 | 🟡 提醒 | 建议转移到主流注册商 |
DNSSEC 未启用(值为 unsigned) |
🟡 建议 | 可考虑开启以防 DNS 劫持(高价值域名建议启用) |
DNSSEC 已启用(值为 signedDelegation) |
🟢 正常 | DNS 防篡改保护已开启 |
DNS 解析
| 情况 | 判断 | 建议 |
|---|---|---|
| 无 A/AAAA 记录 | 🔴 异常 | 域名无法解析,检查 DNS 配置 |
| 无 MX,也无 SPF | 🟡 提醒 | 建议加 SPF v=spf1 -all 防止域名被仿冒发信 |
无 MX,但有 SPF -all |
🟢 正常 | 未启用邮件且已做防仿冒保护(最佳实践) |
MX 值为 .(空 MX,RFC 7505) |
🟢 正常 | 明确声明域名不接受邮件,属规范用法 |
| 有 MX,无 SPF | 🔴 异常 | 邮件配置不完整,发件易进垃圾箱,且域名可被伪造发信 |
SPF 使用 -all(硬失败) |
🟢 最佳 | 非授权服务器发信直接拒绝,防护最强 |
SPF 使用 ~all(软失败) |
🟡 可接受 | 非授权服务器发信标记为可疑但不拒绝,防护较弱 |
SPF 使用 ?all(中立) |
🟡 防护不足 | 无实际拦截效果,建议改为 -all |
| 有 MX,有 SPF,无 DMARC | 🟡 警告 | 需额外查询 _dmarc.{域名} TXT 记录确认;若无则建议配置,防止仿冒发信绕过 SPF |
| 有 MX,有 SPF,有 DMARC | 🟢 健康 | 邮件安全配置完整(DMARC 需查 _dmarc.{域名} 子域确认) |
| TXT 含大量第三方验证 token | 🟢 正常 | Stripe/Google/Facebook 等域名验证 token 均属正常 |
| NS 仅 1 条 | 🟡 警告 | 单点故障风险,建议至少 2 个 NS |
| CNAME 与 A 记录同时存在于根域 | 🔴 错误 | DNS 配置冲突,根域不可用 CNAME |
| 有 CAA 记录 | 🟢 正常 | 已限制证书颁发机构,可防止错误签发 |
| 无 CAA 记录 | 🟡 建议 | 可配置 CAA 记录限制哪些 CA 可以签发证书 |
| CAA 记录存在且不含目标 CA | 🔴 异常 | 证书签发将被拒绝;需在 CAA 中增加目标 CA,或改用 CAA 允许的 CA 申请 |
HTTPS 记录含 alpn="h3..." |
🟢 正常 | 服务器已声明支持 HTTP/3 (QUIC),现代基础设施 |
HTTPS 记录含 alpn="h2" |
🟢 正常 | 服务器支持 HTTP/2 |
| 无 HTTPS 记录 | 🟡 建议 | 可配置 HTTPS/SVCB 记录提升协议发现效率(非强制) |
SSL 证书
| 剩余天数 | 判断 | 建议 |
|---|---|---|
| 已过期 | 🔴 紧急 | 立即更新证书,浏览器将拒绝访问 |
| < 7 天 | 🔴 紧急 | 立即续期,自动续签可能已失败 |
| < 30 天 | 🟡 警告 | 尽快续期 |
| < 90 天 | 🟢 正常 | 关注即可 |
| ≥ 90 天 | 🟢 健康 | 无需操作 |
| TLS 版本为 TLSv1 / TLSv1.1 | 🟡 警告 | 旧版协议存在安全风险,升级至 TLS 1.2+ |
| SAN 列表覆盖被查域名 | 🟢 正常 | 证书验证通过(现代证书以 SAN 为准,CN 仅参考) |
| SAN 列表不覆盖被查域名且 CN 也不匹配 | 🔴 异常 | 证书配置错误,浏览器将报错 |
| 无 SAN,仅有 CN(旧式证书) | 🟡 提醒 | 证书格式老旧,部分浏览器可能不信任 |
| 自签名证书(颁发者 = 主体) | 🟡 警告 | 浏览器不信任,影响用户体验 |
| 证书有效且 SAN 匹配,但浏览器仍显示「不安全」 | 🟡 混合内容 | 页面内嵌了 http:// 静态资源(图片/JS/CSS),需全站改为 https:// 引用 |
| 工具显示证书有效,但用户的客户访问异地付展示报错 | 🟡 分层部署 | CDN/反向代理层持有旧证书未同步,需在 CDN 控制台更新证书 |
HTTP 访问
| 情况 | 判断 | 建议 |
|---|---|---|
| HTTP 200 | 🟢 正常 | — |
| HTTP 301/302 跳转至 HTTPS | 🟢 正常 | — |
| HTTP → HTTP(未强制 HTTPS) | 🟡 警告 | 建议配置 HTTP→HTTPS 重定向 |
| 状态码 4xx | 🟡 异常 | 资源不存在或鉴权问题 |
| 状态码 5xx | 🔴 异常 | 服务器错误,网站可能无法正常访问 |
| 响应时间 > 3s | 🟡 警告 | 响应过慢,影响用户体验 |
| 响应时间 > 10s 或超时 | 🔴 异常 | 网站可能不可用 |
| 重定向链超过 3 跳 | 🟡 警告 | 重定向过多,影响 SEO 和加载速度 |
| 重定向出现循环 | 🔴 错误 | 死循环重定向,网站无法访问 |
| A 记录解析至内网 IP(10.x / 192.168.x / 172.16–31.x) | 🔴 错误 | 公网用户无法访问,需改为公网 IP |
| DNS 解析正常,HTTP/HTTPS 均超时 | 🟡 排查 | 80/443 端口可能被机房或运营商封禁(家宽常见),或服务未启动 |
安全响应头
安全头共检查 11 项,但各项权重不同,需区分核心项与加分项:
核心安全头(缺失直接扣分):HSTS、CSP、X-Content-Type-Options、X-Frame-Options、Referrer-Policy
加分项(缺失常见,不作为严重问题):Permissions-Policy、COOP、COEP、CORP
废弃项(忽略):Expect-CT(Chrome 已于 2022 年移除支持)
| 核心安全头覆盖率(共 5 项) | 判断 |
|---|---|
| 5/5 | 🟢 优秀 |
| 3–4/5 | 🟡 中等,建议补充缺失项 |
| < 3/5 | 🔴 较差,存在明显安全风险 |
> github.com 实际得分 6/11,但核心 5 项均配置,属于正常水平。
重点关注缺失的核心项:
- HSTS 缺失:未强制 HTTPS,存在降级攻击风险
- CSP 缺失:存在 XSS 注入风险
- X-Frame-Options 缺失:存在点击劫持风险
- X-Content-Type-Options 缺失:浏览器可能错误解析响应类型
- Cookie 无 HttpOnly/Secure:Session 存在被窃取风险
> X-XSS-Protection 特殊说明:值为 0 是现代最佳实践(主动禁用浏览器内置 XSS 过滤器,防止其被利用作为攻击向量),不应视为缺陷。值为 1; mode=block 属于旧式配置,功能上不如 CSP 全面。
IP 归属地
| 情况 | 判断 | 建议 |
|---|---|---|
| 服务器在境外但业务面向中国用户 | 🟡 提醒 | 可能需要 ICP 备案,访问速度可能较慢 |
| 服务器 IP 来自数据中心/CDN | 🟢 正常 | 属于正常托管 |
| 多个 A 记录 IP 来自不同国家 | 🟡 提醒 | 可能为 GeoDNS 负载均衡,属正常 |
内容安全
| 情况 | 判断 | 建议 |
|---|---|---|
| 检测到赌博/色情/诈骗关键词 | 🔴 高风险 | 网站可能被黑客植入恶意内容,立即排查 |
| 页面标题与域名行业明显不符 | 🟡 可疑 | 可能存在域名劫持或内容篡改 |
| 页面无标题/无内容 | 🟡 提醒 | 网站可能正在维护或存在渲染问题 |
综合风险评级
汇总所有模块后,给出一个整体评级:
| 评级 | 条件 | 说明 |
|---|---|---|
| 🟢 健康 | 无红色,黄色 ≤ 2 | 网站状态良好 |
| 🟡 需关注 | 无红色,黄色 3–5 | 存在改进点,建议处理 |
| 🟠 有风险 | 红色 1–2 项,或黄色 > 5 | 存在明显安全或可用性问题 |
| 🔴 高危 | 红色 ≥ 3 项,或内容安全告警 | 需要立即处理 |
在回复用户时,最后给出综合评级 + 优先修复项列表(按紧急程度排序)。
常见异常场景识别
| 现象组合 | 可能原因 | 处理方向 |
|---|---|---|
| DNS 解析正常,HTTP 超时/5xx | 服务器故障、防火墙拦截 | 检查服务器状态和安全组 |
| DNS 解析正常,HTTP/HTTPS 均无响应 | 80/443 端口被封或服务未启动 | 检查安全组规则;家宽用户需向运营商申请开放端口 |
| HTTP 200 但内容异常/出现赌博词 | 网站被黑,植入恶意内容 | 立即下线排查,清理后门 |
| SSL 域名不匹配或自签名 | 证书配置错误或未续期 | 重新申请/配置证书 |
| 域名 WHOIS 注册商变更/状态异常 | 域名可能被盗转 | 联系原注册商,启动找回流程 |
| A 记录 IP 与历史不符,内容变化 | DNS 劫持 | 检查 DNS 服务器配置,更换至可信 DNS |
| 无 A/AAAA 记录,WHOIS 显示已过期 | 域名到期后被删除 | 尝试重新注册,或联系注册商 |
| 响应极慢 + 服务器为共享主机 | 主机资源不足 | 考虑迁移至独立服务器或 CDN |
| HTTPS 证书有效,浏览器仍提示「不安全」 | Mixed Content 或多节点证书不同步 | 检查页面是否含 http:// 资源引用;若多地区访问结果不同,检查 CDN/境外节点证书是否已同步更新 |
| SPF 记录存在但邮件仍被退信 | SPF include 未覆盖实际发件 IP | 确认 SPF 包含邮件服务商授权段(如 include:spf.qq.com);同时排查记录值是否误含引号 |
目录结构
website-diagnosis/
├── SKILL.md # 本文件
├── diagnose.py # 跨平台诊断主程序 (Python 3, 零依赖)
└── README.md