dns-eye

dns-eye

MCP server for CDN source origin tracing and IP intelligence, enabling DNS resolution, CNAME tracking, C-segment scanning, web fingerprinting, and host collision detection for asset reconnaissance.

Category
访问服务器

README

dns-eye — DNS 之眼 MCP Server

面向 AI Agent 的 CDN 溯源 + IP 情报 + C 段资产发现 + Host 碰撞 侦察工具集。 基于 Model Context Protocol,以 stdio 方式接入任意 MCP 客户端(Claude Desktop / CodeBuddy / Cursor 等),由大模型直接调用完成域名资产侦察。

设计原则:只读优先、无 shell 注入、输入严格校验、结果以 JSON 结构化返回,便于 Agent 解析与编排。


功能特性

  • 多地 DNS 解析:12 个国内外公共 DNS 节点并行解析,通过 IP 离散度判断目标是否位于 CDN 之后,并标出疑似源站 IP。
  • CNAME 链路追踪:递归追踪 CNAME 链,结合云厂商 CNAME 关键词库识别 CDN 提供商。
  • crt.sh 证书关联:查询证书透明度日志,挖掘同证书关联域名与内联 IPv4。
  • IP 云厂商判定:离线云厂商 IP 段 + CDN 特征库,判定 IP 类型(云 / 托管 / 自建),无需联网查询。
  • C 段高速扫描:raw socket + asyncio 非阻塞并发(2000 并发),默认扫描 135 个常用 Web 端口;fast 模式仅扫 20 个高频端口秒出。
  • Web 指纹探测:aiohttp 主引擎(~60ms)获取标题 / Server / 技术栈;可选 httpx 备选引擎做 tech-detect。
  • Host 碰撞:自定义 Host 头请求,对比 baseline 响应差异,发现隐藏在 CDN / 反代后的真实服务。
  • 一站式侦察full_recon 将上述步骤编排为 7 步流水线,一键输出完整侦察结论。

9 个工具速查

工具 用途 输入 典型场景
dns_resolve_multi 12 节点多地 DNS 解析 + CDN 判定 domain 判断目标是否在 CDN 后
cname_trace CNAME 链路追踪 + CDN 厂商识别 domain 确认 CDN 厂商
crtsh_query crt.sh SSL 证书关联子域名 domain 发现同证书其他域名
ip_classify IP 云厂商判定(云/托管/自建) ips[](≤200) 判断 IP 类型
c_scan C 段端口扫描(默认 135 Web 端口;fast=20) ip/domainports?fast? 发现同网段服务
c_scan_status 查询历史扫描任务(保留兼容) task_id 查询历史任务
web_probe Web 指纹探测(aiohttp 主引擎) targets[] 获取存活服务标题/Server
full_recon 一站式侦察流水线(7 步) domain + 多项开关 一键域名全量侦察
host_collision Host 碰撞(域名 × IP 交叉爆破) domains[]ips[] 发现 CDN 隐藏真实服务

完整参数与返回结构见文末「工具详细参考」。


安装

要求 Python >= 3.11

# 方式一:直接安装运行依赖(推荐,最简)
pip install mcp aiohttp

# 方式二:可编辑安装(便于从任意目录 import 包)
pip install -e .

bin/httpx.exe 已随仓库通过 Git LFS 分发,用于 web_probe 的可选 httpx 备选引擎,主引擎 aiohttp 不需要它


MCP 客户端配置

在 MCP 客户端的配置文件中加入(stdio 传输,无需端口 / 鉴权管理):

{
  "mcpServers": {
    "dns-eye": {
      "command": "python",
      "args": ["server.py"],
      "cwd": "<dns-eye 所在目录>"
    }
  }
}

如需启用 httpx 备选引擎(tech-detect 场景),追加 env

{
  "mcpServers": {
    "dns-eye": {
      "command": "python",
      "args": ["server.py"],
      "cwd": "<dns-eye 所在目录>",
      "env": {
        "HTTPX_BIN": "<dns-eye 所在目录>/bin/httpx.exe"
      }
    }
  }
}

MCP 配置不依赖任何本机绝对路径硬编码,克隆到任意目录后只需把 cwd 指向项目根即可。


快速验证

在 AI 会话中直接调用工具:

dns_resolve_multi(domain="example.com")
cname_trace(domain="example.com")
crtsh_query(domain="example.com")

# C 段扫描:默认 135 个常用 Web 端口(同 iptest v3.0)
c_scan(ip="1.2.3.4")
# 自定义端口
c_scan(ip="1.2.3.4", ports=[80, 443, 8080])
# 快速模式:20 个最高频端口,秒出结果
c_scan(ip="1.2.3.4", fast=True)
# 也支持传域名(自动 DNS 解析取首个 IP)
c_scan(domain="mail.example.com")

c_scan_status(task_id="xxx")
web_probe(targets=["1.2.3.4:443", "https://1.2.3.5:8080"])
host_collision(domains=["target.com"], ips=["1.2.3.4"])
full_recon(domain="example.com", allow_clouds=["all"])

项目结构

dns-eye/
├── README.md            # 使用说明(本文件)
├── DESIGN.md            # 设计文档(流程 / 工具 / 架构 / 设计决策)
├── server.py            # MCP Server 主入口(stdio transport)
├── pyproject.toml       # 项目配置 / 依赖
├── LICENSE              # MIT 许可证
├── core/
│   ├── dns_resolver.py      # 多地 DNS 解析 + CNAME 追踪
│   ├── crtsh_client.py      # crt.sh API 客户端
│   ├── ip_classifier.py     # IP 云厂商判定
│   ├── c_scanner.py         # C 段端口扫描(raw socket + asyncio)
│   ├── web_prober.py        # aiohttp Web 探测(备选 httpx)
│   ├── collision.py         # Host 碰撞
│   └── __init__.py
├── data/
│   ├── cloud_ips.json       # 云厂商 IP 段 + CDN CNAME 特征(离线判定用)
│   └── ports.json           # Web 端口字典(135 个常用 Web 端口)
└── bin/
    └── httpx.exe            # 外部工具(可选备选引擎,Git LFS 分发)

