您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Extract and copy IP addresses from Shodan search results
// ==UserScript== // @name Shodan IP Extractor // @namespace https://github.com/dan098/shodanpuller // @version 1.0 // @description Extract and copy IP addresses from Shodan search results // @author Dan098 // @match https://www.shodan.io/search* // @grant GM_setClipboard // @license MIT // ==/UserScript== (function() { 'use strict'; function extractIPsFromHostLinks() { const hostLinks = document.querySelectorAll('a[href^="/host/"]'); const ips = Array.from(hostLinks).map(link => link.getAttribute('href').split('/').pop()); return [...new Set(ips)].join('\n'); } function copyIPs() { const ips = extractIPsFromHostLinks(); if (ips) { GM_setClipboard(ips); alert('IP addresses extracted from host links copied to clipboard:\n\n' + ips); } else { alert('No IP addresses found in host links.'); } } function goToNextPage() { const nextButton = document.querySelector('.pagination a.button:last-child'); if (nextButton && nextButton.textContent.trim() === 'Next') { nextButton.click(); } else { alert('No next page button found.'); } } function copyAndGoNext() { copyIPs(); setTimeout(goToNextPage, 500); // Delay to ensure the alert is shown before navigating } function createButton(text, onClick) { const button = document.createElement('button'); button.textContent = text; button.style.marginLeft = '10px'; button.addEventListener('click', onClick); return button; } // Create and add buttons const navbar = document.querySelector('.navbar'); if (navbar) { const copyButton = createButton('Copy IPs', copyIPs); const copyAndNextButton = createButton('Copy IPs & Next', copyAndGoNext); navbar.appendChild(copyButton); navbar.appendChild(copyAndNextButton); } })();