您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Check if websites are online
当前为
// ==UserScript== // @name Whoxy Domain Status Indicator (OSINT) // @namespace http://tampermonkey.net/ // @version 1.2 // @description Check if websites are online // @author SH3LL // @match https://www.whoxy.com/* // @grant GM_xmlhttpRequest // @connect * // ==/UserScript== (async function() { 'use strict'; // Find the target table const table = document.querySelector('table.grid.first_col_center'); if (!table) return; // Common keywords/phrases indicating a default hoster page const defaultHosterKeywords = [ 'this domain is for sale', 'domain registered', 'coming soon', 'welcome to your new website', 'this domain has been registered', 'default page', 'placeholder page', 'parked domain', 'under construction', 'domain parking', 'domain reserved' ]; // Known hosting provider domains (for redirect detection) const knownProviders = [ 'godaddy.com', 'namecheap.com', 'bluehost.com', 'hostgator.com', 'dreamhost.com', 'squarespace.com', 'wix.com', 'siteground.com', 'ionos.com', 'dynadot.com' ]; // Function to check if a page is a default hoster page, empty, or redirected to a provider async function checkDomainStatus(url) { try { // Ensure URL starts with http:// or https:// if (!url.startsWith('http://') && !url.startsWith('https://')) { url = 'http://' + url; } return new Promise((resolve) => { GM_xmlhttpRequest({ method: 'GET', url: url, timeout: 5000, onload: function(response) { if (response.status >= 200 && response.status < 300) { const finalUrl = response.finalUrl || url; const content = response.responseText.toLowerCase(); // Check for redirects to known providers const isProviderRedirect = knownProviders.some(provider => finalUrl.includes(provider)); if (isProviderRedirect) { resolve(false); return; } // Check for empty or minimal body content const parser = new DOMParser(); const doc = parser.parseFromString(response.responseText, 'text/html'); const bodyContent = doc.body ? doc.body.textContent.trim() : ''; const isEmptyBody = !bodyContent || bodyContent.length < 50; if (isEmptyBody) { resolve(false); return; } // Check for default hoster keywords const isDefaultPage = defaultHosterKeywords.some(keyword => content.includes(keyword)); resolve(!isDefaultPage); } else { resolve(false); } }, onerror: function() { resolve(false); }, ontimeout: function() { resolve(false); } }); }); } catch (error) { console.error(`Error checking ${url}:`, error); return false; } } // Process each row in the table const rows = table.querySelectorAll('tbody tr'); for (const row of rows) { const domainCell = row.querySelector('td:nth-child(2) a'); if (domainCell) { const domain = domainCell.textContent.trim(); const statusLink = document.createElement('a'); statusLink.style.marginLeft = '5px'; statusLink.textContent = '🔄'; // Loading indicator statusLink.href = `http://${domain}`; statusLink.target = '_blank'; // Open in new tab domainCell.parentElement.appendChild(statusLink); const isActive = await checkDomainStatus(domain); statusLink.textContent = isActive ? '🟢' : '🔴'; } } })();