C# SFTP连接未关闭(Renci&;C)

C# SFTP连接未关闭(Renci&;C),c#,connection,sftp,C#,Connection,Sftp,我正在测试与第三方的SFTP连接,我们正在使用C#和Renci来实现这一点 但这些联系似乎并没有结束。这是我的简单测试代码: public bool TestConnection() { using (var client = new SftpClient(_connectionInfo)) { try { client.Connect(); if (!client.IsConnected)

我正在测试与第三方的SFTP连接,我们正在使用C#和Renci来实现这一点

但这些联系似乎并没有结束。这是我的简单测试代码:

public bool TestConnection()
{
    using (var client = new SftpClient(_connectionInfo))
    {
        try
        {
            client.Connect();

            if (!client.IsConnected)
                return false;
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
            return false;
        }
        finally
        {                                        
            client.Disconnect();              
            client.Dispose();                    
        }

        return true;
    }
}
严格地说,断开和处理是多余的

Wireshark显示从我们到主机的每个测试的最后一个命令是

59916→ 22[RST,ACK]序列=2319 ACK=1941 Win=0 Len=0

对我来说,这表明连接应该关闭。然而,在大约19次连续测试之后,主机开始强制关闭连接尝试,直到原始连接开始超时。
主机是否忽略RST,是否类似于防火墙以某种方式防止断开连接?发生了什么事?我们终于找到了原因。这与我们的代码无关

其中一个内部防火墙具有入侵预防规则,基本上用于防止DoS攻击


我们通过对自己的SFTP服务器进行测试发现了这一点。服务器日志显示客户端正在关闭连接。客户端说服务器正在关闭连接,所以我们认为中间的某个东西是罪魁祸首。

最终我们找到了原因。这与我们的代码无关

其中一个内部防火墙具有入侵预防规则,基本上用于防止DoS攻击


我们通过对自己的SFTP服务器进行测试发现了这一点。服务器日志显示客户端正在关闭连接。客户说服务器正在关闭连接,所以我们认为这两者之间有什么东西是罪魁祸首。

给你一个提示;如果您查看了客户端,它将处理客户端本身。没有必要自己做。是的,我知道:)因此这句话“严格来说,断开连接和处理是多余的。”这可能有点误解。我的第一个想法是,断开连接是多余的,处理只是给你一个提示;如果您查看了客户端,它将处理客户端本身。没有必要自己做。是的,我知道:)因此这句话“严格来说,断开连接和处理是多余的。”这可能有点误解我的第一个想法是断开连接是多余的处理