Puppeteer를 TOR와 함께 익명으로 사용

6930 단어

인형극



Puppeteer는 Google에서 유지 관리하는 노드 라이브러리로, DevTools 프로토콜을 통해 헤드리스 및 헤드리스가 아닌 Chrome/Chromium을 제어하는 ​​고급 API를 제공합니다. 따라서 Puppeteer는 웹 UI 테스트, E2E 테스트, 웹 크롤링 및 양식 제출, 키보드 입력 또는 페이지 스크린샷과 같은 작업 자동화에 사용할 수 있는 프로그래머와 테스터를 위한 완벽한 도구입니다.

몇 줄의 코드로 Chrome 브라우저를 제어하고 사용자가 수동으로 수행해야 하는 거의 모든 작업을 수행할 수 있습니다. 그러나 큰 힘에는 큰 반대가 따르며 이 밈은 웹 크롤링에도 적용됩니다. 많은 대형 웹사이트 소유자(Amazon, GoDaddy)가 악의적인 크롤러에 대한 대책을 구현했습니다. 조심하지 않고 누군가가 몇 초 만에 전체 웹사이트를 통과한 것과 같은 의심스러운 것을 발견하면 IP가 그들의 도메인에 액세스하지 못하도록 금지될 수 있습니다.

익명을 유지하기 위해 Puppeteer를 사용하는 동안 VPN에 연결할 수 있지만 이 방법을 사용하려면 VPN 서비스 비용을 지불해야 합니다. 익명을 유지하는 다른 방법은 무료이며 TOR라는 익명 네트워크를 사용하는 것입니다.

토르



먼저 SOCKS 포트를 통해 TOR 회로를 설정합니다. TOR 회로는 엔트리/가드 릴레이의 조합이며 주기적으로 IP 주소를 변경하므로 데이터를 전송할 때 아무도 실제 IP 주소를 알 수 없습니다.

[1] Windows에 TOR를 설치하려면 먼저 Windows 소프트웨어용 명령줄 패키지 관리자인 Chocolatey가 필요합니다.

[1.1] PowerShell을 관리자로 열고 실행Get-ExecutionPolicy
[1.2] 이전 명령이 반환된 경우Restricted 실행Set-ExecutionPolicy AllSigned 또는 실행Set-ExecutionPolicy Bypass -Scope Process
[1.3] 마지막으로 다음을 통해 Chocolatey를 설치합니다.

Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))


[1.4] Chocolatey가 설치되어 있는지 확인할 수 있습니다: choco --version
[2] 이제 Chocolatey를 사용하여 torpackage를 설치할 수 있습니다.

choco install tor


[2.1] tor 패키지를 설치하면 Tor 회로를 설정할 SOCKS 포트를 지정할 수 있습니다. 파일C:\Users\__YOUR_USERNAME__\AppData\Roaming\tor\torrc을 열고(파일이 없으면 생성) 다음을 붙여넣습니다.

# Open these SOCKS ports, each will provide a new Tor circuit.
SocksPort 9050
SocksPort 9052
SocksPort 9053
SocksPort 9054


참고: 포트 9051은 ​​TOR 컨트롤러의 기본 포트이므로 SOCKS 포트로 사용하면 안 됩니다.

꼭두각시 데모 프로젝트



다음으로 Puppeteer 데모 프로젝트를 만들고 준비된 Tor 회로 중 하나를 사용하도록 구성합니다. 아이디어는 Puppeteer가 Chromium 브라우저를 열고 두 개의 웹사이트를 방문하여 실제로 완전히 익명으로 탐색하는지 확인하는 것입니다.

[1] 이 package.json을 기반으로 npm 프로젝트를 만듭니다.

{
  "name": "puppeteer-tor",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "puppeteer": "^15.3.2",
    "puppeteer-extra": "^3.3.4",
    "puppeteer-extra-plugin-stealth": "^2.11.0"
  }
}


2개의 추가 패키지puppeteer-extrapuppeteer-extra-plugin-stealth의 목적은 사용자 에이전트를 변경하고 사용 중인 시스템 및 브라우저에 대한 정보를 숨기는 것입니다.

[2] npm install를 통해 패키지를 설치합니다.

[3] 파일index.js을 만들고 다음을 붙여넣습니다.

const puppeteer = require('puppeteer');
const puppeteerExtraPluginStealth = require('puppeteer-extra-plugin-stealth');
const puppeteerExtraPluginUserAgentOverride = require('puppeteer-extra-plugin-stealth/evasions/user-agent-override');
const {PuppeteerExtra} = require('puppeteer-extra');

function preload(device) {
  Object.defineProperty(navigator, 'platform', {
    value: device.platform,
    writable: true,
  });
  Object.defineProperty(navigator, 'userAgent', {
    value: device.userAgent,
    writable: true,
  });
  Object.defineProperty(screen, 'height', {
    value: device.viewport.height,
    writable: true,
  });
  Object.defineProperty(screen, 'width', {
    value: device.viewport.width,
    writable: true,
  });
  Object.defineProperty(window, 'devicePixelRatio', {
    value: device.viewport.deviceScaleFactor,
    writable: true,
  });
}

const device = {
  userAgent: 'Mozilla/5.0 (Macintosh)', // set our fake user-agent
  viewport: {
    width: 1000,
    height: 800,
    deviceScaleFactor: 1,
    isMobile: false,
    hasTouch: false,
    isLandscape: true,
  },
  locale: 'en-US,en;q=0.9',
  platform: 'Macintosh',  // set our fake platform
};

(async () => {
  try {
    const pptr = new PuppeteerExtra(puppeteer);
    const pluginStealth = puppeteerExtraPluginStealth();
    pluginStealth.enabledEvasions.delete('user-agent-override'); // Remove this specific stealth plugin from the default set
    pptr.use(pluginStealth);

    const pluginUserAgentOverride = puppeteerExtraPluginUserAgentOverride({
      userAgent: device.userAgent,
      locale: device.locale,
      platform: device.platform,
    });
    pptr.use(pluginUserAgentOverride);

    const browser = await pptr.launch({
      args: [
        '--proxy-server=socks5://127.0.0.1:9050',   // Use one of your SOCKS ports
        '--disable-features=site-per-process',
        `--window-size=${device.viewport.width},${device.viewport.height}`,
      ],
      headless: false,
      defaultViewport: device.viewport,
    });
    const page = await browser.newPage();
    await page.evaluateOnNewDocument(preload, device);
    await page.goto('https://check.torproject.org');  // Check if we're using Tor

    await page.waitForTimeout(6000);        // Waits 6 seconds
    await page.goto('https://ipleak.net');  // Check IP address, user agent, etc.
  } catch (err) {
    console.error(err);
  }
})();


[4] TOR 패키지 실행 파일C:\ProgramData\chocolatey\lib\tor\tools\Tor\tor.exe을 시작하여 TOR 회로 설정



[5] 회로가 생성되면 이제 Puppeteer 코드node index.js를 시작할 수 있습니다.

첫 번째 웹 페이지 방문은 우리가 실제로 TOR를 사용하고 있음을 확인해야 합니다.



다음 웹페이지는 Tor 회로에서 제공한 가짜 URL과 Chromium용으로 구성한 기타 가짜 데이터를 표시해야 합니다.



Github 리포지토리



행복한 테스트!

좋은 웹페이지 즐겨찾기