数据文件

  • data/cloud_ips.json:云厂商 IP 段与 CDN CNAME 关键词库,ip_classify 离线匹配,无需联网。
  • data/ports.json:C 段扫描默认端口字典,当前 135 个常用 Web 端口(与 iptest v3.0 一致)。修改此文件即可调整默认扫描端口。

工具详细参考

1. dns_resolve_multi

12 节点(阿里 / 腾讯 / 114 / 360 / Google / Cloudflare / Quad9 / OpenDNS / Level3 / Verisign / Comodo / Norton)并行解析,手工构建 DNS A 记录 UDP 查询包。

  • 输出:多地解析结果、IP 分布、共识度、C 段聚合、cdn_likely 判定、疑似源站 suspect_origin_ips
  • IP 分散 → CDN;同 /24 集中 → 负载均衡 / GeoDNS;海外 DNS 独有 IP → 疑似源站。

2. cname_trace

递归追踪 CNAME 链(Windows 用 nslookup -type=CNAME 中英文兼容,Linux 用 dns.resolver),与 cloud_ips.json 中 CDN CNAME 关键词模糊匹配。

  • 输出:cname_chaincdn_detectedcdn_matches

3. crtsh_query

GET https://crt.sh/?q=%.{domain}&output=json,从证书关联子域名提取 IPv4。

  • 输出:total_entriesrelated_domainsextracted_ips

4. ip_classify

策略:IP 段 CIDR 匹配(高置信)→ PTR 反查(中)→ 默认 unknown。

  • 输入:ips[],最多 200 个。
  • 输出:type(cloud / hosting / self_built / unknown)、confidencecloud_matchesptr_info

5. c_scan

raw socket + asyncio 非阻塞连接,2000 并发(同 iptest v3.0)。

  • 输入:ip(C 段内任意 IP)或 domain(二选一,自动解析取首个 IP);ports? 自定义;fast? 快速模式(仅 20 高频端口)。
  • 默认扫描 135 个常用 Web 端口(仅 Web 端口,不做全端口扫描)。
  • 输出:subnetscanned_ips(254)、scanned_portsopen_countopen_services[{ip,port}]elapsed_ms

6. c_scan_status

查询历史扫描任务状态(保留兼容旧版异步任务)。输入 task_id

7. web_probe

  • 主引擎:aiohttp(~60ms,远快于 httpx 的 ~23s Go 启动)。
  • 需要 tech_stack 时调用 bin/httpx.exe 备选引擎(需 HTTPX_BIN)。
  • 单请求超时 8s,最大并发 100。
  • 输出:total_targetsrespondedresults[{url,status_code,title,server,content_type,content_length,location}]

8. full_recon

7 步编排:DNS → CNAME → crt.sh(仅 CDN 命中时)→ IP 分类 → C 段扫描 → Web 探测 → Host 碰撞。

  • 开关:allow_clouds(云 IP 白名单,["all"] 放行全部)、custom_portsno_scanno_probeno_collision
  • 云 IP 默认跳过 C 段扫描;同类 /24 子网去重(每网段只扫一次)。
  • 输出:各步骤结果 + summary(cdn_detected / scan_targets / total_open_ports / host_collision_hits / status)。

9. host_collision

domains[] × ips[] × ports[](默认 [80,443])发送自定义 Host 头请求,对比 baseline 响应差异(状态码变化 / 长度偏差 >30% / 标题变化 / Server 头差异)。

  • 输入:domains[](≤100)、ips[](≤50)、timeout?(5)、auto_variants?(true,自动扩展 admin/api/www 等前缀,上限 30)。
  • 碰撞组合保护:最多 2000 个请求。
  • 输出:hits_counthits[{ip,port,protocol,domain,status_code,title,server,hit_reason}]

安全与合规

  • 输入校验:域名工具统一经 validate_domain 校验,拦截命令注入 / URL 注入;IP 经 validate_ip 校验;端口范围 1–65535。
  • 无 shell:所有外部调用(含 httpx)均以参数数组方式执行,不使用 shell,杜绝命令注入。
  • 限额保护ip_classify ≤200 IP、host_collision ≤100 域名 / ≤50 IP / ≤2000 请求组合,防止资源滥用。
  • 仅被动侦察:工具仅做 DNS 解析、端口连接探测、Web 请求与证书查询,不发起漏洞利用。
  • ⚠️ 授权使用:本工具仅用于你拥有合法授权的目标。未经授权对第三方资产进行扫描可能违反法律与服务条款。

依赖

  • Python >= 3.11
  • mcp >= 1.0.0
  • aiohttp >= 3.9.0
  • (可选)bin/httpx.exe — httpx 备选引擎,用于 tech-detect。

许可证

MIT © bae

推荐服务器

Baidu Map

Baidu Map

百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。

官方
精选
JavaScript
Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。

官方
精选
本地
TypeScript
VeyraX

VeyraX

一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。

官方
精选
本地
graphlit-mcp-server

graphlit-mcp-server

模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。

官方
精选
TypeScript
Kagi MCP Server

Kagi MCP Server

一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。

官方
精选
Python
e2b-mcp-server

e2b-mcp-server

使用 MCP 通过 e2b 运行代码。

官方
精选
Neon MCP Server

Neon MCP Server

用于与 Neon 管理 API 和数据库交互的 MCP 服务器

官方
精选
Exa MCP Server

Exa MCP Server

模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。

官方
精选