NeCr00/Waybackdown
GitHub: NeCr00/Waybackdown
一款采用主机优先策略的多源历史网页快照批量下载工具,支持 Wayback、archive.ph、Common Crawl 等存档源,能高效获取指定 URL 的历史版本。
Stars: 0 | Forks: 0
# waybackdown
使用 **主机优先策略** 从多个公共存档下载历史网页快照,从而最大限度地减少 CDX 请求。
该工具不是每个 URL 查询一次存档,而是从输入列表中提取所有唯一主机名,**每个主机仅查询一次** 每个存档以检索其完整 URL 清单,然后将该清单与用户列表进行匹配 —— 当许多输入 URL 共享同一域名时,这能显著减少 API 调用。
## 安装
**从源码安装** (需要 Go 1.21+):
```
go install github.com/NeCr00/Waybackdown@latest
```
## 使用方法
```
waybackdown -u [-u ...] [options]
waybackdown -l [options]
cat urls.txt | waybackdown [options]
```
| 标志 | 默认值 | 描述 |
|------|---------|-------------|
| `-u` | | 要下载的 URL (可重复: `-u url1 -u url2`) |
| `-l` | | 每行一个 URL 的文件 |
| `-mode` | `newest` | `oldest` · `newest` · `all` |
| `-o` | `waybackdown_output` | 输出目录 |
| `-c` | `10` | 每个提供者并发处理的主机数 |
| `-max` | `0` (无限制) | `all` 模式下每个 URL 的最大快照数 |
| `-status` | `` (所有) | 根据捕获时的 HTTP 状态过滤 (例如 `200`) |
| `-providers` | `wayback,archiveph,commoncrawl,arquivo` | 提供者优先级顺序 |
| `-rps` | `5.0` | 下载 + 非 CC CDX 的请求/秒 (0 = 无限制) |
| `-burst` | `20` | 速率限制器突发大小 |
| `-cc-rps` | `5.0` | Common Crawl CDX 请求/秒 (独立于 `-rps`) |
| `-cc-burst` | `20` | CC CDX 速率限制器突发大小 |
| `-cc-max` | `3` | 每个主机查询的最大 Common Crawl 索引集合数 |
| `-host-limit` | `100000` | 每个主机清单查询的最大 CDX 记录数 (0 = 无限制) |
| `-dl-workers` | `4` | `all` 模式下每个 URL 的并行下载工作线程数 |
| `-timeout` | `30s` | 单次请求 HTTP 超时时间 |
| `-retries` | `3` | 临时失败的重试次数 |
| `-v` | | 详细输出 |
## 示例
```
# 单个 URL 的最新快照
waybackdown -u https://target.com
# URL 的所有历史版本,详细模式
waybackdown -u https://target.com -mode all -v
# 仅成功的 (200 OK) 捕获
waybackdown -u https://target.com/login.php -mode all -status 200
# 通过重复 -u 标志指定多个 URL (单个 host → 1 次 CDX 查询)
waybackdown -u https://target.com -u https://target.com/login -u https://target.com/admin -mode newest
# 批量列表:一次 host 级查询覆盖来自同一域名的所有 URL
waybackdown -l urls.txt -mode newest -o ./archives
# 来自其他工具的管道输入
cat urls.txt | waybackdown -mode all -status 200
# 仅 Wayback + Common Crawl
waybackdown -l urls.txt -providers wayback,commoncrawl -rps 10 -burst 40
```
## 工作原理
```
Input URLs → extract unique hosts → deduplicate
│
┌──────────▼──────────┐
│ Provider 1 (Wayback)│
│ query: host/* │ ← one CDX request per host
│ match user URLs │
│ download matches │
└──────────┬──────────┘
│ unresolved URLs only
┌──────────▼──────────┐
│ Provider 2 (archiveph) │
│ per-URL fallback │ ← no host query support
└──────────┬──────────┘
│ unresolved URLs only
┌──────────▼──────────┐
│ Provider 3 (CC) │ ← host/* across all collections
└──────────┬──────────┘
│ still not found
"not found in any archive"
```
**请求节省示例:** `example.com` 的 500 个 URL → 仅需 1 次 CDX 请求,而不是 500 次。
## 输出结构
```
waybackdown_output/
└── target.com/
└── path/to/page/
├── 20230101120000_200.html
└── 20210615093012_200.html
```
文件以原子方式写入。重新运行时会跳过已下载的快照(支持断点续传)。
## 提供者
| 提供者 | 来源 | 主机级查询 |
|----------|--------|-----------------|
| `wayback` | web.archive.org CDX API | ✓ (`url=host/*`) |
| `archiveph` | archive.ph Memento timemap | ✗ (按 URL 回退) |
| `commoncrawl` | index.commoncrawl.org CDX + WARC 字节范围 | ✓ (每个集合 `url=host/*`) |
| `arquivo` | arquivo.pt CDX API | ✓ (`url=host/*`) |
提供者按优先级顺序尝试。每个提供者仅接收未被先前提供者解析的 URL。对于不支持主机级查询的提供者,将使用单独的 URL 查询作为回退。
标签:API请求优化, Archive.today, CDX接口, CLI, ESC4, Go, Golang, OSINT, Ruby工具, Wayback Machine, WiFi技术, 主机优先策略, 历史快照, 反汇编, 安全编程, 归档数据提取, 批量下载, 数字取证, 日志审计, 网站备份, 网络归档, 自动化脚本