如何使用 puppeteer 禁用 webRTC 本地 IP 泄漏?

How can I disable webRTC local IP leak with puppeteer?

我试过了:

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: Cannot read property 'page' of undefined

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

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

注:

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

解决方案:WebRTC Leak Prevent

将 git 存储库克隆到某个本地文件夹(即: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 中快速隐藏 Public 和私有 IP,请将此 (extensions/webrtc/background.js) 行修改为 disable_non_proxied_udp,