Rust implementation of the Microsoft Remote Desktop Protocol (RDP)
Find a file
Marc-André Lureau 00ba7ad94d feat(server): advertize support for all surface commands
Those flags are set both by client and server. Even if the server
doesn't send those commands yet, this should be supported by most
clients.

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
2023-12-05 11:37:18 -05:00
.cargo refactor: re-organize workspace (#101) 2023-03-29 19:09:15 -04:00
.github ci: check for typos using typos-cli (#315) 2023-12-01 17:27:36 +00:00
crates feat(server): advertize support for all surface commands 2023-12-05 11:37:18 -05:00
fuzz feat(rdpdr): SetInformation* handling (#312) 2023-11-29 17:38:01 +00:00
web-client chore(release): also update public package.json (#305) 2023-11-27 17:03:10 +00:00
xtask ci: follow-up typos CI fixes (#316) 2023-12-01 14:24:34 -05:00
.gitignore chore(web-client): update .gitignore files 2023-11-04 02:26:46 -04:00
ARCHITECTURE.md docs: add "on bit flags" section (#237) 2023-10-30 22:09:18 +00:00
Cargo.lock feat(acceptor): add basic static channel handling 2023-12-05 11:37:18 -05:00
Cargo.toml feat(rdpdr): SetInformation* handling (#312) 2023-11-29 17:38:01 +00:00
clippy.toml refactor: check for additional lints (#200) 2023-10-02 13:46:05 +03:00
LICENSE-APACHE ironrdp: initial commit 2019-07-10 17:31:26 -04:00
LICENSE-MIT ironrdp: initial commit 2019-07-10 17:31:26 -04:00
README.md doc: elaborate high-level documentation (#192) 2023-09-18 19:03:39 +00:00
rust-toolchain.toml feat(cliprdr): Clipboard support for Windows (#194) 2023-09-27 14:45:47 -04:00
rustfmt.toml style: run cargo fmt 2022-04-15 13:39:34 -04:00
STYLE.md style(cliprdr): clarify invariants 2023-11-20 09:39:36 -05:00
typos.toml ci: follow-up typos CI fixes (#316) 2023-12-01 14:24:34 -05:00

IronRDP

A collection of Rust crates providing an implementation of the Microsoft Remote Desktop Protocol, with a focus on security.

Demonstration

https://user-images.githubusercontent.com/3809077/202049929-76f42471-aeb0-41da-9118-0dc6ea491bd2.mp4

Video Codec Support

Supported codecs:

  • Uncompressed raw bitmap
  • Interleaved Run-Length Encoding (RLE) Bitmap Codec
  • RDP 6.0 Bitmap Compression
  • Microsoft RemoteFX (RFX)

Examples

ironrdp-client

A full-fledged RDP client based on IronRDP crates suite, and implemented using non-blocking, asynchronous I/O.

cargo run --bin ironrdp-client -- <HOSTNAME> --username <USERNAME> --password <PASSWORD>

screenshot

Example of utilizing IronRDP in a blocking, synchronous fashion.

This example showcases the use of IronRDP in a blocking manner. It demonstrates how to create a basic RDP client with just a few hundred lines of code by leveraging the IronRDP crates suite.

In this basic client implementation, the client establishes a connection with the destination server, decodes incoming graphics updates, and saves the resulting output as a BMP image file on the disk.

cargo run --example=screenshot -- --host <HOSTNAME> --username <USERNAME> --password <PASSWORD> --output out.bmp

How to enable RemoteFX on server

Run the following PowerShell commands, and reboot.

Set-ItemProperty -Path 'HKLM:\Software\Policies\Microsoft\Windows NT\Terminal Services' -Name 'ColorDepth' -Type DWORD -Value 5
Set-ItemProperty -Path 'HKLM:\Software\Policies\Microsoft\Windows NT\Terminal Services' -Name 'fEnableVirtualizedGraphics' -Type DWORD -Value 1

Alternatively, you may change a few group policies using gpedit.msc:

  1. Run gpedit.msc.

  2. Enable Computer Configuration/Administrative Templates/Windows Components/Remote Desktop Services/Remote Desktop Session Host/Remote Session Environment/RemoteFX for Windows Server 2008 R2/Configure RemoteFX

  3. Enable Computer Configuration/Administrative Templates/Windows Components/Remote Desktop Services/Remote Desktop Session Host/Remote Session Environment/Enable RemoteFX encoding for RemoteFX clients designed for Windows Server 2008 R2 SP1

  4. Enable Computer Configuration/Administrative Templates/Windows Components/Remote Desktop Services/Remote Desktop Session Host/Remote Session Environment/Limit maximum color depth

  5. Reboot.

Architecture

See the ARCHITECTURE.md document.