禁用 WebRTC 防止泄露真实ip,默认禁用 WebRTC,脚本菜单选项用于启用/禁用当前域名的 WebRTC
当前为
// ==UserScript==
// @name 禁用 WebRTC
// @version 1.0
// @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() {
Object.defineProperty(window, 'RTCPeerConnection', {
value: function() { throw new Error('RTCPeerConnection is disabled'); }
});
Object.defineProperty(window, 'webkitRTCPeerConnection', {
value: function() { throw new Error('webkitRTCPeerConnection is disabled'); }
});
Object.defineProperty(window, 'mozRTCPeerConnection', {
value: function() { throw new Error('mozRTCPeerConnection is disabled'); }
});
Object.defineProperty(window, 'msRTCPeerConnection', {
value: function() { throw new Error('msRTCPeerConnection is disabled'); }
});
if (typeof navigator.mediaDevices !== 'undefined') {
Object.defineProperty(navigator.mediaDevices, 'getUserMedia', {
value: function() { throw new Error('getUserMedia is disabled'); }
});
}
}
// 根据当前域名的状态启用或禁用 WebRTC
if (!enabledSites.includes(currentURL)) {
disableWebRTC();
}
})();