2010-12-02 21 views
8

Potrzebuję wskazówek. Muszę opracować konfigurowalny serwer FTP w języku C#, który powinien być skonfigurowany przy użyciu pliku App.Config. Ponadto, FTP powinien przesłać dane do dowolnego serwera od dowolnego klienta ponownie zależy od pliku konfiguracyjnego.FTPS (FTP przez SSL) w C#

Będę wdzięczny, jeśli ktoś będzie mógł prowadzić, jeśli jest jakikolwiek API lub jakakolwiek inna użyteczna sugestia, lub przenieść mnie we właściwym kierunku.

Odpowiedz

3

Używamy edtFTPnet z dobrymi wynikami.

+4

Tylko niech ludzie wiedzą, darmowa wersja nie obsługuje FTPS, wersja pro robi – tsukimi

15

Można użyć FtpWebRequest; jest to jednak dość niski poziom. Istnieje klasa wyższego poziomu WebClient, która wymaga znacznie mniej kodu dla wielu scenariuszy; jednak nie obsługuje domyślnie protokołu FTP/SSL. Na szczęście, można dokonać WebClient pracy z FTP/SSL, rejestrując swój własny prefiks:

private void RegisterFtps() 
{ 
    WebRequest.RegisterPrefix("ftps", new FtpsWebRequestCreator()); 
} 

private sealed class FtpsWebRequestCreator : IWebRequestCreate 
{ 
    public WebRequest Create(Uri uri) 
    { 
     FtpWebRequest webRequest = (FtpWebRequest)WebRequest.Create(uri.AbsoluteUri.Remove(3, 1)); // Removes the "s" in "ftps://". 
     webRequest.EnableSsl = true; 
     return webRequest; 
    } 
} 

Gdy to zrobisz, możesz użyć WebClient prawie jak normalny, z wyjątkiem, że URI zacząć „FTPS: //” zamiast "ftp: //". Jedynym zastrzeżeniem jest to, że musisz podać parametr method, ponieważ nie będzie on domyślny. Na przykład.

using (var webClient = new WebClient()) { 
    // Note here that the second parameter can't be null. 
    webClient.UploadFileAsync(uploadUri, WebRequestMethods.Ftp.UploadFile, fileName, state); 
} 
+0

Z uwag [duplikat odpowiedź] (https://stackoverflow.com/a/31432519/1869660): Aby automatycznie akceptować wszelkie certyfikaty, które może spotkać klient, działa to: 'ServicePointManager.ServerCertificateValidationCallback + = (nadawca, certyfikat, łańcuch, sslPolicyErrors) => true;' – Sphinxxx

+0

@Sphinxxx Pamiętaj, że ślepo akceptując dowolny certyfikat serwera pozostawiasz podatnego na ataki atak typu "man-in-the-middle". –

+0

Tak, to nie jest najbardziej eleganckie rozwiązanie. Czy masz bezpieczniejszą alternatywę? – Sphinxxx

Powiązane problemy