xxox / index.html
tattedbootyab's picture
Add 3 files
23304f2 verified
<!DOCTYPE html>
<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>