From d962e1a14e75f2ae48e47f3480d2a19425b333c8 Mon Sep 17 00:00:00 2001 From: ngosang Date: Sun, 17 Apr 2022 09:21:10 +0200 Subject: [PATCH] Detect DDoS-Guard challenge --- README.md | 4 ++-- src/providers/cloudflare.ts | 3 ++- src/tests/app.test.ts | 6 +++--- 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 77b6e71..0a3be23 100644 --- a/README.md +++ b/README.md @@ -8,11 +8,11 @@ [![Donate Bitcoin](https://en.cryptobadges.io/badge/micro/13Hcv77AdnFWEUZ9qUpoPBttQsUT7q9TTh)](https://en.cryptobadges.io/donate/13Hcv77AdnFWEUZ9qUpoPBttQsUT7q9TTh) [![Donate Ethereum](https://en.cryptobadges.io/badge/micro/0x0D1549BbB00926BF3D92c1A8A58695e982f1BE2E)](https://en.cryptobadges.io/donate/0x0D1549BbB00926BF3D92c1A8A58695e982f1BE2E) -FlareSolverr is a proxy server to bypass Cloudflare protection. +FlareSolverr is a proxy server to bypass Cloudflare and DDoS-GUARD protection. ## How it works -FlareSolverr starts a proxy server and it waits for user requests in an idle state using few resources. +FlareSolverr starts a proxy server, and it waits for user requests in an idle state using few resources. When some request arrives, it uses [puppeteer](https://github.com/puppeteer/puppeteer) with the [stealth plugin](https://github.com/berstend/puppeteer-extra/tree/master/packages/puppeteer-extra-plugin-stealth) to create a headless browser (Firefox). It opens the URL with user parameters and waits until the Cloudflare challenge diff --git a/src/providers/cloudflare.ts b/src/providers/cloudflare.ts index d17d0b7..ed42a06 100644 --- a/src/providers/cloudflare.ts +++ b/src/providers/cloudflare.ts @@ -21,7 +21,8 @@ const CAPTCHA_SELECTORS: string[] = [ export default async function resolveChallenge(url: string, page: Page, response: HTTPResponse): Promise { // look for challenge and return fast if not detected - let cfDetected = response.headers().server && response.headers().server.startsWith('cloudflare'); + let cfDetected = response.headers().server && + (response.headers().server.startsWith('cloudflare') || response.headers().server.startsWith('ddos-guard')); if (cfDetected) { if (response.status() == 403 || response.status() == 503) { cfDetected = true; // Defected CloudFlare and DDoS-GUARD diff --git a/src/tests/app.test.ts b/src/tests/app.test.ts index d167dbe..91874f7 100644 --- a/src/tests/app.test.ts +++ b/src/tests/app.test.ts @@ -15,7 +15,7 @@ const postUrl = "https://ptsv2.com/t/qv4j3-1634496523"; const cfUrl = "https://pirateiro.com/torrents/?search=harry"; const cfCaptchaUrl = "https://idope.se" const cfBlockedUrl = "https://www.torrentmafya.org/table.php" -const ddgUrl = "https://www.erai-raws.info/feed/?type=magnet"; +const ddgUrl = "https://anidex.info/"; const ccfUrl = "https://www.muziekfabriek.org"; beforeAll(async () => { @@ -189,12 +189,12 @@ describe("Test '/v1' path", () => { expect(solution.url).toContain(ddgUrl) expect(solution.status).toBe(200); expect(Object.keys(solution.headers).length).toBeGreaterThan(0) - expect(solution.response).toContain("") expect(Object.keys(solution.cookies).length).toBeGreaterThan(0) expect(solution.userAgent).toContain("Firefox/") const cfCookie: string = (solution.cookies as any[]).filter(function(cookie) { - return cookie.name == "__ddg1"; + return cookie.name == "__ddg1_"; })[0].value expect(cfCookie.length).toBeGreaterThan(10) });