Crawlora-org/crawlora-antibot
GitHub: Crawlora-org/crawlora-antibot
一个零依赖的 Go CLI 和库,通过单次被动请求检测网站使用的 anti-bot/WAF 防护类型、CAPTCHA 种类、拦截原因及抓取难度评估。
Stars: 0 | Forks: 0
# crawlora-antibot
**通过一次被动请求,检测网站受哪种 anti-bot / WAF 保护——以及抓取难度有多大。**
`crawlora-antibot` 是一个小巧、零依赖的 CLI(以及 Go 库),可对 URL 进行指纹识别,并告诉你:
- 该网站由**哪家防护厂商**提供前端保护(Cloudflare、Akamai、DataDome、PerimeterX/HUMAN、Imperva、Kasada、AWS WAF 等),
- 如果存在 **CAPTCHA 类型**是什么(reCAPTCHA v2/v3/Enterprise、Turnstile、hCaptcha、FunCaptcha、GeeTest 等),
- **请求为何被拦截**(bot challenge 还是 403、CAPTCHA、402 pay-per-crawl、限流、地域限制或登录墙),以及
- **难度评估**——大致需要什么工具(纯 HTTP → 匹配 TLS → headless browser → stealth + residential → 专用封闭 VM)。
它是一个**检测工具,而非绕过工具。** 它只执行一次被动的 `GET` 请求,读取响应并进行分类。它绝不会登录、提交表单、解答 challenge,也不会尝试攻破任何防护。
本工具为公开的 [**Anti-Bot Adoption Index**](https://crawlora.net/anti-bot-index) 提供支持,并作为其开源配套项目。
## 链接
- **交互式索引** — — 查询任意网站;按厂商、类别和流量排名进行浏览。
- **分析报告** — ["网络中有多少在运行 anti-bot?"](https://crawlora.net/blog/anti-bot-adoption-index-2026) — 本工具背后的详细说明(扫描了 998,497 个网站;53.5% 运行着托管防护墙;最繁忙的网站运行得*最少*)。
- **开放数据集** — [Crawlora-org/anti-bot-adoption-index-data](https://github.com/Crawlora-org/anti-bot-adoption-index-data) — 每个域名的独立结果(CC BY 4.0,约 100 万行)。
- **方法论** — 。
## 安装
```
# 从源码构建 (Go 1.23+)
go install github.com/Crawlora-org/crawlora-antibot@latest
# 或 clone + build
git clone https://github.com/Crawlora-org/crawlora-antibot
cd crawlora-antibot && go build -o crawlora-antibot .
```
预编译二进制文件(Linux/macOS/Windows)通过 [GitHub Releases](https://github.com/Crawlora-org/crawlora-antibot/releases) 发布。(Homebrew formula 即将推出。)
## 用法
```
crawlora-antibot [flags] [url...]
```
```
$ crawlora-antibot www.cloudflare.com
https://www.cloudflare.com
status 200
protection Cloudflare
- Cloudflare (waf, high) [header:cf-ray, server~cloudflare, cookie:__cf_bm]
block reason ok
difficulty medium (3/10, T2) — heuristic
approach A managed WAF/CDN is present but answered passively. A matched browser-like
TLS fingerprint usually gets through; a plain client may be blocked.
(run with --difficulty for the live measured tier)
```
`--json` 会输出 **NDJSON**(每行一个紧凑的对象)——可直接通过管道传递给 `jq -c` 或数据 pipeline。
**批处理 / pipeline。** 将多个 URL 作为参数传入,或通过 stdin 管道传入列表(每行一个 URL;忽略空行和以 `#` 开头的注释)。URL 将并行探测(`--concurrency`,默认值为 8):
```
cat domains.txt | crawlora-antibot -json --concurrency 16 > results.ndjson
printf 'cloudflare.com\nreuters.com\n' | crawlora-antibot
```
### 实测难度(可选,托管模式)
本地结果是基于单次被动请求的**启发式判断**,因此它会刻意*高估*难度(存在某个厂商 ≠ 它正在主动拦截你)。若要获取**实测**级别——了解实际能通过什么——请添加 `--difficulty`:
```
export CRAWLORA_API_KEY=... # get one at https://crawlora.net
crawlora-antibot --difficulty example.com
# 难度 中等 (3/10, T2) — heuristic ← 本地推测
# ── 实测 (Crawlora API) ──
# 难度 简单 (1/10) scrapeable=true ← 实时测量
# 推荐 direct
```
`--deep` 会运行详尽的扫描,而不是在找到第一个可用的传输方式时就停止。
### Flags
| Flag | 默认值 | 描述 |
|------|---------|-------------|
| `--json` | `false` | 输出 JSON(NDJSON —— 每行一个对象)。 |
| `--difficulty` | `false` | 同时从 Crawlora API 获取实时的**实测**难度(需要密钥)。 |
| `--deep` | `false` | 详尽的实测扫描(包含 `--difficulty`)。 |
| `--api-key` | `$CRAWLORA_API_KEY` | Crawlora API 密钥。 |
| `--api-base` | `$CRAWLORA_API_BASE` 或 `https://api.crawlora.net/api/v1` | API 基础 URL。 |
| `--timeout` | `15s` | 本地探测的每次请求超时时间。 |
| `--user-agent` | Chrome UA | 本地探测使用的 User-Agent。 |
| `--concurrency` | `8` | 并行探测的 URL 数量(批处理模式)。 |
| `--version` | | 打印版本号并退出。 |
## 检测原理
使用真实的 Chrome User-Agent 执行一次 `GET` 请求(跟随重定向,15 秒超时,body 限制在 80 KB)。响应内容将与一个包含**公开且已收录文档的指纹**数据库进行匹配——这与 [`wafw00f`](https://github.com/EnableSecurity/wafw00f) 和 [`microlinkhq/is-antibot`](https://github.com/microlinkhq/is-antibot) 等开源工具使用的特征类似:
- **Header 名称** — `cf-ray` (Cloudflare)、`x-datadome` (DataDome)、`x-iinfo` (Imperva)、`x-amzn-waf-action` (AWS WAF)、`x-kpsdk-ct` (Kasada)、`akamai-grn` (Akamai edge)。
- **Set-Cookie 名称前缀** — `__cf_bm`/`cf_clearance` (Cloudflare)、`_abck`/`bm_sz` (Akamai Bot Manager)、`datadome`、`_px*` (PerimeterX)、`incap_ses_` (Imperva)。
- **Body / 脚本标记** — 仅在出现*具有 challenge 特征的*响应时才予以采信,因此在普通页面文本中出现厂商名称不会引发误报。
它会刻意区分 **Akamai Bot Manager**(`_abck`/`bm_*`)和普通的 **Akamai edge/CDN**(`akamai-grn`、`Server: AkamaiGHost`),并且**不会**将 F5 的 `BIGipServer*` 负载均衡 cookie 视为 bot 防御。
检测是**被动且可复现的**,因此它是一个*下限*:主页比你实际抓取的深层页面更加开放,且数据中心 IP 会比 residential IP 遇到更多的 challenge。请使用 `--difficulty` 来获取特定 URL 的真实测量结果。
## 作为库使用
```
import "github.com/Crawlora-org/crawlora-antibot/detect"
res := detect.Inspect(ctx, "https://www.example.com", detect.ProbeOptions{})
fmt.Println(res.PrimaryVendor, res.DifficultyBand, res.BlockReason)
```
## 范围与道德准则
本工具用于**检测**公开页面的防护机制,旨在帮助你规划授权的抓取行为——它不会绕过任何防护。请尊重各站点的服务条款(Terms of Service)和 `robots.txt`,仅收集你有权访问的数据,且切勿将其用于登录墙后的页面。
## 许可证
[MIT](LICENSE)。由 [Crawlora](https://crawlora.net) 构建。
请参阅公开的 [Anti-Bot Adoption Index](https://crawlora.net/anti-bot-index) 和[方法论](https://crawlora.net/anti-bot-index/methodology)。
标签:AppImage, C2日志可视化, EVTX分析, Go, Ruby工具, Web应用防火墙, 代码示例, 实时处理, 密码管理, 指纹识别, 数据分析, 文档结构分析, 日志审计