RemoteBox is a multithreaded
remote desktop application where client can authenticate
with the remote system using a password and then view and control the remote desktop
using the mouse and keyboard as well as chat and transfer files at the same time.
No networking library used ,implemented a communication protocol
over the TCP sockets
for connectivity between system and multithreading to achieve concurrency.
- Screenshots
- Tech Stack
- Features
- ToDo
- Who can use it?
- Repo contents
- Getting Started
- Overview of how the system works
- Tests
- Backend:
Python 3.7
- GUI:
Tkinter
- Authentication (Random password for each session)
- Multiple option for connectivity (LAN or WAN IP or using ngrok hostname)
- View remote desktop
- Control remote desktop using mouse(move,clicks) and keyboard(single keystrokes,hotkey)
- Chat with remote system
- File transfer(In progress)
- Disable remote desktop wallpaper for the session(Improves fps)
- Event Logs
- Connection Status(Listening for connection or Connection Established)
- Multithreaded application
Note:
No files touch the disk , it runs within memory, hence improved performace and no disk usage.
- File Transfer(Core Logic Done,working on custom file manager UI)
- Add to Startup
- Upnp Support
IT administrators
,System admin
could use it to maintain,transfer files or patch the system remotely.Any user
could use it as long as they want to access the system remotely.
server.py :
- Contains functions for starting a listener on the system for incoming connections,generating random password for each sssion and live streaming the screen to the client and to simulate the mouse and keyboard commands recieved from the client and much more.client.py
- It contains code for computing the display resolution in which to show the remote stream(client and server can have different display resoltuion).Hooking mouse and keyboard input and sending it to the server and much more.connection.py
- Implemented a protocol on top of tcp sockets which ensures that communication between two systems is established.Both the client and server uses this to send/recieve any data.
- Clone repo
git clone https://github.com/adarshsingh26/RemoteBox.git
-
Download and install Python 3.8 and make sure to add the path of python into environament variable.
-
Lets create the virtual environment.
python -m venv c:\path\to\RemoteBox\myenv
- Change directory to root of project and activate the virtual environment.
cd c:\users\RemoteBox
myenv\Scripts\activate
- Install the modules required to run the project
Navigate to root of project
pip install requirements.txt
- If u are the server then you ned to execute server.py
python server.py
- If client then
python client.py
On server side:
-
Creates a
listener
for incoming connections based on whether the user chose to listen on a ip or the hostname and then show the relevant information to the user, using which remote machines could connect to the system. -
Then once connection is established, it starts capturing the screenshot of desktop using
mss
(fast screenshot capturing module), if remote desktop view requested by the client. -
Compresses
the screenshot within the memory usinglz4
compression. -
Stores the
compressed image
in the queue. -
Gets the data from the
screenshot queue
and sends it to the server. -
Concurrently the server recieves mouse,keyboard events from the remote machine and
simulates
those actions onto the system.
On client side:
-
Client first gets the option to
login
to the remote system using its credentials. -
Once the connection is established user will be shown the options to
view remote desktop
,chat
orfile transfer
. -
When user clicks the remote desktop view , he gets the prompt whether to
disable the background
image or not and based on the response information is conveyed to the server. -
Now the client asks the server for its display resolution and then
compare and computes the client display window resolution
and shows the remote desktop. -
As the client starts interacting with the remote machine using mouse and keyboard, their
mouse co-ordinates
and key strokes are hooked and put into a queue and data from the queue isconcurently sent
to the remote system. -
Mouse co-ordinates are
scaled
if needed.
Note:
This is just a short summary much more things are happening behind the scenes .Take a look at code to know more :)
- Tested on
Windows 7,8,10,11
machine. - Even if the client or server looses the connection in between no error is thrown.(
Exception handling
has been done properly).