tyyyrvid commited on
Commit
d474bdc
·
verified ·
1 Parent(s): 4b25012

Create an terminal multitool style tool for OSINT

Browse files
Files changed (2) hide show
  1. README.md +8 -5
  2. index.html +428 -19
README.md CHANGED
@@ -1,10 +1,13 @@
1
  ---
2
- title: Create An Terminal Multitool Style Tool
3
- emoji: 📚
4
- colorFrom: pink
5
- colorTo: pink
6
  sdk: static
7
  pinned: false
 
 
8
  ---
9
 
10
- Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
 
 
1
  ---
2
+ title: Create-an-terminal-multitool-style-tool-
3
+ colorFrom: yellow
4
+ colorTo: red
5
+ emoji: 🐳
6
  sdk: static
7
  pinned: false
8
+ tags:
9
+ - deepsite-v3
10
  ---
11
 
12
+ # Welcome to your new DeepSite project!
13
+ This project was created with [DeepSite](https://deepsite.hf.co).
index.html CHANGED
@@ -1,19 +1,428 @@
1
- <!doctype html>
2
- <html>
3
- <head>
4
- <meta charset="utf-8" />
5
- <meta name="viewport" content="width=device-width" />
6
- <title>My static Space</title>
7
- <link rel="stylesheet" href="style.css" />
8
- </head>
9
- <body>
10
- <div class="card">
11
- <h1>Welcome to your static Space!</h1>
12
- <p>You can modify this app directly by editing <i>index.html</i> in the Files and versions tab.</p>
13
- <p>
14
- Also don't forget to check the
15
- <a href="https://huggingface.co/docs/hub/spaces" target="_blank">Spaces documentation</a>.
16
- </p>
17
- </div>
18
- </body>
19
- </html>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>OSINT Terminal Toolkit</title>
7
+ <link rel="icon" type="image/x-icon" href="/static/favicon.ico">
8
+ <script src="https://cdn.tailwindcss.com"></script>
9
+ <script src="https://cdn.jsdelivr.net/npm/feather-icons/dist/feather.min.js"></script>
10
+ <script src="https://unpkg.com/feather-icons"></script>
11
+ <style>
12
+ @import url('https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;500;600;700&display=swap');
13
+
14
+ * {
15
+ font-family: 'JetBrains Mono', monospace;
16
+ }
17
+
18
+ .terminal-cursor {
19
+ animation: blink 1s infinite;
20
+ }
21
+
22
+ @keyframes blink {
23
+ 0%, 50% { opacity: 1; }
24
+ 51%, 100% { opacity: 0; }
25
+ }
26
+
27
+ .glow-green {
28
+ text-shadow: 0 0 5px #10b981, 0 0 10px #10b981;
29
+ }
30
+
31
+ .scan-line {
32
+ animation: scan 2s linear infinite;
33
+ }
34
+
35
+ @keyframes scan {
36
+ 0% { transform: translateY(0); }
37
+ 100% { transform: translateY(100vh); }
38
+ }
39
+
40
+ .terminal-text {
41
+ text-shadow: 0 0 3px rgba(16, 185, 129, 0.5);
42
+ }
43
+
44
+ ::-webkit-scrollbar {
45
+ width: 8px;
46
+ height: 8px;
47
+ }
48
+
49
+ ::-webkit-scrollbar-track {
50
+ background: #374151;
51
+ }
52
+
53
+ ::-webkit-scrollbar-thumb {
54
+ background: #10b981;
55
+ border-radius: 4px;
56
+ }
57
+
58
+ ::-webkit-scrollbar-thumb:hover {
59
+ background: #059669;
60
+ }
61
+ </style>
62
+ </head>
63
+ <body class="bg-black min-h-screen text-green-400 overflow-hidden">
64
+ <!-- Background Matrix Effect -->
65
+ <div class="fixed inset-0 opacity-10 pointer-events-none">
66
+ <canvas id="matrix-bg" class="w-full h-full"></canvas>
67
+ </div>
68
+
69
+ <!-- Scan Line Effect -->
70
+ <div class="scan-line fixed inset-x-0 h-1 bg-gradient-to-b from-green-500 to-transparent opacity-50 pointer-events-none"></div>
71
+
72
+ <!-- Main Container -->
73
+ <div class="relative z-10 flex flex-col h-screen">
74
+ <!-- Header -->
75
+ <header class="bg-neutral-900 border-b border-green-500/30 px-4 py-2">
76
+ <div class="flex items-center justify-between">
77
+ <div class="flex items-center space-x-4">
78
+ <div class="flex items-center space-x-2">
79
+ <i data-feather="terminal" class="w-5 h-5 text-green-500"></i>
80
+ <span class="text-green-500 font-bold">OSINT-TOOLKIT v2.0.1</span>
81
+ </div>
82
+ <div class="flex items-center space-x-2 text-xs">
83
+ <span class="px-2 py-1 bg-green-500/20 rounded text-green-400">ONLINE</span>
84
+ <span id="time" class="text-green-400/70"></span>
85
+ </div>
86
+ </div>
87
+ <div class="flex items-center space-x-4">
88
+ <button onclick="toggleTheme()" class="p-2 hover:bg-neutral-800 rounded transition-colors">
89
+ <i data-feather="moon" class="w-4 h-4"></i>
90
+ </button>
91
+ <button onclick="showHelp()" class="p-2 hover:bg-neutral-800 rounded transition-colors">
92
+ <i data-feather="help-circle" class="w-4 h-4"></i>
93
+ </button>
94
+ </div>
95
+ </div>
96
+ </header>
97
+
98
+ <!-- Terminal Content -->
99
+ <main class="flex-1 flex">
100
+ <!-- Sidebar -->
101
+ <aside class="w-64 bg-neutral-900/50 border-r border-green-500/30 p-4 overflow-y-auto">
102
+ <h3 class="text-xs uppercase tracking-wider text-green-500 mb-4">Modules</h3>
103
+ <nav class="space-y-2">
104
+ <button onclick="selectModule('ip')" class="module-btn w-full text-left px-3 py-2 rounded hover:bg-green-500/10 transition-colors flex items-center space-x-2 text-sm">
105
+ <i data-feather="globe" class="w-4 h-4"></i>
106
+ <span>IP Lookup</span>
107
+ </button>
108
+ <button onclick="selectModule('domain')" class="module-btn w-full text-left px-3 py-2 rounded hover:bg-green-500/10 transition-colors flex items-center space-x-2 text-sm">
109
+ <i data-feather="server" class="w-4 h-4"></i>
110
+ <span>Domain Info</span>
111
+ </button>
112
+ <button onclick="selectModule('email')" class="module-btn w-full text-left px-3 py-2 rounded hover:bg-green-500/10 transition-colors flex items-center space-x-2 text-sm">
113
+ <i data-feather="mail" class="w-4 h-4"></i>
114
+ <span>Email Validator</span>
115
+ </button>
116
+ <button onclick="selectModule('username')" class="module-btn w-full text-left px-3 py-2 rounded hover:bg-green-500/10 transition-colors flex items-center space-x-2 text-sm">
117
+ <i data-feather="user" class="w-4 h-4"></i>
118
+ <span>Username Search</span>
119
+ </button>
120
+ <button onclick="selectModule('hash')" class="module-btn w-full text-left px-3 py-2 rounded hover:bg-green-500/10 transition-colors flex items-center space-x-2 text-sm">
121
+ <i data-feather="key" class="w-4 h-4"></i>
122
+ <span>Hash Identifier</span>
123
+ </button>
124
+ <button onclick="selectModule('url')" class="module-btn w-full text-left px-3 py-2 rounded hover:bg-green-500/10 transition-colors flex items-center space-x-2 text-sm">
125
+ <i data-feather="link" class="w-4 h-4"></i>
126
+ <span>URL Analyzer</span>
127
+ </button>
128
+ </nav>
129
+
130
+ <div class="mt-8 pt-4 border-t border-green-500/20">
131
+ <h3 class="text-xs uppercase tracking-wider text-green-500 mb-4">Statistics</h3>
132
+ <div class="space-y-2 text-xs">
133
+ <div class="flex justify-between">
134
+ <span class="text-green-400/70">Queries</span>
135
+ <span id="queryCount">0</span>
136
+ </div>
137
+ <div class="flex justify-between">
138
+ <span class="text-green-400/70">Success Rate</span>
139
+ <span>100%</span>
140
+ </div>
141
+ <div class="flex justify-between">
142
+ <span class="text-green-400/70">Uptime</span>
143
+ <span id="uptime">00:00:00</span>
144
+ </div>
145
+ </div>
146
+ </div>
147
+ </aside>
148
+
149
+ <!-- Terminal Output Area -->
150
+ <div class="flex-1 flex flex-col bg-black/50">
151
+ <!-- Output Display -->
152
+ <div id="output" class="flex-1 p-4 overflow-y-auto terminal-text">
153
+ <div class="text-green-400">
154
+ <div class="mb-2">╔══════════════════════════════════════════════════════════════╗</div>
155
+ <div class="mb-2">║ OSINT Terminal Toolkit v2.0.1 ║</div>
156
+ <div class="mb-2">║ Open Source Intelligence Tools ║</div>
157
+ <div class="mb-2">║ ║</div>
158
+ <div class="mb-2">║ Select a module from the sidebar or type 'help' for commands ║</div>
159
+ <div class="mb-2">╚══════════════════════════════════════════════════════════════╝</div>
160
+ <div class="mt-4 text-green-500">root@osint:~$ <span class="terminal-cursor">█</span></div>
161
+ </div>
162
+ </div>
163
+
164
+ <!-- Input Area -->
165
+ <div class="border-t border-green-500/30 p-4 bg-neutral-900/50">
166
+ <div class="flex items-center space-x-2">
167
+ <span class="text-green-500">root@osint:~$</span>
168
+ <input
169
+ type="text"
170
+ id="commandInput"
171
+ class="flex-1 bg-transparent outline-none text-green-400 placeholder-green-400/50"
172
+ placeholder="Enter command or data..."
173
+ onkeypress="handleCommand(event)"
174
+ >
175
+ <button onclick="executeCommand()" class="px-4 py-1 bg-green-500/20 hover:bg-green-500/30 rounded transition-colors text-green-400 text-sm">
176
+ Execute
177
+ </button>
178
+ </div>
179
+ </div>
180
+ </div>
181
+ </main>
182
+ </div>
183
+
184
+ <!-- Help Modal -->
185
+ <div id="helpModal" class="hidden fixed inset-0 bg-black/80 flex items-center justify-center z-50">
186
+ <div class="bg-neutral-900 border border-green-500/30 rounded-lg p-6 max-w-2xl w-full mx-4 max-h-[80vh] overflow-y-auto">
187
+ <div class="flex justify-between items-center mb-4">
188
+ <h2 class="text-xl font-bold text-green-500">Command Reference</h2>
189
+ <button onclick="closeHelp()" class="text-green-400 hover:text-green-300">
190
+ <i data-feather="x" class="w-5 h-5"></i>
191
+ </button>
192
+ </div>
193
+ <div class="space-y-3 text-sm">
194
+ <div class="border-b border-green-500/20 pb-2">
195
+ <code class="text-green-400">help</code>
196
+ <span class="text-green-400/70 ml-2">- Show this help menu</span>
197
+ </div>
198
+ <div class="border-b border-green-500/20 pb-2">
199
+ <code class="text-green-400">clear</code>
200
+ <span class="text-green-400/70 ml-2">- Clear terminal output</span>
201
+ </div>
202
+ <div class="border-b border-green-500/20 pb-2">
203
+ <code class="text-green-400">ip [address]</code>
204
+ <span class="text-green-400/70 ml-2">- Lookup IP address information</span>
205
+ </div>
206
+ <div class="border-b border-green-500/20 pb-2">
207
+ <code class="text-green-400">domain [name]</code>
208
+ <span class="text-green-400/70 ml-2">- Get domain information</span>
209
+ </div>
210
+ <div class="border-b border-green-500/20 pb-2">
211
+ <code class="text-green-400">email [address]</code>
212
+ <span class="text-green-400/70 ml-2">- Validate email address</span>
213
+ </div>
214
+ <div class="border-b border-green-500/20 pb-2">
215
+ <code class="text-green-400">user [username]</code>
216
+ <span class="text-green-400/70 ml-2">- Search username across platforms</span>
217
+ </div>
218
+ <div class="border-b border-green-500/20 pb-2">
219
+ <code class="text-green-400">hash [value]</code>
220
+ <span class="text-green-400/70 ml-2">- Identify hash type</span>
221
+ </div>
222
+ <div class="border-b border-green-500/20 pb-2">
223
+ <code class="text-green-400">url [address]</code>
224
+ <span class="text-green-400/70 ml-2">- Analyze URL</span>
225
+ </div>
226
+ </div>
227
+ </div>
228
+ </div>
229
+
230
+ <script>
231
+ // Initialize Feather Icons
232
+ feather.replace();
233
+
234
+ // Global variables
235
+ let currentModule = null;
236
+ let queryCount = 0;
237
+ let startTime = Date.now();
238
+
239
+ // Matrix background effect
240
+ const canvas = document.getElementById('matrix-bg');
241
+ const ctx = canvas.getContext('2d');
242
+
243
+ canvas.width = window.innerWidth;
244
+ canvas.height = window.innerHeight;
245
+
246
+ const matrix = "ABCDEFGHIJKLMNOPQRSTUVWXYZ123456789@#$%^&*()*&^%+-/~{[|`]}";
247
+ const matrixArray = matrix.split("");
248
+
249
+ const fontSize = 10;
250
+ const columns = canvas.width / fontSize;
251
+
252
+ const drops = [];
253
+ for(let x = 0; x < columns; x++) {
254
+ drops[x] = 1;
255
+ }
256
+
257
+ function drawMatrix() {
258
+ ctx.fillStyle = 'rgba(0, 0, 0, 0.04)';
259
+ ctx.fillRect(0, 0, canvas.width, canvas.height);
260
+
261
+ ctx.fillStyle = '#10b981';
262
+ ctx.font = fontSize + 'px monospace';
263
+
264
+ for(let i = 0; i < drops.length; i++) {
265
+ const text = matrixArray[Math.floor(Math.random() * matrixArray.length)];
266
+ ctx.fillText(text, i * fontSize, drops[i] * fontSize);
267
+
268
+ if(drops[i] * fontSize > canvas.height && Math.random() > 0.975) {
269
+ drops[i] = 0;
270
+ }
271
+ drops[i]++;
272
+ }
273
+ }
274
+
275
+ setInterval(drawMatrix, 35);
276
+
277
+ // Update time
278
+ function updateTime() {
279
+ const now = new Date();
280
+ document.getElementById('time').textContent = now.toLocaleTimeString();
281
+ }
282
+ setInterval(updateTime, 1000);
283
+ updateTime();
284
+
285
+ // Update uptime
286
+ function updateUptime() {
287
+ const elapsed = Date.now() - startTime;
288
+ const hours = Math.floor(elapsed / 3600000);
289
+ const minutes = Math.floor((elapsed % 3600000) / 60000);
290
+ const seconds = Math.floor((elapsed % 60000) / 1000);
291
+ document.getElementById('uptime').textContent =
292
+ `${hours.toString().padStart(2, '0')}:${minutes.toString().padStart(2, '0')}:${seconds.toString().padStart(2, '0')}`;
293
+ }
294
+ setInterval(updateUptime, 1000);
295
+
296
+ // Module selection
297
+ function selectModule(module) {
298
+ currentModule = module;
299
+ document.querySelectorAll('.module-btn').forEach(btn => {
300
+ btn.classList.remove('bg-green-500/20');
301
+ });
302
+ event.currentTarget.classList.add('bg-green-500/20');
303
+
304
+ addOutput(`\n[${new Date().toLocaleTimeString()}] Module selected: ${module.toUpperCase()}`);
305
+ addOutput(`Enter ${module} data or type 'help' for usage`);
306
+ }
307
+
308
+ // Command handling
309
+ function handleCommand(event) {
310
+ if (event.key === 'Enter') {
311
+ executeCommand();
312
+ }
313
+ }
314
+
315
+ async function executeCommand() {
316
+ const input = document.getElementById('commandInput');
317
+ const command = input.value.trim();
318
+
319
+ if (!command) return;
320
+
321
+ addOutput(`\nroot@osint:~$ ${command}`);
322
+ input.value = '';
323
+
324
+ queryCount++;
325
+ document.getElementById('queryCount').textContent = queryCount;
326
+
327
+ // Parse command
328
+ const parts = command.split(' ');
329
+ const cmd = parts[0].toLowerCase();
330
+ const args = parts.slice(1).join(' ');
331
+
332
+ switch(cmd) {
333
+ case 'help':
334
+ showHelp();
335
+ break;
336
+ case 'clear':
337
+ clearTerminal();
338
+ break;
339
+ case 'ip':
340
+ await lookupIP(args);
341
+ break;
342
+ case 'domain':
343
+ await lookupDomain(args);
344
+ break;
345
+ case 'email':
346
+ await validateEmail(args);
347
+ break;
348
+ case 'user':
349
+ await searchUsername(args);
350
+ break;
351
+ case 'hash':
352
+ await identifyHash(args);
353
+ break;
354
+ case 'url':
355
+ await analyzeURL(args);
356
+ break;
357
+ default:
358
+ if (currentModule) {
359
+ switch(currentModule) {
360
+ case 'ip':
361
+ await lookupIP(command);
362
+ break;
363
+ case 'domain':
364
+ await lookupDomain(command);
365
+ break;
366
+ case 'email':
367
+ await validateEmail(command);
368
+ break;
369
+ case 'username':
370
+ await searchUsername(command);
371
+ break;
372
+ case 'hash':
373
+ await identifyHash(command);
374
+ break;
375
+ case 'url':
376
+ await analyzeURL(command);
377
+ break;
378
+ }
379
+ } else {
380
+ addOutput(`Command not found: ${cmd}. Type 'help' for available commands.`);
381
+ }
382
+ }
383
+ }
384
+
385
+ // OSINT Functions
386
+ async function lookupIP(ip) {
387
+ if (!ip) {
388
+ addOutput('Error: IP address required');
389
+ return;
390
+ }
391
+
392
+ addOutput(`[+] Querying IP: ${ip}`);
393
+ addOutput('[*] Connecting to database...');
394
+
395
+ try {
396
+ const response = await fetch(`https://ipapi.co/${ip}/json/`);
397
+ const data = await response.json();
398
+
399
+ if (data.error) {
400
+ addOutput(`[!] Error: ${data.reason}`);
401
+ } else {
402
+ addOutput(`[✓] IP Information Retrieved:`);
403
+ addOutput(` IP: ${data.ip}`);
404
+ addOutput(` Country: ${data.country_name} (${data.country})`);
405
+ addOutput(` Region: ${data.region}`);
406
+ addOutput(` City: ${data.city}`);
407
+ addOutput(` ISP: ${data.org}`);
408
+ addOutput(` Latitude: ${data.latitude}`);
409
+ addOutput(` Longitude: ${data.longitude}`);
410
+ addOutput(` Timezone: ${data.timezone}`);
411
+ }
412
+ } catch (error) {
413
+ addOutput(`[!] Error: Failed to fetch IP information`);
414
+ }
415
+ }
416
+
417
+ async function lookupDomain(domain) {
418
+ if (!domain) {
419
+ addOutput('Error: Domain name required');
420
+ return;
421
+ }
422
+
423
+ addOutput(`[+] Querying Domain: ${domain}`);
424
+ addOutput('[*] Performing DNS lookup...');
425
+
426
+ // Simulate domain lookup
427
+ </body>
428
+ </html>