<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
<channel>
<title>Rebex Q&amp;A Forum - Recent questions and answers</title>
<link>https://forum.rebex.net/qa</link>
<description>Powered by Question2Answer</description>
<item>
<title>Answered: TinySFTPServer1.0.23 : sshIPBindings configuration not reflected in UI</title>
<link>https://forum.rebex.net/23549/tinysftpserver1-sshipbindings-configuration-reflected?show=23550#a23550</link>
<description>&lt;p&gt;Yes, the UI does not reflect the &lt;code&gt;sshIPBindings&lt;/code&gt; settings. Details about currently bound interfaces are printed upon the server startup. If you specify for example &lt;code&gt;&amp;lt;add key=&quot;sshIPBindings&quot; value=&quot;10.1.1.10&quot; /&amp;gt;&lt;/code&gt; the &lt;code&gt;Info&lt;/code&gt; message like this is displayed (ne need to switch to &lt;code&gt;Debug&lt;/code&gt;):&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;10:20:20 Info Server: Listening for connections at 10.1.1.10:22.
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;However, it sounds reasonable that the UI could reflect the &lt;code&gt;sshIPBindings&lt;/code&gt;. We will modify this in a future version. Thank you for your feedback.&lt;/p&gt;
</description>
<guid isPermaLink="true">https://forum.rebex.net/23549/tinysftpserver1-sshipbindings-configuration-reflected?show=23550#a23550</guid>
<pubDate>Mon, 13 Apr 2026 08:25:55 +0000</pubDate>
</item>
<item>
<title>Answered: How to obtain the actual file size before the file data transfer begins?</title>
<link>https://forum.rebex.net/23545/how-obtain-actual-file-size-before-file-data-transfer-begins?show=23546#a23546</link>
<description>&lt;p&gt;Unfortunately, this is not really possible due to the nature of the SFTP protocol itself. An SFTP upload is similar to creating a file stream and writing to it, where the final file length is not known until all writes have been made and the file is closed.&lt;/p&gt;

&lt;p&gt;Some client's might try issuing an equivalent of FileStream.SetLength to allocate space for the file ahead of the actual upload, but that is not guaranteed to represent the actual file length, so it's not a good replacement.&lt;/p&gt;

&lt;p&gt;Note: An SFTP client can actually &lt;em&gt;seek&lt;/em&gt; in the remote file stream during the operation, so BytesTransferred is not even guaranteed to contain the correct value.&lt;/p&gt;
</description>
<guid isPermaLink="true">https://forum.rebex.net/23545/how-obtain-actual-file-size-before-file-data-transfer-begins?show=23546#a23546</guid>
<pubDate>Wed, 01 Apr 2026 17:18:30 +0000</pubDate>
</item>
<item>
<title>Answered: Fatal error 'ProtocolVersion' has been encountered on the local connection end.</title>
<link>https://forum.rebex.net/23539/fatal-error-protocolversion-encountered-local-connection?show=23540#a23540</link>
<description>&lt;p&gt;Please note that Rebex TLS Proxy is not a &lt;code&gt;HTTP CONNECT&lt;/code&gt; proxy (or any other proxy with a specific syntax such as HTTPS, SOCKS4/5). Rebex TLS Proxy transparently adds/removes/modifies TLS layer of the communication. In your case, the proxy is configured to listen on port 9500 expecting TLS1.0-TLS1.2 communication and forward the traffic to/from &lt;code&gt;SomeURL.com:443&lt;/code&gt; using TLS1.2/1.3 protocols.&lt;/p&gt;

