MinimalFTP

A lightweight, simple FTP server. Pure Java, no libraries.

License

License

Categories

Categories

GUI User Interface
GroupId

GroupId

com.guichaguri
ArtifactId

ArtifactId

minimalftp
Last Version

Last Version

1.0.6
Release Date

Release Date

Type

Type

jar
Description

Description

MinimalFTP
A lightweight, simple FTP server. Pure Java, no libraries.
Project URL

Project URL

https://github.com/Guichaguri/MinimalFTP
Source Code Management

Source Code Management

https://github.com/Guichaguri/MinimalFTP/tree/master

Download minimalftp

How to add to project

<!-- https://jarcasting.com/artifacts/com.guichaguri/minimalftp/ -->
<dependency>
    <groupId>com.guichaguri</groupId>
    <artifactId>minimalftp</artifactId>
    <version>1.0.6</version>
</dependency>
// https://jarcasting.com/artifacts/com.guichaguri/minimalftp/
implementation 'com.guichaguri:minimalftp:1.0.6'
// https://jarcasting.com/artifacts/com.guichaguri/minimalftp/
implementation ("com.guichaguri:minimalftp:1.0.6")
'com.guichaguri:minimalftp:jar:1.0.6'
<dependency org="com.guichaguri" name="minimalftp" rev="1.0.6">
  <artifact name="minimalftp" type="jar" />
</dependency>
@Grapes(
@Grab(group='com.guichaguri', module='minimalftp', version='1.0.6')
)
libraryDependencies += "com.guichaguri" % "minimalftp" % "1.0.6"
[com.guichaguri/minimalftp "1.0.6"]

Dependencies

There are no dependencies for this project. It is a standalone project that does not depend on any other jars.

Project Modules

There are no modules declared in this project.

MinimalFTP Build Status

A lightweight, simple FTP server. Pure Java, no libraries.

Features

Although it's named "minimal", it supports a bunch of features:

  • 100% Java, no libraries
  • Lightweight
  • Supports 57 FTP commands
  • TLS/SSL support
  • Custom File System support
  • Custom User Authentication support
  • Custom Commands support
  • Support to obsolete commands (some FTP clients might still use them)

Specification Support

The required minimum implementation is already done, however, there are still commands that can be implemented.

  • RFC 959 - File Transfer Protocol (33/33)
  • RFC 697 - CWD Command of FTP (1/1) (Obsolete)
  • RFC 737 - FTP Extension: XSEN (0/3) (Obsolete)
  • RFC 743 - FTP extension: XRSQ/XRCP (0/4) (Obsolete)
  • RFC 775 - Directory oriented FTP commands (5/5) (Obsolete)
  • RFC 1123 - Requirements for Internet Hosts
  • RFC 1639 - FTP Operation Over Big Address Records (2/2) (Obsolete)
  • RFC 2228 - FTP Security Extensions (3/8)
  • RFC 2389 - Feature negotiation mechanism for the File Transfer Protocol (2/2)
  • RFC 2428 - FTP Extensions for IPv6 and NATs (2/2)
  • RFC 2640 - Internationalization of the File Transfer Protocol (0/1)
  • RFC 2773 - Encryption using KEA and SKIPJACK (0/1)
  • RFC 3659 - Extensions to FTP (4/4)
  • RFC 4217 - Securing FTP with TLS
  • RFC 5797 - FTP Command and Extension Registry
  • RFC 7151 - File Transfer Protocol HOST Command for Virtual Hosts (1/1)
  • draft-twine-ftpmd5-00 - The "MD5" and "MMD5" FTP Command Extensions (2/2) (Obsolete)
  • draft-somers-ftp-mfxx-04 - The "MFMT", "MFCT", and "MFF" Command Extensions for FTP (1/3)
  • draft-bryan-ftpext-hash-02 - File Transfer Protocol HASH Command for Cryptographic Hashes (1/1)
  • draft-bryan-ftp-range-08 - File Transfer Protocol RANG Command for Octet Ranges (0/1)

Usage

Dependency

MinimalFTP is published on JCenter and Maven Central

Maven

<dependency>
  <groupId>com.guichaguri</groupId>
  <artifactId>minimalftp</artifactId>
  <version>1.0.6</version>
  <type>pom</type>
</dependency>

Gradle

compile 'com.guichaguri:minimalftp:1.0.6'

Ivy

<dependency org='com.guichaguri' name='minimalftp' rev='1.0.6'>
  <artifact name='minimalftp' ext='pom' />
</dependency>

API

Check out more examples here :)

// Uses the current working directory as the root
File root = new File(System.getProperty("user.dir"));

// Creates a native file system
NativeFileSystem fs = new NativeFileSystem(root);

// Creates a noop authenticator, which allows anonymous authentication
NoOpAuthenticator auth = new NoOpAuthenticator(fs);

// Creates the server with the authenticator
FTPServer server = new FTPServer(auth);

// Start listening synchronously
server.listenSync(21);

Versions

Version
1.0.6
1.0.5
1.0.4
1.0.3