microlinkhq/is-antibot

GitHub: microlinkhq/is-antibot

这是一个基于静态HTTP响应分析的Node.js库,用于识别请求是否被Cloudflare、Akamai等30余家反爬虫系统或验证码服务拦截。

Stars: 21 | Forks: 4

is-antibot

is-antibot detects antibot and CAPTCHA challenges from 30+ providers using signals.

## 为什么? [microlink.io](https://microlink.io) 每月处理超过 7 亿次请求。 当您构建需要以 URL 作为输入来获取数据的基础设施时,您会不断与旨在阻止您的防御机制进行交互。

一个请求可能会遇到

随后是一个挑战页面、验证码或 JavaScript 谜题。

现代的反机器人系统在多个层面运作,通常在您的请求到达应用程序代码之前就已介入。 我们的库 **is-antibot** 做了一件根本性的事情:它告诉您何时发生了非成功的解析以及是谁触发了它,以便您可以对接下来的操作做出更好的决策。
blocked providers recaptcha akamai cloudflare-turnstile aws-waf akamai hcaptcha
常见的信号包括: - **IP 信誉**:数据中心 IP 默认会被标记。住宅流量的行为则不同。 - **HTTP 一致性**:Headers 必须与真实浏览器配置文件匹配——不仅仅是 User-Agent,而是完整的集合。 - **TLS 指纹 (JA3)**:客户端协商 TLS 的方式会泄露它是浏览器还是脚本。 - **行为启发式分析**:时序、导航顺序和交互模式都很重要。 - **JavaScript 指纹识别**:Canvas、WebGL、字体、屏幕尺寸——微小的不一致就足以暴露问题。 基于这些信号,请求可能会被: - **允许 (Allowed)**:如果启发式分析表明是合法的人类访问者,请求将被传递到目标网站。 - **阻止 (Blocked)**:如果请求高度可疑(例如,来自已知恶意 IP 或 TLS 指纹损坏),则会立即被阻止,并返回 403 Forbidden 或 429 Too Many Requests 错误。 - **挑战 (Challenged)**:如果系统不确定,它会提供一个“挑战”(例如 CAPTCHA 或基于 JavaScript 的插页广告),必须在释放实际内容之前解决该挑战。 ## 快速开始 第一步是将其作为依赖项进行安装: ``` npm install is-antibot ``` **is-antibot** 的设计宗旨是占用极小。它通过静态 HTTP 响应分析工作。 无需无头浏览器。只需将响应信息传递给它: ``` import isAntibot from 'is-antibot' const response = await fetch('https://example.com') const { detected, provider, detection } = isAntibot({ headers: response.headers, statusCode: response.status, html: await response.text(), url: response.url }) if (detected) { console.log(`Blocked by ${provider} (via ${detection})`) // => "Blocked by CloudFlare (via headers)" } ``` 结果是确定性的且速度很快——旨在每次请求都能运行,而不会成为瓶颈。 它适用于任何 HTTP 客户端,包括 [got](https://github.com/sindresorhus/got)、[axios](https://github.com/axios/axios)、[undici](https://github.com/nodejs/undici) 或仅使用原生的 [fetch](https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API)。 ## 工作原理 从高层次来看,**is-antibot** 使用以下方式对挑战响应进行分类: - **HTTP 状态模式**:某些平台在阻止自动化时会使用不常见的状态码;例如,LinkedIn 在挑战流程中可能返回 `999`,而 Reddit 可能返回 `403`。 - **已知的挑战签名**:挑战页面通常包含可识别的产物,如 CAPTCHA 小部件、插页模板或验证脚本。 - **响应 headers 和 body 标记**:阻止响应通常会在 headers 和 HTML 中暴露线索,例如缓解 headers、挑战令牌或特定于提供商的脚本引用。 - **特定于提供商的指纹**:每个提供商都会留下独特的信号组合;例如,Cloudflare 通常会显示 `cf-mitigated: challenge`,而其他提供商则更多依赖 cookie、URL 或 HTML 指纹。 每个提供商在这些信号中的一个或多个上都有独特的指纹。该库按优先级顺序检查它们,并返回第一个匹配项。 ## 提供商 **is-antibot** 目前可以检测反机器人系统、CAPTCHA 供应商和平台特定保护流程中的挑战。
<>2
提供商 类别 信号 检测方法
AkamaiAntibot3HeadersCookiesHTML
AliExpress CAPTCHACAPTCHA2HTMLURL
AnubisAntibot1HTML
AWS WAFAntibot3HeadersCookiesHTML
Captcha.euCAPTCHA2HTMLURL
CheqAntibot2HTMLURL
CloudflareAntibot2HeadersCookies
Cloudflare TurnstileCAPTCHA2HTMLURL
DataDomeAntibot2HeadersCookies
Friendly CaptchaCAPTCHA2HTMLURL
FunCaptcha (Arkose Labs)CAPTCHA2HTMLURL
GeeTestCAPTCHA2HTMLURL
hCaptchaCAPTCHA2HTMLURL
Imperva / IncapsulaAntibot3HeadersCookiesHTML
InstagramPlatform-specific1HTML
KasadaAntibotHeadersHTML
LinkedInPlatform-specific1Status Code
MeetricsAntibot2HTMLURL
OculeAntibot2HTMLURL
PerimeterXAntibot3HeadersCookiesHTML
QCloud CaptchaCAPTCHA2HTMLURL
reCAPTCHACAPTCHA2HTMLURL
ReblazeAntibot2CookiesHTML
RedditPlatform-specific2HTMLStatus Code
Shape SecurityAntibot2HeadersHTML
SucuriAntibot1HTML
ThreatMetrixAntibot2HTMLURL
VercelAntibot1Headers
YouTubePlatform-specific1HTML
当在您的爬虫管道中构建重试逻辑、升级规则或特定于提供商的分析时,可以将此表作为快速覆盖范围参考。 如果您缺少某个提供商或信号检测,请[向我们报告](https://github.com/microlinkhq/is-antibot/issues/new?title=Request%20a%20provider),我们将持续改进该库。
标签:403 Forbidden, 429 Too Many Requests, Akamai检测, Cloudflare检测, DataDome检测, hCaptcha, HTTP状态码, Imperva检测, JavaScript库, Kasada检测, MITM代理, Node.js库, PerimeterX检测, reCAPTCHA, TCP/UDP/TLS指纹, Turnstile, WAF, Web安全, 代理检测, 反机器人, 反爬虫, 命令控制, 挑战检测, 数据可视化, 数据采集, 浏览器自动化, 爬虫工具, 网络安全, 自动化绕过, 蓝队分析, 请求分析, 防御探测, 隐私保护, 验证码识别