禁用 WebRTC 防止泄露真实ip,默认禁用 WebRTC,脚本菜单选项用于启用/禁用当前域名的 WebRTC
目前為
// ==UserScript==
// @name 禁用 WebRTC
// @version 1.1
// @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() {
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 = {};
}
const getUserMedia = navigator.mediaDevices && navigator.mediaDevices.getUserMedia;
if (getUserMedia) {
// 替换 getUserMedia 为一个返回拒绝的 Promise
navigator.mediaDevices.getUserMedia = function() {
return Promise.reject(new Error("getUserMedia is disabled"));
};
}
}
// 根据当前域名的状态启用或禁用 WebRTC
if (!enabledSites.includes(currentURL)) {
disableWebRTC();
}
})();