ChinadaCam/DNScanner
GitHub: ChinadaCam/DNScanner
一款支持 CLI、交互式菜单和库调用的域名 DNS 记录解析与安全态势审查工具,可输出结构化 JSON 及多种格式报告。
Stars: 14 | Forks: 2
DNScanner
域名 DNS 与安全审查 —— CLI、交互式菜单以及可导入的模块
## 目录 * [关于本项目](#about-the-project) * [功能](#features) * [入门指南](#getting-started) * [前置条件](#prerequisites) * [安装说明](#installation) * [用法](#usage) * [命令行](#command-line) * [交互式菜单](#interactive-menu) * [JSON 输出](#json-output) * [作为库使用](#as-a-library) * [配置](#configuration) * [路线图](#roadmap) * [许可证](#license) * [联系方式](#contact) ## 关于本项目 DNScanner 可以自动化执行域名的 DNS 和安全审查。它最初是作为一个更大的 OSINT/渗透测试工具的模块开发的,并被设计为可以通过**三种方式**使用: 1. 基于标志的 **CLI** (`dnscanner` / `python3 start.py`), 2. **交互式菜单**(无参数运行),以及 3. **可导入的 Python 模块**,返回结构化的、可序列化为 JSON 的结果 这样父工具就可以直接嵌入它,而无需解析控制台输出。 导入该 package 是无副作用的,并且会惰性加载 DNS/HTTP 依赖项,因此嵌入成本低且安全。扫描在以下两种 **profile** 之一下运行 —— `standard` (快速,仅针对目标)或 `extended`(增加更繁重的、涉及第三方的检查),并且持久化的 config 允许您启用/禁用单个检查并提供 API 密钥。 ## 功能 DNS 与解析 * A / AAAA、MX、NS、CNAME、TXT、SOA、CAA 记录 * **CAA 与 SOA 解析** —— CAA 被拆分为 `issue` / `issuewild` / `iodef`(标记“任何 CA 都可签发”的配置);SOA 根据 RFC 1912 的 expire 范围进行检查 * 已解析 IP 的反向 DNS (PTR) * WHOIS / RDAP —— **标准化的关键字段**(ASN、network、滥用联系方式、创建/更新时间),支持 clean 或 JSON 格式 * IP **地理位置**(国家、城市、ISP / ASN) * 子域名发现 —— **主动**(并发、支持通配符)和**被动** (crt.sh / CT logs) 安全态势 * **电子邮件身份验证:** SPF(包括宽松的 `all` / >10 次 lookup 检查)、DMARC (policy/`rua`)、DKIM(常见 selector) * **DNSSEC** 状态(DNSKEY/DS、AD 标志) * 针对每个 nameserver 的 **Zone transfer (AXFR)** 测试 * **TLS 证书**(签发者、过期倒计时、SANs) * **HTTP 安全 headers**(HSTS、CSP、X-Frame-Options 等) * **子域名接管** 检测 —— 将悬挂的 CNAME 与约 15 个已知服务的指纹(S3、GitHub Pages、Heroku、Azure、Shopify 等)进行匹配,并带有可选的错误页面确认 * 跨平台 TCP 可达性(无需 root/ICMP) * 每个发现都标有**严重程度**(`info`/`low`/`medium`/`high`),并附带一行**修复建议**和适用的**参考**(RFC / OWASP) * **域名信誉**(VirusTotal / Google Safe Browsing)—— *保留功能*:config 和密钥处理已就绪;结果将在后续版本中发布 Profile 与集成 * 两种**扫描 profile** —— `standard`(记录、邮件、DNSSEC、TLS、HTTP、可达性、WHOIS、地理位置)和 `extended`(standard + AXFR、接管、信誉) * 持久化的 **config**:关闭检查、设置选项并提供**环境变量优先的 API 密钥** * 一个带有 `schema_version` `1.1` 的 JSON 结果对象 —— 父工具的稳定契约 * `--json` 标志用于机器可读的输出;`from DNScanner import DNScanner` 用于直接使用 * 报告:通过 `--report` 或 `write_report()` 生成 HTML / 文本(无依赖)或 PDF(使用 reportlab) ## 入门指南 ### 前置条件 Python 3.7+ 和 pip。 ### 安装说明 ``` git clone https://github.com/ChinadaCam/DNScanner.git cd DNScanner pip install -r requirements.txt # 可选:安装 `dnscanner` 控制台命令 pip install -e . # 可选:PDF 报告 pip install -e ".[report]" ``` ## 用法 ### 命令行 ``` # 快速检查(records + reachability + email + DNSSEC) python3 start.py -d example.com # 完整 extended 扫描(records, email, DNSSEC, TLS, HTTP, reachability, WHOIS, geo, AXFR, takeover) python3 start.py -d example.com -S # 单项检查 python3 start.py -d example.com -ns # nameservers python3 start.py -d example.com --email # SPF/DMARC/DKIM python3 start.py -d example.com --tls --http # TLS + security headers python3 start.py -d example.com --geo # IP geolocation python3 start.py -d example.com -cS --passive # active + passive (crt.sh) subdomains python3 start.py -d example.com --takeover # subdomain-takeover check # 将运行保存到文件,或设置自定义 timeout python3 start.py -d example.com -S -O results/ --timeout 8 # 生成报告 — 格式根据扩展名推断(或使用 --report-format 强制指定) python3 start.py -d example.com -S --report report.html python3 start.py -d example.com -S --report report.pdf # PDF needs: pip install "dnscanner[report]" python3 start.py --version ``` 如果使用 `pip install -e .` 安装,请使用 `dnscanner` 而不是 `python3 start.py`。 ### 交互式菜单 无参数运行(或使用 `-m`)以获取引导式菜单 —— 全面扫描、按记录和按安全检查、主动/被动子域名、接管、可达性,以及 JSON 和 HTML 导出: ``` python3 start.py ``` ### JSON 输出 `--json` 打印单个结果对象(`schema_version` `1.1`),不输出任何其他内容 —— 非常适合通过管道传递给其他工具: ``` python3 start.py -d example.com -S --json > example.json ``` ### 作为库使用 ``` from DNScanner import DNScanner # 默认扫描运行 "extended" 检查集;传入 checks=[...] 来缩小范围。 result = DNScanner("example.com").scan( checks=["records", "email", "dnssec", "tls", "http", "axfr"], include_subdomains=False, ) data = result.to_dict() # JSON-serializable, schema_version "1.1" print(data["checks_run"]) # exactly which checks ran (vs. "ran, found nothing") for f in result.findings: # f.severity in info|low|medium|high print(f.severity, f.title, "—", f.remediation, f.reference) ``` 结果是稳定的集成契约:每个 key 在 `1.x` 版本中都是附加的,并且 `to_dict()` / `to_json()` 意味着父工具永远不需要解析 stdout。除了每个检查的部分之外,它还包括 `scan_profile`、`checks_run`,并且在每个发现上都包含 `remediation` 和 `reference`。 ## 配置 DNScanner 从 `~/.config/dnscanner/config.json` 读取持久化的 config(遵循 `$XDG_CONFIG_HOME`;使用 `$DNSCANNER_CONFIG` 可完全覆盖路径)。它允许您禁用特定检查、调整选项并存储 API 密钥。 API 密钥**优先从环境变量读取**,然后从 config 文件读取,并且**绝不硬编码**。它们支持(保留的)信誉检查: ``` export DNSCANNER_VT_API_KEY=... # VirusTotal export DNSCANNER_GSB_API_KEY=... # Google Safe Browsing ``` 当 `config` 被传递给 `scan()` 时,用户禁用的检查会在扫描运行前被过滤掉。 ## 许可证 基于 GPL-3.0 许可证分发。请查看 `LICENSE` 了解更多信息。 ## 联系方式 [][linkedin-url] Tiago Faustino - tiagfaustino@gmail.com 项目链接:[https://github.com/ChinadaCam/DNScanner](https://github.com/ChinadaCam/DNScanner) 请查看 [待解决问题](https://github.com/ChinadaCam/DNScanner/issues) 以了解计划中的 功能和已知问题。标签:DNS解析, ESC4, GitHub, OSINT, Python, 动态插桩, 实时处理, 开源项目, 无后门, 逆向工具