2016-06-28 3 views
1

Я тестирую соединения SFTP с третьим лицом, мы используем C# и Renci для этого.SFTP-соединения не закрываются (Renci & C#)

Но соединения, похоже, не закрываются. Это мой простой контрольный код:

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] Seq = 2319 Ack = тысячу девятьсот сорок один Win = 0 Len = 0

Который мне указывает, что соединение должно закрыться. Однако после примерно 19 последовательных тестов хост начинает принудительно закрывать попытки соединения до тех пор, пока исходные соединения не начнут синхронизировать время. Является ли хост игнорирующим RST, что-то вроде брандмауэра, препятствующего отключению? Что происходит?

+0

Просто подсказка для вас; Если вы посмотрите на [с помощью документации Statement] (https://msdn.microsoft.com/en-us/library/yh598w02.aspx), он будет распоряжаться самим клиентом. Нет необходимости делать это самостоятельно. –

+0

Да, я знаю :) Следовательно, строка «Строго говоря, разъединение и утилизация избыточны». – Schuits

+0

Это может быть немного непонимание. Первое, что я думал, это то, что Disconnect является избыточным для Dispose –

ответ

0

Наконец-то мы нашли причину. Это не имело никакого отношения к нашему кодексу.

Один из внутренних брандмауэров имеет правило предотвращения вторжений, в основном для предотвращения DoS-атак.

Мы обнаружили это путем тестирования на нашем собственном сервере SFTP. Журналы сервера говорят, что клиент закрывает соединение. Клиент сказал, что сервер закрывает соединение, поэтому мы предположили, что что-то промежуточное является виновником.