禁用 WebRTC

禁用 WebRTC 防止泄露真实ip,默认禁用 WebRTC,脚本菜单选项用于启用/禁用当前域名的 WebRTC

当前为 2025-02-19 提交的版本,查看 最新版本

// ==UserScript==
// @name         禁用 WebRTC
// @version      1.2
// @description  禁用 WebRTC 防止泄露真实ip,默认禁用 WebRTC,脚本菜单选项用于启用/禁用当前域名的 WebRTC
// @author       ChatGPT
// @match        *://*/*
// @grant        GM_setValue
// @grant        GM_getValue
// @grant        GM_registerMenuCommand
// @run-at       document-start
// @namespace https://greasyfork.org/users/452911
// ==/UserScript==

(function() {
    'use strict';

    // 获取启用站点列表,默认为空数组
    const enabledSites = GM_getValue('enabledSites', []);
    // 获取当前网站的域名
    const currentURL = window.location.hostname;

    // 设置菜单命令的标签,根据当前域名是否在启用站点列表中决定显示的内容
    const menuCommandLabel = enabledSites.includes(currentURL)
        ? '设置当前域名禁用WebRTC'
        : '设置当前域名启用WebRTC';

    // 注册菜单命令,点击后切换当前域名的启用/禁用状态
    GM_registerMenuCommand(menuCommandLabel, function() {
        if (enabledSites.includes(currentURL)) {
            // 如果当前域名在启用站点列表中,则将其移除
            GM_setValue('enabledSites', enabledSites.filter(site => site !== currentURL));
        } else {
            // 如果当前域名不在启用站点列表中,则将其加入
            GM_setValue('enabledSites', [...enabledSites, currentURL]);
        }
    });

    // 默认禁用 WebRTC 的函数
    function disableWebRTC() {
        // 获取浏览器的 RTCPeerConnection 对象
        const RTCPeerConnection = window.RTCPeerConnection || window.mozRTCPeerConnection || window.webkitRTCPeerConnection || window.msRTCPeerConnection;
        if (RTCPeerConnection) {
            // 替换 RTCPeerConnection 为一个抛出错误的函数,阻止其使用
            window.RTCPeerConnection = function() {
                throw new Error("RTCPeerConnection is disabled");
            };
            window.RTCPeerConnection.prototype = {};
        }
    }

    // 根据当前域名的状态启用或禁用 WebRTC
    if (!enabledSites.includes(currentURL)) {
        disableWebRTC();
    }
})();