您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Shows IP, country, state, city, district, local time, and ISP. Also removes omegle watermark from stranger's video.
// ==UserScript== // @name Omegle IP to location and Watermark Remove // @description Shows IP, country, state, city, district, local time, and ISP. Also removes omegle watermark from stranger's video. // @version 1.0 // @match https://omegle.com/* // @match https://www.omegle.com/* // @grant none // @run-at document-end // @namespace https://greasyfork.org/users/789058 // @license MIT // ==/UserScript== const apiService = "ipinfo" // must be "ipinfo" or "ipapi" const apiKey = "" // gets better results with ipinfo, and does nothing for ip-api var tested = []; if (localStorage.getItem('tests') !== null) { tested = JSON.parse(localStorage.getItem('tests')); } var session = 0; var lastQuery = Date.now(); window.oRTCPeerConnection = window.oRTCPeerConnection || window.RTCPeerConnection; window.RTCPeerConnection = function (...args) { const pc = new window.oRTCPeerConnection(...args); pc.oaddIceCandidate = pc.addIceCandidate; pc.addIceCandidate = function (iceCandidate, ...rest) { if (document.getElementById('videologo') instanceof Object) { document.getElementById('videologo').remove(); } const fields = iceCandidate.candidate.split(' '); const ip = fields[4]; if (fields[7] === 'srflx') { for (var i of tested) { if (i.query == ip) { makeTable(i); } } if (document.getElementsByTagName('table').length < 2 & lastQuery+1000 < Date.now()) { getLocation(ip); } } console.log(tested.length + ' - ' + ip); return pc.oaddIceCandidate(iceCandidate, ...rest); }; return pc; }; function getLocation(ip) { lastQuery = Date.now(); var endpoint = `https://ipinfo.io/${ip}/json?token=${apiKey}`; if (apiService == "ipapi") { endpoint = `http://ip-api.com/json/${ip}?fields=18561529`; } var xhr = new XMLHttpRequest(); xhr.onreadystatechange = function() { if (this.readyState == 4 && this.status == 200) { var response = JSON.parse(this.responseText); response.timezone = new Intl.DateTimeFormat([],{timeZone:response.timezone,year:'numeric',month:'numeric',day:'numeric',hour:'numeric',minute:'numeric',second:'numeric'}).format(new Date()); response.total = tested.length; tested.push(response); localStorage.setItem('tests',JSON.stringify(tested)); makeTable(response); } }; xhr.open('GET', endpoint, true); xhr.send(); } function makeTable(json) { session ++; json.session = session; var table = '<table border="2px">'; for (const thing in json) { table += `<tr><td>${thing.charAt(0).toUpperCase()+thing.substring(1)}</td><td>${json[thing]}</td></tr>`; } table += '</table>'; document.getElementsByClassName('statuslog')[0].innerHTML = table; }