Files
wevia-brain/s89-arsenal-screens/dark-scout.html
2026-04-12 23:01:36 +02:00

142 lines
15 KiB
HTML
Executable File

<?php include_once("/opt/wevads-arsenal/public/api/wevads-metrics.php"); ?>
<?php
@$_db=new PDO("pgsql:host=localhost;dbname=adx_system","admin","admin123");$_db->exec("SET search_path TO admin");
$_dt=(int)$_db->query("SELECT COUNT(*) FROM dark_scout_targets")->fetchColumn();
$_dta=(int)$_db->query("SELECT COUNT(*) FROM dark_scout_targets WHERE status='active' OR status='completed'")->fetchColumn();
$_dr=(int)$_db->query("SELECT COUNT(*) FROM dark_scout_results")->fetchColumn();
$_relays=(int)$_db->query("SELECT COUNT(*) FROM dark_scout_results WHERE relay_open=true")->fetchColumn();
$_avgScore=$_db->query("SELECT ROUND(AVG(usability_score)::numeric,1) FROM dark_scout_results WHERE usability_score>0")->fetchColumn();
$_highScore=(int)$_db->query("SELECT COUNT(*) FROM dark_scout_results WHERE usability_score>70")->fetchColumn();
$_totalLeads=(int)$_db->query("SELECT COALESCE(SUM(leads_found),0) FROM dark_scout_targets")->fetchColumn();
$_totalRelays=(int)$_db->query("SELECT COALESCE(SUM(relays_found),0) FROM dark_scout_targets")->fetchColumn();
// Scan types breakdown
$_scanTypes=$_db->query("SELECT scan_type, COUNT(*) as cnt, ROUND(AVG(usability_score)::numeric,1) as avg_score FROM dark_scout_results GROUP BY scan_type ORDER BY cnt DESC")->fetchAll(PDO::FETCH_ASSOC);
// Results table
$_results=$_db->query("SELECT r.id, r.ip_address, r.hostname, r.port, r.protocol, r.relay_open, r.usability_score, r.scan_type, r.discovered_at, t.target FROM dark_scout_results r LEFT JOIN dark_scout_targets t ON r.target_id=t.id ORDER BY r.discovered_at DESC LIMIT 15")->fetchAll(PDO::FETCH_ASSOC);
// Targets table
$_targets=$_db->query("SELECT id, target, scan_type, relays_found, leads_found, status, created_at FROM dark_scout_targets ORDER BY created_at DESC")->fetchAll(PDO::FETCH_ASSOC);
?>
<!DOCTYPE html><html lang="fr"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width,initial-scale=1">
<title>WEVADS - Dark Scout</title>
<link href="https://fonts.googleapis.com/css2?family=DM+Sans:wght@400;500;600;700&family=JetBrains+Mono:wght@400;500;700&display=swap" rel="stylesheet">
<style>
:root{--bg:#060a14;--s:#0c1220;--s2:#111827;--b:#1e293b;--t:#e2e8f0;--d:#64748b;--cy:#22d3ee;--gn:#34d399;--am:#fbbf24;--rd:#f87171;--pu:#a78bfa;--bl:#60a5fa;--pk:#f472b6}
*{margin:0;padding:0;box-sizing:border-box}body{background:var(--bg);color:var(--t);font-family:'DM Sans',sans-serif;font-size:12px}
.mono{font-family:'JetBrains Mono',monospace}
.hdr{background:var(--s);border-bottom:1px solid var(--b);padding:14px 20px;display:flex;justify-content:space-between;align-items:center}
.hdr h1{font-size:18px;font-weight:700;margin-left:80px}.hdr h1 span{color:var(--am)}
.wrap{padding:16px 20px;max-width:1500px;margin:0 auto}
.stats{display:grid;grid-template-columns:repeat(6,1fr);gap:10px;margin-bottom:16px}
.sc{background:var(--s);border:1px solid var(--b);border-radius:10px;padding:14px;text-align:center;cursor:pointer;transition:all .2s}
.sc:hover{transform:translateY(-2px);box-shadow:0 8px 24px rgba(0,0,0,.3);border-color:var(--am)}
.sc .n{font-family:'JetBrains Mono',monospace;font-size:22px;font-weight:700}.sc .l{font-size:9px;text-transform:uppercase;color:var(--d);margin-top:4px}.sc .delta{font-size:9px;margin-top:3px}
.g2{display:grid;grid-template-columns:1fr 1fr;gap:12px}.cd{background:var(--s);border:1px solid var(--b);border-radius:10px;padding:14px}
table{width:100%;border-collapse:collapse;font-size:11px}th{text-align:left;color:var(--d);text-transform:uppercase;font-size:9px;padding:6px 8px;border-bottom:1px solid var(--b)}td{padding:6px 8px;border-bottom:1px solid rgba(30,41,59,.3)}
.badge{font-size:8px;padding:2px 6px;border-radius:3px;font-weight:600}.badge-gn{background:rgba(52,211,153,.15);color:var(--gn)}.badge-rd{background:rgba(248,113,113,.15);color:var(--rd)}.badge-am{background:rgba(251,191,36,.15);color:var(--am)}.badge-cy{background:rgba(34,211,238,.15);color:var(--cy)}.badge-pu{background:rgba(167,139,250,.15);color:var(--pu)}
.btn{padding:8px 16px;border-radius:6px;border:1px solid var(--b);background:var(--s2);color:var(--t);cursor:pointer;font-size:10px;font-weight:600;transition:all .2s;text-decoration:none}.btn:hover{border-color:var(--am);transform:translateY(-1px)}
.tabs{display:flex;gap:2px;margin-bottom:14px;border-bottom:1px solid var(--b)}.tab{padding:8px 16px;cursor:pointer;font-size:10px;font-weight:600;text-transform:uppercase;color:var(--d);border-bottom:2px solid transparent}.tab:hover{color:var(--t)}.tab.active{color:var(--am);border-color:var(--am)}
.panel{display:none}.panel.active{display:block}
.modal{display:none;position:fixed;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,.75);z-index:9999;justify-content:center;align-items:center}.modal-box{background:var(--s);border:1px solid var(--b);border-radius:12px;padding:20px;max-width:950px;width:92%;max-height:82vh;overflow-y:auto}
.bar{height:8px;border-radius:4px;background:var(--s2);overflow:hidden;margin-top:4px}.bar-fill{height:100%;border-radius:4px}
@media(max-width:900px){.stats{grid-template-columns:repeat(3,1fr)}.g2{grid-template-columns:1fr}}
</style>
<link rel="stylesheet" href="wevads-global.css?v1770777318">
</head><body>
<div class="hdr"><div><h1>🔭 <span>Dark Scout</span></h1><div style="color:var(--d);font-size:11px;margin-top:4px">Target discovery — relay scanning — vulnerability assessment — infrastructure recon</div></div><div style="display:flex;gap:8px;align-items:center"><span class="badge badge-am">● SCOUT</span><a href="menu.html" class="btn">Menu</a><a href="operations-overview.html" class="btn">← Overview</a></div></div>
<div class="wrap">
<div class="stats">
<div class="sc" onclick="drill('targets')"><div class="n" style="color:var(--am)"><?=$_dt?></div><div class="l">Targets ▼</div><div class="delta"><?=$_dta?> active</div></div>
<div class="sc" onclick="drill('results')"><div class="n" style="color:var(--cy)"><?=$_dr?></div><div class="l">Scout Results ▼</div><div class="delta">discovered</div></div>
<div class="sc" onclick="drill('relays')"><div class="n" style="color:var(--gn)"><?=$_relays?></div><div class="l">Open Relays ▼</div><div class="delta" style="color:var(--gn)">usable</div></div>
<div class="sc" onclick="drill('score')"><div class="n" style="color:var(--bl)"><?=$_avgScore?></div><div class="l">Avg Score ▼</div><div class="delta"><?=$_highScore?> high (>70)</div></div>
<div class="sc" onclick="drill('leads')"><div class="n" style="color:var(--pu)"><?=$_totalLeads?></div><div class="l">Leads Found ▼</div><div class="delta">from targets</div></div>
<div class="sc" onclick="drill('scans')"><div class="n" style="color:var(--pk)"><?=count($_scanTypes)?></div><div class="l">Scan Types ▼</div><div class="delta">methods</div></div>
</div>
<div class="tabs">
<div class="tab active" onclick="showTab('results')">Results</div>
<div class="tab" onclick="showTab('targets')">Targets</div>
<div class="tab" onclick="showTab('analysis')">Analysis</div>
</div>
<!-- RESULTS -->
<div class="panel active" id="tab-results">
<div class="cd">
<h3 style="font-size:13px;margin-bottom:10px;color:var(--cy)">🔍 Scout Results</h3>
<table><thead><tr><th>ID</th><th>IP</th><th>Hostname</th><th>Port</th><th>Protocol</th><th>Relay</th><th>Score</th><th>Type</th><th>Date</th></tr></thead><tbody>
<?php foreach($_results as $r): $scoreCol=($r['usability_score']??0)>70?'var(--gn)':(($r['usability_score']??0)>40?'var(--am)':'var(--rd)'); ?>
<tr><td>#<?=$r['id']?></td><td class="mono" style="color:var(--cy)"><?=htmlspecialchars($r['ip_address']??'—')?></td><td><?=htmlspecialchars($r['hostname']??'—')?></td><td class="mono"><?=$r['port']?></td><td><span class="badge badge-cy"><?=htmlspecialchars($r['protocol']??'—')?></span></td><td><?=$r['relay_open']?'<span class="badge badge-gn">OPEN</span>':'<span class="badge badge-rd">CLOSED</span>'?></td><td class="mono" style="color:<?=$scoreCol?>"><?=$r['usability_score']?></td><td><span class="badge badge-am"><?=htmlspecialchars($r['scan_type']??'—')?></span></td><td style="font-size:10px;color:var(--d)"><?=substr($r['discovered_at']??'',0,16)?></td></tr>
<?php endforeach; if(empty($_results)):?><tr><td colspan="9" style="text-align:center;color:var(--d);padding:20px">No results</td></tr><?php endif;?>
</tbody></table>
</div>
</div>
<!-- TARGETS -->
<div class="panel" id="tab-targets">
<div class="cd">
<h3 style="font-size:13px;margin-bottom:10px;color:var(--am)">🎯 Scout Targets</h3>
<table><thead><tr><th>ID</th><th>Target</th><th>Scan Type</th><th>Relays</th><th>Leads</th><th>Status</th><th>Date</th></tr></thead><tbody>
<?php foreach($_targets as $t): $bc=($t['status']??'')==='completed'?'badge-gn':(($t['status']??'')==='active'?'badge-am':'badge-rd'); ?>
<tr><td>#<?=$t['id']?></td><td style="font-weight:600;color:var(--cy)"><?=htmlspecialchars($t['target'])?></td><td><span class="badge badge-pu"><?=htmlspecialchars($t['scan_type'])?></span></td><td class="mono"><?=$t['relays_found']?></td><td class="mono"><?=$t['leads_found']?></td><td><span class="badge <?=$bc?>"><?=strtoupper($t['status'])?></span></td><td style="font-size:10px;color:var(--d)"><?=substr($t['created_at']??'',0,16)?></td></tr>
<?php endforeach; if(empty($_targets)):?><tr><td colspan="7" style="text-align:center;color:var(--d);padding:20px">No targets</td></tr><?php endif;?>
</tbody></table>
</div>
</div>
<!-- ANALYSIS -->
<div class="panel" id="tab-analysis">
<div class="g2">
<div class="cd">
<h3 style="font-size:13px;margin-bottom:10px;color:var(--pu)">📊 Scan Types Performance</h3>
<table><thead><tr><th>Scan Type</th><th>Results</th><th>Avg Score</th><th>Performance</th></tr></thead><tbody>
<?php foreach($_scanTypes as $s): $col=($s['avg_score']??0)>70?'var(--gn)':(($s['avg_score']??0)>40?'var(--am)':'var(--rd)'); $w=min(($s['avg_score']??0),100); ?>
<tr><td style="font-weight:600"><?=htmlspecialchars($s['scan_type'])?></td><td class="mono"><?=$s['cnt']?></td><td class="mono" style="color:<?=$col?>"><?=$s['avg_score']??0?></td><td><div class="bar" style="width:100px"><div class="bar-fill" style="width:<?=$w?>%;background:<?=$col?>"></div></div></td></tr>
<?php endforeach; ?>
</tbody></table>
</div>
<div class="cd">
<h3 style="font-size:13px;margin-bottom:10px;color:var(--gn)">📈 Summary</h3>
<table><thead><tr><th>Metric</th><th>Value</th></tr></thead><tbody>
<tr><td>Total Targets</td><td class="mono"><?=$_dt?></td></tr>
<tr><td>Total Results</td><td class="mono"><?=$_dr?></td></tr>
<tr><td>Open Relays</td><td class="mono" style="color:var(--gn)"><?=$_relays?></td></tr>
<tr><td>Avg Usability</td><td class="mono"><?=$_avgScore?></td></tr>
<tr><td>High Score (&gt;70)</td><td class="mono" style="color:var(--gn)"><?=$_highScore?></td></tr>
<tr><td>Total Leads Found</td><td class="mono"><?=$_totalLeads?></td></tr>
<tr><td>Total Relays Found</td><td class="mono"><?=$_totalRelays?></td></tr>
</tbody></table>
</div>
</div>
</div>
</div>
<div class="modal" id="drillModal" onclick="if(event.target===this)this.style.display='none'"><div class="modal-box"><div style="display:flex;justify-content:space-between;align-items:center;margin-bottom:14px"><h3 id="drillTitle" style="font-size:14px;color:var(--am)"></h3><button onclick="document.getElementById('drillModal').style.display='none'" style="background:none;border:none;color:var(--rd);font-size:18px;cursor:pointer"></button></div><div id="drillContent" style="font-size:11px"></div></div></div>
<script>
function showTab(id){document.querySelectorAll('.tab').forEach(function(t){t.classList.remove('active')});document.querySelectorAll('.panel').forEach(function(p){p.classList.remove('active')});document.getElementById('tab-'+id).classList.add('active');event.target.classList.add('active')}
async function drill(type){
var m=document.getElementById('drillModal'),tt=document.getElementById('drillTitle'),ct=document.getElementById('drillContent');
m.style.display='flex';ct.innerHTML='<div style="text-align:center;padding:40px;color:var(--d)">Loading...</div>';
var html='';
var titles={targets:'🎯 All Targets',results:'🔍 Scout Results Detail',relays:'📡 Open Relays',score:'📊 Usability Scores',leads:'👤 Leads Discovery',scans:'🔬 Scan Types'};
tt.textContent=titles[type]||type;
html+='<div style="display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin-bottom:14px">';
html+='<div class="cd" style="text-align:center"><div style="font-size:20px;font-weight:700;color:var(--am)"><?=$_dt?></div><div class="l">Targets</div></div>';
html+='<div class="cd" style="text-align:center"><div style="font-size:20px;font-weight:700;color:var(--cy)"><?=$_dr?></div><div class="l">Results</div></div>';
html+='<div class="cd" style="text-align:center"><div style="font-size:20px;font-weight:700;color:var(--gn)"><?=$_relays?></div><div class="l">Open Relays</div></div></div>';
if(type==='targets'){
html+='<table><thead><tr><th>Target</th><th>Scan</th><th>Relays</th><th>Leads</th><th>Status</th></tr></thead><tbody>';
<?php foreach($_targets as $t):$bc=($t['status']??'')==='completed'?'badge-gn':'badge-am';?>html+='<tr><td style="color:var(--cy);font-weight:600"><?=addslashes($t['target'])?></td><td><span class="badge badge-pu"><?=addslashes($t['scan_type'])?></span></td><td class="mono"><?=$t['relays_found']?></td><td class="mono"><?=$t['leads_found']?></td><td><span class="badge <?=$bc?>"><?=strtoupper($t['status'])?></span></td></tr>';<?php endforeach;?>
html+='</tbody></table>';
} else if(type==='results'||type==='relays'){
html+='<table><thead><tr><th>IP</th><th>Host</th><th>Port</th><th>Relay</th><th>Score</th><th>Type</th></tr></thead><tbody>';
<?php foreach($_results as $r):$sc=($r['usability_score']??0)>70?'var(--gn)':(($r['usability_score']??0)>40?'var(--am)':'var(--rd)');?>html+='<tr><td class="mono" style="color:var(--cy)"><?=addslashes($r['ip_address']??'-')?></td><td><?=addslashes($r['hostname']??'-')?></td><td class="mono"><?=$r['port']?></td><td><?=$r['relay_open']?'<span class=\"badge badge-gn\">OPEN</span>':'<span class=\"badge badge-rd\">CLOSED</span>'?></td><td class="mono" style="color:<?=$sc?>"><?=$r['usability_score']?></td><td><span class="badge badge-am"><?=addslashes($r['scan_type']??'-')?></span></td></tr>';<?php endforeach;?>
html+='</tbody></table>';
} else if(type==='scans'){
html+='<table><thead><tr><th>Scan Type</th><th>Count</th><th>Avg Score</th></tr></thead><tbody>';
<?php foreach($_scanTypes as $s):?>html+='<tr><td style="font-weight:600"><?=addslashes($s['scan_type'])?></td><td class="mono"><?=$s['cnt']?></td><td class="mono"><?=$s['avg_score']??0?></td></tr>';<?php endforeach;?>
html+='</tbody></table>';
} else {
html+='<div class="cd" style="color:var(--d)">Summary: <?=$_dt?> targets scanned, <?=$_dr?> results discovered, <?=$_relays?> open relays, avg score <?=$_avgScore?></div>';
}
ct.innerHTML=html;
}
</script>
<script src="arsenal-common.js?v1770778169"></script>
<?php include("/opt/wevads-arsenal/public/universal-drill.html"); ?>
</body></html>