示例#1
0
        private void LaunchFtpServer()
        {
            Directory.CreateDirectory(@"root");

            // allow only anonymous logins
            var membershipProvider = new AnonymousMembershipProvider();


            // use %TEMP%/TestFtpServer as root folder
            var fsProvider = new DotNetFileSystemProvider("root", false);

            // Use all commands from the FtpServer assembly and NOT the one(s) from the AuthTls assembly
            var commandFactory = new AssemblyFtpCommandHandlerFactory(typeof(FtpServer).Assembly);


            // Initialize the FTP server
            _ftpServer = new FtpServer(fsProvider, membershipProvider, "127.0.0.1", FtpPort, commandFactory)
            {
                DefaultEncoding = Encoding.ASCII, // This can cause trouble.
                LogManager      = new FtpLogManager(),
            };

            // Start the FTP server
            _ftpServer.Start();
        }
示例#2
0
        public FtpServer(IFileSystem sys, string host = "127.0.0.1", int port = 21)
        {
            var fsp = new FtpSystemFactory(() => new FtpSystem(sys));
            var msp = new VirtualMemberProvider();
            var ass = typeof(Server).Assembly;
            var cmd = new AssemblyFtpCommandHandlerFactory(ass, new Assembly[0]);

            server            = new Server(fsp, msp, host, port, cmd);
            server.LogManager = new FtpLogManager();
            server.Start();
        }
示例#3
0
        public FileServer(MountHandler parent, string host, int port, string user, string pass)
        {
            Parent = parent;
            var fsFact   = new VirtualFsFactory(this);
            var mbFact   = new FixedMemberProvider(user, pass);
            var ass      = typeof(FtpServer).Assembly;
            var commands = new AssemblyFtpCommandHandlerFactory(ass);

            server = new FtpServer(fsFact, mbFact, host, port, commands);
            server.Start();
        }
示例#4
0
        private static void Main()
        {
            // Load server certificate
            var cert = new X509Certificate2("test.pfx");

            AuthTlsCommandHandler.ServerCertificate = cert;

            // Only allow anonymous login
            var membershipProvider = new AnonymousMembershipProvider(new NoValidation());

            // Use the .NET file system
            var fsProvider = new DotNetFileSystemProvider(Path.Combine(Path.GetTempPath(), "TestFtpServer"));

            // Use all commands from the FtpServer assembly and the one(s) from the AuthTls assembly
            var commandFactory = new AssemblyFtpCommandHandlerFactory(typeof(FtpServer).Assembly, typeof(AuthTlsCommandHandler).Assembly);

            // Initialize the FTP server
            using (var ftpServer = new FtpServer(fsProvider, membershipProvider, "127.0.0.1", Port, commandFactory)
            {
                DefaultEncoding = Encoding.ASCII,
                LogManager = new FtpLogManager(),
            })
            {
#if USE_FTPS_IMPLICIT
                // Use an implicit SSL connection (without the AUTHTLS command)
                ftpServer.ConfigureConnection += (s, e) =>
                {
                    var sslStream = new FixedSslStream(e.Connection.OriginalStream);
                    sslStream.AuthenticateAsServer(cert);
                    e.Connection.SocketStream = sslStream;
                };
#endif

                // Create the default logger
                var log = ftpServer.LogManager?.CreateLog(typeof(Program));

                try
                {
                    // Start the FTP server
                    ftpServer.Start();
                    Console.WriteLine("Press ENTER/RETURN to close the test application.");
                    Console.ReadLine();

                    // Stop the FTP server
                    ftpServer.Stop();
                }
                catch (Exception ex)
                {
                    log?.Error(ex, "Error during main FTP server loop");
                }
            }
        }