&lt;p&gt;Now, to your tests:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;curl (https) &amp;lt;-&amp;gt; TLSProxy (https) &amp;lt;-&amp;gt; Server:&lt;br&gt;
It's working, because curl sent a HTTPS request (TLS + HTTP) to the proxy. It is expected.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;curl (no arguments) &amp;lt;-&amp;gt; TLSProxy (https) &amp;lt;-&amp;gt; Server:&lt;br&gt;
It's &lt;strong&gt;not&lt;/strong&gt; working, because curl sent plain HTTP request (no TLS) to the proxy. It is expected to fail. The log contains the reason:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;[DBG][I]: Invalid TLS packet received:
GET / HTTP/1.1..Host: 127.0.0.99:9500..User-Agent: curl/8.18.0..Accept: */*....
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;You can see that plain HTTP GET was received by the proxy, but the proxy expected TLS traffic. This is the same as if you used plain (not HTTPS) &lt;a rel=&quot;nofollow&quot; href=&quot;http://someurl.com&quot;&gt;http://someurl.com&lt;/a&gt; on port 443.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;proxifier (https) &amp;lt;-&amp;gt; TLSProxy (https) &amp;lt;-&amp;gt; Server:&lt;br&gt;
With the info above, you would spot the issue now:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;[DBG][I]: Invalid TLS packet received:
CONNECT SomeURL.com:443 HTTP/1.1..User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)..Host: SomeURL.com:443....
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;And from the first log (FireFox (https) &amp;lt;-&amp;gt; proxifier (https) &amp;lt;-&amp;gt; TLSProxy (https) &amp;lt;-&amp;gt; Server):&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;[DBG][I]: Invalid TLS packet received:
CONNECT ServerIP:443 HTTP/1.1..Host: ServerIP:443....
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The proxifier is adding a &lt;code&gt;HTTP CONNECT&lt;/code&gt; proxy traffic to the communicaiton, which is not expected at the Rebex TLS Proxy side.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;It seems that to make it working, just remove the proxifier from communication and run Rebex TLS Proxy there instead. Or if it is easier for you, configure proxifier just to forward traffic to &lt;code&gt;127.0.0.99:9500&lt;/code&gt; without using &lt;code&gt;HTTP CONNECT&lt;/code&gt; = act as a relay (if it is possible - I don't know its possibilities).&lt;/p&gt;

&lt;p&gt;Note: We plan to add support for &lt;code&gt;HTTP CONNECT&lt;/code&gt; to Rebex TLS Proxy, so this issue would be solved by reconfiguring the proxy. Unfortunately, it is not completed yet and it seems it will not be available within next month. If you want to test a preview when it is ready, please let me know.&lt;/p&gt;
</description>
<guid isPermaLink="true">https://forum.rebex.net/23539/fatal-error-protocolversion-encountered-local-connection?show=23540#a23540</guid>
<pubDate>Thu, 12 Mar 2026 13:47:51 +0000</pubDate>
</item>
<item>
<title>Answered: Index was out of range exception in SFTP (Rebex version 7.0.9313)</title>
<link>https://forum.rebex.net/23529/index-was-out-of-range-exception-in-sftp-rebex-version-7-9313?show=23530#a23530</link>
<description>According to the version history, this has not been fixed, and we have not even been aware of such issue. Unfortunately, the stack trace only points towards the inner implementation of the GetList method, which is quite complex, and it does not provide much clues about where exactly to look for the ArgumentOutOfRangeException. But we will still try!&lt;br /&gt;
&lt;br /&gt;
However, can you look into a log for any clues, or ask the customer to do that? You don't have to share the log with us, but if it does provide any addition info, it would be helpful to know.&lt;br /&gt;
&lt;br /&gt;
Additionally, if there is anything special or interesting regarding that particular GetList call, please let us know as well.</description>
<guid isPermaLink="true">https://forum.rebex.net/23529/index-was-out-of-range-exception-in-sftp-rebex-version-7-9313?show=23530#a23530</guid>
<pubDate>Fri, 27 Feb 2026 13:29:56 +0000</pubDate>
</item>
<item>
<title>Answered: Capture multi-line command being executed from TerminalControl</title>
<link>https://forum.rebex.net/23517/capture-multi-line-command-being-executed-terminalcontrol?show=23521#a23521</link>
<description>&lt;p&gt;I am not sure what exactly you are trying to achieve or what you are actually doing. Also what you know about the input - for example, do you know what the prompt is or whether each command starts with &lt;code&gt;curl&lt;/code&gt;, or something else?&lt;/p&gt;

&lt;p&gt;If I had to implement a method to capture a command to be executed, I would do it like this:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;private Regex Prompt = new Regex(&quot;^.*@.*:.*[$#&amp;gt;] ?&quot;);

private void terminal_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
{
    if (e.KeyCode == Keys.Enter)
    {
        var s = terminal.Screen;
        var top = s.CursorTop;
        var lines = new StringBuilder();
        for (int i = top; i &amp;gt;= 0; i--)
        {
            var line = s.GetRegionText(0, i, s.Columns, 1)[0];
            var m = Prompt.Match(line);
            if (m.Success)
            {
                lines.Insert(0, line.Substring(m.Length));
                break;
            }
            else
            {
                lines.Insert(0, line);
            }
        }
        MessageBox.Show(lines.ToString().Trim(), &quot;Captured command&quot;);
    }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The code above expects the prompt to be in the format &lt;code&gt;user@machine:path$&lt;/code&gt;&lt;br&gt;
It searches for the line containing the prompt.&lt;br&gt;
It starts at the current cursor line (&lt;code&gt;Screen.CursorTop&lt;/code&gt;) and goes one line up if the prompt was not detected.&lt;/p&gt;

&lt;p&gt;This code was successfully tested with command &lt;code&gt;echo Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris eget urna ut nibh laoreet ultrices.&lt;/code&gt; which spanned across three lines.&lt;/p&gt;

&lt;p&gt;Please also note that if the user types very quickly, the last one or two characters of the command may not yet be displayed on the terminal screen when the ENTER is pressed. To ensure all sent/received data have been processed by the terminal before calling the &lt;code&gt;GetRegionText()&lt;/code&gt; method, you should add &lt;code&gt;terminal.Scripting.Process()&lt;/code&gt; method call at the beginning of the detection logic (just after the &lt;code&gt;if (e.KeyCode == Keys.Enter)&lt;/code&gt; check). It can look like this:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;terminal.UserInputEnabled = false;
terminal.SetDataProcessingMode(DataProcessingMode.None);
try
{
    while (terminal.Scripting.Process(500) == TerminalState.DataReceived) ;
}
finally
{
    terminal.UserInputEnabled = true;
    terminal.SetDataProcessingMode(DataProcessingMode.Automatic);
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;If you want to achieve something else, or if you have a different scenario, please describe it in more detail. Also providing some of your existing code would be appreciated.&lt;/p&gt;
</description>
<guid isPermaLink="true">https://forum.rebex.net/23517/capture-multi-line-command-being-executed-terminalcontrol?show=23521#a23521</guid>
<pubDate>Wed, 25 Feb 2026 22:21:05 +0000</pubDate>
</item>
<item>
<title>Answered: SSH PQC Support</title>
<link>https://forum.rebex.net/23516/ssh-pqc-support?show=23518#a23518</link>
<description>&lt;p&gt;Post-quantum cryptography is currently one of our priorities.  Actually, support for ML-KEM ciphers has already been added in &lt;a rel=&quot;nofollow&quot; href=&quot;https://www.nuget.org/packages/Rebex.FileServer/8.0.9531-rc.3&quot;&gt;8.0 release candidate 3 prerelease version&lt;/a&gt;, and can be enabled like this:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;var server = new FileServer();
server.Settings.SshParameters.KeyExchangeAlgorithms |= 
    SshKeyExchangeAlgorithm.MLKem768 |
    SshKeyExchangeAlgorithm.MLKem1024;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;This enables &quot;mlkem768x25519-sha256&quot;, &quot;mlkem768nistp256-sha256&quot; and &quot;mlkem1024nistp384-sha384&quot;, as long as the underlying .NET supports both ML-KEM the elliptic algorithm.&lt;/p&gt;

&lt;p&gt;However, please note that ML-KEM is supported natively on .NET 10 only. For other frameworks, a plugin is needed. The plugin is not publicly available yet, so if you want to try it now, please leave a comment here and I will provide a download link.&lt;/p&gt;

&lt;p&gt;For now, we won't be adding support for &quot;sntrup761x25519-sha512&quot;, mostly due to lack of support for this algorithm in .NET 10 and Windows. This might come with version 9.0 (via a plugin), but we'll be concentrating on adding ML-DSA support first.&lt;/p&gt;
</description>
<guid isPermaLink="true">https://forum.rebex.net/23516/ssh-pqc-support?show=23518#a23518</guid>
<pubDate>Wed, 25 Feb 2026 16:36:02 +0000</pubDate>
</item>
<item>
<title>Answered: Certificate based auth-  when will Rebex ssh support ssh agent?</title>
<link>https://forum.rebex.net/23508/certificate-based-auth-when-will-rebex-ssh-support-ssh-agent?show=23511#a23511</link>
<description>&lt;p&gt;We are sorry that you were not able to find appropriate documentation for this topic. Please note that support for SSH agents was added in June 2023 (version 7.0.8581). Citing from &lt;a rel=&quot;nofollow&quot; href=&quot;https://www.rebex.net/total-pack/history.aspx#7.0.8581&quot;&gt;release notes&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;OpenSSH Agent and PuTTY Pageant are now supported for SSH and SFTP client authentication. Use the Login method overload with SshAuthenticationAgent argument.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It was also mentioned at our regular notifications channels:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;email newsletter (&lt;a rel=&quot;nofollow&quot; href=&quot;https://us5.campaign-archive.com/?u=6e0e34c882602d1cf12bc584b&amp;amp;id=f329ac0d2f&quot;&gt;check archive&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;blog (&lt;a rel=&quot;nofollow&quot; href=&quot;https://blog.rebex.net/version-r7-0&quot;&gt;check post&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Finally, you can find useful link to &lt;a rel=&quot;nofollow&quot; href=&quot;https://www.rebex.net/doc/api/Rebex.Net.SshAuthenticationAgent.html&quot;&gt;SshAuthenticationAgent API documentation&lt;/a&gt;, which also includes code example.&lt;/p&gt;
</description>
<guid isPermaLink="true">https://forum.rebex.net/23508/certificate-based-auth-when-will-rebex-ssh-support-ssh-agent?show=23511#a23511</guid>
<pubDate>Fri, 13 Feb 2026 09:02:16 +0000</pubDate>
</item>
<item>
<title>Answered: Websocket connection : SSLAceptsAllCertificates = false fails in .NET 9 MAUI but works in Xamarin / .NET 8</title>
<link>https://forum.rebex.net/23504/websocket-connection-sslaceptsallcertificates-xamarin?show=23505#a23505</link>
<description>&lt;p&gt;First of all, please be aware that v7.0.8720 of Rebex WebSocket library does not support .NET 9 or .NET 10, and is not actually expected to work on these platforms. It has been published before these platforms existed, has never been tested on them. If it works at all, compatibility issues are to be expected, particularly on mobile platforms, which has seen lot of updates in .NET 9 and .NET 10, some of which we had to address in subsequent releases of Rebex WebSocket.&lt;/p&gt;

&lt;p&gt;As for the &lt;em&gt;&quot;Fatal error 'HandshakeFailure' has been reported by the remote connection end&quot;&lt;/em&gt; error - it's not even clear yet whether this is related to certificate validation at all. A log created at LogLevel.Debug might shed some light onto this. However, it would really be useful to try using a &lt;a rel=&quot;nofollow&quot; href=&quot;https://www.rebex.net/websocket/history.aspx#7.0.9083&quot;&gt;more recent version of Rebex WebSocket library&lt;/a&gt; that actually supports .NET 9 and has been tested on it.&lt;/p&gt;
</description>
<guid isPermaLink="true">https://forum.rebex.net/23504/websocket-connection-sslaceptsallcertificates-xamarin?show=23505#a23505</guid>
<pubDate>Mon, 02 Feb 2026 16:32:54 +0000</pubDate>
</item>
<item>
<title>Answered: Opening the log file in append mode.</title>
<link>https://forum.rebex.net/23496/opening-the-log-file-in-append-mode?show=23497#a23497</link>
<description>&lt;p&gt;No, the &lt;a rel=&quot;nofollow&quot; href=&quot;https://www.rebex.net/doc/api/Rebex.FileLogWriter.html&quot;&gt;Rebex.FileLogWriter&lt;/a&gt; opens the file with &lt;code&gt;FileMode.Append&lt;/code&gt; value (along with &lt;code&gt;FileAccess.Write&lt;/code&gt; and &lt;code&gt;FileShare.ReadWrite&lt;/code&gt;). So, it seems that something else is deleting/overwriting the file.&lt;/p&gt;

&lt;p&gt;No, it is not possible to adjust file creation options of the &lt;a rel=&quot;nofollow&quot; href=&quot;https://www.rebex.net/doc/api/Rebex.FileLogWriter.html&quot;&gt;Rebex.FileLogWriter&lt;/a&gt;.&lt;/p&gt;
</description>
<guid isPermaLink="true">https://forum.rebex.net/23496/opening-the-log-file-in-append-mode?show=23497#a23497</guid>
<pubDate>Mon, 19 Jan 2026 13:22:18 +0000</pubDate>
</item>
<item>
<title>Answered: How Can I Convert MBOX Emails to NSF Without Data Loss?</title>
<link>https://forum.rebex.net/23488/how-can-i-convert-mbox-emails-to-nsf-without-data-loss?show=23489#a23489</link>
<description>&lt;p&gt;Unfortunately, &lt;a rel=&quot;nofollow&quot; href=&quot;https://www.rebex.net/mail-pack/&quot;&gt;Rebex Mail&lt;/a&gt; does not have support for MBOX nor IBM Lotus Notes.&lt;/p&gt;

&lt;p&gt;Please ask at the general Q&amp;amp;A forum such as Stack Overflow or Reddit. This forum is  intended solely for Rebex products.&lt;/p&gt;
</description>
<guid isPermaLink="true">https://forum.rebex.net/23488/how-can-i-convert-mbox-emails-to-nsf-without-data-loss?show=23489#a23489</guid>
<pubDate>Tue, 13 Jan 2026 13:16:52 +0000</pubDate>
</item>
<item>
<title>Answered: Rebex.Net.SshException: your trial version is too old.</title>
<link>https://forum.rebex.net/23486/rebex-net-sshexception-your-trial-version-is-too-old?show=23487#a23487</link>
<description>&lt;p&gt;I have just downloaded the &lt;code&gt;RebexSshShell-7.0.9448-Trial.exe&lt;/code&gt; package, installed it, used current trial key from web in samples and everything works fine.&lt;/p&gt;

&lt;p&gt;It seems that you are still referencing an old version of some Rebex assemblies in your project.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Does it also happen in samples, which comes with the &lt;code&gt;RebexSshShell-7.0.9448-Trial.exe&lt;/code&gt; package?&lt;/li&gt;
&lt;li&gt;Have you ever installed an older trial version of Rebex assemblies (older than 7.0.9448)?&lt;/li&gt;
&lt;/ul&gt;
</description>
<guid isPermaLink="true">https://forum.rebex.net/23486/rebex-net-sshexception-your-trial-version-is-too-old?show=23487#a23487</guid>
<pubDate>Thu, 08 Jan 2026 08:33:41 +0000</pubDate>
</item>
<item>
<title>Answered: User Creation Clarification - Using SSH Keys for Login</title>
<link>https://forum.rebex.net/23483/user-creation-clarification-using-ssh-keys-for-login?show=23484#a23484</link>
<description>&lt;p&gt;Hi,&lt;/p&gt;

&lt;p&gt;I assume you are using Buru SFTP Server. In that case, the procedure is sound (although I am bit unsure about step 5 as this is generally handled by the SSH/SFTP client which also needs access to the private key - or at least to the operations done using the private key, when the key is stored elsewhere, such as on hardware token, for example). &lt;/p&gt;

&lt;p&gt;Please be aware of a bug in Buru SFTP Server introduced recently which sometimes requires the user to specify the password even though public key authentication is set up and 2FA is turned off. This will be fixed in a release this week. There are several workarounds:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;manually set password auth to 'enabled' using &lt;code&gt;burusftp user update &amp;lt;user&amp;gt; --password-auth enabled&lt;/code&gt; &lt;/li&gt;
&lt;li&gt;using Web Admin, turn off and on password authentication, then save the &quot;changes&quot;.&lt;/li&gt;
&lt;/ul&gt;
</description>
<guid isPermaLink="true">https://forum.rebex.net/23483/user-creation-clarification-using-ssh-keys-for-login?show=23484#a23484</guid>
<pubDate>Wed, 07 Jan 2026 11:13:38 +0000</pubDate>
</item>
<item>
<title>Reducing TGZ to EML conversion time depends on which performance factors?</title>
<link>https://forum.rebex.net/23480/reducing-conversion-time-depends-which-performance-factors</link>
<description>&lt;p&gt;My TGZ to EML conversion takes longer than expected. I want to identify the performance factors affecting speed, such as mailbox size, system resources, or processing methods, to reduce conversion time without compromising data accuracy.&lt;/p&gt;
</description>
<guid isPermaLink="true">https://forum.rebex.net/23480/reducing-conversion-time-depends-which-performance-factors</guid>
<pubDate>Thu, 25 Dec 2025 21:41:03 +0000</pubDate>
</item>
<item>
<title>Answered: Are async methods in Rebex truly asynchronous now?</title>
<link>https://forum.rebex.net/23474/are-async-methods-in-rebex-truly-asynchronous-now?show=23477#a23477</link>
<description>&lt;p&gt;The following libraries already feature fully async methods:&lt;br&gt;
  Rebex.Tls&lt;br&gt;
  Rebex.Syslog&lt;/p&gt;

&lt;p&gt;In the forthcoming version 8 (preview available on NuGet.org), fully asynchronous methods will become available in the following libraries:&lt;br&gt;
  Rebex.FileServer&lt;br&gt;
  Rebex.Http&lt;br&gt;
  Rebex.WebSocket&lt;br&gt;
  Rebex.Graph&lt;br&gt;
  Rebex.Ews&lt;/p&gt;

&lt;p&gt;For version 9 in 2027, we plan to upgrade Rebex.Sftp and parts of Rebex.SshShell. More libraries might follow in later versions based on our schedule and customer demand.&lt;/p&gt;

&lt;p&gt;We have no direct CancellationToken support yet, which has been discussed in more details here, along with possible solutions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://forum.rebex.net/23130/cancellation-of-all-operations-of-rebex-sftp?show=23131#a23131&quot;&gt;Cancellation of all operations of Rebex SFTP&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
<guid isPermaLink="true">https://forum.rebex.net/23474/are-async-methods-in-rebex-truly-asynchronous-now?show=23477#a23477</guid>
<pubDate>Thu, 11 Dec 2025 17:54:03 +0000</pubDate>
</item>
<item>
<title>Answered: Rebex FileServer not accepting backslash as valid path</title>
<link>https://forum.rebex.net/23465/rebex-fileserver-not-accepting-backslash-as-valid-path?show=23469#a23469</link>
<description>&lt;p&gt;Normally, backslashes are not actually supposed to work with SFTP at all, and Rebex File Server's SFTP presents a file system that uses a forward slash ('/') character as a directory separator. This applies even when running on Windows, and it corresponds to &lt;a rel=&quot;nofollow&quot; href=&quot;https://datatracker.ietf.org/doc/html/draft-ietf-secsh-filexfer-02#section-6.2&quot;&gt;SFTP protocol specification&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;The &lt;code&gt;AcceptWindowsPaths&lt;/code&gt; option is an exception to this, but it is still not supposed to switch the server's file system into 'backslash is a separator' mode. All it does is enable normalization of Windows-like paths on input (as a workaround for a specific instance of misbehaved SFTP client). This means that, for example, if the client sends the &quot;d:\directory\file&quot; path, the server treats it as &quot;/d/directory/file&quot;. But if the SFTP client has additional expectations beyond this (for example, if it assumes that responses to &lt;code&gt;SSH_FXP_REALPATH&lt;/code&gt; command use paths with backslashes as well), interoperability issues are very likely. But to be able to tell what exactly went wrong, we would have to know which path format was actually used in the request that failed with &quot;Invalid path&quot; error.&lt;/p&gt;
</description>
<guid isPermaLink="true">https://forum.rebex.net/23465/rebex-fileserver-not-accepting-backslash-as-valid-path?show=23469#a23469</guid>
<pubDate>Thu, 04 Dec 2025 13:17:43 +0000</pubDate>
</item>
<item>
<title>Answered: SyslogMessage TimeStamp property type</title>
<link>https://forum.rebex.net/23464/syslogmessage-timestamp-property-type?show=23466#a23466</link>
<description>&lt;p&gt;Yes, you are right that information about local time zone of the originator is lost. We chose &lt;code&gt;DateTime&lt;/code&gt; because it is a more common type and easier to use.&lt;/p&gt;

&lt;p&gt;Details about &lt;code&gt;TIMESTAMP&lt;/code&gt; parsing process:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The &lt;code&gt;1985-04-12T19:20:50.52-04:00&lt;/code&gt; is parsed as &lt;code&gt;DateTime(date, 19:20:50.52)&lt;/code&gt; and the &lt;code&gt;-04:00&lt;/code&gt; time zone.&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;DateTime&lt;/code&gt; is transformed to UTC = &lt;code&gt;DateTime(date, 23:20:50.52)&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;DateTime&lt;/code&gt; is transformed to machine's local time and stored in &lt;code&gt;SyslogMessage.Timestamp&lt;/code&gt;. &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;So, if the server application simply &quot;prints&quot; the &lt;code&gt;SyslogMessage.Timestamp&lt;/code&gt; of all receiving messages, they are all shown in the same (machine local) time zone and it is easily comparable to the clock on that machine as well as the &lt;a rel=&quot;nofollow&quot; href=&quot;https://www.rebex.net/doc/api/Rebex.Net.SyslogMessageReceivedEventArgs.ReceivedTime.html&quot;&gt;SyslogMessageReceivedEventArgs.ReceivedTime&lt;/a&gt; value (which is also in machine local time).&lt;/p&gt;

&lt;p&gt;If you need to know the original time zone, please leave a comment here with description of your use case. We will think about a way to provide this information (e.g. &lt;code&gt;SyslogMessage.GetTimestampOffset()&lt;/code&gt; or something like that). However, please note that clients are not required to use the local time zone format. They can use UTC. Also please note that in previous version of the Syslog protocol (RFC 3164) the &lt;code&gt;TIMESTAMP&lt;/code&gt; does not use time zones at all. So, you can end up in messages with an offset and messages without it.&lt;/p&gt;

&lt;hr&gt;

&lt;p&gt;The possible workaround to get the information is to parse the whole message for yourself. It can be done by using the &lt;code&gt;SyslogMessageFormat.Plain&lt;/code&gt; like this:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;var binding = new SyslogBinding(...){ Format = SyslogMessageFormat.Plain };
server.Bind(binding);
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;In this case, the server does not parse the message - the whole message data are accessible using the &lt;code&gt;SyslogMessage.Text&lt;/code&gt; property.&lt;/p&gt;

&lt;p&gt;Note: If you choose &lt;code&gt;Legacy&lt;/code&gt; instead &lt;code&gt;Plain&lt;/code&gt; format, only the &lt;code&gt;&amp;lt;PRI&amp;gt;&lt;/code&gt; part of the Syslog message is parsed, the &lt;code&gt;Facility&lt;/code&gt; and &lt;code&gt;Severity&lt;/code&gt; properties are filled, the &lt;code&gt;&amp;lt;PRI&amp;gt;&lt;/code&gt; value will not be part of the &lt;code&gt;SyslogMessage.Text&lt;/code&gt; property. &lt;/p&gt;
</description>
<guid isPermaLink="true">https://forum.rebex.net/23464/syslogmessage-timestamp-property-type?show=23466#a23466</guid>
<pubDate>Wed, 03 Dec 2025 13:57:42 +0000</pubDate>
</item>
<item>
<title>Answered: Questions regading FileServer (SSH and SFTP)</title>
<link>https://forum.rebex.net/23461/questions-regading-fileserver-ssh-and-sftp?show=23462#a23462</link>
<description>&lt;ol&gt;
&lt;li&gt;&lt;p&gt;See the &lt;a rel=&quot;nofollow&quot; href=&quot;https://forum.rebex.net/15610/sftp-server-connection-version-string?show=15615#c15615&quot;&gt;Server Connection Version String&lt;/a&gt; for instructions on changing the server identifications string.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Unfortunately, this is not supported yet. We will consider it for one of the next releases.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;This is another known limitation. Historically, Rebex File Server library has been mostly intended for scenarios where the server presents a virtualized subset of the target server's file system, with simulated owner/group. Additionally, .NET comes from the Windows world, where Unix-style permissions are not even present. And, additionally, even as of .NET 10, APIs from System.IO don't fully expose the owner/group functionality yet, so demand on addressing this limitation is still quite low. We'll probably address it in Rebex File Server v9.0 in a year or two.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;
</description>
<guid isPermaLink="true">https://forum.rebex.net/23461/questions-regading-fileserver-ssh-and-sftp?show=23462#a23462</guid>
<pubDate>Mon, 01 Dec 2025 12:35:51 +0000</pubDate>
</item>
<item>
<title>Answered: Issue after upgrade to 2.17.3 - shellTypeDefault</title>
<link>https://forum.rebex.net/23452/issue-after-upgrade-to-2-17-3-shelltypedefault?show=23453#a23453</link>
<description>&lt;p&gt;Hi Mats,&lt;/p&gt;

&lt;p&gt;Please try ctrl+F5 to force-refresh the scripts, this should solve the issue. Please let me know if it helped and also the browser type and version would be very helpful so we can test why the updated scripts weren't loaded.&lt;/p&gt;
</description>
<guid isPermaLink="true">https://forum.rebex.net/23452/issue-after-upgrade-to-2-17-3-shelltypedefault?show=23453#a23453</guid>
<pubDate>Wed, 29 Oct 2025 10:02:21 +0000</pubDate>
</item>
<item>
<title>Answered: Websocket Memory Usage continually increasing</title>
<link>https://forum.rebex.net/23450/websocket-memory-usage-continually-increasing?show=23451#a23451</link>
<description>&lt;p&gt;Hi, this should be fine, as long as you don't keep accumulating references to instances of any of those objects somewhere indefinitely, preventing GC from claiming them.&lt;/p&gt;

&lt;p&gt;Have you tried running the application in debugger and taking a memory usage snapshot to find out what kind of objects are eating up your memory?&lt;/p&gt;

&lt;p&gt;To make sure there is no obviously wrong behavior in Rebex WebSocket, I wrote the code below (where the server is just a simple echo server that sends back whatever it receives). I let it run the loop one million times, but did not observe an increase in memory usage over time.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;var ws = new WebSocketClient();
ws.Connect(echoWebSocketServerWss);

var cancellation = new CancellationTokenSource();
string message = &quot;hello&quot;.PadRight(16384, '!');

int runs = 0;
while (true)
{
    await ws.SendAsync(message);

    var buffer = new ArraySegment&amp;lt;byte&amp;gt;(new byte[8192]);
    WebSocketReceiveResult result;
    using (var ms = new MemoryStream())
    {
        do
        {
            result = await ws.ReceiveAsync(buffer, cancellation.Token);
            ms.Write(buffer.Array, buffer.Offset, result.Count);
        } while (!result.EndOfMessage);

        runs++;
        if ((runs % 1000) == 0) Console.WriteLine(runs);
    }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;I then tried a different code, where a new instance of WebSocketClient and connection is created during each iteration:&lt;/p&gt;

&lt;p&gt;int runs = 0;&lt;br&gt;
    while (true)&lt;br&gt;
    {&lt;br&gt;
        var ws = new WebSocketClient();&lt;br&gt;
        ws.Connect(echoWebSocketServerWss);&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;    var cancellation = new CancellationTokenSource();
    string message = &quot;hello&quot;.PadRight(16384, '!');

    await ws.SendAsync(message);

    var buffer = new ArraySegment&amp;lt;byte&amp;gt;(new byte[8192]);
    WebSocketReceiveResult result;
    using (var ms = new MemoryStream())
    {
        do
        {
            result = await ws.ReceiveAsync(buffer, cancellation.Token);
            ms.Write(buffer.Array, buffer.Offset, result.Count);
        } while (!result.EndOfMessage);
    }

    await ws.CloseAsync(WebSocketCloseStatus.NormalClosure, &quot;Bye.&quot;, cancellation.Token);

    runs++;
    if ((runs % 1000) == 0) Console.WriteLine(runs);
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Expectedly, the memory usage was a bit higher, and each iteration took noticably longer due to repeated TLS negotiation, but again, memory usage kept hovering at the same level, and did not increase over time. I let this run 100 000 times.&lt;/p&gt;

&lt;p&gt;I used .NET Framework 4.6-4.8 build of Rebex WebSocket R6.8 on Windows 11.&lt;/p&gt;
</description>
<guid isPermaLink="true">https://forum.rebex.net/23450/websocket-memory-usage-continually-increasing?show=23451#a23451</guid>
<pubDate>Mon, 27 Oct 2025 12:07:56 +0000</pubDate>
</item>
<item>
<title>Answered: Issue with rsa-sha2-512 in PubkeyAcceptedAlgorithms on RHEL 9</title>
<link>https://forum.rebex.net/23437/issue-with-rsa-sha2-512-in-pubkeyacceptedalgorithms-on-rhel?show=23438#a23438</link>
<description>It looks like Rebex SFTP might be selecting rsa-sha2-256 as a preferred algorithm. Which version of Rebex SFTP do you use?&lt;br /&gt;
Currently, the algorithm selection is not perfect due to backward compatibility constraints, although we plan to improve this for version 8. (Server announcement of PubkeyAcceptedAlgorithms is a recently-added SSH extension.)&lt;br /&gt;
&lt;br /&gt;
In the meantime, do you have rsa-sha2-512 enabled as a host key algorithm?&lt;br /&gt;
If you do, it should be possible to force it for client authentication using this code (called before the Connect method):&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var sftp = new Sftp();&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Rebex.Security.Cryptography.CryptoHelper.SetOption(sftp.Settings.SshParameters, &amp;quot;ClientKeyAlgorithms&amp;quot;, new string[] { &amp;quot;rsa-sha2-512&amp;quot; });&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sftp.Connect(...);&lt;br /&gt;
&lt;br /&gt;
(Edit: Posted wrong code at first.)</description>
<guid isPermaLink="true">https://forum.rebex.net/23437/issue-with-rsa-sha2-512-in-pubkeyacceptedalgorithms-on-rhel?show=23438#a23438</guid>
<pubDate>Mon, 13 Oct 2025 13:50:22 +0000</pubDate>
</item>
<item>
<title>Answered: POP3 + OAUTH2 + Office365 - ERR Server Unavailable. 21 on GetMailMessage(n)</title>
<link>https://forum.rebex.net/23433/pop3-oauth2-office365-server-unavailable-getmailmessage?show=23434#a23434</link>
<description>&lt;p&gt;Thank you for providing the log. The error is being returned directly by the &lt;code&gt;outlook.office365.com&lt;/code&gt; POP3 server.&lt;/p&gt;

&lt;p&gt;Authentication completes successfully, so the client and server configuration appear correct. The first POP3 command after authentication (&lt;code&gt;STAT&lt;/code&gt;) succeeds, but the second command (&lt;code&gt;RETR&lt;/code&gt;) returns: &lt;code&gt;-ERR Server Unavailable. 21&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;That response is generated server-side and isn’t something the client can control. It may have been a temporary service issue. I’ve just tested retrieving a message from &lt;code&gt;outlook.office365.com&lt;/code&gt; via POP3, and it worked as expected. Please see my log:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;2025-10-08 11:57:08.237 INFO Pop3(1)[4] Info: Connecting to outlook.office365.com:995 using Pop3.
2025-10-08 11:57:08.240 INFO Pop3(1)[4] Info: Assembly: Rebex.Pop3 R6.11 for .NET 4.6-4.8
2025-10-08 11:57:08.242 INFO Pop3(1)[4] Info: Platform: Windows 6.2.9200 64-bit; CLR: 4.0.30319.42000
2025-10-08 11:57:08.268 INFO Pop3(1)[4] Info: Connecting to 52.97.154.162.
2025-10-08 11:57:08.494 INFO Pop3(1)[4] TLS: Negotiating TLS 1.2, RSA with ephemeral ECDH, AES with 256-bit key in GCM mode, AEAD.
2025-10-08 11:57:08.668 INFO Pop3(1)[4] TLS: Connection secured using cipher: TLS 1.2, RSA with ephemeral ECDH, AES with 256-bit key in GCM mode, AEAD.
2025-10-08 11:57:08.716 INFO Pop3(1)[4] Response: +OK The Microsoft Exchange POP3 service is ready. [VgBJADEAUABSADAANgBDAEEAMAAxADUAOQAuAGUAdQByAHAAcgBkADAANgAuAHAAcgBvAGQALgBvAHUAdABsAG8AbwBrAC4AYwBvAG0A]
2025-10-08 11:57:08.723 INFO Pop3(1)[4] Command: CAPA
2025-10-08 11:57:08.729 INFO Pop3(1)[4] Response: +OK
2025-10-08 11:57:08.746 INFO Pop3(1)[5] Command: AUTH XOAUTH2
2025-10-08 11:57:08.751 INFO Pop3(1)[5] Response: +
2025-10-08 11:57:08.753 INFO Pop3(1)[5] Command: dXNl...BAQE=
2025-10-08 11:57:09.672 INFO Pop3(1)[5] Response: +OK User successfully authenticated.
2025-10-08 11:57:09.674 INFO Pop3(1)[5] Command: STAT
2025-10-08 11:57:09.787 INFO Pop3(1)[5] Response: +OK 2 58473
2025-10-08 11:57:09.792 INFO Pop3(1)[5] Command: RETR 2
2025-10-08 11:57:09.941 INFO Pop3(1)[5] Response: +OK
2025-10-08 11:57:10.074 INFO Pop3(1)[5] Command: RETR 1
2025-10-08 11:57:10.209 INFO Pop3(1)[5] Response: +OK
2025-10-08 11:57:10.263 INFO Pop3(1)[5] Command: QUIT
2025-10-08 11:57:10.422 INFO Pop3(1)[5] Response: +OK Microsoft Exchange Server POP3 server signing off.
&lt;/code&gt;&lt;/pre&gt;
</description>
<guid isPermaLink="true">https://forum.rebex.net/23433/pop3-oauth2-office365-server-unavailable-getmailmessage?show=23434#a23434</guid>
<pubDate>Wed, 08 Oct 2025 10:12:24 +0000</pubDate>
</item>
<item>
<title>Answered: web admin interface shows old version installed.</title>
<link>https://forum.rebex.net/23418/web-admin-interface-shows-old-version-installed?show=23420#a23420</link>
<description>&lt;p&gt;Hello, &lt;/p&gt;

&lt;p&gt;please &lt;strong&gt;try to logout and login again in the web admin page&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;If it does not help, please look (and send us) your web admin startup log.&lt;br&gt;
You can find it in your Web admin menu &lt;em&gt;&quot;Logs / Web admin startup&quot;&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://i.postimg.cc/Z5pC5h7H/Screenshot-2025-09-23-104816.jpg&quot; alt=&quot;Web admin startup log screenshot&quot;&gt;&lt;/p&gt;
</description>
<guid isPermaLink="true">https://forum.rebex.net/23418/web-admin-interface-shows-old-version-installed?show=23420#a23420</guid>
<pubDate>Tue, 23 Sep 2025 08:52:32 +0000</pubDate>
</item>
<item>
<title>Answered: Response on wrong Ethernet interface when using multiple interfaces</title>
<link>https://forum.rebex.net/23407/response-wrong-ethernet-interface-using-multiple-interfaces?show=23408#a23408</link>
<description>&lt;p&gt;Hi, and thanks!&lt;/p&gt;

&lt;p&gt;We have not encountered this particular problem before, although we have other encountered issues on machines with multiple network interfaces when routing table has been configured in such a way that there are several possible routes between the client and the server.&lt;/p&gt;

&lt;p&gt;A bit of searching revealed one possible culprit - &lt;a rel=&quot;nofollow&quot; href=&quot;https://learn.microsoft.com/en-us/previous-versions/technet-magazine/cc137807(v=msdn.10)&quot;&gt;Weak Host Configuration&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;In the weak host model, an IP host (either IPv4 or IPv6) can send packets on an interface that is not assigned the source IP address of the packet being sent. This is known as weak host send behavior. An IP host can also receive packets on an interface that is not assigned the destination IP address of the packet being received. This is known as weak host receive behavior.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Try following these steps to configure the IPv4 interface as &quot;not weak&quot;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;code&gt;netsh interface ipv4 show interface&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;See the Idx numbers&lt;/li&gt;
&lt;li&gt;&lt;code&gt;netsh interface ipv4 set interface [Idx number] weakhostsend=disabled&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;netsh interface ipv4 set interface [Idx number] weakhostreceive=disabled&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Does this resolve the issue?&lt;/p&gt;

&lt;p&gt;In any case, if you only need to bind Rebex Tiny SFTP server to a single interface, a better solution would be to only bind the server to that particular interface instead of &lt;code&gt;INADDR_ANY&lt;/code&gt;. We will add support for this to the next release!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Update:&lt;/strong&gt; The latest version of Rebex Tiny SFTP Server makes it possibly to bind to a specific IP address using the new [sshIPBindings](&lt;a rel=&quot;nofollow&quot; href=&quot;https://www.rebex.net/doc/tiny-sftp-server/configuration/&quot;&gt;https://www.rebex.net/doc/tiny-sftp-server/configuration/&lt;/a&gt; configuration option).&lt;/p&gt;
</description>
<guid isPermaLink="true">https://forum.rebex.net/23407/response-wrong-ethernet-interface-using-multiple-interfaces?show=23408#a23408</guid>
<pubDate>Tue, 09 Sep 2025 12:55:43 +0000</pubDate>
</item>
<item>
<title>Answered: Syslog LOCAL Facility Codes</title>
<link>https://forum.rebex.net/23396/syslog-local-facility-codes?show=23397#a23397</link>
<description>&lt;p&gt;Please note that facility values &lt;code&gt;local0&lt;/code&gt; thru &lt;code&gt;local7&lt;/code&gt; are not explicitly defined in Rebex Syslog API currently. However, you can specify any value between 0 and 255 for facility in the API like this:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;var client = new SyslogClient();
client.Connect(...);
client.Send(message, SyslogSeverity.Notice, (SyslogFacility)20);
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;In &lt;a rel=&quot;nofollow&quot; href=&quot;https://datatracker.ietf.org/doc/html/rfc5424#section-6.2.1&quot;&gt;RFC 5424&lt;/a&gt; the values for &lt;code&gt;local0&lt;/code&gt; thru &lt;code&gt;local7&lt;/code&gt; are defined as follows:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;16 - local use 0 (local0)
17 - local use 1 (local1)
18 - local use 2 (local2)
19 - local use 3 (local3)
20 - local use 4 (local4)
21 - local use 5 (local5)
22 - local use 6 (local6)
23 - local use 7 (local7)
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;So, in the example above, the &lt;code&gt;(SyslogFacility)20&lt;/code&gt; means &lt;code&gt;local4&lt;/code&gt;.&lt;/p&gt;
</description>
<guid isPermaLink="true">https://forum.rebex.net/23396/syslog-local-facility-codes?show=23397#a23397</guid>
<pubDate>Thu, 28 Aug 2025 12:36:14 +0000</pubDate>
</item>
<item>
<title>Answered: buru-sftp-server: Change hostname in authentication banner</title>
<link>https://forum.rebex.net/23387/buru-sftp-server-change-hostname-in-authentication-banner?show=23388#a23388</link>
<description>&lt;p&gt;Hi,&lt;/p&gt;

&lt;p&gt;is ssh.banner or ssh.shellHostName what you are looking for?&lt;/p&gt;

&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://www.rebex.net/doc/buru-sftp-server/configuration/config/ssh/&quot;&gt;https://www.rebex.net/doc/buru-sftp-server/configuration/config/ssh/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If not, can you please provide how exactly is the internal hostname revealed? &lt;/p&gt;

&lt;p&gt;Thanks&lt;/p&gt;
</description>
<guid isPermaLink="true">https://forum.rebex.net/23387/buru-sftp-server-change-hostname-in-authentication-banner?show=23388#a23388</guid>
<pubDate>Thu, 14 Aug 2025 12:15:53 +0000</pubDate>
</item>
<item>
<title>Answered: HTTPS legacy R4.7 for .net cf-3.5</title>
<link>https://forum.rebex.net/23377/https-legacy-r4-7-for-net-cf-3-5?show=23378#a23378</link>
<description>&lt;p&gt;Hello,&lt;/p&gt;

&lt;p&gt;We can provide any of the previous versions, and we can also help you determine what's going on with R5.17 / R5.18. But version R4.7 of Rebex HTTPS (Legacy or non-legacy) does not exist. Could you please check the version number again? Or pack the &quot;R4.7&quot; Rebex DLLs you were using into a ZIP file and mail them to us - we can then determine which version it actually is.&lt;/p&gt;

&lt;p&gt;To download versions of Rebex HTTPS Legacy published between 2019-06-28 and today, visit the &lt;a rel=&quot;nofollow&quot; href=&quot;https://www.rebex.net/account/download-archive/&quot;&gt;download archive&lt;/a&gt;.&lt;br&gt;
We can provide an earlier release as well upon request, but we need to determine the actual version number first.&lt;/p&gt;
</description>
<guid isPermaLink="true">https://forum.rebex.net/23377/https-legacy-r4-7-for-net-cf-3-5?show=23378#a23378</guid>
<pubDate>Thu, 31 Jul 2025 12:26:57 +0000</pubDate>
</item>
<item>
<title>Answered: zip: Is it possible to zip a string (json file in memory) and save it in a database field (instead to a file)?</title>
<link>https://forum.rebex.net/23374/possible-string-file-memory-save-database-field-instead-file?show=23375#a23375</link>
<description>&lt;p&gt;Yes, this is possible. Sample code:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;using System.IO;
using System.Text;
using Rebex.IO.Compression;
...

// 1. Your JSON payload
string json = &quot;{\&quot;foo\&quot;: \&quot;bar\&quot;, \&quot;count\&quot;: 123}&quot;;

// 2. Create a new memory-based ZipArchive
var stream = new MemoryStream();
var archive = new ZipArchive(stream);

// 3. Convert JSON payload to a MemoryStream and add it to the ZIP
var jsonStream = new MemoryStream(Encoding.UTF8.GetBytes(json));
archive.AddFile(jsonStream, &quot;data.json&quot;);

// 4. Close the ZIP archive and get the compressed contenxt as a byte array
archive.Close();
byte[] zipBytes = stream.ToArray();

// 5. Save zipBytes into the database
...
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Sample decompression code:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;// 1. Create a memory-based ZipArchive using the data from the database
var stream = new MemoryStream(zipBytes);
var archive = new ZipArchive(stream);

// 2. Extract the JSON payload into a MemoryStream
var jsonStream = new MemoryStream();
archive.ExtractFile(&quot;data.json&quot;, jsonStream);

// 3. Convert it to a string
string json = Encoding.UTF8.GetString(jsonStream.GetBuffer(), 0, (int)jsonStream.Length);
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;This assumes you are saving the compressed data as a binary blob. To use a string field instead, you encode to/from Base-64 encoding using &lt;code&gt;Convert.ToBase64String&lt;/code&gt; / &lt;code&gt;Convert.FromBase64String&lt;/code&gt; methods.&lt;/p&gt;
</description>
<guid isPermaLink="true">https://forum.rebex.net/23374/possible-string-file-memory-save-database-field-instead-file?show=23375#a23375</guid>
<pubDate>Wed, 30 Jul 2025 13:11:39 +0000</pubDate>
</item>
<item>
<title>Answered: Why is my connection being immediately closed?</title>
<link>https://forum.rebex.net/23370/why-is-my-connection-being-immediately-closed?show=23371#a23371</link>
<description>&lt;p&gt;The connection is closed by the client explicitly after the initial directory listing fails. So, the question is why the initial directory listing fails?&lt;/p&gt;

&lt;p&gt;The client issued command &lt;code&gt;LIST -l&lt;/code&gt; which is not supported by Rebex FTP server. The supported format of the LIST command is (as defined in &lt;a rel=&quot;nofollow&quot; href=&quot;https://datatracker.ietf.org/doc/html/rfc959#page-47&quot;&gt;RFC 959&lt;/a&gt;):&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;code&gt;LIST [&amp;lt;SP&amp;gt; &amp;lt;pathname&amp;gt;] &amp;lt;CRLF&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It seems that the client is trying to pass a &lt;code&gt;-l&lt;/code&gt; option to the LIST command, which results to interpreting the &lt;code&gt;-l&lt;/code&gt; as a &lt;code&gt;&amp;lt;pathname&amp;gt;&lt;/code&gt; argument. Since the &lt;code&gt;-l&lt;/code&gt; directory does not exist on the server the &lt;code&gt;550 No such directory&lt;/code&gt; response is sent to the client.&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;-l&lt;/code&gt; option is a non-standard extension for the LIST command.&lt;/p&gt;

&lt;p&gt;The currently possible solution is to disable sending &lt;code&gt;-l&lt;/code&gt; option at the client side. However, we will consider to add support for &lt;code&gt;-l&lt;/code&gt; and &lt;code&gt;-a&lt;/code&gt; options, which seems to be used by some FTP clients. Please leave a comment here, if you want to receive preview version in case the support is added.&lt;/p&gt;
</description>
<guid isPermaLink="true">https://forum.rebex.net/23370/why-is-my-connection-being-immediately-closed?show=23371#a23371</guid>
<pubDate>Sun, 27 Jul 2025 17:37:20 +0000</pubDate>
</item>
<item>
<title>Answered: Adding files with Rebex.IO.ActionOnExistingFiles.Rename</title>
<link>https://forum.rebex.net/23359/adding-files-with-rebex-io-actiononexistingfiles-rename?show=23362#a23362</link>
<description>&lt;p&gt;Unfortunately, it is not possible to set item properties during compression. However, you can utilize the &lt;a rel=&quot;nofollow&quot; href=&quot;https://www.rebex.net/doc/api/Rebex.IO.Compression.ZipArchive.ProgressChanged.html&quot;&gt;ProgressChanged&lt;/a&gt; event to get information about successfully processed files and update items using that after the compression is complete. For example like this:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;var processedFiles = new List&amp;lt;string&amp;gt;();
zip.ProgressChanged += (s, e) =&amp;gt;
{
    if (e.OperationStep == ArchiveOperationStep.FileProcessed)
        processedFiles.Add(e.ArchiveItemPath);
};

zip.Add(&quot;c:/data&quot;, &quot;/&quot;, 0, 0, ActionOnExistingFiles.Rename);

foreach (var file in processedFiles)
{
    var item = zip[file];
    var now = DateTime.Now;
    item.CreationTime = now;
    item.LastWriteTime = now;
    item.LastAccessTime = now;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;If you want to set properties of renamed files only, you can utilize the &lt;a rel=&quot;nofollow&quot; href=&quot;https://www.rebex.net/doc/api/Rebex.IO.Compression.ZipArchive.ProblemDetected.html&quot;&gt;ProblemDetected&lt;/a&gt; event to capture paths of renamed files and use it in &lt;a rel=&quot;nofollow&quot; href=&quot;https://www.rebex.net/doc/api/Rebex.IO.Compression.ZipArchive.ProgressChanged.html&quot;&gt;ProgressChanged&lt;/a&gt; handler:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;var renamedFiles = new HashSet&amp;lt;string&amp;gt;();
zip.ProblemDetected += (s, e) =&amp;gt;
{
    if (e.ProblemType == ArchiveProblemType.FileExists)
    {
        // store external path, which will remain unmodified during the process
        renamedFiles.Add(e.ExternalItemPath);
        e.Action = ArchiveProblemActions.Rename;
    }
};

var processedFiles = new List&amp;lt;string&amp;gt;();
zip.ProgressChanged += (s, e) =&amp;gt;
{
    if (e.OperationStep == ArchiveOperationStep.FileProcessed)
    {
        // store only successfully renamed files
        if (renamedFiles.Contains(e.ExternalItemPath))
            processedFiles.Add(e.ArchiveItemPath);
    }
};
&lt;/code&gt;&lt;/pre&gt;
</description>
<guid isPermaLink="true">https://forum.rebex.net/23359/adding-files-with-rebex-io-actiononexistingfiles-rename?show=23362#a23362</guid>
<pubDate>Mon, 07 Jul 2025 14:27:04 +0000</pubDate>
</item>
<item>
<title>Answered: tlsproxy doesn't start</title>
<link>https://forum.rebex.net/23354/tlsproxy-doesnt-start?show=23356#a23356</link>
<description>&lt;p&gt;Please run the proxy from command line in interactive mode:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;tlsproxy.exe run
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Does it work or an error is displayed?&lt;/p&gt;

&lt;p&gt;Also please make sure, you have specified valid logging path and also make sure that the process has write permissions to the logging directory (&lt;code&gt;$tlsproxydir$\config\config.yaml&lt;/code&gt;):&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;logging:
  global:
    location: C:\tlsproxy\logs
    minLevel: Information
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Does the log contains some additional error?&lt;/p&gt;
</description>
<guid isPermaLink="true">https://forum.rebex.net/23354/tlsproxy-doesnt-start?show=23356#a23356</guid>
<pubDate>Fri, 04 Jul 2025 11:36:04 +0000</pubDate>
</item>
<item>
<title>Answered: TLS Proxy Shell/Command Prompt Opens then Immediately Closes</title>
<link>https://forum.rebex.net/23350/tls-proxy-shell-command-prompt-opens-then-immediately-closes?show=23351#a23351</link>
<description>&lt;p&gt;Please note that &lt;code&gt;tlsproxy.exe&lt;/code&gt; accept various arguments as commands. Please run &lt;code&gt;tlsproxy.exe --help&lt;/code&gt; in the Command Prompt or Power Shell, whatever suits you the best.&lt;/p&gt;

&lt;p&gt;Using the &lt;code&gt;tlsproxy.exe tunnel add&lt;/code&gt; command you can define new proxy tunnel (run &lt;code&gt;tlsproxy.exe tunnel add --help&lt;/code&gt; for command details).&lt;/p&gt;

&lt;p&gt;Using the &lt;code&gt;tlsproxy.exe install&lt;/code&gt; command you will install the Rebex TLS Proxy as a Windows service.   &lt;br&gt;
Alternatively, you can use the &lt;code&gt;tlsproxy.exe run&lt;/code&gt; command, which will run the proxy in interactive mode from command line without need to install it as a service.&lt;/p&gt;
</description>
<guid isPermaLink="true">https://forum.rebex.net/23350/tls-proxy-shell-command-prompt-opens-then-immediately-closes?show=23351#a23351</guid>
<pubDate>Mon, 30 Jun 2025 13:30:23 +0000</pubDate>
</item>
<item>
<title>Answered: GraphClient limit $select</title>
<link>https://forum.rebex.net/23345/graphclient-limit-%24select?show=23346#a23346</link>
<description>&lt;p&gt;Unfortunately, it is not possible to specify custom &lt;code&gt;$select&lt;/code&gt; in the current version.&lt;/p&gt;

&lt;p&gt;We already planned this feature, but we have decided to postpone it because of 3 things we were unsure:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;how  to handle values not directly accessible through the API (e.g. &lt;code&gt;internetMessageHeaders&lt;/code&gt;), this would lead to another API for reading such values&lt;/li&gt;
&lt;li&gt;or whether to add every single property of the &lt;code&gt;GraphMessageInfo&lt;/code&gt; into the &lt;code&gt;GraphMessageFields&lt;/code&gt; enum (instead of using raw &lt;code&gt;string&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;finally, how custom &lt;code&gt;$select&lt;/code&gt; would affect future features (e.g. &lt;code&gt;GraphMessageFields.AttachmentInfo&lt;/code&gt; would possibly affect the final URL, but in other way than &lt;code&gt;$select&lt;/code&gt; does)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;However, we were not aware of the tremendous difference in server computation time between &lt;code&gt;GraphMessageFields.Envelope&lt;/code&gt; and &lt;code&gt;GraphMessageFields.Info&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;We will discuss the possibilities for implementing custom &lt;code&gt;$select&lt;/code&gt;. I will send you link to preview version ASAP.&lt;/p&gt;
</description>
<guid isPermaLink="true">https://forum.rebex.net/23345/graphclient-limit-%24select?show=23346#a23346</guid>
<pubDate>Thu, 26 Jun 2025 16:30:11 +0000</pubDate>
</item>
<item>
<title>Answered: GraphClient return most recent messages first</title>
<link>https://forum.rebex.net/23341/graphclient-return-most-recent-messages-first?show=23342#a23342</link>
<description>&lt;p&gt;Currently, the &lt;code&gt;GraphClient&lt;/code&gt; class does not have high-level API for sorting. However, you can specify it in native format using &lt;a rel=&quot;nofollow&quot; href=&quot;https://www.rebex.net/doc/api/Rebex.Net.GraphMessageSearchQuery.RawOrderBy.html&quot;&gt;GraphMessageSearchQuery.RawOrderBy&lt;/a&gt; property like this:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;using (var client = new GraphClient())
{
    client.Connect();
    client.Login(token);
    client.LogWriter = new ConsoleLogWriter(LogLevel.Debug);

    var query = new GraphMessageSearchQuery()
    {
        RawOrderBy = &quot;receivedDateTime desc&quot;,
        PageView = new GraphPageView(0, 10)
    };

    var list = client.Search(GraphFolderId.Inbox, query);
    // process messages
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;If you check the produced log, the request URL corresponds to the one you asked for:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;Sending request: GET /v1.0/me/mailFolders/inbox/messages?$orderby=receivedDateTime%20desc&amp;amp;$top=10
&lt;/code&gt;&lt;/pre&gt;
</description>
<guid isPermaLink="true">https://forum.rebex.net/23341/graphclient-return-most-recent-messages-first?show=23342#a23342</guid>
<pubDate>Mon, 23 Jun 2025 11:05:44 +0000</pubDate>
</item>
<item>
<title>Answered: TinyTLSProxy on XP - how to proxy from TLS10 to TLS12</title>
<link>https://forum.rebex.net/23336/tinytlsproxy-on-xp-how-to-proxy-from-tls10-to-tls12?show=23337#a23337</link>
<description>&lt;p&gt;&lt;strong&gt;UPDATE:&lt;/strong&gt;&lt;br&gt;
TLS to TLS conversion is available from version &lt;code&gt;1.7.0&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;The command line to configure TLS to TLS conversion looks like this:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;RebexTinyTlsProxy.exe -TLStoTLS -TLS10:TLS12- 443:httpbin.org:443 -c cert.pfx#password
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Please note that you may need to specify the &lt;code&gt;-SNI&lt;/code&gt; option as well:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;-SNI name       Server name for outbound TLS tunnel (SNI extension).
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;By default, the &lt;code&gt;SNI&lt;/code&gt; received on the inbound tunnel is used for the outbound tunnel as well. For example, if you access the proxy using &lt;code&gt;localhost&lt;/code&gt; the &lt;code&gt;SNI&lt;/code&gt; for outbound tunnel will be &lt;code&gt;localhost&lt;/code&gt;, which can be (often) rejected by the target server. To use correct &lt;code&gt;SNI&lt;/code&gt; for outbound tunnel, specify the &lt;code&gt;-SNI&lt;/code&gt; option (for example: &lt;code&gt;-SNI httpbin.org&lt;/code&gt;).&lt;/p&gt;

&lt;p&gt;Please also note that for TLS to TLS conversion you need to use a valid certificate for the proxy.&lt;/p&gt;
</description>
<guid isPermaLink="true">https://forum.rebex.net/23336/tinytlsproxy-on-xp-how-to-proxy-from-tls10-to-tls12?show=23337#a23337</guid>
<pubDate>Wed, 18 Jun 2025 16:05:12 +0000</pubDate>
</item>
<item>
<title>Answered: How to transfer file between two servers in SFTP using .NET Framework 4.8 / C#?</title>
<link>https://forum.rebex.net/23332/how-transfer-file-between-two-servers-sftp-using-framework?show=23333#a23333</link>
<description>&lt;p&gt;Your code should work. Are you having any problems with it?&lt;br&gt;
In that case, use &lt;code&gt;FileTransferClient&lt;/code&gt;'s logging API to create a &lt;a rel=&quot;nofollow&quot; href=&quot;https://www.rebex.net/kb/logging/&quot;&gt;debug log&lt;/a&gt;, which should make it possible to tell what's going on.&lt;/p&gt;

&lt;p&gt;Some general suggestions that could be useful:&lt;br&gt;
- &lt;code&gt;IsConnectes&lt;/code&gt; will always return true after a successful &lt;code&gt;Connect&lt;/code&gt; call, so there is no need to check it.&lt;br&gt;
- &lt;code&gt;IsAuthenticated&lt;/code&gt; will always return true after a successful &lt;code&gt;Login&lt;/code&gt; call, so there is no need to check it either.&lt;br&gt;
- Using synchronous variants of &lt;code&gt;FileTransferClient&lt;/code&gt; methods in a click event handler is not a good idea, because it would block the application. Depending on the application type (is it a web app or a Windows app?), consider using asynchronous variants, or run the whole operation in a background thread.&lt;br&gt;
- It's a good practice to disconnect or dispose the instance of &lt;code&gt;FileTransferClient&lt;/code&gt; when it's no longer needed. Otherwise, the connection would stay open for a while until the instance is claimed by .NET's garbage collector.&lt;br&gt;
- There is no need to register &lt;code&gt;TransferProgressChanged&lt;/code&gt; if the handler is empty.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;private async void btnSendFile_Click(object sender, EventArgs e)
{
    try
    {
        using (var client = new FileTransferClient())
        {
            await client.ConnectAsync(&quot;test.rebex.net&quot;, 22, FileTransferMode.Sftp);
            await client.LoginAsync(&quot;demo&quot;, &quot;password&quot;);
            await client.UploadAsync(&quot;/Server1/home/file.txt&quot;, &quot;/Server2/home/Downloads&quot;);
        }
    }
    catch (Exception Ex)
    {
        MessageBox.Show(Ex.Message);
    }
}
&lt;/code&gt;&lt;/pre&gt;
</description>
<guid isPermaLink="true">https://forum.rebex.net/23332/how-transfer-file-between-two-servers-sftp-using-framework?show=23333#a23333</guid>
<pubDate>Wed, 18 Jun 2025 10:35:12 +0000</pubDate>
</item>
<item>
<title>Answered: How to read data when HttpResponse has no Content-Length</title>
<link>https://forum.rebex.net/23323/how-to-read-data-when-httpresponse-has-no-content-length?show=23326#a23326</link>
<description>&lt;p&gt;Hi,&lt;/p&gt;

&lt;p&gt;Actually, with &quot;Connection: closed&quot;, the server is supposed to close the connection immediately after sending the data, and that should be handled by HttpResponse without issues.&lt;/p&gt;

&lt;p&gt;However, it's possible that the server closes the connection in a wrong way. For example, when HTTPS is used, the connection should be closed by sending the close&lt;em&gt;notify alert message, because a lack of that would open the connection to truncation man-in-the-middle attacks, where the client could be tricked into accepting incomplete data without being able to detect that. So perhaps the lack of close&lt;/em&gt;notify is actually the issue with SugarSync?&lt;/p&gt;

&lt;p&gt;Please post the error message you get, or rather a &lt;a rel=&quot;nofollow&quot; href=&quot;https://www.rebex.net/kb/logging/&quot;&gt;debug log&lt;/a&gt; - that should help us to figure out what's actually going on, and hopefully suggest a workaround for that particular issue.&lt;/p&gt;
</description>
<guid isPermaLink="true">https://forum.rebex.net/23323/how-to-read-data-when-httpresponse-has-no-content-length?show=23326#a23326</guid>
<pubDate>Fri, 13 Jun 2025 19:58:23 +0000</pubDate>
</item>
<item>
<title>Answered: TLS proxy - SSE channel timeouts</title>
<link>https://forum.rebex.net/23319/tls-proxy-sse-channel-timeouts?show=23320#a23320</link>
<description>&lt;p&gt;Currently the maximal value for &lt;code&gt;idleTimeout&lt;/code&gt; is &lt;code&gt;2147483&lt;/code&gt; which is 24 days, 20 hours, 31 minutes and 23 seconds.&lt;/p&gt;

&lt;p&gt;If this not enough for you, we can add support for infinite timeout. Just let us know.&lt;/p&gt;
</description>
<guid isPermaLink="true">https://forum.rebex.net/23319/tls-proxy-sse-channel-timeouts?show=23320#a23320</guid>
<pubDate>Wed, 11 Jun 2025 15:57:43 +0000</pubDate>
</item>
<item>
<title>Answered: SSH. TerminalOptions. Current limitation of the number of columns.</title>
<link>https://forum.rebex.net/23315/ssh-terminaloptions-current-limitation-the-number-columns?show=23316#a23316</link>
<description>&lt;p&gt;Thanks for bringing this to our attention. Unfortunately, terminal behavior varies a lot and some terminals are quite a challenge. I'm not sure whether we would be able to address this particular problem in the near term, but we will look into it, because BusyBox is quite common.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Does the Rebex library scripting feature have the option to handle such cases?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;You &lt;em&gt;might&lt;/em&gt; be able to work around this by using some clever combination of &lt;code&gt;Send&lt;/code&gt;/&lt;code&gt;WaitFor&lt;/code&gt; instead of &lt;code&gt;SendCommand&lt;/code&gt;/&lt;code&gt;ReadUntilPrompt&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Another possibility is to execute long commands without using the Scriptiong API, without a pseudo-terminal, which would get rid of the concept of rows/columns, along with BusyBox cursor position control:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;var shell = client.StartCommand(&quot;echo $?&quot;);
var response = shell.ReadAll();
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The drawback is that the &lt;code&gt;Shell&lt;/code&gt; API is somewhat limited, which is why we introduced &lt;code&gt;Scripting&lt;/code&gt;. But in some scenarios, it might be a better choice.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Can you please explain, what is the reason for [number of columns] limitation, is it possible to increase it?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The RFC does indeed allow very large values for columns and rows, but there have to be some limits in practice. Otherwise, all servers would have to support terminal sizes of up to 4294967295x4294967295, which would not even fit into memory. At the client side in Rebex.SshShell, each terminal cell consumes roughly 20 bytes. Additionally, we had some doubts that servers and applications would be able to correctly handle exceedingly large values, so imposing limits of 1024 columns/rows seemed about right. However, that was 17 years - I guess we can increase this now a bit. How long can your scripts actually get?&lt;/p&gt;
</description>
<guid isPermaLink="true">https://forum.rebex.net/23315/ssh-terminaloptions-current-limitation-the-number-columns?show=23316#a23316</guid>
<pubDate>Mon, 02 Jun 2025 18:25:40 +0000</pubDate>
</item>
<item>
<title>Answered: Is there a method to avoid using CBC ciphers or weak SSH ciphers in new version of Rebex Tiny SFTP?</title>
<link>https://forum.rebex.net/23313/there-method-avoid-using-ciphers-ciphers-version-rebex-sftp?show=23314#a23314</link>
<description>&lt;p&gt;Unfortunately, there is no possibility to configure SSH ciphers in pre-compiled Rebex Tiny SFTP Server. It's basically a test app, and this is outside its scope. However, you can purchase a Rebex File Server library license and tweak&amp;amp;compile &lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/rebexnet/RebexTinySftpServer&quot;&gt;Rebex Tiny SFTP Server source code&lt;/a&gt; yourself.&lt;/p&gt;

&lt;p&gt;A better option is to try our fully featured &lt;a rel=&quot;nofollow&quot; href=&quot;https://www.rebex.net/buru-sftp-server/&quot;&gt;Rebex Buru SFTP Server&lt;/a&gt; instead. You can &lt;a rel=&quot;nofollow&quot; href=&quot;https://www.rebex.net/doc/buru-sftp-server/configuration/config/ssh/&quot;&gt;fine-tune SSH ciphers&lt;/a&gt; there.&lt;/p&gt;
</description>
<guid isPermaLink="true">https://forum.rebex.net/23313/there-method-avoid-using-ciphers-ciphers-version-rebex-sftp?show=23314#a23314</guid>
<pubDate>Tue, 20 May 2025 15:49:26 +0000</pubDate>
</item>
<item>
<title>Answered: When is ServerSession.Current set during login to Sftp Fileserver?</title>
<link>https://forum.rebex.net/23311/when-serversession-current-set-during-login-sftp-fileserver?show=23312#a23312</link>
<description>&lt;p&gt;This is actually a somewhat peculiar case, thanks for bringing it to our attention.&lt;/p&gt;

&lt;p&gt;This particular &lt;code&gt;Exists&lt;/code&gt; call was not made via the server, but rather from the FileServerUser constructor:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;new FileServerUser(e.UserName, null, sftpFileSystem, virtualDirectory);
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Purpose of the &lt;code&gt;Exists&lt;/code&gt; call is to check whether the &lt;code&gt;virtualDirectory&lt;/code&gt; actually exists, to prevent the server from failing later when SFTP protocol is getting initialized.&lt;/p&gt;

&lt;p&gt;However, the &lt;code&gt;FileServerUser&lt;/code&gt; constructor is not aware of the context because it has not been set yet, so that single &lt;code&gt;Exists&lt;/code&gt; call can't really behave as documented. So, indeed, it's an expected (but undocumented) behavior.&lt;/p&gt;

&lt;p&gt;I'm not quite sure how to best address this (apart from updating the documentation). But there is a workaround involving an undocumented &lt;em&gt;SkipVirtualRootPathCheck&lt;/em&gt; option that disables the &lt;code&gt;Exists&lt;/code&gt; call. Instead of your &lt;code&gt;FileServerUser&lt;/code&gt; constructor call, use this:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;var user = new FileServerUser(e.UserName, null);
Rebex.Security.Cryptography.CryptoHelper.SetOption(user, &quot;SkipVirtualRootPathCheck&quot;, true);
user.SetFileSystem(sftpFileSystem, virtualDirectory);
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;This option was added to address &lt;a rel=&quot;nofollow&quot; href=&quot;https://forum.rebex.net/16751/sftp-becomes-unresponsive-during-authentication&quot;&gt;another problem&lt;/a&gt;, but it's apparently useful here as well.&lt;/p&gt;
</description>
<guid isPermaLink="true">https://forum.rebex.net/23311/when-serversession-current-set-during-login-sftp-fileserver?show=23312#a23312</guid>
<pubDate>Fri, 16 May 2025 15:24:30 +0000</pubDate>
</item>
<item>
<title>Answered: Does Rebex zip can work with long paths?</title>
<link>https://forum.rebex.net/23297/does-rebex-zip-can-work-with-long-paths?show=23299#a23299</link>
<description>&lt;p&gt;In general, Rebex ZIP works with path using .NET &lt;code&gt;System.IO&lt;/code&gt; API. If the system can handle long paths, then Rebex ZIP will handle it as well.&lt;/p&gt;

&lt;p&gt;For example, I have just tested that there is no issue with long paths on .NET 6, .NET 8 and .NET 9, but I got &lt;code&gt;System.IO.DirectoryNotFoundException&lt;/code&gt; on .NET 4.8.&lt;br&gt;
In both cases the &lt;code&gt;LongPathsEnabled&lt;/code&gt; registry value has no effect on the functionality.&lt;/p&gt;

&lt;p&gt;If you target .NET 4.8 (or lower) there is known workaround for long paths. You have to enable support for long path in &lt;code&gt;app.config&lt;/code&gt; file like this:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&amp;lt;runtime&amp;gt;
    &amp;lt;AppContextSwitchOverrides value=&quot;Switch.System.IO.UseLegacyPathHandling=false;Switch.System.IO.BlockLongPaths=false&quot; /&amp;gt;
&amp;lt;/runtime&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Then in your code you have to use full UNC paths such as:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;string path = @&quot;\\?\c:\my_very_long_path&quot;;
&lt;/code&gt;&lt;/pre&gt;

&lt;hr&gt;

&lt;p&gt;Finally, Rebex ZIP can operate on streams, which enables you to delegate work with long paths to a different API. You only need to provide a seekable stream for &lt;code&gt;ZipArchive&lt;/code&gt;. For adding or extracting files even non-seekable streams would be enough.&lt;/p&gt;
</description>
<guid isPermaLink="true">https://forum.rebex.net/23297/does-rebex-zip-can-work-with-long-paths?show=23299#a23299</guid>
<pubDate>Tue, 13 May 2025 10:34:02 +0000</pubDate>
</item>
<item>
<title>Answered: How to implement something similar to sshuttle using Rebex SSH tunnels...?</title>
<link>https://forum.rebex.net/23288/implement-something-similar-sshuttle-using-rebex-tunnels?show=23289#a23289</link>
<description>&lt;p&gt;Hi,&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;sshuttle&lt;/code&gt; tool actually &lt;a rel=&quot;nofollow&quot; href=&quot;https://sshuttle.readthedocs.io/en/stable/manpage.html#discussion&quot;&gt;uploads its Python source code to the server&lt;/a&gt;, executes it there, and uses that instead of SSH's tunneling. So, basically, it's not really an SSH VPN, it's a proprietary VPN that runs over SSH session. At also uses &lt;code&gt;iptables REDIRECT&lt;/code&gt; rules to capture outgoing TCP sessions. These clever hacks make it a useful tool.&lt;/p&gt;

&lt;p&gt;But unfortunately, this also means that reproducing &lt;code&gt;sshuttle&lt;/code&gt; using SSH alone is not possible - not with Rebex, not with OpenSSH.&lt;/p&gt;

&lt;p&gt;The closest you can get is to &lt;a rel=&quot;nofollow&quot; href=&quot;https://www.rebex.net/doc/api/Rebex.Net.Ssh.StartSocksServer.html&quot;&gt;set up a SOCKS5 server&lt;/a&gt; that tunnels its connections through an SSH server. This eliminates the need to setup one tunnel per port, but it also requires each client app to support connecting via a SOCKS5 server and be configured to use it. To work around that, you would need something like &lt;code&gt;sshuttle&lt;/code&gt; that operates via a SOCKS5 server. Unfortunately, we are not aware of any such tool, and we have no plans to implement it.&lt;/p&gt;
</description>
<guid isPermaLink="true">https://forum.rebex.net/23288/implement-something-similar-sshuttle-using-rebex-tunnels?show=23289#a23289</guid>
<pubDate>Mon, 12 May 2025 10:56:05 +0000</pubDate>
</item>
<item>
<title>Answered: How to resolve the exception &quot;connection closed by the server .,make sure you are connecting to an SSH or SFTP server&quot;</title>
<link>https://forum.rebex.net/23285/resolve-exception-connection-closed-server-connecting-server?show=23286#a23286</link>
<description>&lt;p&gt;The &lt;em&gt;&quot;Connection was closed by the Server. Make sure you are connecting to SSH or SFTP Server.&quot;&lt;/em&gt; error occurs in Rebex SFTP's &lt;code&gt;Connect&lt;/code&gt; method when the server does not respond with a proper SSH server identification string that starts with &quot;SSH-2.0-&quot;. Typically, this happens when trying to connect to a server that is not using SFTP/SSH. However, it can also occur if the server accepts the connection but then does not start SSH negotiation and closes the connection instead. It's quite possible this is caused by misconfigured whitelisting.&lt;/p&gt;

&lt;p&gt;What message do you receive when you connect to the server from the command line using the 'telnet' command? Does it start with &quot;SSH-2.0-&quot;? Make sure you are connecting from the same machine where Rebex SFTP runs.&lt;/p&gt;
</description>
<guid isPermaLink="true">https://forum.rebex.net/23285/resolve-exception-connection-closed-server-connecting-server?show=23286#a23286</guid>
<pubDate>Fri, 09 May 2025 16:34:06 +0000</pubDate>
</item>
<item>
<title>Answered: How set up  Rebex TLS Proxy to establish outbound connection ignoring server certificate problems</title>
<link>https://forum.rebex.net/23279/establish-outbound-connection-ignoring-certificate-problems?show=23280#a23280</link>
<description>&lt;p&gt;Hello,&lt;/p&gt;

&lt;p&gt;Rebex TLS Proxy is prepared for such scenario, but we strongly discourage to use it in production environment. Bypassing certificate check lowers the security and in some cases removes purpose of the TLS at all.&lt;/p&gt;

&lt;p&gt;To alter certificate validation use &lt;code&gt;validationOptions&lt;/code&gt; setting in the tunnel definition in the &lt;code&gt;config.yaml&lt;/code&gt; file. You can use these values:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;code&gt;IgnoreInvalidTime&lt;/code&gt; - ignores time validity errors - useful for expired certificates.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;SkipRevocationCheck&lt;/code&gt; - does not perform certificate revocation check.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;IgnoreCommonNameMismatch&lt;/code&gt; - ignores wrong host name errors.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;AcceptAll&lt;/code&gt; - does not perform certificate check at all.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I will now describe, how settings 3 and 4 are dangerous:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;code&gt;IgnoreCommonNameMismatch&lt;/code&gt;&lt;/strong&gt;&lt;br&gt;
Let suppose an attacker has a valid domain with a valid and globally trusted certificate &lt;code&gt;mydomain.com&lt;/code&gt;.&lt;br&gt;
You want to connect to &lt;code&gt;mybank.com&lt;/code&gt;, but the attacker redirects the traffic to their fraud site and provides certificate for &lt;code&gt;mydomain.com&lt;/code&gt;. The certificate is perfectly valid, except it was issued for different domain, so a web browser (and TLS Proxy) would abort the connection with appropriate error.&lt;br&gt;
If you use &lt;code&gt;IgnoreCommonNameMismatch&lt;/code&gt; the critical host name error will be ignored and you will be provided with a fraud site without knowing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;code&gt;AcceptAll&lt;/code&gt;&lt;/strong&gt;&lt;br&gt;
It is basically the same as example above, but in this case the attacker does not need a valid certificate at all. Any certificate would be enough to successfully redirect you to a fraud site without knowing.&lt;/p&gt;

&lt;hr&gt;

&lt;p&gt;Example of configuration:&lt;/p&gt;

&lt;pre&gt;
tunnels: 
  - name: example
    in: { address: 0.0.0.0, port: 8080 }
    out: { address: httpbin.org, port: 443, protocol: TLS }
    validationOptions: AcceptAll # do not use this in production!
&lt;/pre&gt;
</description>
<guid isPermaLink="true">https://forum.rebex.net/23279/establish-outbound-connection-ignoring-certificate-problems?show=23280#a23280</guid>
<pubDate>Mon, 28 Apr 2025 18:07:41 +0000</pubDate>
</item>
<item>
<title>Answered: Buru Server Upgrade 2.17.0</title>
<link>https://forum.rebex.net/23266/buru-server-upgrade-2-17-0?show=23267#a23267</link>
<description>&lt;p&gt;Please follow the troubleshooting guide here: &lt;a rel=&quot;nofollow&quot; href=&quot;https://www.rebex.net/doc/buru-sftp-server/getting-started/troubleshooting/&quot;&gt;https://www.rebex.net/doc/buru-sftp-server/getting-started/troubleshooting/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It would be also very helpful if you shared us what caused the issue. &lt;/p&gt;

&lt;p&gt;Thanks&lt;/p&gt;
</description>
<guid isPermaLink="true">https://forum.rebex.net/23266/buru-server-upgrade-2-17-0?show=23267#a23267</guid>
<pubDate>Fri, 11 Apr 2025 13:10:25 +0000</pubDate>
</item>
<item>
<title>Answered: Rebex TLS Proxy - Problems connecting to Azure SQL</title>
<link>https://forum.rebex.net/23255/rebex-tls-proxy-problems-connecting-to-azure-sql?show=23256#a23256</link>
<description>&lt;p&gt;You placed the &lt;code&gt;certificate&lt;/code&gt; into &lt;code&gt;in:&lt;/code&gt; section, which is invalid. The &lt;code&gt;certificate&lt;/code&gt; needs to be placed outside (at the same level as &lt;code&gt;in&lt;/code&gt;, &lt;code&gt;out&lt;/code&gt;, &lt;code&gt;idleTimeout&lt;/code&gt;. Please try this instead:&lt;/p&gt;

&lt;pre&gt;
tunnels:
- name: sqlserveraddress.database.windows.net:1433
  in:
    port: 1433
    protocol: TLS
    tlsVersions: TLS10,TLS11,TLS12,TLS13
  out:
    address: sqlserveraddress.database.windows.net
    port: 1433
    protocol: TLS
    tlsVersions: TLS12
  certificate: D:\www.domain.com.cer; key=D:\www.domain.com.pri
  idleTimeout: 120
&lt;/pre&gt;

&lt;p&gt;Also, I suggest to use only &lt;code&gt;tlsVersions: TLS10,TLS11,TLS12&lt;/code&gt; in the &lt;code&gt;in:&lt;/code&gt; section since you are only connecting with legacy clients. Please note that enabling &lt;code&gt;TLS13&lt;/code&gt; requires additional resources, which is not needed in your case.&lt;/p&gt;
</description>
<guid isPermaLink="true">https://forum.rebex.net/23255/rebex-tls-proxy-problems-connecting-to-azure-sql?show=23256#a23256</guid>
<pubDate>Fri, 21 Mar 2025 17:05:36 +0000</pubDate>
</item>
<item>
<title>Answered: How to get the image bytes of VirtualTerminal using .NET Framework 4.8 / C#?</title>
<link>https://forum.rebex.net/23253/how-get-the-image-bytes-virtualterminal-using-net-framework?show=23254#a23254</link>
<description>&lt;p&gt;To resolve the problem, add reference to &lt;code&gt;Rebex.Terminal.Control.dll&lt;/code&gt; assembly to your project, and replace &quot;TerminalCaptureFormat&quot; with &quot;TerminalImageFormat&quot; in the &lt;code&gt;GetTerminalImage&lt;/code&gt; method:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;public static byte[] GetTerminalImage(VirtualTerminal pVirtualTerminal)
{
    MemoryStream TerminalSaveOutputStream = new MemoryStream();
    pVirtualTerminal.Save(TerminalSaveOutputStream, TerminalImageFormat.Png);
    return TerminalSaveOutputStream.ToArray();
}
&lt;/code&gt;&lt;/pre&gt;
</description>
<guid isPermaLink="true">https://forum.rebex.net/23253/how-get-the-image-bytes-virtualterminal-using-net-framework?show=23254#a23254</guid>
<pubDate>Fri, 21 Mar 2025 14:21:32 +0000</pubDate>
</item>
<item>
<title>Answered: Extracting Attached .eml Files in Raw Format</title>
<link>https://forum.rebex.net/23237/extracting-attached-eml-files-in-raw-format?show=23238#a23238</link>
<description>&lt;p&gt;Hi,&lt;/p&gt;

&lt;p&gt;We'll add an option to the next release that will make it possible to retrieve the original unmodified content of the embedded &quot;message/rfc822&quot; entities. This will only be possible using &lt;code&gt;MimeMessage&lt;/code&gt;/&lt;code&gt;MimeEntity&lt;/code&gt; classes (not with the high-level &lt;code&gt;MailMessage&lt;/code&gt;, which reinterprets the whole e-mail).&lt;/p&gt;
</description>
<guid isPermaLink="true">https://forum.rebex.net/23237/extracting-attached-eml-files-in-raw-format?show=23238#a23238</guid>
<pubDate>Thu, 20 Feb 2025 18:19:42 +0000</pubDate>
</item>
<item>
<title>General Purpose SSH login that with works with devices that have both TACAS enabled or not</title>
<link>https://forum.rebex.net/23223/general-purpose-login-that-with-works-devices-tacas-enabled</link>
<description>&lt;p&gt;Hi, I need to access Cisco TACACS-enabled devices, and following these steps allows me to log into them.  &lt;/p&gt;

&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://forum.rebex.net/22012/ssh-login-cisco-ios-with-tacacs&quot;&gt;https://forum.rebex.net/22012/ssh-login-cisco-ios-with-tacacs&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;However, I need this same codebase to access devices that need password authentication and not be limited to only the keyboard-interactive method. It seems all other SSH clients figure it out. Is there a better solution that allows the code to be flexible and work with different device types?&lt;/p&gt;

&lt;p&gt;Thank you.&lt;/p&gt;
</description>
<guid isPermaLink="true">https://forum.rebex.net/23223/general-purpose-login-that-with-works-devices-tacas-enabled</guid>
<pubDate>Tue, 11 Feb 2025 16:46:35 +0000</pubDate>
</item>
<item>
<title>Have you any update on this, I can't see version 8 released yet and we are approaching 2025-03-03 for v6</title>
<link>https://forum.rebex.net/23222/have-update-this-cant-see-version-released-approaching-2025</link>
<description>&lt;p&gt;...&lt;/p&gt;
</description>
<guid isPermaLink="true">https://forum.rebex.net/23222/have-update-this-cant-see-version-released-approaching-2025</guid>
<pubDate>Tue, 11 Feb 2025 16:07:37 +0000</pubDate>
</item>
</channel>
</rss>