Sunday, May 25, 2025

AnyDesk like tool

 Da bismo napravili kompletno rešenje u kojem server može da vidi ekran klijenta i da daljinski koristi miša i tastaturu (kao kod softvera za daljinsku kontrolu poput AnyDesk, TeamViewer itd.), koristićemo Python sa sledećim bibliotekama:

  • socket — za mrežnu komunikaciju

  • pyautogui — za kontrolu miša i tastature

  • PIL.ImageGrab — za hvatanje ekrana

  • cv2 (OpenCV) — za prikaz slike na serveru

  • pickle i struct — za serijalizaciju podataka




✅ KORAK 1: Instaliraj biblioteke


pip install pyautogui opencv-python pillow

📡 KLIJENT (remote računar)


# client.py import socket import threading import pyautogui import pickle import struct from PIL import ImageGrab import io SERVER_IP = 'SERVER_IP_HERE' # npr. '192.168.1.5' SERVER_PORT = 9999 def send_screen(sock): while True: # Slikaj ekran img = ImageGrab.grab() with io.BytesIO() as output: img.save(output, format="JPEG") data = output.getvalue() # Pošalji dužinu i podatke sock.sendall(struct.pack(">L", len(data)) + data) def receive_commands(sock): while True: try: data = sock.recv(1024) if not data: break command = pickle.loads(data) if command["action"] == "move": pyautogui.moveTo(command["x"], command["y"]) elif command["action"] == "click": pyautogui.click() elif command["action"] == "write": pyautogui.write(command["text"]) except Exception as e: print("Error:", e) break def main(): with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: s.connect((SERVER_IP, SERVER_PORT)) threading.Thread(target=send_screen, args=(s,), daemon=True).start() receive_commands(s) if __name__ == "__main__": main()

🖥️ SERVER (kontroler)


# server.py import socket import cv2 import pickle import struct import threading HOST = '0.0.0.0' PORT = 9999 def handle_client(conn, addr): print(f"[+] Connected by {addr}") data = b'' payload_size = struct.calcsize(">L") def send_command(command): try: conn.sendall(pickle.dumps(command)) except: pass def mouse_control(): while True: key = cv2.waitKey(1) if key == ord('c'): send_command({"action": "click"}) elif key == ord('q'): break elif key == ord('t'): text = input("Unesi tekst za kucanje: ") send_command({"action": "write", "text": text}) threading.Thread(target=mouse_control, daemon=True).start() while True: try: # Primi dužinu slike while len(data) < payload_size: data += conn.recv(4096) packed_msg_size = data[:payload_size] data = data[payload_size:] msg_size = struct.unpack(">L", packed_msg_size)[0] # Primi ceo frame while len(data) < msg_size: data += conn.recv(4096) frame_data = data[:msg_size] data = data[msg_size:] # Prikaži sliku frame = cv2.imdecode(np.frombuffer(frame_data, np.uint8), cv2.IMREAD_COLOR) if frame is not None: cv2.imshow("Remote Screen", frame) # Šalji poziciju miša kad klikneš x, y = cv2.getWindowImageRect("Remote Screen")[0:2] pos = pyautogui.position() send_command({"action": "move", "x": pos.x, "y": pos.y}) except Exception as e: print("Error:", e) break conn.close() if __name__ == "__main__": import numpy as np import pyautogui with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as server: server.bind((HOST, PORT)) server.listen(1) print(f"[*] Listening on {HOST}:{PORT}") conn, addr = server.accept() handle_client(conn, addr)

🧪 Uputstvo za korišćenje:

  1. Pokreni server.py na računaru koji upravlja.

  2. Pokreni client.py na računaru koji će biti kontrolisan.

  3. Na prozoru koji prikazuje ekran:

    • Pritisni c da klikneš

    • Pritisni t da uneseš tekst za kucanje

    • Pritisni q za izlazak


Ž

No comments:

Post a Comment

Excel remoter