Avissar Software

Embedded Projects
Open Source Projects

Dftpd is a FTP daemon (server) with distributed capabilities -- the name Dftpd stands for Distributed File Transfer Protocol Daemon. The general idea behind the distributed features are to enable many servers to be linked together to create the illusion of a single server (see Distributed Features). Starting with version 1.0.4_beta Dftpd also provides the ability to automatically mirror directories. This server is entirely controlled using the FTP command line via the SITE commands (see Dftpd SITE Commands). A subset of the SITE commands, "SITE REMOTE", are used for viewing/administrating distributed server related features. The server is configured using a text configuration file (see Dftpd Configuration). A graphical interface called DftpdI can also be used for server administration (see DftpdI). Furthermore, several common FTP client applications provide the ability to send custom SITE commands to the server (see FTP Clients). Below is a list of some of the key features of Dftpd:

- Implements FTP as specified in RFC 959 as well as some additional features described in RFC 2389 and RFC 2577
- Remote administration
- Explicit (AUTH SSL) and implicit SSL support (as specified by draft-murray-auth-ftp-ssl-10.txt)
- View/control server activity in real-time
- Advanced statistics and logging features
- Virtual directories (local and remote)
- Custom scrips/binaries
    - Custom SITE commands
    - Custom scripts/binaries to run before "pre" or after "post" any FTP command
- Automated mirroring of directories (with failover)

Click here for Dftpd installation notes.

Documentation for Dftpd is still under construction and will continuously be added over time.

The beta version of Dftpd is completely free for non-commercial and commercial use.

DftpdI is a graphical interface, written in Java, for managing Dftpd servers. It basically provides a graphical front-end to the SITE commands. All the interaction between DftpdI and the Dftpd server is done through the SITE commands --along with the standard FTP commands. DftpdI requires the Java Runtime Environment (JRE) 1.4.0 or higher. Beginning with Dftpd version 1.0.3_beta, DftpdI is packaged with Dftpd. The JRE is available for Windows, Linux, and Solaris. The JRE can be downloaded from http://java.sun.com (or directly http://java.sun.com/j2se/downloads.html).

Click here for screen shot 1.
Click here for screen shot 2.
Click here for screen shot 3.

Click here for DftpdI installation notes.

IndiFTPD is a standalone FTP server that functions as a single executable. It is designed for situations when a user does not want to install/configure a server on the system (or does not have permission to do so) and wants to quickly get a server running. IndiFTPD is completely self contained and does not require any configuration files or supporting binaries (on Windows the C runtime dll, for example msvcrt40.dll, might be needed).

There are basically two ways to use IndiFTPD: with a user file, and without a user file. When a server with multiple users is needed, a user file allows the user accounts to be stored in a file. The user file is a plain text file with one line per user. To use a user file the "-f" option must be specified on the command line (see -hf for help). The second way to use IndiFTPD is to specify a user on the command line. In this case, the "-f" option is not used and instead the -U, -P, -H, and -R options are used to specify a user on the command line (see help below). All of the these values have defaults and can all be omitted if desired. In the simplest case the user can just run "indiftpd" (without any arguments) and an anonymous FTP server will be started on port 21.

IndiFTPD now supports SSL connections using either explicit (AUTH SSL) or implicit SSL. The "-e" option is used to enable explicit SSL. The "-i<port>" option is used to specify a secondary listening port for implicit SSL connections. If the "-i" option is used, explicit SSL will also be enabled. When SSL is enable there will be a slight delay when the server is started. This is caused by the server generating a certificate and keys for the SSL connections. A generic self-signed certificate is created. IndiFTPD currently does not allow the user to sepecify any of the certificate parameters.

IndiFTPD is not currently designed to run as a service. The main reason for this is that it would defeat the standalone nature of the server --mainly in Windows due to the fact the services must be installed and uninstalled. However, on UNIX systems it is simple to make it act like one by simply starting it with the '&'. For example, "indiftpd -f -L4 &" will start a server in the background and write all the traffic to the log files only. The only time it will display anything on the screen is when it is first started. When doing this the server should continue to run even after you have logged out --this may not be true on all systems. On a Windows system the only way I can think of, without writing any programs, is to just start it in a command window and minimize it --although I haven't really looked into the possibilities.

IndiFTPD is completely free for non-commercial and commercial use.

The IndiFTPD source code is now available for download.  
Click here to see IndiFTPD source code notes

Below is a list of options/features. This list can also be seen by running "indiftpd -h"

Options Overview (indiftpd -h)

usage:  indiftpd [options]

