black5ugar/HostCollision

GitHub: black5ugar/HostCollision

一款基于 Go 的高性能虚拟主机碰撞与发现工具,通过自定义 Host 头对目标 IP 批量探测隐藏站点并智能过滤泛解析响应。

Stars: 6 | Forks: 0

# HostCollision [🇨🇳 点击此处查看中文版](#中文版说明) HostCollision 是一款高性能工具,它通过向同一个 IP 地址发送带有自定义 `Host` 头的 HTTP 请求来发现虚拟主机。 它通常用于渗透测试中,以检测反向代理、共享主机、CDN 环境、泛域名解析以及配置错误的 vhost 背后的网站。 此版本是基于原项目进行全面重构和模块化后的实现。 ## ✨ 功能特点 - 🚀 由 goroutine worker pool 提供支持的**高速扫描** - 🧠 **专用的基准探测**,用于过滤通用/泛解析/默认页面,且不占用真实的候选项 - 📝 **实时终端日志**,显示状态码、耗时和相似度 - 📄 **CSV 结果输出**,便于进行更好的数据分析 - ⚙️ **可配置的参数**(线程数、sleep、阈值、每个 IP 的最大命中数……) - 🛡️ **更安全的 HTTP 处理**,具有重定向拦截、取消支持以及 10 MiB 的响应限制 - 🎨 **美观的 CLI banner** ## 📦 安装 需要 Go 1.18 或更高版本。 ``` go build -o hostcollision ./cmd/hostcollision ``` 运行测试: ``` go test ./... ``` ## 🧪 使用示例 ``` ./hostcollision \ -i ip.txt \ -d host.txt \ -o output.csv \ -n 20 \ -s 0 \ -m 10 \ -r 85 ``` ## 🗂 命令行选项 | 选项 | 描述 | | ------ | ------------------------------------------- | | `-i` | IP 列表文件路径(必选) | | `-d` | Host 字典文件路径(必选) | | `-o` | 输出 CSV 文件路径(必选) | | `-n` | goroutine 数量(默认 20) | | `-s` | 请求之间的 sleep(毫秒,默认 1000) | | `-m` | 每个 IP 最多保留的 Host 数(默认 50) | | `-r` | 相似度阈值(0–100,默认 85) | ## 📤 输出 output.csv 将包含: ``` ip,host,status,length,similar 127.0.0.1,www.example.com,200,7648,32 ``` `ip` – 目标 IP 地址 `host` – 测试的 Host 头 `status` – HTTP 状态码 `length` – 响应体长度(字节) `similar` – 与该 IP 基准响应的相似度得分(0–100) 仅保留状态码在 200 到 399 之间且相似度低于配置阈值的响应。在扫描字典之前,HostCollision 会向每个 IP 发送 `Host: hostcollision-baseline.invalid`,并使用该响应作为默认页面的基准。基准探测在配置的并发限制下运行。 为了安全起见,不会跟随重定向,大于 10 MiB 的响应体会被拒绝,并且 `Ctrl+C` 可以取消未完成的请求。如果基准探测失败,该 IP 的候选项仍会被扫描,其相似度得分为 `0`。 ## 🧪 最小本地测试设置 这是一种在您的机器上验证该工具端到端工作情况的简单方法。 1. **创建 `ip.txt`** 127.0.0.1 2. **创建** `host.txt` www.aaa.com www.bbb.com www.ccc.com 3. **运行一个简单的 HTTP 服务器**(示例) 该代码库在 `testserver/` 中包含一个示例服务器。它监听 80 端口,可能需要提升权限: go run ./testserver 您也可以使用任何根据 `Host` 头返回不同内容的 HTTP 服务器。目标条目可以包含端口,例如 `127.0.0.1:8080`。 4. **开始扫描** ./hostcollision -i ip.txt -d host.txt -o output.csv -n 3 -s 0 -m 10 -r 85 ​ 您将在终端中看到实时日志,并在 `output.csv` 中看到结构化的结果。 ## 📚 项目结构 ``` cmd/hostcollision # Main entry point (CLI) internal/app # Application orchestration (read -> scan -> write) internal/config # CLI configuration parsing and validation internal/scanner # Core scanning logic (workers, HTTP, thresholds) internal/similarity # Similarity engine for response body comparison internal/iohelper # File reading/writing utilities internal/banner # CLI banner (version, author, GitHub) ``` ## ⚠️ 法律与道德免责声明 此工具**仅供授权的安全测试和研究**使用。 **请勿**在未经明确许可的情况下对目标使用此工具。 您需自行负责遵守所有适用的法律和法规。 # 中文版说明 [🇬🇧 English version click here](#HostCollision) HostCollision 是一个通过自定义 `Host` 头,对目标 IP 进行批量请求,从而发现隐藏虚拟主机的高性能扫描工具。 常见使用场景包括: - 反向代理 / 共享主机环境中的站点枚举 - CDN 场景下真实站点的探测 - 泛解析 / 默认站点识别 - Vhost 配置错误排查 当前版本对原项目进行了重构,结构更加清晰、模块化,便于维护和扩展。 ## ✨ 功能特点 - 🚀 **高并发扫描**:基于 goroutine 的 worker pool - 🧠 **响应相似度检测**:过滤统一错误页 / 默认页 / 泛解析内容 - 🎯 **独立基准探测**:使用专门的无效 Host 获取基准,不占用真实字典候选 - 📡 **终端实时日志**:显示 IP、Host、状态码、耗时、相似度、过滤原因 - 📄 **CSV 结果输出**:带表头,方便后续用 Excel / 脚本分析 - ⚙️ **可配置参数**:线程数、请求间隔、相似度阈值、每 IP 最大命中数等 - 🛡️ **安全的 HTTP 处理**:禁止跨目标重定向、支持取消,并限制响应体大小 ## 📦 安装方式 需要 Go 1.18 或更高版本。 ``` go build -o hostcollision ./cmd/hostcollision ``` 运行测试: ``` go test ./... ``` ## 🧪 使用示例 ``` ./hostcollision \ -i ip.txt \ -d host.txt \ -o output.csv \ -n 20 \ -s 1000 \ -m 50 \ -r 85 ``` ## 🗂 参数说明 | 参数 | 说明 | | ---- | ------------------------------------------------------------ | | `-i` | IP 列表文件路径(必选) | | `-d` | Host 字典文件路径(必选) | | `-o` | 输出 CSV 文件路径(必选) | | `-n` | 并发 goroutine 数量(默认 `20`) | | `-s` | 每次请求间的 sleep(毫秒,默认 `1000`) | | `-m` | 单个 IP 最多保留的 Host 数(默认 `50`) | | `-r` | 相似度阈值(0–100,默认 `85`,大于等于该值认为“过于相似”而被过滤) | ## 📤 输出说明 结果文件为 CSV 格式,包含表头: ``` ip,host,status,length,similar 127.0.0.1,www.example.com,200,7648,32 ``` 字段含义: - `ip` – 被扫描的 IP - `host` – 请求使用的 Host 头 - `status` – HTTP 状态码 - `length` – 响应 Body 长度(字节) - `similar` – 与该 IP 基准响应的相似度(0–100) 程序仅保留状态码为 200–399 且相似度低于指定阈值的响应。扫描字典前,HostCollision 会向每个 IP 发送一次 `Host: hostcollision-baseline.invalid` 请求,以其响应作为默认页面基准;基准请求同样受并发数限制。 为避免请求离开扫描范围,程序不会跟随重定向;超过 10 MiB 的响应体会被拒绝,按 `Ctrl+C` 可取消尚未完成的请求。如果某个 IP 的基准请求失败,该 IP 仍会继续扫描,候选响应的相似度记为 `0`。 ## 🧪 最小本地测试环境 1. **准备 `ip.txt`** ``` 127.0.0.1 ``` 2. **准备 `host.txt`** ``` www.aaa.com www.bbb.com www.ccc.com ``` 3. **启动本地 HTTP 服务**(参见 `testserver/`) 示例服务监听 80 端口,可能需要额外权限: ``` go run ./testserver ``` 也可以使用其他根据 `Host` 头返回不同页面的 HTTP 服务。IP 列表支持携带端口,例如 `127.0.0.1:8080`。 4. **执行扫描** ``` ./hostcollision -i ip.txt -d host.txt -o output.csv -n 3 -s 0 -m 10 -r 85 ``` 终端可以看到实时日志,结果会以 CSV 形式写入 `output.csv`。 ## 📚 项目结构 ``` cmd/hostcollision # 程序入口(main) internal/app # 扫描流程编排:读入 -> 扫描 -> 写结果 internal/config # 命令行参数解析与配置校验 internal/scanner # 核心扫描逻辑(并发、HTTP、阈值控制) internal/similarity # 相似度计算模块 internal/iohelper # 文件读写工具 internal/banner # 终端 Banner 展示 ``` ## ⚠️ 法律与合规声明 本工具仅供 **授权的安全测试与研究使用**。 请勿在未获得明确授权的前提下,对任何目标使用本工具。 使用本工具产生的一切后果由使用者自行承担。
标签:Go, Host碰撞, Ruby工具, Snort, 主机安全, 文档结构分析, 日志审计, 虚拟主机发现