/ swarm_simple.py
swarm_simple.py
1 #!/usr/bin/env python3 2 """ 3 SIMPLE SWARM - Working Kali Linux Version 4 No external dependencies needed 5 """ 6 7 import json 8 import socket 9 import threading 10 import time 11 import hashlib 12 import sys 13 import os 14 import base64 15 from typing import Dict, List 16 import urllib.request 17 18 class SimpleSwarm: 19 def __init__(self, node_id=None): 20 self.node_id = node_id or self.generate_id() 21 self.peers: Dict[str, Dict] = {} 22 self.tasks = [] 23 self.running = True 24 25 print(f""" 26 ╔══════════════════════════════════╗ 27 ║ SIMPLE SWARM - Node: {self.node_id[:8]} ║ 28 ╚══════════════════════════════════╝ 29 """) 30 31 def generate_id(self) -> str: 32 """Generate unique node ID""" 33 import uuid 34 hostname = socket.gethostname() 35 timestamp = str(time.time()) 36 unique = f"{hostname}_{timestamp}_{uuid.getnode()}" 37 return f"node_{hashlib.md5(unique.encode()).hexdigest()[:12]}" 38 39 def simple_encrypt(self, text: str, key: str = "swarm") -> str: 40 """Simple XOR encryption for demo""" 41 encrypted = [] 42 for i, char in enumerate(text): 43 key_char = key[i % len(key)] 44 encrypted.append(chr(ord(char) ^ ord(key_char))) 45 return base64.b64encode(''.join(encrypted).encode()).decode() 46 47 def simple_decrypt(self, encrypted: str, key: str = "swarm") -> str: 48 """Simple XOR decryption""" 49 try: 50 decoded = base64.b64decode(encrypted).decode() 51 decrypted = [] 52 for i, char in enumerate(decoded): 53 key_char = key[i % len(key)] 54 decrypted.append(chr(ord(char) ^ ord(key_char))) 55 return ''.join(decrypted) 56 except: 57 return encrypted 58 59 def discover_peers_local(self) -> List[Dict]: 60 """Discover peers on local network""" 61 peers = [] 62 63 # Get local IP range 64 try: 65 s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) 66 s.connect(("8.8.8.8", 80)) 67 local_ip = s.getsockname()[0] 68 s.close() 69 70 # Simple broadcast 71 broadcast_ip = '.'.join(local_ip.split('.')[:3]) + '.255' 72 73 # Send discovery 74 sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) 75 sock.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1) 76 sock.settimeout(2) 77 78 discovery_msg = json.dumps({ 79 'type': 'discovery', 80 'node_id': self.node_id, 81 'action': 'ping' 82 }).encode() 83 84 sock.sendto(discovery_msg, (broadcast_ip, 8888)) 85 86 # Listen 87 start = time.time() 88 while time.time() - start < 3: 89 try: 90 data, addr = sock.recvfrom(1024) 91 response = json.loads(data.decode()) 92 if response.get('type') == 'response': 93 peers.append({ 94 'ip': addr[0], 95 'port': response.get('port', 8888), 96 'node_id': response.get('node_id'), 97 'timestamp': time.time() 98 }) 99 except: 100 continue 101 102 sock.close() 103 104 except Exception as e: 105 print(f"⚠️ Discovery error: {e}") 106 107 return peers 108 109 def start_server(self, port=8888): 110 """Start UDP server for peer communication""" 111 def server_loop(): 112 sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) 113 sock.bind(('0.0.0.0', port)) 114 sock.settimeout(1) 115 116 print(f"📡 Listening on port {port}") 117 118 while self.running: 119 try: 120 data, addr = sock.recvfrom(1024) 121 message = json.loads(data.decode()) 122 123 if message.get('type') == 'discovery': 124 # Respond to discovery 125 response = json.dumps({ 126 'type': 'response', 127 'node_id': self.node_id, 128 'port': port, 129 'status': 'active' 130 }).encode() 131 sock.sendto(response, addr) 132 print(f"📡 Discovery request from {addr[0]}") 133 134 elif message.get('type') == 'message': 135 # Handle encrypted message 136 encrypted = message.get('data', '') 137 decrypted = self.simple_decrypt(encrypted) 138 print(f"📨 Message from {addr[0]}: {decrypted[:50]}...") 139 140 # Echo back 141 response = json.dumps({ 142 'type': 'ack', 143 'node_id': self.node_id 144 }).encode() 145 sock.sendto(response, addr) 146 147 except socket.timeout: 148 continue 149 except Exception as e: 150 print(f"⚠️ Server error: {e}") 151 152 sock.close() 153 154 threading.Thread(target=server_loop, daemon=True).start() 155 156 def send_message(self, peer_ip: str, message: str, port=8888): 157 """Send message to peer""" 158 try: 159 encrypted = self.simple_encrypt(message) 160 161 data = json.dumps({ 162 'type': 'message', 163 'node_id': self.node_id, 164 'data': encrypted, 165 'timestamp': time.time() 166 }).encode() 167 168 sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) 169 sock.sendto(data, (peer_ip, port)) 170 sock.close() 171 172 print(f"📤 Sent message to {peer_ip}") 173 return True 174 175 except Exception as e: 176 print(f"❌ Send failed: {e}") 177 return False 178 179 def query_ai(self, prompt: str): 180 """Use Groq API for AI tasks""" 181 try: 182 api_key = "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" 183 url = "https://api.groq.com/openai/v1/chat/completions" 184 185 data = json.dumps({ 186 "model": "llama-3.3-70b-versatile", 187 "messages": [{"role": "user", "content": prompt}], 188 "max_tokens": 500 189 }).encode() 190 191 req = urllib.request.Request( 192 url, 193 data=data, 194 headers={ 195 'Authorization': f'Bearer {api_key}', 196 'Content-Type': 'application/json' 197 } 198 ) 199 200 with urllib.request.urlopen(req, timeout=10) as response: 201 result = json.loads(response.read().decode()) 202 return result['choices'][0]['message']['content'] 203 204 except Exception as e: 205 return f"AI Error: {str(e)}" 206 207 def distribute_task(self, task: str): 208 """Distribute task to peers""" 209 print(f"🔧 Distributing task: {task[:50]}...") 210 211 # First, discover peers 212 peers = self.discover_peers_local() 213 214 if not peers: 215 print("⚠️ No peers found, processing locally") 216 result = self.query_ai(task) 217 print(f"🤖 Local AI Result: {result[:100]}...") 218 return result 219 220 # Send to first peer 221 peer = peers[0] 222 self.send_message(peer['ip'], f"AI_TASK:{task}") 223 224 # Also process locally 225 local_result = self.query_ai(task) 226 227 return f"Distributed to {len(peers)} peers. Local: {local_result[:100]}..." 228 229 def start_interactive(self): 230 """Start interactive mode""" 231 self.start_server() 232 233 print("\n💬 Interactive Swarm Mode") 234 print("Commands:") 235 print(" discover - Find peers") 236 print(" peers - List known peers") 237 print(" send IP - Send message to IP") 238 print(" task PROMPT - Distribute AI task") 239 print(" quit - Exit") 240 print("=" * 50) 241 242 while self.running: 243 try: 244 cmd = input("\nswarm> ").strip() 245 246 if cmd == "quit": 247 self.running = False 248 print("👋 Goodbye!") 249 break 250 251 elif cmd == "discover": 252 print("🔍 Discovering peers...") 253 peers = self.discover_peers_local() 254 if peers: 255 print(f"📡 Found {len(peers)} peers:") 256 for p in peers: 257 print(f" • {p['node_id'][:8]} @ {p['ip']}") 258 else: 259 print("❌ No peers found") 260 261 elif cmd == "peers": 262 print(f"📊 Known peers: {len(self.peers)}") 263 for peer_id, info in self.peers.items(): 264 print(f" • {peer_id[:8]} @ {info.get('ip', 'unknown')}") 265 266 elif cmd.startswith("send "): 267 parts = cmd.split() 268 if len(parts) >= 3: 269 ip = parts[1] 270 message = ' '.join(parts[2:]) 271 self.send_message(ip, message) 272 else: 273 print("Usage: send IP MESSAGE") 274 275 elif cmd.startswith("task "): 276 task = cmd[5:] 277 result = self.distribute_task(task) 278 print(f"📋 Task Result: {result}") 279 280 elif cmd == "help": 281 print("Commands: discover, peers, send IP MSG, task PROMPT, quit") 282 283 else: 284 print("❌ Unknown command. Type 'help' for commands.") 285 286 except KeyboardInterrupt: 287 print("\n👋 Goodbye!") 288 self.running = False 289 break 290 except Exception as e: 291 print(f"❌ Error: {e}") 292 293 def main(): 294 import argparse 295 296 parser = argparse.ArgumentParser(description="Simple Swarm for Kali") 297 parser.add_argument('--node-id', help='Custom node ID') 298 parser.add_argument('--discover', action='store_true', help='Discover peers and exit') 299 parser.add_argument('--send', nargs=2, metavar=('IP', 'MESSAGE'), help='Send message to IP') 300 parser.add_argument('--task', help='Process AI task') 301 302 args = parser.parse_args() 303 304 swarm = SimpleSwarm(args.node_id) 305 306 if args.discover: 307 peers = swarm.discover_peers_local() 308 print(f"Found {len(peers)} peers:") 309 for p in peers: 310 print(f" {p['ip']} - {p.get('node_id', 'unknown')}") 311 312 elif args.send: 313 ip, message = args.send 314 swarm.send_message(ip, message) 315 print(f"Message sent to {ip}") 316 317 elif args.task: 318 result = swarm.distribute_task(args.task) 319 print(f"Task Result: {result}") 320 321 else: 322 swarm.start_interactive() 323 324 if __name__ == "__main__": 325 main()