首页 > 解决方案 > 如何使用 puppeteer 禁用 webRTC 本地 IP 泄漏?

问题描述

我试过:

const browser = await puppeteer.launch({args: ['--enable-webrtc-stun-origin=false', '--enforce-webrtc-ip-permission-check=false']});

但这不起作用。接下来我尝试了:

const targets = await browser.targets();
const backgroundPageTarget = targets.find(target => target.type() === 'background_page');
const backgroundPage = await backgroundPageTarget.page();
await backgroundPage.evaluateevaluateOnNewDocument(() => {
  chrome.privacy.network.webRTCIPHandlingPolicy.set({
    value: "default_public_interface_only"
  });
});

但得到:

TypeError:无法读取未定义的属性“页面”

编辑:需要 {headless: true} 的解决方案。

标签: node.jspuppeteergoogle-chrome-headless

解决方案


以下是防止 puppeteer 上的 webrtc IP 泄漏的步骤version 1.9.0

笔记:

  • 背景页面可用于 chrome 扩展。您可能不会在无头浏览器上找到背景页面。
  • Chrome headless 不支持扩展。我们必须使用headless: false.

解决方案:WebRTC 防泄漏

将 git repo 克隆到某个本地文件夹(即:)extensions/webrtc

git clone https://github.com/aghorler/WebRTC-Leak-Prevent extensions/webrtc

在您的代码中使用它,

const puppeteer = require('puppeteer');

async function helloWorld() {
  // load the extension
  const extensionPath = 'extensions/webrtc';
  const browser = await puppeteer.launch({
    // must be non-headless
    headless: false,
    args: [
      `--disable-extensions-except=${extensionPath}`,
      `--load-extension=${extensionPath}`,
    ],
  });

  const page = await browser.newPage();

  // test it with browserleaks.com
  await page.goto('https://browserleaks.com/webrtc');

  // psss: just me hiding my details
  await page.evaluate(() => $('#rtc-ipv4 a').css('-webkit-filter', 'blur(5px)'));

  // taking evidence
  await page.screenshot({ path: 'screenshots/browserleaks.png' });

  await browser.close();
}

helloWorld();

结果:

在此处输入图像描述

进阶的东西

如果您想从 webRTC 中快速隐藏公共 IP 和私有 IP,请将此 ( extensions/webrtc/background.js) 行修改为disable_non_proxied_udp,


推荐阅读