Spaces:
Running
Running
| <html lang="en"> | |
| <head> | |
| <meta charset="UTF-8"> | |
| <meta name="viewport" content="width=device-width, initial-scale=1.0"> | |
| <title>XXoS - Network Stress Tester</title> | |
| <script src="https://cdn.tailwindcss.com"></script> | |
| <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css"> | |
| <style> | |
| .glow { | |
| text-shadow: 0 0 8px rgba(255, 59, 48, 0.8); | |
| } | |
| .terminal { | |
| background-color: #111111; | |
| font-family: 'Courier New', monospace; | |
| } | |
| .progress-bar { | |
| animation: progress 2s ease-in-out infinite; | |
| } | |
| @keyframes progress { | |
| 0% { width: 0%; } | |
| 50% { width: 100%; } | |
| 100% { width: 0%; } | |
| } | |
| .modal { | |
| transition: opacity 0.3s ease; | |
| } | |
| body { | |
| background-color: #121212; | |
| } | |
| .whois-modal { | |
| max-height: 70vh; | |
| overflow-y: auto; | |
| } | |
| .attack-active { | |
| animation: pulse 1.5s infinite; | |
| } | |
| @keyframes pulse { | |
| 0% { box-shadow: 0 0 0 0 rgba(239, 68, 68, 0.7); } | |
| 70% { box-shadow: 0 0 0 10px rgba(239, 68, 68, 0); } | |
| 100% { box-shadow: 0 0 0 0 rgba(239, 68, 68, 0); } | |
| } | |
| .neon-blue { | |
| background-color: #00f2ff; | |
| box-shadow: 0 0 10px #00f2ff; | |
| } | |
| .neon-green { | |
| background-color: #00ff9d; | |
| box-shadow: 0 0 10px #00ff9d; | |
| } | |
| .neon-purple { | |
| background-color: #b400ff; | |
| box-shadow: 0 0 10px #b400ff; | |
| } | |
| .neon-yellow { | |
| background-color: #ffee00; | |
| box-shadow: 0 0 10px #ffee00; | |
| } | |
| </style> | |
| </head> | |
| <body class="text-gray-200 min-h-screen"> | |
| <!-- Settings Modal --> | |
| <div id="settingsModal" class="fixed inset-0 bg-black bg-opacity-50 flex items-center justify-center z-50 opacity-0 pointer-events-none modal"> | |
| <div class="bg-gray-700 rounded-xl p-6 w-full max-w-md shadow-2xl"> | |
| <div class="flex justify-between items-center mb-4"> | |
| <h2 class="text-xl font-bold"> | |
| <i class="fas fa-cog mr-2 text-blue-500"></i>Settings | |
| </h2> | |
| <button id="closeSettings" class="text-gray-400 hover:text-white"> | |
| <i class="fas fa-times"></i> | |
| </button> | |
| </div> | |
| <div class="space-y-4"> | |
| <div> | |
| <label class="block text-sm font-medium mb-1">Request Timeout (ms)</label> | |
| <input id="timeoutInput" type="number" class="w-full bg-gray-600 border border-gray-500 rounded-lg px-4 py-2 focus:outline-none focus:ring-2 focus:ring-blue-500" value="5000"> | |
| </div> | |
| <div> | |
| <label class="block text-sm font-medium mb-1">Max Threads</label> | |
| <input id="maxThreadsInput" type="number" class="w-full bg-gray-600 border border-gray-500 rounded-lg px-4 py-2 focus:outline-none focus:ring-2 focus:ring-blue-500" value="1000"> | |
| </div> | |
| <div> | |
| <label class="block text-sm font-medium mb-1">Connection Retries</label> | |
| <input id="retriesInput" type="number" class="w-full bg-gray-600 border border-gray-500 rounded-lg px-4 py-2 focus:outline-none focus:ring-2 focus:ring-blue-500" value="3"> | |
| </div> | |
| <div class="pt-2"> | |
| <div class="flex items-center mb-2"> | |
| <input id="autoUpdateCheckbox" type="checkbox" class="mr-2" checked> | |
| <label for="autoUpdateCheckbox">Auto-update proxy list</label> | |
| </div> | |
| <div class="flex items-center"> | |
| <input id="verboseLogCheckbox" type="checkbox" class="mr-2"> | |
| <label for="verboseLogCheckbox">Verbose logging</label> | |
| </div> | |
| </div> | |
| <div class="pt-4"> | |
| <button id="saveSettingsBtn" class="w-full bg-blue-600 hover:bg-blue-700 text-white font-bold py-2 px-4 rounded-lg transition"> | |
| Save Settings | |
| </button> | |
| </div> | |
| </div> | |
| </div> | |
| </div> | |
| <!-- WHOIS Modal --> | |
| <div id="whoisModal" class="fixed inset-0 bg-black bg-opacity-50 flex items-center justify-center z-50 opacity-0 pointer-events-none modal"> | |
| <div class="bg-gray-700 rounded-xl p-6 w-full max-w-2xl shadow-2xl whois-modal"> | |
| <div class="flex justify-between items-center mb-4"> | |
| <h2 class="text-xl font-bold"> | |
| <i class="fas fa-globe mr-2 text-green-500"></i>WHOIS Lookup | |
| </h2> | |
| <button id="closeWhois" class="text-gray-400 hover:text-white"> | |
| <i class="fas fa-times"></i> | |
| </button> | |
| </div> | |
| <div id="whoisContent" class="font-mono text-sm bg-gray-800 p-4 rounded-lg overflow-x-auto"> | |
| <div class="text-gray-400">Enter a domain or IP address and click search to view WHOIS data.</div> | |
| </div> | |
| </div> | |
| </div> | |
| <!-- Help Modal --> | |
| <div id="helpModal" class="fixed inset-0 bg-black bg-opacity-50 flex items-center justify-center z-50 opacity-0 pointer-events-none modal"> | |
| <div class="bg-gray-700 rounded-xl p-6 w-full max-w-2xl shadow-2xl"> | |
| <div class="flex justify-between items-center mb-4"> | |
| <h2 class="text-xl font-bold"> | |
| <i class="fas fa-question-circle mr-2 text-blue-500"></i>Help & Documentation | |
| </h2> | |
| <button id="closeHelp" class="text-gray-400 hover:text-white"> | |
| <i class="fas fa-times"></i> | |
| </button> | |
| </div> | |
| <div class="space-y-4"> | |
| <div> | |
| <h3 class="font-semibold text-lg mb-2">Getting Started</h3> | |
| <p class="text-sm text-gray-300">1. Enter your target URL or IP address in the Target Configuration section</p> | |
| <p class="text-sm text-gray-300">2. Configure the port, method, and threads as needed</p> | |
| <p class="text-sm text-gray-300">3. Set the desired attack duration</p> | |
| <p class="text-sm text-gray-300">4. Click "LAUNCH ATTACK" to begin</p> | |
| </div> | |
| <div> | |
| <h3 class="font-semibold text-lg mb-2">Attack Methods</h3> | |
| <div class="text-sm text-gray-300"> | |
| <p><span class="font-semibold">GET:</span> Standard HTTP GET requests</p> | |
| <p><span class="font-semibold">POST:</span> HTTP POST requests with random data</p> | |
| <p><span class="font-semibold">TCP:</span> TCP connection flood</p> | |
| <p><span class="font-semibold">UDP:</span> UDP packet flood</p> | |
| <p><span class="font-semibold">SYN:</span> SYN packet flood</p> | |
| <p><span class="font-semibold">XXoS:</span> Custom high-performance attack</p> | |
| </div> | |
| </div> | |
| <div> | |
| <h3 class="font-semibold text-lg mb-2">Disclaimer</h3> | |
| <p class="text-sm text-red-400">This tool is for educational and authorized testing purposes only. Unauthorized use against networks you don't own is illegal.</p> | |
| </div> | |
| </div> | |
| </div> | |
| </div> | |
| <div class="container mx-auto px-4 py-6 max-w-6xl"> | |
| <header class="mb-6 text-center"> | |
| <div class="flex flex-col items-center"> | |
| <div class="flex items-center"> | |
| <i class="fas fa-skull text-red-500 text-3xl mr-3"></i> | |
| <h1 class="text-3xl font-bold glow">XXoS</h1> | |
| </div> | |
| <p class="text-xs text-gray-400 mt-1">BY AB' - NETWORK STRESS TESTER</p> | |
| </div> | |
| </header> | |
| <div class="grid grid-cols-1 lg:grid-cols-3 gap-4 mb-4"> | |
| <!-- Target Section --> | |
| <div class="bg-gray-700 rounded-xl p-4 shadow-lg col-span-2"> | |
| <h2 class="text-lg font-semibold mb-3 flex items-center"> | |
| <i class="fas fa-bullseye mr-2 text-red-500"></i> Target Configuration | |
| </h2> | |
| <div class="space-y-3"> | |
| <div> | |
| <label class="block text-sm font-medium mb-1">Target URL/IP</label> | |
| <div class="flex"> | |
| <input id="targetInput" type="text" class="flex-grow bg-gray-600 border border-gray-500 rounded-l-lg px-4 py-2 focus:outline-none focus:ring-2 focus:ring-blue-500" placeholder="https://example.com or 192.168.1.1"> | |
| <button id="whoisBtn" class="bg-red-600 hover:bg-red-700 px-4 py-2 rounded-r-lg transition"> | |
| <i class="fas fa-search"></i> | |
| </button> | |
| </div> | |
| </div> | |
| <div class="grid grid-cols-1 md:grid-cols-3 gap-3"> | |
| <div> | |
| <label class="block text-sm font-medium mb-1">Port</label> | |
| <input id="portInput" type="number" class="w-full bg-gray-600 border border-gray-500 rounded-lg px-4 py-2 focus:outline-none focus:ring-2 focus:ring-blue-500" value="80"> | |
| </div> | |
| <div> | |
| <label class="block text-sm font-medium mb-1">Method</label> | |
| <select id="methodSelect" class="w-full bg-gray-600 border border-gray-500 rounded-lg px-4 py-2 focus:outline-none focus:ring-2 focus:ring-blue-500"> | |
| <option>GET</option> | |
| <option>POST</option> | |
| <option>TCP</option> | |
| <option>UDP</option> | |
| <option>SYN</option> | |
| <option>XXoS</option> | |
| </select> | |
| </div> | |
| <div> | |
| <label class="block text-sm font-medium mb-1">Threads</label> | |
| <input id="threadCount" type="number" class="w-full bg-gray-600 border border-gray-500 rounded-lg px-4 py-2 focus:outline-none focus:ring-2 focus:ring-blue-500" value="1000"> | |
| </div> | |
| </div> | |
| <div> | |
| <label class="block text-sm font-medium mb-1">Duration (seconds)</label> | |
| <input id="durationSlider" type="range" min="10" max="600" value="60" class="w-full h-2 bg-gray-600 rounded-lg appearance-none cursor-pointer"> | |
| <div class="flex justify-between text-xs text-gray-400"> | |
| <span>10s</span> | |
| <span>60s</span> | |
| <span>600s</span> | |
| </div> | |
| </div> | |
| </div> | |
| </div> | |
| <!-- Stats Section --> | |
| <div class="bg-gray-700 rounded-xl p-4 shadow-lg"> | |
| <h2 class="text-lg font-semibold mb-3 flex items-center"> | |
| <i class="fas fa-chart-bar mr-2 text-green-500"></i> Attack Statistics | |
| </h2> | |
| <div class="space-y-3"> | |
| <div class="bg-gray-600 rounded-lg p-3"> | |
| <div class="flex justify-between mb-1"> | |
| <span class="text-sm">Requests Sent</span> | |
| <span id="requestCount" class="font-mono">0</span> | |
| </div> | |
| <div class="w-full bg-gray-500 rounded-full h-2"> | |
| <div id="requestBar" class="neon-blue h-2 rounded-full" style="width: 0%"></div> | |
| </div> | |
| </div> | |
| <div class="bg-gray-600 rounded-lg p-3"> | |
| <div class="flex justify-between mb-1"> | |
| <span class="text-sm">Success Rate</span> | |
| <span id="successRate" class="font-mono">0%</span> | |
| </div> | |
| <div class="w-full bg-gray-500 rounded-full h-2"> | |
| <div id="successBar" class="neon-green h-2 rounded-full" style="width: 0%"></div> | |
| </div> | |
| </div> | |
| <div class="bg-gray-600 rounded-lg p-3"> | |
| <div class="flex justify-between mb-1"> | |
| <span class="text-sm">Attack Duration</span> | |
| <span id="attackTime" class="font-mono">00:00:00</span> | |
| </div> | |
| <div class="w-full bg-gray-500 rounded-full h-2"> | |
| <div id="timeBar" class="neon-purple h-2 rounded-full" style="width: 0%"></div> | |
| </div> | |
| </div> | |
| <div class="bg-gray-600 rounded-lg p-3"> | |
| <div class="flex justify-between mb-1"> | |
| <span class="text-sm">Threads Active</span> | |
| <span id="activeThreads" class="font-mono">0/<span id="totalThreads">1000</span></span> | |
| </div> | |
| <div class="w-full bg-gray-500 rounded-full h-2"> | |
| <div id="threadBar" class="neon-yellow h-2 rounded-full" style="width: 0%"></div> | |
| </div> | |
| </div> | |
| <div class="pt-2"> | |
| <button id="attackBtn" class="w-full bg-red-600 hover:bg-red-700 text-white font-bold py-2 px-4 rounded-lg transition flex items-center justify-center"> | |
| <i class="fas fa-play mr-2"></i> LAUNCH ATTACK | |
| </button> | |
| </div> | |
| </div> | |
| </div> | |
| </div> | |
| <!-- Terminal Output --> | |
| <div class="bg-gray-700 rounded-xl p-4 shadow-lg mb-4"> | |
| <div class="flex justify-between items-center mb-3"> | |
| <h2 class="text-lg font-semibold flex items-center"> | |
| <i class="fas fa-terminal mr-2 text-yellow-500"></i> Attack Console | |
| </h2> | |
| <div class="flex space-x-2"> | |
| <button id="clearConsole" class="bg-gray-600 hover:bg-gray-500 px-3 py-1 rounded-lg transition text-sm"> | |
| <i class="fas fa-trash mr-1"></i>Clear | |
| </button> | |
| <button id="exportLogs" class="bg-gray-600 hover:bg-gray-500 px-3 py-1 rounded-lg transition text-sm"> | |
| <i class="fas fa-download mr-1"></i>Export | |
| </button> | |
| <button id="settingsBtn" class="bg-gray-600 hover:bg-gray-500 px-3 py-1 rounded-lg transition text-sm"> | |
| <i class="fas fa-cog mr-1"></i>Settings | |
| </button> | |
| <button id="helpBtn" class="bg-gray-600 hover:bg-gray-500 px-3 py-1 rounded-lg transition text-sm"> | |
| <i class="fas fa-question-circle mr-1"></i>Help | |
| </button> | |
| </div> | |
| </div> | |
| <div class="terminal rounded-lg p-3 h-48 overflow-y-auto mb-2"> | |
| <div class="text-green-400 font-mono text-sm">> XXoS v1.0 initialized</div> | |
| <div class="text-gray-400 font-mono text-sm">> Ready to configure attack parameters</div> | |
| <div class="text-gray-400 font-mono text-sm">> No active attack session</div> | |
| <div class="text-gray-400 font-mono text-sm">> System resources: 32% CPU, 45% RAM available</div> | |
| <div class="text-gray-400 font-mono text-sm">> Proxy connections: 0 active</div> | |
| <div id="consoleOutput" class="font-mono text-sm"></div> | |
| </div> | |
| </div> | |
| <!-- Proxy Settings --> | |
| <div class="bg-gray-700 rounded-xl p-4 shadow-lg"> | |
| <h2 class="text-lg font-semibold mb-3 flex items-center"> | |
| <i class="fas fa-server mr-2 text-purple-500"></i> Proxy Configuration | |
| </h2> | |
| <div class="grid grid-cols-1 md:grid-cols-2 gap-4"> | |
| <div> | |
| <label class="block text-sm font-medium mb-1">Proxy List</label> | |
| <textarea id="proxyList" class="w-full h-28 bg-gray-600 border border-gray-500 rounded-lg px-4 py-2 focus:outline-none focus:ring-2 focus:ring-blue-500 font-mono text-sm" placeholder="Enter one proxy per line (ip:port)"></textarea> | |
| <div class="flex space-x-2 mt-2"> | |
| <button id="importProxies" class="bg-blue-600 hover:bg-blue-700 px-3 py-1 rounded-lg transition text-sm"> | |
| <i class="fas fa-file-import mr-1"></i>Import | |
| </button> | |
| <button id="testProxies" class="bg-gray-600 hover:bg-gray-500 px-3 py-1 rounded-lg transition text-sm"> | |
| <i class="fas fa-sync mr-1"></i>Test | |
| </button> | |
| </div> | |
| </div> | |
| <div> | |
| <label class="block text-sm font-medium mb-1">Proxy Settings</label> | |
| <div class="space-y-2"> | |
| <div class="flex items-center"> | |
| <input type="checkbox" id="useProxy" class="mr-2" checked> | |
| <label for="useProxy" class="text-sm">Use Proxy Rotation</label> | |
| </div> | |
| <div class="flex items-center"> | |
| <input type="checkbox" id="autoProxy" class="mr-2"> | |
| <label for="autoProxy" class="text-sm">Auto-fetch Proxies</label> | |
| </div> | |
| <div> | |
| <label class="block text-xs font-medium mb-1">Timeout (ms)</label> | |
| <input id="proxyTimeout" type="number" class="w-full bg-gray-600 border border-gray-500 rounded-lg px-3 py-1 focus:outline-none focus:ring-2 focus:ring-blue-500 text-sm" value="5000"> | |
| </div> | |
| <div class="pt-2"> | |
| <button id="fetchProxies" class="w-full bg-green-600 hover:bg-green-700 px-3 py-1 rounded-lg transition text-sm"> | |
| <i class="fas fa-cloud-download-alt mr-1"></i>Fetch Fresh Proxies | |
| </button> | |
| </div> | |
| </div> | |
| </div> | |
| </div> | |
| </div> | |
| <footer class="mt-4 text-center text-gray-500 text-xs"> | |
| <p>This tool is for educational and authorized testing purposes only.</p> | |
| <p class="mt-1">Unauthorized use against networks you don't own is illegal.</p> | |
| </footer> | |
| </div> | |
| <script> | |
| // DOM Elements | |
| const settingsBtn = document.getElementById('settingsBtn'); | |
| const closeSettings = document.getElementById('closeSettings'); | |
| const settingsModal = document.getElementById('settingsModal'); | |
| const saveSettingsBtn = document.getElementById('saveSettingsBtn'); | |
| const helpBtn = document.getElementById('helpBtn'); | |
| const closeHelp = document.getElementById('closeHelp'); | |
| const helpModal = document.getElementById('helpModal'); | |
| const whoisBtn = document.getElementById('whoisBtn'); | |
| const closeWhois = document.getElementById('closeWhois'); | |
| const whoisModal = document.getElementById('whoisModal'); | |
| const whoisContent = document.getElementById('whoisContent'); | |
| const targetInput = document.getElementById('targetInput'); | |
| const attackBtn = document.getElementById('attackBtn'); | |
| const consoleOutput = document.getElementById('consoleOutput'); | |
| const clearConsole = document.getElementById('clearConsole'); | |
| const exportLogs = document.getElementById('exportLogs'); | |
| const requestCountEl = document.getElementById('requestCount'); | |
| const requestBar = document.getElementById('requestBar'); | |
| const successRateEl = document.getElementById('successRate'); | |
| const successBar = document.getElementById('successBar'); | |
| const attackTimeEl = document.getElementById('attackTime'); | |
| const timeBar = document.getElementById('timeBar'); | |
| const activeThreadsEl = document.getElementById('activeThreads'); | |
| const totalThreadsEl = document.getElementById('totalThreads'); | |
| const threadBar = document.getElementById('threadBar'); | |
| const threadCount = document.getElementById('threadCount'); | |
| const durationSlider = document.getElementById('durationSlider'); | |
| const portInput = document.getElementById('portInput'); | |
| const methodSelect = document.getElementById('methodSelect'); | |
| const proxyList = document.getElementById('proxyList'); | |
| const useProxy = document.getElementById('useProxy'); | |
| const autoProxy = document.getElementById('autoProxy'); | |
| const proxyTimeout = document.getElementById('proxyTimeout'); | |
| const importProxies = document.getElementById('importProxies'); | |
| const testProxies = document.getElementById('testProxies'); | |
| const fetchProxies = document.getElementById('fetchProxies'); | |
| // State variables | |
| let attackActive = false; | |
| let requestCount = 0; | |
| let successCount = 0; | |
| let startTime = 0; | |
| let attackInterval; | |
| let statsInterval; | |
| let attackDuration = parseInt(durationSlider.value); | |
| let activeProxies = []; | |
| let testedProxies = 0; | |
| let workingProxies = 0; | |
| let settings = { | |
| timeout: 5000, | |
| maxThreads: 1000, | |
| retries: 3, | |
| autoUpdate: true, | |
| verboseLog: false | |
| }; | |
| // Initialize | |
| document.addEventListener('DOMContentLoaded', () => { | |
| logToConsole('> System initialized', 'text-green-400'); | |
| logToConsole('> Ready for attack configuration', 'text-gray-400'); | |
| updateSystemStats(); | |
| }); | |
| // Update system stats periodically | |
| function updateSystemStats() { | |
| const cpuUsage = Math.floor(Math.random() * 30) + 10; | |
| const ramUsage = Math.floor(Math.random() * 40) + 20; | |
| const proxyCount = useProxy.checked ? Math.floor(Math.random() * 50) : 0; | |
| // Update console with system stats | |
| const consoleLines = document.querySelectorAll('.terminal > div'); | |
| if (consoleLines.length >= 5) { | |
| consoleLines[3].textContent = `> System resources: ${cpuUsage}% CPU, ${100 - ramUsage}% RAM available`; | |
| consoleLines[4].textContent = `> Proxy connections: ${proxyCount} active`; | |
| } | |
| setTimeout(updateSystemStats, 5000); | |
| } | |
| // Settings Modal | |
| settingsBtn.addEventListener('click', () => toggleModal(settingsModal)); | |
| closeSettings.addEventListener('click', () => toggleModal(settingsModal, false)); | |
| // Help Modal | |
| helpBtn.addEventListener('click', () => toggleModal(helpModal)); | |
| closeHelp.addEventListener('click', () => toggleModal(helpModal, false)); | |
| // WHOIS Modal | |
| whoisBtn.addEventListener('click', performWhoisLookup); | |
| closeWhois.addEventListener('click', () => toggleModal(whoisModal, false)); | |
| // Proxy functionality | |
| importProxies.addEventListener('click', importProxyList); | |
| testProxies.addEventListener('click', testProxyList); | |
| fetchProxies.addEventListener('click', fetchFreshProxies); | |
| useProxy.addEventListener('change', updateProxyStatus); | |
| // Attack functionality | |
| attackBtn.addEventListener('click', toggleAttack); | |
| clearConsole.addEventListener('click', clearConsoleOutput); | |
| exportLogs.addEventListener('click', exportConsoleLogs); | |
| // Settings save | |
| saveSettingsBtn.addEventListener('click', saveSettings); | |
| // Update attack duration when slider changes | |
| durationSlider.addEventListener('input', function() { | |
| attackDuration = parseInt(this.value); | |
| }); | |
| // Update total threads when input changes | |
| threadCount.addEventListener('change', function() { | |
| totalThreadsEl.textContent = this.value; | |
| }); | |
| // Modal toggle function | |
| function toggleModal(modal, show = true) { | |
| if (show) { | |
| modal.classList.remove('opacity-0', 'pointer-events-none'); | |
| modal.classList.add('opacity-100'); | |
| } else { | |
| modal.classList.remove('opacity-100'); | |
| modal.classList.add('opacity-0', 'pointer-events-none'); | |
| } | |
| } | |
| // Close modals when clicking outside | |
| [settingsModal, helpModal, whoisModal].forEach(modal => { | |
| modal.addEventListener('click', function(e) { | |
| if (e.target === modal) { | |
| toggleModal(modal, false); | |
| } | |
| }); | |
| }); | |
| // WHOIS lookup function | |
| async function performWhoisLookup() { | |
| const target = targetInput.value.trim(); | |
| if (!target) { | |
| logToConsole('> Error: Please enter a target URL or IP address', 'text-red-400'); | |
| return; | |
| } | |
| toggleModal(whoisModal); | |
| whoisContent.innerHTML = `<div class="text-blue-400">Fetching WHOIS data for ${target}...</div>`; | |
| try { | |
| // Simulate WHOIS lookup with mock data | |
| const isIP = /^(?:\d{1,3}\.){3}\d{1,3}$/.test(target); | |
| const isDomain = /^[a-zA-Z0-9][a-zA-Z0-9-]{1,61}[a-zA-Z0-9]\.[a-zA-Z]{2,}$/.test(target); | |
| if (!isIP && !isDomain) { | |
| throw new Error('Invalid target format'); | |
| } | |
| // Generate mock WHOIS data | |
| const mockData = { | |
| target: target, | |
| isIP: isIP, | |
| isDomain: isDomain, | |
| date: new Date().toISOString(), | |
| registrar: isDomain ? "Example Registrar Inc." : null, | |
| creationDate: isDomain ? "2020-01-15T00:00:00Z" : null, | |
| expirationDate: isDomain ? "2025-01-15T00:00:00Z" : null, | |
| updatedDate: isDomain ? "2023-05-20T00:00:00Z" : null, | |
| nameServers: isDomain ? ["ns1.example.com", "ns2.example.com"] : null, | |
| status: isDomain ? "clientTransferProhibited" : null, | |
| ipInfo: isIP ? { | |
| range: "192.0.2.0 - 192.0.2.255", | |
| country: "US", | |
| region: "California", | |
| city: "Los Angeles", | |
| isp: "Example ISP Inc.", | |
| org: "Example Organization", | |
| as: "AS12345 Example Network" | |
| } : null | |
| }; | |
| // Format the WHOIS data | |
| let whoisHtml = `<div class="text-green-400">WHOIS results for: ${target}</div>`; | |
| whoisHtml += `<div class="border-t border-gray-700 my-2"></div>`; | |
| if (mockData.isDomain) { | |
| whoisHtml += `<div class="text-gray-300">Domain Name: ${target}</div>`; | |
| whoisHtml += `<div class="text-gray-300">Registrar: ${mockData.registrar || 'N/A'}</div>`; | |
| whoisHtml += `<div class="text-gray-300">Creation Date: ${mockData.creationDate || 'N/A'}</div>`; | |
| whoisHtml += `<div class="text-gray-300">Expiration Date: ${mockData.expirationDate || 'N/A'}</div>`; | |
| whoisHtml += `<div class="text-gray-300">Updated Date: ${mockData.updatedDate || 'N/A'}</div>`; | |
| whoisHtml += `<div class="text-gray-300">Status: ${mockData.status || 'N/A'}</div>`; | |
| whoisHtml += `<div class="text-gray-300">Name Servers: ${mockData.nameServers ? mockData.nameServers.join(', ') : 'N/A'}</div>`; | |
| whoisHtml += `<div class="border-t border-gray-700 my-2"></div>`; | |
| } | |
| if (mockData.isIP) { | |
| whoisHtml += `<div class="text-gray-300">IP Address: ${target}</div>`; | |
| whoisHtml += `<div class="text-gray-300">IP Range: ${mockData.ipInfo.range || 'N/A'}</div>`; | |
| whoisHtml += `<div class="text-gray-300">Country: ${mockData.ipInfo.country || 'N/A'}</div>`; | |
| whoisHtml += `<div class="text-gray-300">Region: ${mockData.ipInfo.region || 'N/A'}</div>`; | |
| whoisHtml += `<div class="text-gray-300">City: ${mockData.ipInfo.city || 'N/A'}</div>`; | |
| whoisHtml += `<div class="text-gray-300">ISP: ${mockData.ipInfo.isp || 'N/A'}</div>`; | |
| whoisHtml += `<div class="text-gray-300">Organization: ${mockData.ipInfo.org || 'N/A'}</div>`; | |
| whoisHtml += `<div class="text-gray-300">AS: ${mockData.ipInfo.as || 'N/A'}</div>`; | |
| whoisHtml += `<div class="border-t border-gray-700 my-2"></div>`; | |
| } | |
| whoisHtml += `<div class="text-gray-400 text-xs">WHOIS data retrieved at ${new Date().toLocaleTimeString()}</div>`; | |
| whoisContent.innerHTML = whoisHtml; | |
| logToConsole(`> WHOIS lookup completed for ${target}`, 'text-green-400'); | |
| } catch (error) { | |
| whoisContent.innerHTML = `<div class="text-red-400">Error fetching WHOIS data: ${error.message}</div>`; | |
| logToConsole(`> WHOIS lookup failed: ${error.message}`, 'text-red-400'); | |
| } | |
| } | |
| // Proxy functions | |
| function importProxyList() { | |
| const fileInput = document.createElement('input'); | |
| fileInput.type = 'file'; | |
| fileInput.accept = '.txt,.csv'; | |
| fileInput.onchange = e => { | |
| const file = e.target.files[0]; | |
| const reader = new FileReader(); | |
| reader.onload = event => { | |
| proxyList.value = event.target.result; | |
| logToConsole(`> Imported ${proxyList.value.split('\n').length} proxies from file`, 'text-blue-400'); | |
| }; | |
| reader.readAsText(file); | |
| }; | |
| fileInput.click(); | |
| } | |
| async function testProxyList() { | |
| const proxies = proxyList.value.split('\n').filter(p => p.trim()); | |
| if (proxies.length === 0) { | |
| logToConsole('> No proxies to test', 'text-red-400'); | |
| return; | |
| } | |
| testedProxies = 0; | |
| workingProxies = 0; | |
| activeProxies = []; | |
| logToConsole(`> Testing ${proxies.length} proxies...`, 'text-blue-400'); | |
| // Simulate proxy testing (in a real app, you'd actually test each proxy) | |
| const testInterval = setInterval(() => { | |
| if (testedProxies >= proxies.length) { | |
| clearInterval(testInterval); | |
| logToConsole(`> Proxy test completed: ${workingProxies}/${proxies.length} working`, 'text-green-400'); | |
| return; | |
| } | |
| testedProxies++; | |
| if (Math.random() > 0.3) { // 70% success rate for simulation | |
| workingProxies++; | |
| activeProxies.push(proxies[testedProxies - 1]); | |
| } | |
| logToConsole(`> Testing proxy ${testedProxies}/${proxies.length}... ${workingProxies} working so far`, 'text-gray-400'); | |
| }, 300); | |
| } | |
| async function fetchFreshProxies() { | |
| logToConsole('> Fetching fresh proxy list...', 'text-blue-400'); | |
| try { | |
| // Simulate fetching from a free proxy API | |
| setTimeout(() => { | |
| const sampleProxies = [ | |
| '45.95.96.34:8080', | |
| '103.155.217.1:41317', | |
| '45.94.47.66:8111', | |
| '103.155.54.137:83', | |
| '103.155.54.26:83', | |
| '103.155.54.238:83', | |
| '103.155.54.14:83', | |
| '103.155.54.163:83', | |
| '103.155.54.245:83', | |
| '103.155.54.18:83' | |
| ]; | |
| proxyList.value = sampleProxies.join('\n'); | |
| logToConsole(`> Fetched ${sampleProxies.length} fresh proxies`, 'text-green-400'); | |
| }, 1500); | |
| } catch (error) { | |
| logToConsole(`> Error fetching proxies: ${error.message}`, 'text-red-400'); | |
| } | |
| } | |
| function updateProxyStatus() { | |
| if (useProxy.checked) { | |
| logToConsole('> Proxy rotation enabled', 'text-blue-400'); | |
| } else { | |
| logToConsole('> Proxy rotation disabled', 'text-yellow-400'); | |
| } | |
| } | |
| // Attack functions | |
| function toggleAttack() { | |
| attackActive = !attackActive; | |
| if (attackActive) { | |
| startAttack(); | |
| } else { | |
| stopAttack(); | |
| } | |
| } | |
| function startAttack() { | |
| const target = targetInput.value.trim(); | |
| if (!target) { | |
| logToConsole('> Error: Please enter a target URL or IP address', 'text-red-400'); | |
| attackActive = false; | |
| return; | |
| } | |
| // Start attack | |
| attackBtn.innerHTML = '<i class="fas fa-stop mr-2"></i> STOP ATTACK'; | |
| attackBtn.classList.remove('bg-red-600', 'hover:bg-red-700'); | |
| attackBtn.classList.add('bg-yellow-600', 'hover:bg-yellow-700', 'attack-active'); | |
| // Reset stats | |
| requestCount = 0; | |
| successCount = 0; | |
| startTime = Date.now(); | |
| updateStats(); | |
| // Get attack parameters | |
| const port = portInput.value; | |
| const method = methodSelect.value; | |
| const threads = parseInt(threadCount.value); | |
| const duration = parseInt(durationSlider.value); | |
| // Log attack start | |
| logToConsole('> Starting XXoS attack sequence...', 'text-blue-400'); | |
| logToConsole(`> Target: ${target}:${port}`, 'text-blue-400'); | |
| logToConsole(`> Method: ${method}`, 'text-blue-400'); | |
| logToConsole(`> Threads: ${threads}`, 'text-blue-400'); | |
| logToConsole(`> Duration: ${duration} seconds`, 'text-blue-400'); | |
| if (useProxy.checked && activeProxies.length > 0) { | |
| logToConsole(`> Using ${activeProxies.length} proxies`, 'text-blue-400'); | |
| } else if (useProxy.checked) { | |
| logToConsole('> Warning: Proxy rotation enabled but no working proxies available', 'text-yellow-400'); | |
| } | |
| // Simulate attack in progress | |
| attackInterval = setInterval(() => { | |
| // Calculate requests based on method and threads | |
| let newRequests; | |
| switch(method) { | |
| case 'GET': | |
| newRequests = Math.floor(threads * (0.8 + Math.random() * 0.4)); | |
| break; | |
| case 'POST': | |
| newRequests = Math.floor(threads * (0.6 + Math.random() * 0.3)); | |
| break; | |
| case 'TCP': | |
| newRequests = Math.floor(threads * (1.0 + Math.random() * 0.5)); | |
| break; | |
| case 'UDP': | |
| newRequests = Math.floor(threads * (1.2 + Math.random() * 0.8)); | |
| break; | |
| case 'SYN': | |
| newRequests = Math.floor(threads * (1.5 + Math.random() * 1.0)); | |
| break; | |
| case 'XXoS': | |
| newRequests = Math.floor(threads * (2.0 + Math.random() * 1.5)); | |
| break; | |
| default: | |
| newRequests = Math.floor(threads * (0.8 + Math.random() * 0.4)); | |
| } | |
| requestCount += newRequests; | |
| successCount += Math.floor(newRequests * (0.7 + Math.random() * 0.2)); // 70-90% success rate | |
| // Random log messages | |
| if (Math.random() > 0.7) { | |
| logToConsole(`> Sent ${newRequests} ${method} requests (${Math.floor(newRequests * (0.7 + Math.random() * 0.2))} successful)`, 'text-green-400'); | |
| } | |
| // Random proxy connection messages | |
| if (useProxy.checked && Math.random() > 0.8) { | |
| const proxyCount = Math.floor(Math.random() * 20) + 5; | |
| logToConsole(`> Rotated ${proxyCount} proxy connections`, 'text-blue-400'); | |
| } | |
| // Update stats | |
| updateStats(); | |
| // Check if attack duration has elapsed | |
| const elapsed = (Date.now() - startTime) / 1000; | |
| if (elapsed >= duration) { | |
| stopAttack(); | |
| logToConsole('> Attack duration completed', 'text-yellow-400'); | |
| logToConsole(`> Final statistics: ${requestCount} requests sent, ${Math.round((successCount / requestCount) * 100)}% success rate`, 'text-green-400'); | |
| } | |
| }, 800); | |
| // Start stats update interval | |
| statsInterval = setInterval(updateStats, 100); | |
| } | |
| function stopAttack() { | |
| attackBtn.innerHTML = '<i class="fas fa-play mr-2"></i> LAUNCH ATTACK'; | |
| attackBtn.classList.remove('bg-yellow-600', 'hover:bg-yellow-700', 'attack-active'); | |
| attackBtn.classList.add('bg-red-600', 'hover:bg-red-700'); | |
| clearInterval(attackInterval); | |
| clearInterval(statsInterval); | |
| attackActive = false; | |
| // Final stats update | |
| updateStats(); | |
| } | |
| function updateStats() { | |
| // Update request count | |
| requestCountEl.textContent = requestCount; | |
| const maxRequests = 1000000; // Max for percentage calculation | |
| const requestPercentage = Math.min(100, (requestCount / maxRequests) * 100); | |
| requestBar.style.width = `${requestPercentage}%`; | |
| // Update success rate | |
| const successPercentage = requestCount > 0 ? Math.round((successCount / requestCount) * 100) : 0; | |
| successRateEl.textContent = `${successPercentage}%`; | |
| successBar.style.width = `${successPercentage}%`; | |
| // Update attack time | |
| const elapsed = attackActive ? (Date.now() - startTime) / 1000 : 0; | |
| const hours = Math.floor(elapsed / 3600); | |
| const minutes = Math.floor((elapsed % 3600) / 60); | |
| const seconds = Math.floor(elapsed % 60); | |
| attackTimeEl.textContent = `${hours.toString().padStart(2, '0')}:${minutes.toString().padStart(2, '0')}:${seconds.toString().padStart(2, '0')}`; | |
| // Update time bar | |
| const timePercentage = attackActive ? (elapsed / attackDuration) * 100 : 0; | |
| timeBar.style.width = `${timePercentage}%`; | |
| // Update active threads | |
| const activeThreads = attackActive ? Math.floor(parseInt(threadCount.value) * (0.7 + Math.random() * 0.3)) : 0; | |
| activeThreadsEl.innerHTML = `${activeThreads}<span class="text-gray-400">/${threadCount.value}</span>`; | |
| const threadPercentage = (activeThreads / parseInt(threadCount.value)) * 100; | |
| threadBar.style.width = `${threadPercentage}%`; | |
| } | |
| // Console functions | |
| function logToConsole(message, colorClass = 'text-gray-400') { | |
| const newLine = document.createElement('div'); | |
| newLine.classList.add('font-mono', colorClass); | |
| newLine.textContent = message; | |
| consoleOutput.appendChild(newLine); | |
| consoleOutput.scrollTop = consoleOutput.scrollHeight; | |
| } | |
| function clearConsoleOutput() { | |
| consoleOutput.innerHTML = ''; | |
| logToConsole('> Console cleared', 'text-yellow-400'); | |
| } | |
| function exportConsoleLogs() { | |
| const logs = Array.from(consoleOutput.children).map(line => line.textContent).join('\n'); | |
| const blob = new Blob([logs], { type: 'text/plain' }); | |
| const url = URL.createObjectURL(blob); | |
| const a = document.createElement('a'); | |
| a.href = url; | |
| a.download = `xxos_logs_${new Date().toISOString().replace(/[:.]/g, '-')}.txt`; | |
| document.body.appendChild(a); | |
| a.click(); | |
| document.body.removeChild(a); | |
| URL.revokeObjectURL(url); | |
| logToConsole('> Logs exported to file', 'text-blue-400'); | |
| } | |
| // Settings functions | |
| function saveSettings() { | |
| settings.timeout = parseInt(document.getElementById('timeoutInput').value); | |
| settings.maxThreads = parseInt(document.getElementById('maxThreadsInput').value); | |
| settings.retries = parseInt(document.getElementById('retriesInput').value); | |
| settings.autoUpdate = document.getElementById('autoUpdateCheckbox').checked; | |
| settings.verboseLog = document.getElementById('verboseLogCheckbox').checked; | |
| logToConsole(`> Settings saved: Timeout=${settings.timeout}ms, MaxThreads=${settings.maxThreads}, Retries=${settings.retries}`, 'text-blue-400'); | |
| logToConsole(`> Auto-update proxies: ${settings.autoUpdate ? 'Enabled' : 'Disabled'}`, 'text-blue-400'); | |
| logToConsole(`> Verbose logging: ${settings.verboseLog ? 'Enabled' : 'Disabled'}`, 'text-blue-400'); | |
| toggleModal(settingsModal, false); | |
| } | |
| </script> | |
| <p style="border-radius: 8px; text-align: center; font-size: 12px; color: #fff; margin-top: 16px;position: fixed; left: 8px; bottom: 8px; z-index: 10; background: rgba(0, 0, 0, 0.8); padding: 4px 8px;">Made with <img src="https://enzostvs-deepsite.hf.space/logo.svg" alt="DeepSite Logo" style="width: 16px; height: 16px; vertical-align: middle;display:inline-block;margin-right:3px;filter:brightness(0) invert(1);"><a href="https://enzostvs-deepsite.hf.space" style="color: #fff;text-decoration: underline;" target="_blank" >DeepSite</a> - 🧬 <a href="https://enzostvs-deepsite.hf.space?remix=tattedbootyab/xxox" style="color: #fff;text-decoration: underline;" target="_blank" >Remix</a></p></body> | |
| </html> |