-h or -helpdisplays this message
-hrdisplays help on data port ranges
-hfdisplays help on user files
-hUdisplays help on specifying a user
-hRdisplays help on permissions
-hLdisplays help on logging
-hFdisplays help on log formatting
-p<port>port number the server will run on (default = 21)
-r<low>-<high>range of ports to use for data connections (default = any)
-f<userfile>file containing user info (def userfile = indiftpd.cfg)
-a<userfile>add a user to the user info file (doesn't start server)
-b<IP>IP address to bind to (must be in x.x.x.x form)
-eenable explicit SSL (AUTH SSL)
-i<port>enable implicit SSL on the specified port (default = 990)
-U<user>specify a user for the site (default = anonymous)
-P<password>password for the user (default = [no password])
-H<homedir>home directory for the user (default = CWD)
-R<flags>permissions for the user (default = lvcpstduoamn)
-L<level>:<path>logging level (default level = 2, path = CWD)
-F<type>:<format>  set the format for the program/access (type = p/a) logs

Data Port Range Option (indiftpd -hr)
This option is used to specify a range of ports that can be used when
then the server creates a data connection in passive mode. This option
would typically be used when the server is running behind a firewall. In
this case, the range of ports used by the server must be known to be able
to open a hole in the firewall for the server

Example: "indiftpd -p21 -r10000-10099" will start a server that listens
               for a control connection on port 21 and will only open a data
               connection on a port between (and including) 10000 and 10099
               when the client uses passive (PASV) mode.

NOTE: When a range of ports is specified with the "-r<low>-<high>" option,
             only <high>-<low>+1 data connections will be able to be made at one
             time. Also, <low> should be at least greater than 1024 to avoid
             conflicts with standard services (in general make <low> > 5000).

User File Option (indiftpd -hf)
The user file contains the list of users allowed to login to the server.
The file is formatted as follows:
<username>;<encrypted password>;<home directory>;<permissions>

Use "indiftpd -a<filename>" to add a user to the user file.
The default filename for the user file is "indiftpd.cfg".
On UNIX systems the user file can be reloaded without restarting the server
by sending the indiftpd process a SIGHUP signal (Ex. kill -HUP <PID>).
NOTE: If the -f option is used, the -U, -P, -H, and -R flags are ignored. If
            the -f option is not used, the user file will not be checked.

Specify a User Option (indiftpd -hU)
The "-U" option is used to specify a user on the command line. This option
is usually used with the "-P", "-H", and "-R" options. These options are
designed for the situation when a user file (specified with the "-f" option) is
not used. The "-U" option enables a server to be setup quickly for a specific
user without the need to create a user file.

NOTE: The -U<user> option must always come before the -P<password> option.

Permissions Option (indiftpd -hR)
The following permissions are available:
l = list directory contents
v = recursive directory listing
c = change current working directory (CWD)
p = print working dir (PWD)
s = system info (SYST and STAT)
t = SITE command
d = download files
u = upload files
o = remove files
a = rename files/directories
m = make directories
n = remove directories
r = "read" -> d
w = "write" -> uoamn
x = "execute" -> lvcpst

Logging Option (indiftpd -hL)
The following logging levels are available:
0 = no logging (this is the default)
1 = reduced display only (display the reduced logs to the screen only)
2 = display only (the logs are only displayed on the screen)
3 = reduced logging (only write logins and transfers to the access log file)
4 = normal logging (logs are only written to the log file)
5 = reduced debug logging (reduced logs are also displayed)
6 = debug logging (logs are also displayed on the screen)

To specify a path for the log files use -L<level>:<path> --where <path> is
the path the log files will be written to (the default path is the CWD).
Example: "indiftpd -L4:/var/log" will use normal logging and write the
               log files into the directory "/var/log".
The program log file is "ftpd.log" and the access log file is "access.log".
The program log file is used to log events and activities related to the
operation of the FTP server. The access log file is used to log the FTP
transactions between the server and the connected FTP clients. When reduced
logging is selected, only the access log file is affected --the program log
file will continue to log everything.

Log Format Option (indiftpd -hF)
The following types are available:
p = specify the format for the program log
a = specify the format for the access log
d = specify the format for the date field

The following specifiers are available for the program log:
%D = date (format is specified using the "-Fd:<format>" option)
%S = sub-system (where in the prog the log is coming from)
%M = message (the message body)
%% = A literal `%' character
The default program log format is "%D;%M".
Example: "indiftpd -Fp:%D;%S;%M" will create a log line such as
               17/03/2002:20:19:33-0300;MAIN;Server started on port 8000

The following specifiers are available for the access log:
%d = date (format is specified using the "-Fd:<format>" option)
%s = server IP
%l = server listening port
%c = client IP
%p = client port
%u = user name
%m = FTP command (method)
%% = A literal `%' character
%a = argument to the command
%r = 3-digit response code from the server
%t = response text from the server
The default access log format is "%d;%s;%l;%c;%p;%u;%m;%a;%r;%t".

The following specifiers are available for the date field:
%a = abbreviated weekday name according to the current locale
%A = full weekday name according to the current locale
%b = abbreviated month name according to the current locale
%B = full month name according to the current locale
%d = day of the month as a decimal number (range 01 to 31)
%H = hour as a decimal number using a 24-hour clock (range 00 to 23)
%I = hour as a decimal number using a 12-hour clock (range 01 to 12)
%j = day of the year as a decimal number (range 001 to 366)
%m = month as a decimal number (range 01 to 12)
%p = current locale's AM/PM. indicator for 12-hour clock
%S = second as a decimal number (range 00 to 61)
%w = day of the week as a decimal, range 0 to 6, Sunday being 0
%y = year as a decimal number without a century (range 00 to 99)
%Y = year as a decimal number including the century
%z = time-zone as hour offset from GMT
%Z = time zone or name or abbreviation
%O = display the 5-digit (w/ + or -) UTC offset in minutes (Ex. EST -> -0300)
%% = A literal `%' character
The default date format is "%d/%m/%Y:%H:%M:%S".
Note: The specifiers for the date field are the same as the C-language
            function strftime() except for the added specifier "%O".

The -F<type>:<format> option can be specified more than once on the command
line to specify the formatting for each of the log types.
Example: "indiftpd -Fp:%D,%M -Fd:"%Y-%m-%d %H:%M:%S"" ->
               2002-03-17 22:18:41,Server started on port 8000