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

时间:2018-10-26 23:41:14

标签: node.js puppeteer google-chrome-headless

我尝试过:

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}的解决方案。

1 个答案:

答案 0 :(得分:1)

以下步骤可以防止伪造者version 1.9.0上的webrtc IP泄漏。

注意:

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

解决方案:WebRTC Leak Prevent

将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();

结果:

enter image description here

高级资料

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