-
Notifications
You must be signed in to change notification settings - Fork 86
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
How to use this project to capture video of an RDP session? #162
Comments
Ok, I found also https://github.com/wallix/redemption/blob/future/docs/manual_to_redemption.rst - this explains a bit more:
Ok, so I guess that blue screen above is part of the "allows to centralize remote connection creating a single end point for several desktops" Unfortunately, as far as
Also, I've found
This at least has something that looks like target address, and even has a record path; however:
Why a "bad option"? How is "address" supposed to be formatted, then? And how is one supposed to work with |
The configuration of For a connection to a target without going through the interactive module (the screen you see), you need to specify a password and a login of the form The proxy then sends this information to
|
Many thanks for the response, @jonathanpoelen - much appreciated!
Excellent, that is crucial info I was missing! I appreciate very much that this project provided the
... to create this file; I will now look into how to configure it properly for my use case.
Excellent, this is also crucal info! I will look into configuring
Awesome, this explains things a lot more for me! However, I'd like to clarify: does Btw, great work from this project on conceptualizing a proxy that would be able to handle (and record) both VNC and RDP - having looked a bit into remote protocols, that is an idea I had thought for a while would be awesome, but also "too hard" to do - great to see this project brought the concept to implementation stage!
Ok, I need some more clarification here. In the discussion so far, I've had the following model in my head:
So, in this model, if I use
Great, thanks for noting that - I also managed to find |
Right - so, I realized sudo apt install qtbase5-dev qt5-default qt5-qmake qtcreator qtbase5-examples qtbase5-doc-html
sudo apt install libphonon4qt5-dev The compilation otherwise completed with:
Now, the thing is, the Ubuntu machine I was trying this on was headless, so I wanted to also put the executable, Anyways, at first, I just tried
After consulting https://askubuntu.com/questions/715587/phonon-backend-plugin-could-not-be-loaded, the solution for this was: sudo apt install phonon4qt5 # not enough
sudo apt install phonon4qt5-backend-gstreamer phonon4qt5-backend-vlc Right, so now, this is the result of
Notice that it crashes/segfaults in the end (
... and in spite of those messages, I still get a GUI window! Nice - here is a screenshot: Some things I have noted:
Otherwise, However, I also wanted to try recording, so I tried first:
I made an RDP session with a remote server here, and after a while disconnected, but I could not find any new capture files that got generated. Then I realized I have to click Options/General/Record Movie as on the screenshot; then again, I made an RDP session with a remote server, and after a while disconnected - and I looked up anything that looked like a capture file; I found them here:
Well, both the location and the naming format was kind of unexpected for me; also, I cannot tell why there are two files, where one has Anyways, so I tried to convert these to
There are no new files generated with either of these commands; I guess this confirms that recording with Yup, I think that was about it for notes about first-time |
Among the executables, only
I know that the README gives rather little information and some of the docs are outdated (this is clearly visible with last issues where I explain things that should be in it), so we should take some time to complete this.
All the recording part will be done by the proxy, passthrough.py is used to provide configurations and target information, but does not handle RDP or VNC traffic. It has options like closing session, but passthrough.py does not send them. passthrough.py is basic, the idea is that people make their own version for their own needs (a note somewhere indicates where to find the exchanged values).
Yes
Yes. The RDP server information is mostly protocol configuration, most of the ini options can also be sent via passthrough.py if target specific configurations are needed.
Yes
Your model assumes that clients necessarily display a window, rdpclient does not. The name is misleading, but in our vision of a world without direct rendering, it was natural :p. It will be removed soon because our new test tool will do the same thing and more (with a much less misleading name).
I think there is too much dependency and that qtbase5-dev is enough.
To have qtclient in one package, I think it's best to make another one on the side. But if you want, you can add For .tmp files, this is a sign that the recording is still in progress (I think it is not stopped at the time of disconnection). It's normally recoverable by renaming the files and manually writing the mwrm, but I end up with an incomplete video. I'm thinking of doing a quick fix next week about stopping the recording, but if it's not enough, it will wait. |
Many thanks again, @jonathanpoelen - excellent information! Btw, I got a working setup with recording, and I will write about that in the next post.
Got it, good to know!
Thanks, good to know - especially since at first I was suspecting I did something wrong when building the .deb file.
I appreciate that functionality - good to know it is there!
Excellent - thanks for confirming that, good to know that I wasn't way too off in understanding how things generally work. I also ended up "independently confirming" (before reading your answer) that "the idea is that people make their own version for their own needs", in that in my working procedure, I had to hack Also thanks for reviewing my model - I have just recently learned that Github supports Mermaid diagrams, so I've drawn my understanding of the proxying process, in my use context: the RDP client I use on my machine, communicates with Redemption (rdpproxy + passthrough.py) on another machine on the same local network, to proxy the traffic to an RDP server (here, a port forward of a Windows 10 PC with Remote Desktop enabled): %%{init: {'theme':'base'}}%%
flowchart LR
subgraph Border
direction LR
subgraph PC1["<div style='text-align: center;'>PC 1<br/><code>192.168.RDP.CLIENT</code></div>"]
direction LR
IP1["#nbsp;"]:::nodisplaypad;
RdpClient["RDP Client<br/>(<code>remmina</code>, <code>xfreerdp</code> ...)"]:::wht;
end
subgraph PC2["<div style='text-align: center;'>PC 2</div>"]
direction TB
%%IP2["192.168.RDP.PROXY"]:::blank;
subgraph PC2Contents["<div style='text-align: center;'><code>192.168.RDP.PROXY</code></div>"]
direction LR
RdpProxyPort("<code>port 3389</code>"):::port;
RdpProxyA["<code><b>rdpproxy -nf</b></code>"]:::wht;
RdpProxyPort <==> RdpProxyA;
FileSocket("File socket<br/><code>/tmp/redemption-sesman-sock</code>"):::wht;
RdpProxyB["<code><b>passthrough.py</b></code>"]:::wht;
RdpProxyA <--> FileSocket;
FileSocket <--> RdpProxyB;
end
end
RdpClient <==> RdpProxyPort;
subgraph CloudContainer[ ]
direction LR
%% [How to add a new shape? · Issue #1500 · mermaid-js/mermaid](https://github.com/mermaid-js/mermaid/issues/1500)
CloudInternetNode("<div style='position:absolute;left:-0px;top:-8px;color:#35;bbb;font-size:120px;'>#9729;#65039;</div><div style='position:relative;z-index:100;color:black;padding:18px;'>#nbsp;<br/>#nbsp;#nbsp;#nbsp;#nbsp;Internet#nbsp;#nbsp;#nbsp;<br/>#nbsp;</div>");
end
RdpProxyA <==> CloudInternetNode;
subgraph PC3["<div style='text-align: center;'>PC 3</div>"]
direction TB
%%IP2["192.168.RDP.PROXY"]:::blank;
subgraph PC3Contents["<div style='text-align: center;'><code>209.85.RDP.SERVER</code></div>"]
direction TB
RdpServer["RDP Server<br/>(Target Windows PC)"]:::blank;
RdpServerPort("<code>port 13389</code>"):::port;
%%RdpServer <--> RdpServerPort; %% https://github.com/mermaid-js/mermaid/issues/2509
end
end
CloudInternetNode <==> RdpServerPort;
end
%% Defining Class Styles
%% background-image:"" passes, but not with any text inside quotes
%% node that classes here get defined with "#graph-div " prepended!
%% however, seemingly <img> and such are included via foreignObject, so cannot refer to these classes
classDef BorderClass fill:#fff,stroke:#fff,stroke-width:4px,color:#fff,stroke-dasharray: 0 4,margin:0,padding:0;
classDef ContainerClass position:relative,padding:0,margin:0,fill:#fff,color:#000,stroke:none;
classDef ImgNodeClass fill:#fff,padding:0,margin:0,stroke:none,margin:0;
classDef wht fill:#fff,color:black,stroke:#000;
classDef blank fill:#fff,color:none,stroke:none;
classDef nodisplaypad display:none;
classDef port color:#500,fill:#fff,stroke:#c80,stroke-width:2px,font-weight:normal;
%% Custom Styles
%% Assigning Nodes to Classes
%% class gets applied to all childer, too!
class Border BorderClass;
class CloudContainer ContainerClass;
class CloudInternetNode ImgNodeClass;
class PC1,PC2,PC3 wht;
class PC2Contents,PC3Contents blank;
Ah, that explains things! Indeed, it seems there is a naming conflict there ... although I didn't even get to thinking about
Please, PLEASE do not abandon your vision of a world without direct rendering!!!! In the setup I got working, (rdpproxy + passthrough.py) might as well run on a headless machine! So please leave an option for headless testing in the coming rdpclient replacement ...
Awesome, great to know this - I just copy-pasted those lines from a tutorial somewhere, did not even get to thinking if those are too many packages.
Good to know - I do not use sound in my recording, but love that the option is there - and so I'm glad I compiled with
I would have gladly done so, but looking at the
Great, thanks for this. It turns out, the procedure I've described in https://stackoverflow.com/questions/75340407/bjam-build-subfolder-project-change-directory-to-subfolder-project-before-bui, while it handles qt5client correctly, it messes up paths for
Good to know - now that I can confirm recording with Thanks again for the feedback - and for the great software! |
Right, so I managed to get recording with %%{init: {'theme':'base'}}%%
flowchart LR
subgraph Border
direction LR
subgraph PC1["<div style='text-align: center;'>PC 1<br/><code>192.168.RDP.CLIENT</code></div>"]
direction LR
IP1["#nbsp;"]:::nodisplaypad;
RdpClient["RDP Client<br/>(<code>remmina</code>, <code>xfreerdp</code> ...)"]:::wht;
end
subgraph PC2["<div style='text-align: center;'>PC 2</div>"]
direction TB
%%IP2["192.168.RDP.PROXY"]:::blank;
subgraph PC2Contents["<div style='text-align: center;'><code>192.168.RDP.PROXY</code></div>"]
direction LR
RdpProxyPort("<code>port 3389</code>"):::port;
RdpProxyA["<code><b>rdpproxy -nf</b></code>"]:::wht;
RdpProxyPort <==> RdpProxyA;
FileSocket("File socket<br/><code>/tmp/redemption-sesman-sock</code>"):::wht;
RdpProxyB["<code><b>passthrough.py</b></code>"]:::wht;
RdpProxyA <--> FileSocket;
FileSocket <--> RdpProxyB;
end
end
RdpClient <==> RdpProxyPort;
subgraph CloudContainer[ ]
direction LR
%% [How to add a new shape? · Issue #1500 · mermaid-js/mermaid](https://github.com/mermaid-js/mermaid/issues/1500)
CloudInternetNode("<div style='position:absolute;left:-0px;top:-8px;color:#35;bbb;font-size:120px;'>#9729;#65039;</div><div style='position:relative;z-index:100;color:black;padding:18px;'>#nbsp;<br/>#nbsp;#nbsp;#nbsp;#nbsp;Internet#nbsp;#nbsp;#nbsp;<br/>#nbsp;</div>");
end
RdpProxyA <==> CloudInternetNode;
subgraph PC3["<div style='text-align: center;'>PC 3</div>"]
direction TB
%%IP2["192.168.RDP.PROXY"]:::blank;
subgraph PC3Contents["<div style='text-align: center;'><code>209.85.RDP.SERVER</code></div>"]
direction TB
RdpServer["RDP Server<br/>(Target Windows PC)"]:::blank;
RdpServerPort("<code>port 13389</code>"):::port;
%%RdpServer <--> RdpServerPort; %% https://github.com/mermaid-js/mermaid/issues/2509
end
end
CloudInternetNode <==> RdpServerPort;
end
%% Defining Class Styles
%% background-image:"" passes, but not with any text inside quotes
%% node that classes here get defined with "#graph-div " prepended!
%% however, seemingly <img> and such are included via foreignObject, so cannot refer to these classes
classDef BorderClass fill:#fff,stroke:#fff,stroke-width:4px,color:#fff,stroke-dasharray: 0 4,margin:0,padding:0;
classDef ContainerClass position:relative,padding:0,margin:0,fill:#fff,color:#000,stroke:none;
classDef ImgNodeClass fill:#fff,padding:0,margin:0,stroke:none,margin:0;
classDef wht fill:#fff,color:black,stroke:#000;
classDef blank fill:#fff,color:none,stroke:none;
classDef nodisplaypad display:none;
classDef port color:#500,fill:#fff,stroke:#c80,stroke-width:2px,font-weight:normal;
%% Custom Styles
%% Assigning Nodes to Classes
%% class gets applied to all childer, too!
class Border BorderClass;
class CloudContainer ContainerClass;
class CloudInternetNode ImgNodeClass;
class PC1,PC2,PC3 wht;
class PC2Contents,PC3Contents blank;
A
... and installed with:
... and
At this point, I reviewed However, there are still important settings in bool is_capture_necessary()
{
return (this->ini.get<cfg::video::allow_rt_without_recording>()
|| this->ini.get<cfg::globals::is_rec>()
|| !bool(this->ini.get<cfg::video::disable_keyboard_log>() & KeyboardLogFlags::syslog)
|| ::contains_kbd_or_ocr_pattern(this->ini.get<cfg::context::pattern_kill>())
|| ::contains_kbd_or_ocr_pattern(this->ini.get<cfg::context::pattern_notify>()));
} At first, I found That being said, here is what I changed in the --- rdpproxy.original.ini 2023-02-06 06:41:51.910624593 +0100
+++ /etc/rdpproxy/rdpproxy.ini 2023-02-06 06:59:32.045115305 +0100
@@ -53,14 +53,14 @@
#_advanced
#close_timeout = 600
-# Session record options.
+# Session record options. # note
# min = 0, max = 2
# 0: No encryption (faster).
# 1: No encryption, with checksum.
# 2: Encryption enabled.
# When session records are encrypted, they can be read only by the WAB where they have been generated.
#_advanced
-#trace_type = 1
+#trace_type = 1 # note
#_advanced
#listen_address = 0.0.0.0
@@ -152,6 +152,10 @@
#_hidden
#minimal_memory_available_before_connection_silently_closed = 100
+# is_rec - NOT originally present in output from sudo bash -c 'rdpproxy --print-default-ini > /etc/rdpproxy/rdpproxy.ini'
+# apparently to enable recording of video
+#is_rec = 1 # apparently does not get registered, try allow_rt_without_recording instead
+
[client]
# bg-BG, bg-BG.latin, bs-Cy, cs-CZ, cs-CZ.programmers, cs-CZ.qwerty, cy-GB, da-DK, de-CH, de-DE, de-DE.ibm, el-GR, el-GR.220, el-GR.220_latin, el-GR.319, el-GR.319_latin, el-GR.latin, el-GR.polytonic, en-CA.fr, en-CA.multilingual, en-GB, en-IE, en-IE.irish, en-US, en-US.dvorak, en-US.dvorak_left, en-US.dvorak_right, en-US.international, es-ES, es-ES.variation, es-MX, et-EE, fi-FI.finnish, fo-FO, fr-BE, fr-BE.fr, fr-CA, fr-CH, fr-FR, hr-HR, hu-HU, is-IS, it-IT, it-IT.142, iu-La, kk-KZ, ky-KG, lb-LU, lt-LT, lt-LT.ibm, lv-LV, lv-LV.qwerty, mi-NZ, mk-MK, mn-MN, mt-MT.47, mt-MT.48, nb-NO, nl-BE, nl-NL, pl-PL, pl-PL.programmers, pt-BR.abnt, pt-BR.abnt2, pt-PT, ro-RO, ru-RU, ru-RU.typewriter, se-NO, se-NO.ext_norway, se-SE, se-SE, se-SE.ext_finland_sweden, sk-SK, sk-SK.qwerty, sl-SI, sr-Cy, sr-La, sv-SE, tr-TR.f, tr-TR.q, tt-RU, uk-UA, uz-Cy
@@ -1029,7 +1033,7 @@
[video]
-# Specifies the type of data to be captured:
+# Specifies the type of data to be captured: # note
# min = 0, max = 15
# 0x00: none
# 0x01: png
@@ -1038,17 +1042,17 @@
# Note: values can be added (enable all: 0x01 + 0x02 + 0x08 = 0x0b)
#_advanced
#_hex
-#capture_flags = 11
+#capture_flags = 11 # note - default OK
-# Frame interval.
-# (in 1/10 seconds)
+# Frame interval. # note
+# (in 1/10 seconds) # note - max is 10 FPS
#_advanced
-#png_interval = 10
+#png_interval = 10 # note
-# Time between 2 wrm movies.
+# Time between 2 wrm movies. # note
# (in seconds)
#_advanced
-#break_interval = 600
+#break_interval = 600 # note
# Number of png captures to keep.
# min = 0
@@ -1058,14 +1062,17 @@
# maxlen = 4096
#_hidden
#hash_path = /var/rdpproxy/hash
+hash_path = /path/to/extern_disk/rdpproxy/hash
# maxlen = 4096
#_hidden
#record_tmp_path = /var/rdpproxy/tmp
+record_tmp_path = /path/to/extern_disk/rdpproxy/tmp
# maxlen = 4096
#_hidden
#record_path = /var/rdpproxy/recorded/rdp
+record_path = /path/to/extern_disk/rdpproxy/recorded
# Disable keyboard log:
# (Please see also "Keyboard input masking level" in "session_log".)
@@ -1101,20 +1108,20 @@
#_hex
#disable_file_system_log = 1
-# The method by which the proxy RDP establishes criteria on which to chosse a color depth for native video capture:
+# The method by which the proxy RDP establishes criteria on which to chosse a color depth for native video capture: # note
# min = 0, max = 1
# 0: 24-bit
# 1: 16-bit
#_advanced
-#wrm_color_depth_selection_strategy = 1
+#wrm_color_depth_selection_strategy = 1 # maybe need to make this 24-bit?
-# The compression method of native video capture:
+# The compression method of native video capture: # note
# min = 0, max = 2
# 0: no compression
# 1: gzip
# 2: snappy
#_advanced
-#wrm_compression_algorithm = 1
+#wrm_compression_algorithm = 1 # note: default 1: gzip, ok
# Needed to play a video with old ffplay or VLC v1.
# Note: Useless with mpv, MPlayer or VLC v2.
@@ -1123,23 +1130,24 @@
#_display_name=Bogus VLC frame rate
#bogus_vlc_frame_rate = 1
-#_advanced
-#codec_id = mp4
+#_advanced # note
+#codec_id = mp4 # note
# min = 1, max = 120
# min = 0
#_advanced
#_display_name=Frame rate
#framerate = 5
+framerate = 25
-# FFmpeg options for video codec. See https://trac.ffmpeg.org/wiki/Encode/H.264
+# FFmpeg options for video codec. See https://trac.ffmpeg.org/wiki/Encode/H.264 # note
# /!\ Some browsers and video decoders don't support crf=0
#_advanced
-#ffmpeg_options = crf=35 preset=superfast
+#ffmpeg_options = crf=35 preset=superfast # note
# value: 0 or 1
#_advanced
-#notimestamp = 0
+#notimestamp = 0 # refers to the timestamp in upper left corner of video
# min = 0, max = 2
# 0: Disabled. When replaying the session video, the content of the RDP viewer matches the size of the client's desktop
@@ -1151,16 +1159,19 @@
# value: 0 or 1
#_advanced
#play_video_with_corrupted_bitmap = 0
+play_video_with_corrupted_bitmap = 1
# Allow real-time view (4 eyes) without session recording enabled in the authorization
# value: 0 or 1
#allow_rt_without_recording = 0
+allow_rt_without_recording = 1
# Allow to control permissions on recorded files with octal number
# (is in octal or symbolic mode format (as chmod Linux command))
# max = 777, min = 0
#_hidden
#file_permissions = 440
+file_permissions = 644
[audit]
So, it seems that by default, these settings have The Anyways, now I needed to enter the target server credentials somewhere; and that ended up being in diff --git a/tools/passthrough/passthrough.py b/tools/passthrough/passthrough.py
index d276754ca..3c6043a43 100755
--- a/tools/passthrough/passthrough.py
+++ b/tools/passthrough/passthrough.py
@@ -192,11 +192,29 @@ class AuthentifierSharedData():
return self.shared.get(key) == MAGICASK
+class MyAuthentifierSharedData(AuthentifierSharedData):
+ def __init__(self, conn):
+ # init parent class
+ super(MyAuthentifierSharedData, self).__init__(conn)
+ self.target ettings_enforce_hardcoded()
+
+ def target_settings_enforce_hardcoded(self):
+ # override settings
+ self.shared[u'target_device'] = "209.85.RDP.SERVER.com_13389" # treating it as just a label
+ self.shared[u'target_host'] = "209.85.RDP.SERVER.com"
+ self.shared[u'target_port'] = "13389"
+ self.shared[u'target_login'] = "TARGET_USERNAME"
+ self.shared[u'target_password'] = "TARGET_PASSWORD"
+ #self.shared[u'login'] # maybe for the internal blue starting RDP screen shown on RDP client?
+ #self.shared[u'ip_client'] # filled automatically, this is the IP of the RDP client that connected to the rdpproxy that talks to us
+
+
class ACLPassthrough():
def __init__(self, conn, addr):
self.proxy_conx = conn
self.addr = addr
- self.shared = AuthentifierSharedData(conn)
+ #self.shared = AuthentifierSharedData(conn)
+ self.shared = MyAuthentifierSharedData(conn)
def interactive_target(self, data_to_send):
data_to_send.update({ u'module' : u'interactive_target' })
@@ -239,8 +257,18 @@ class ACLPassthrough():
def start(self):
+ # NOTE: this start() method, runs only AFTER RDP blue screen has appeared on the RDP Client end,
+ # and the user has clicked to log in!
+ # NOTE: self.shared.receive_data actually changes self.shared.shared settings!
+ # unfortunately if we don't have it run, then other settings than the target ones
+ # are not initialized correctly ...
_status, _error = self.shared.receive_data()
+ # if we intervene with MyAuthentifierSharedData checking here, we'll mess up initialization;
+ # so instead, re-enforce the target settings afterwards
+
+ # this is likely the response to initial connection from RDP client,
+ # which instructs RDP proxy to serve the starting blue screen
device = "<host>$<application path>$<working dir>$<args> for Application"
login = self.shared.get(u'login', MAGICASK) or MAGICASK
host = self.shared.get(u'real_target_device', MAGICASK) or MAGICASK
@@ -271,6 +299,12 @@ class ACLPassthrough():
self.shared.shared[u'real_target_device'] = host
kv = interactive_data
+ if isinstance(self.shared, MyAuthentifierSharedData):
+ # re-enforce target settings
+ self.shared.target_settings_enforce_hardcoded()
+
+ print("passthrough start self.shared: {}".format(self.shared.shared))
+
# selector_data = {
# u'target_login': 'Proxy\\Administrator\x01login 2\x01login 3',
# u'target_device': '10.10.44.27\x01device 2\x01device 3',
@@ -283,7 +317,10 @@ class ACLPassthrough():
kv[u'record_filebase'] = datetime.now().strftime("%Y-%m-%d/%H:%M-") + str(uuid.uuid4())
kv[u'login'] = self.shared.get(u'target_login')
kv[u'proto_dest'] = "RDP"
- kv[u'target_port'] = "3389"
+ if not( isinstance(self.shared, MyAuthentifierSharedData) ):
+ kv[u'target_port'] = "3389"
+ else:
+ kv[u'target_port'] = self.shared.get(u'target_port')
kv[u'session_id'] = str(datetime.now())
kv[u'module'] = 'RDP' if self.shared.get(u'login') != 'internal' else 'INTERNAL'
kv[u'target_password'] = self.shared.get(u'target_password') With this in place, the procedure goes like this:
Well, from what I could see, the resulting videos are very decent and responsive - so thanks again for a great software! |
Your scheme is good. I didn't know Mermaid, it's nice For Normally you don't need
In reality, even with a space problem, the file can be read down to the last recorded packet and the video generated. But the last second will be missing and the mwrm will have to be completed manually. The split is used so that redrec ignores some files with the
We should be a bit more flexible on this and have the proxy create the folder hierarchy by itself if needed or have passthrough.py do it. Actually, the sub-folder is not a necessity, it is passthrough.py that sends it through the the problem with the Regarding the redrec options, |
I have managed to successfully compile redemption on Ubuntu 20.04 ( see also https://unix.stackexchange.com/questions/734205/dh-install-cannot-find-files-tried-in-debian-buildtmp-but-files-exist-in-debi ), but now I realize, I have no idea how to use it.
What I'm interested in, is capturing my session with a remote PC as video. In the session, I run a couple of graphics/CPU intensive apps, so if I start a screen capture like OBS Studio along with remote desktop (VNC or RDP) everything grinds down to a halt. The remote PC is Windows 10, so RDP is behaving a lot more responsive (as far as I can see desktop decorations etc are removed) even when the intensive applications run, and this is why I want to try capturing the RDP session as video.
I have seen in the README that there are possibilities to capture an RDP session to a video, but I don't get how/what I have to set up, to get a connection to my target server, and capture that session as a video.
Yes, I have seen How to use this project · Issue #25 · wallix/redemption, and I'm still not getting it.
Yes, I have, multiple times - still not getting it.
So, I can see there is a program
rdpproxy
. Just by the naming, I would have imagined, it would have had a local port (maybe 3389), and then I'd specify target address and port - and then I could use my preferred RDP software (remmina) to connect to the proxy, which would have then forwarded/proxied usernames/passwords and traffic between my remmina on my Ubuntu, and the target remote server; and while doing that, it could have captured something that could be converted to video.However, that is not how things work; for one:
...
rdpproxy
has no command options for setting any ports.So, the readme says:
Ok, I did that on the PC, say, 192.168.0.10; and then from 192.168.0.12 I run
remmina
, and intiate RDP connection to 192.168.0.10:3389; I get this:Ok, I did not expect this; what makes this screen,
passthrough.py
orrdpproxy -nf
?In any case, one of those programs creates the screen - so what does that mean, that
rdpproxy
proxies 127.0.0.1 to ... 127.0.0.1?Well, that is all fine as a starting example, however it should have been written in the README what should be expected of this example.
But then, good that I know how the example works now - but how do I use this for my use case? That is, how do I proxy 127.0.0.1 (current machine) to public IP of remote machine, as in example.com:3389? How can I specify a target port that is not 3389 but maybe due to port forwarding it is, say, 13389 (so, example.com:13389)? And how do I capture a video (or rather, as per README, a
.mwrm
or.wrm
log file, which can thereafter be converted to video)?If
rdpproxy
cannot be used directly for this purpose, are there other programs in this project that could be used instead?The text was updated successfully, but these errors were encountered: