Zhaobang.FtpServer 2.1.2

.NET Standard 1.4
Install-Package Zhaobang.FtpServer -Version 2.1.2
dotnet add package Zhaobang.FtpServer --version 2.1.2
<PackageReference Include="Zhaobang.FtpServer" Version="2.1.2" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add Zhaobang.FtpServer --version 2.1.2
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
#r "nuget: Zhaobang.FtpServer, 2.1.2"
#r directive can be used in F# Interactive, C# scripting and .NET Interactive. Copy this into the interactive tool or source code of the script to reference the package.
// Install Zhaobang.FtpServer as a Cake Addin
#addin nuget:?package=Zhaobang.FtpServer&version=2.1.2

// Install Zhaobang.FtpServer as a Cake Tool
#tool nuget:?package=Zhaobang.FtpServer&version=2.1.2
The NuGet Team does not provide support for this client. Please contact its maintainers for support.


A FTP library for .NET Standard 1.4 and .NET Standard 2.1.

Build Status: Build status

Get stable release: Get stable release

Get testing release: Get testing release

Simple Usage

The server allows anonymous login, and users can read and write in a public directory.

To start the server

// using System.Net;
// using System.Threading;
// using Zhaobang.FtpServer;

var endPoint = new IPEndPoint(IPAddress.Any, 21);
// To accept IPv6 connection, replace "IPAddress.Any" with "IPAddress.IPv6Any"
// You need 2 FtpServer instances to accept both IPv4 and IPv6 connectins

var baseDirectory = "C:\\FtpServer";
var server = new FtpServer(endPoint, baseDirectory);

var cancelSource = new CancellationTokenSource();
var runResult = server.RunAsync(cancelSource.Token);

To stop the server

cancelSource.Cancel(); // Stop accepting new clients
await runResult; // Wait until last client quits


The server allows developer to use customized authentication, file provider, data connection and stream encrytion.

Implement Zhaobang.FtpServer.File.IFileProviderFactory to use custom file system. The default one is SimpleFileProvider, which allow all users to read and write in a single directory.

Implement Zhaobang.FtpServer.Connections.IDataConnectionFactory to use custom data connection, (for example, establish data connection from another server). The default one is LocalDataConnectionFactory, which establish data connection from local server. Use SslLocalDataConnectionFactory (available only on .NET Standard 2.1) to support TLS on data connection.

Implement Zhaobang.FtpServer.Authenticate.IAuthenticator to use custom authentication. The default one is AnonymousAuthenticator, which only allows anonymous logins.

(Optional) (since version 2.1.0) Provide an implementation of Zhaobang.FtpServer.Connections.IControlConnectionSslFactory to support TLS on control connection. An implementation class ControlConnectionSslFactory is provided on the .NET Standard 2.1 version.

Use the following to start your customized server:

var server = new FtpServer(
    new MyFileProviderFactory(),
    new MyDataConnectionFactory(),
    new MyAuthenticator(),
    new MyControlConnectionSslFactory()
// the remaining is same as simple use

FTP over TLS support (since version 2.1.0)

TLS on data connection is enabled when IDataConnection instances created by IDataConnectionDataFactory instance implement interface ISslDataConnection.

TLS on control connection is enabled when an instance of IControlConnectionSslFactory is passed to the constructor of FtpServer.

The .NET Standard 2.1 version has out-of-box FTP over TLS support. Example:

var fileProviderFactory = new SimpleFileProviderFactory(config.BaseDirectory);
var dataConnectionFactory = new SslLocalDataConnectionFactory(certificate);
var authenticator = new AnonymousAuthenticator();
var controlConnectionSslFactory = new ControlConnectionSslFactory(certificate);
var server = new FtpServer(ep, fileProviderFactory, dataConnectionFactory, authenticator, controlConnectionSslFactory);

The .NET Standard 1.4 version requires your own implementation of those classes. You can refer to the source code for a sample implementation.

Product Versions
.NET net5.0 net5.0-windows net6.0 net6.0-android net6.0-ios net6.0-maccatalyst net6.0-macos net6.0-tvos net6.0-windows
.NET Core netcoreapp1.0 netcoreapp1.1 netcoreapp2.0 netcoreapp2.1 netcoreapp2.2 netcoreapp3.0 netcoreapp3.1
.NET Standard netstandard1.4 netstandard1.5 netstandard1.6 netstandard2.0 netstandard2.1
.NET Framework net461 net462 net463 net47 net471 net472 net48
MonoAndroid monoandroid
MonoMac monomac
MonoTouch monotouch
Tizen tizen30 tizen40 tizen60
Universal Windows Platform uap uap10.0
Xamarin.iOS xamarinios
Xamarin.Mac xamarinmac
Xamarin.TVOS xamarintvos
Xamarin.WatchOS xamarinwatchos
Compatible target framework(s)
Additional computed target framework(s)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
2.1.2 1,162 6/13/2020
2.1.1 446 4/14/2020
2.1.0 515 10/6/2019
2.0.0 912 10/17/2017
1.0.0 682 9/26/2017

Fixed the error of handling encoding (command "opts utf8 on")

Fixed the error of handling client quitting.

Supports FTP over TLS (requires implementing interfaces except on .NET Standard 2.1).
Supports tracing user activities.

Add extensibility for supporting more protocals
Add support of IPv6
Support LIST command for a file
Structure in 1.0.0 are changed for better extensibility
Bug fix