Provided by: uftp_4.9.9-1_amd64

NAME

       uftp - Encrypted UDP based ftp with multicast - server



SYNOPSIS

       uftp [ -R txrate ] [ -L logfile ] [ -B udp_buf_size ]
[ -g max_log_size ] [ -n max_log_count ]
[ -Y keytype ] [ -h hashtype ] [ -w sigtype ]
[ -e keyextype[:curve] ] [ -c ] [ -m max_nak_count ]
[ -k key_file ] [ -K key_length | curve ] [ -l ] [ -T ]
[ -b block_size ] [ -t ttl ] [ -Q dscp ] [ -z | -Z ]
[ -I interface ] [ -p port ] [ -u source_port ]
[ -j proxylist_file ] [ -q ] [ -f ] [ -y ] [ -U UID ]
[ -a max_passes ] [ -x log_level ] [ -W txweight ]
[ -H host[,host...] | -H @hostlist_file
| -F restart_file ] [ -X exclude_file ]
[ -N max_nak_pct ] [ -C cc_type ] [ -o ][ -D dest_name ]
[ -E base_dir[,base_dir... ] ] [ -S status_file ]
[ -r init_grtt[:min_grtt:max_grtt] ] [ -s robust ]
{ -i list_file | file [ file... ] }



DESCRIPTION

       uftp  is  the server process of the UFTP suite.  It sends one or more files to one or more
receivers via multicast with optional encryption.



OPTIONS

       The following options are supported:

-R txrate
The transmission speed in Kbps.  Specifying -1 for this value results in data being
sent  as  fast  as  the  network  interface  will  allow.   Using  a value of -1 is
recommended only if the network path between the server and all clients is as  fast
as  the server's local interface, and works best in a gigabit environment.  Default
is 1000 Kbps.  Ignored if -C is given any value other than "none".

-L logfile
Specifies the log file.  Default is to write to stderr.

-B buf_size
The size in bytes of the UDP send buffer and receive buffer to use.   Valid  values
are 65536-104857600 (64KB-100MB).  Defaults to 262144.

-g max_log_size
Specifies  the  maximum  log file size in MB.  Once the log file reaches this size,
the file is renamed with a .1 extension and a new log file is opened.  For example,
if  the  log  file  is  /tmp/uftp.log, it will be renamed /tmp/uftp.log.1 and a new
/tmp/uftp.log will be created.  Ignored if -L is not specified.  Valid  values  are
1-1024.  Default is no log rolling.

-n max_log_count
Specifies  the  maximum  number  of  archive  log files to keep when log rolling is
active.  When the log file rolls, archive logs are  renamed  with  an  incrementing
numerical extension until the max is reached.  Archive log files beyond the maximum
are deleted.  Ignored if -L and -g are not specified.   Valid  values  are  1-1000.
Default is 5.

-Y keytype
The  symmetric  encryption algorithm to use.  Valid values are "des" for DES in CBC
mode, "3des" for three key Triple DES  in  CBC  mode,  "aes128-cbc",  "aes256-cbc",
"aes128-gcm",  "aes256-gcm",  "aes128-ccm",  "aes256-ccm",  or "none" to not set up
encryption at all.  The GCM and CCM modes are authenticated encryption modes  which
applies  a  signatures  at  the same time as encryption.  If one of these modes are
specifies, the value of -w is ignored.  Default is "none".  Not  all  installations
may support all of these algorithms.

-h hashtype
The  hashing algorithm to use for key derivation and HMAC signatures.  Valid values
are "sha1" for SHA-1, "sha256" for SHA-256, "sha384" for SHA-384, and "sha512"  for
SHA-512.   Defaults to "sha1".  Ignored if -Y is "none".  Not all installations may
support all of these algorithms.

-w sigtype
Specifies the type of signature to be applied to encrypted messages.  Valid  values
are  "hmac"  to apply an HMAC to the encrypted message, and "keyex" to apply either
an RSA or ECDSA signature depending on the key exchange algorithm  chosen  via  -e.
HMAC  signatures  are  based  off  the  group master key and ensure the sender of a
message is a valid member of the group, but does not  guarantee  that  the  message
came  from  a specific group member.  RSA and ECDSA signatures ensure that messages
come from a particular member, but is much much slower to calculate than  HMAC  and
creates  a  larger  per-packet  overhead.   If  the  keytype  specified by -Y is an
authentication mode cipher (i.e. AES in GCM or CCM mode), this field is ignored and
signatures will instead be generated at the same time data is encrypted.  This also
has the lowest size overhead and is the fastest.  Default is "hmac".  Ignored if -Y
is "none".

-e keyextype[:curve]
Specifies the key exchange algorithm to use.  Valid values are "rsa" for an RSA key
exchange, "ecdh_rsa" for an Elliptic Curve Diffie-Hellman (ECDH) key exchange  with
RSA  signatures,  and  "ecdh_ecdsa" for an ECDH key exchange with ECDSA signatures.
Using one of the ECDH schemes provides perfect forward security, while  using  just
RSA  is  slightly  more resilient to replay attacks.  If ecdh_rsa or ecdh_ecdsa are
chosen, the named EC curve that  the  ECDH  key  is  based  on  may  optionally  be
selected,  with  prime256v1 as the default (See -k and -K for the list of available
EC curves).  Default key exchange scheme is "rsa".  Ignored if -Y is "none".

-c     If specified, forces clients to authenticate by sending their RSA public key  in  a
CLIENT_KEY  message.   Client key fingerprints and proxy key fingerprints specified
by -H and -j respectively will NOT be checked unless -c is specified.   Ignored  if
-Y is "none".

-m max_nak_count
Specifies  the  number of times a client reports naks beyond the maximum percentage
before getting dropped.  Valid values are 1-10.  Default is 1.

-k key_file

-K key_length | curve
These two options are used to read and/or write the server's RSA/ECDSA private key.
Both are ignored if -Y is "none".

The  type  of  private key read/written depend on the key exchange algorithm chosen
via the -e option.  If -e is "rsa" or "ecdh_rsa", -K specifies the  key  length  in
bits  of  an RSA public/private keypair to generate, and -k expects an RSA key.  If
-e is "ecdh_ecdsa", -K specifies a named EC curve on  which  an  EC  public/private
keypair is generated, and -k expects an EC key.

The  list  of supported EC curves is as follows (availability may vary depending on
system settings and crypto library used):

sect163k1 sect163r1 sect163r2 sect193r1  sect193r2  sect233k1  sect233r1  sect239k1
sect283k1  sect283r1  sect409k1  sect409r1  sect571k1 sect571r1 secp160k1 secp160r1
secp160r2 secp192k1 prime192v1 secp224k1 secp224r1 secp256k1  prime256v1  secp384r1
secp521r1

If neither -k nor -K are specified, either an RSA private key 512 bits in length or
an EC private key on curve prime256p1 (depending on the value of -e)  is  generated
but not persisted.

If -k is specified but not -K, the RSA or ECDSA private key is read from key_file.

If  -k is not specified but -K is, an RSA or ECDSA private key is generated but not
persisted.

If both -k and -K are specified, an RSA or  ECDSA  private  key  is  generated  and
stored in key_file.

The  definition  of key_file is dependent on the crypto library UFTP is compiled to
use.

On Windows systems, UFTP can built  to  use  either  CNG,  which  is  the  new  API
supported by Windows Vista and Windows 7, or CryptoAPI, which is the legacy API and
the only one available to Windows XP.

Under  CryptoAPI,  all  RSA  private  keys  must  be  stored  in  a  key  container
(technically  only  keys  used  to  sign  data, but for UFTP's purposes this is the
case).  Key containers are internal to Windows, and each user (and the system)  has
its  own set of key containers.  In this case, key_file is actually the name of the
key container.  When -k is not specified,  the  generated  key  is  not  persisted.
Elliptic Curve algorithms are not supported under CryptoAPI.

Under  CNG,  RSA  and ECDSA private keys are also stored in key containers, and RSA
keys created by CrypoAPI may  be  read  by  CNG.   Like  CryptoAPI,  key_file  also
specifies  the  key container name, and the generated key is not persisted if -k is
not specified.  CNG only supports 3 named EC  curves:  prime256v1,  secp384r1,  and
secp521r1.

All  other  systems use OpenSSL for the crypto library (although under Windows UFTP
can be also be built to use it).  In this case,  key_file  specifies  a  file  name
where  the  RSA private key is stored unencrypted in PEM format (the OS is expected
to protect this file).  When both -k and -K are specified, the file is only written
to  if  it does not currently exist.  If the file does exist, an error message will
be returned and the server will exit.  When -k is not specified, the generated  key
is  not  persisted.   These  PEM  files  may also be manipulated via the openssl(1)
command line tool.

Keys can also be generated and viewed via the uftp_keymgt(1) utility.

will  send  the link itself instead of the file it points to.  Specifying this flag
causes the server to send the file the link points to.

-T     Print the timestamp on each line of output.  If -L is  specified,  this  option  is
implied.

-b block_size
Specifies the size of a data block.  This value should be around 100-200 bytes less
that the path MTU to provide ample room for all headers and extensions, up  to  and
including  the IP and UDP headers.  Prior to version 4.0, this option specified the
MTU and calculated the block size based on that.  Default is 1300.

-t ttl Specifies the time-to-live for multicast packets.  Default is 1.

-Q dscp
Specifies the Differentiated Services Code Point (DSCP), formerly Type  of  Service
(TOS), in the IP header for all outgoing packets.  Valid values are 0-63 and may be
specified in either decimal or hexadecimal.  Default is 0.

On Windows XP systems, the OS  doesn't  allow  this  parameter  to  be  changed  by
default.   To change this, add/modify the following DWORD registry value, set to 0,
and reboot:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\DisableUserTOSSetting

Not currently supported on Windows Vista or later.

-z     Enables  sync  mode.   Clients  will  check if an incoming file exists.  If so, the
client will decline the incoming file if it either older than the existing file  or
the same age and the same size as the existing file.

As  of version 4.1, parsable output that was previously generated by this option is
now enabled separately via the -S option.

-Z     Sync preview mode.  Works like sync mode, except no files are actually transmitted,
and  the  RESULT  and STATS lines reflect the status of each file had they actually
been sent.  The "time"  and  "speed"  datapoints  are  approximated  based  on  the
transmission speed.

-I interface
The interface to send the data from.  Can be specified either by interface name, by
hostname, or by IP.  If not specified, the default system interface is used.

-p port
The UDP port number to send to.  Default is 1044.

-u source_port
The UDP port number to send from.  Default is 0, which uses a random port number.

-j proxylist_file
A file containing a list of proxies the server is expecting to hear from.  The file
should  contain  the  ID  of  a proxy optionally followed by the proxy's public key
fingerprint, with one on each line.   If  a  key  fingerprint  is  given,  the  key
specified  by the proxy must match the fingerprint.  This option should not be used
without -H.  If -H is specified, -j must also be specified if proxies are  expected
to respond, otherwise the server will reject the proxies.

Example contents:
0x00001111|66:1E:C9:1D:FC:99:DB:60:B0:1A:F0:8F:CA:F4:28:27:A6:BE:94:BC
0x00002222

-q     Quit-on-error  flag.   Normally, the server will continue with a session as long as
at least one client is still active.  With this flag, the server will quit  if  any
client  aborts,  drops  out,  or  never  responds.  Most useful in conjunction with
clients using the temp directory option (-T)  so  that  clients  that  successfully
receive  at  least  one  file  before  being told to abort don't have files from an
aborted session in the destination directory.

-f     Restartable flag.  If specified, and at least  one  client  fails  to  receive  all
files, the server will write a restart file named "_group_{group ID}_restart in the
current directory to save the current state, which includes the group ID,  list  of
files,  and  list of failed clients.  This file can then be passed to -F to restart
the failed transfer.

-y     For Windows systems using CryptoAPI or CNG, private keys are normally stored in the
key  container  of  the  running  user.   Specifying this option stores keys in the
system key container.  On non-Windows systems, this option has no effect.

-U UID The unique ID  for  this  server,  specified  as  an  8  digit  hexadecimal  number
(0xnnnnnnnn).   The  default  value  is  based  on  the  IP address of the outgoing
multicast address as specified by -I.  If this address is  IPv4,  the  UID  is  the
address.  If it is IPv6, the UID is the last 4 bytes of the address.

-a max_passes
The maximum number of passes that are made through the file for transmission before
any clients that have not yet fully received the current file are  aborted.   Valid
values are 0-65535.  Default is 65535.

-x log_level
Specifies  current  logging  level.   Valid  values are 0-5, with 0 being the least
verbose and 5 being the most verbose.  Default  is  2,  which  is  consistent  with
logging prior to version 3.5.

-W txweight
Sets the maximum file transfer time, expressed as a percentage of the optimal time.
Valid values are 110-10000.  Ignored if congestion control is enabled.  Default  is
no maximum time.

-H { host[,host...] | @hostlist_file }
Specifies  the  clients  for closed group membership.  Can be specified as either a
comma separated list of client IDs, or can be read from hostlist_file.   This  file
is  in  the  same  format  as proxylist_file.  Note that key fingerprints cannot be
specified using the comma separated syntax.  Clients that are behind a proxy do not
need  key fingerprints specified, since the proxy's key fingerprint will be checked
instead.  If unspecified, open  group  membership  is  used,  and  any  client  may
register.

-F restart_file
Specifies  the  name  of  a  restart  file  to use to resume a failed transfer.  If
specified, -H may not be specified and all files listed to send  will  be  ignored,
since  the  restart  file  contains  both of these.  All other command line options
specified on the first attempt are not automatically applied, so you can alter then
for the next attempt if need be.

-X exclude_file
A file containing the names of files/paths to be excluded from the session, one per
line.  For example, if you send a directory called d1 containing subdirectories d2,
d3,  and d4, and you don't want to send the contents of d4, the exclude_file should

The public address to announce on.  May be either a multicast address or a  unicast
address, and either IPv4 or IPv6.  If a unicast address is specified, the -P option
is ignored and all data moves over the specified unicast address.  If  a  multicast
IPv6 address is specified, -P must also be specified.  Default is 230.4.4.1.

The  private  multicast address that the data is transferred to.  One or more parts
of the IP address (other that the first) may  be  replaced  with  the  letter  'x',
resulting  in  a random number being chosen for that part, either 0-255 for IPv4 or
0-0xFFFF for IPv6.  Default value  is  230.5.5.x.   If  clients  are  using  source
specific  multicast (SSM), this and -M must specify valid SSM addresses, which fall
in the range 232.0.0.0/8 for IPv4 and ff3x::/32 for  IPv6  (here  x  specifies  the
multicast scope).  The values for -M and -P must both be the same IP version.

-N max_nak_pct
Specifies  the maximum percentage of NAKs that a client can report for a particular
section.  This option works with the -m option, which specifies the number of times
a  client  may exceed this limit before getting dropped.  This allows the server to
keep a very slow client from stalling the session for  others.   Valid  values  are
0-100.  Default is 100.

-C cc_type
Specifies  the  congestion  control  mode  to  use.  Currently supported values are
"none" and "tfmcc".  Specifying "none" means data will be sent at a fixed  rate  as
specified by the -R option.  Specifying "tfmcc" will use the TCP Friendly Multicast
Congestion Control scheme as specified in RFC 4654.  Normally TFMCC will limit  the
rate  based  strictly on loss, however a minimum, maximum, and initial rate in Kbps
may     each     be     optionally     specified     for     TFMCC     mode      as
"tfmcc:min=min_rate:init=init_rate:max=max_rate",  and  any  or all of these may be
applied and in any order.  Default value is "none".

TFMCC will make use of the Explicit Congestion Notification (ECN) bits  in  the  IP
header  on  systems  that  support it natively.  Known supported systems are Linux,
FreeBSD, Windows XP (sender only), Windows Vista and  later  (receiver  only),  and
Solaris (sender only).

-o

-D dest_name
These  options  specify  the name given to the sent file(s) on the client side.  If
only one file/directory is specified to send and -o  is  not  specified,  the  name
specified by -D is given to that file/directory, and the effects of -E are ignored.
If more than one file/directory is specified to send, or if -o is  specified,  they
are placed in a subdirectory with the name specified by -D.

This  option may also specify an absolute path name.  If so, clients must be either
all Windows or all UNIX-like, since  they  have  differing  filesystem  structures,
otherwise  the behavior is undefined.  The server, however, need not be the same OS
as the clients.  When specifying an absolute path name, the path must be  contained
in  one of a client's destination directories, otherwise the client will reject the
file.  When sending to Windows clients,  an  absolute  path  may  be  either  local
(drive:\path\to\file) or remote (\\host\share\path\to\file).

-E base_dir[,base_dir...]
Specifies   one   or   more  "base"  directories  for  files.   Normally,  for  any
file/directory specified, any leading path elements  are  stripped  from  the  name
before  sending.   If  the  specified  file/directory  name matches one of the base
directories, only the path elements of the base directory  are  stripped,  and  the
remainder  is  sent  as  the file name.  Any specified file/directory that does not
match a base directory is skipped.

For example, without -E,  if  you  pass  /path/to/file  to  send,  the  transmitted
filename is file.  If you pass in -E /path, the transmitted file name is to/file.

-S status_file
Prints  easily  parsable  status  information  to  a  file.   This  information was
previously only available in sync mode (-z) and was mixed with the  normal  logging
output.  Setting this option to @LOG results in status info being mixed with normal
logging output.

The following is printed for each client after all have registered:

CONNECT;status;target

Where "status" is either "success" or "failed", and "target" is  the  name  of  the
client.

The following is printed after each file:

RESULT;target;filename;size;status;speed

Where  "target"  is  the  name of the client, "filename" is the name of the current
file, "size" is the size of the file in kilobytes (i.e.  1234KB),  "speed"  is  the
transmission speed for that file in KB/s, and status is:

copy: The file was sent.

overwrite:  The  file  was sent, and overwrote an existing file.  Only generated in
sync mode.

skipped: The file was declined by the client because it is older that the  existing
file.  Only generated in sync mode.

rejected:  The  file  was  rejected,  because  the  file  was sent with an absolute
pathname and either the client is using a temp directory or  the  filename  doesn't
match one of the client's destination directories.

The following is printed at the end of the session:

STATS;target;num_copy;num_overwrite;num_skip;total_size;time;speed

Where  "target"  is  the name of the client, "num_copy" is the number of files sent
with "copy" status, "num_overwrite" is the number of files  sent  with  "overwrite"
status,  "num_skip" is the number of files sent with "skipped" status, "total_size"
is the total size of all files sent in kilobytes, "time" is the total  transmission
time for all files, and "speed" is the overall transmission speed for all files.

Also,  the  following line is printed verbatim prior to the STATS lines for ease of

HSTATS;target;copy;overwrite;skip;totalKB;time;speedKB/s

-r init_grtt[:min_grtt:max_grtt]
Specifies the initial value, and optionally the min and max values,  of  the  Group
Round  Trip  Time (GRTT) used in timing calculations.  The GRTT changes dynamically
based on the network conditions.  This option is useful if the  initial  connection
period  is  too  short  or  long,  if  receivers are getting bogged down and cannot
respond to the server quick enough before timing out, or if receivers  are  getting
flagged with too high of an RTT and take too long to recover to a reasonable value.
Valid values are 0.001 to 1000.  Defaults are 0.5 for init_grtt, 0.01 for min_grtt,
and 15.0 for max_grtt.

-s robust
Specifies the robustness factor for message retransmission.  The server will resend
particular messages up to robust times while waiting for client  responses.   Valid
values are 10-50.  Default is 20.

-i list_file
Name  of  a file containing a list of files to send, one per line.  Empty lines are
ignored.  Passing in '-'  for  list_file  reads  files  from  stdin.   Other  files
specified on the command line are ignored if -i is given.

file [file...]
The file(s) or directory(ies) to send.  Any special files (block/character devices,
pipes, sockets, etc.) are skipped.  By default, any  symbolic  links  are  sent  as
links  (see -l).  Any Windows client will silently refuse to create them.  If -F or
-i is specified, any files listed will be ignored.

There are also special metafile names that can send commands to the  clients.   The
@DELETE:{filename} metafile instructs the client to delete the given filename.  nhe
usual rules regarding which of the client's destination  directories  to  use  also
applies  here.   The  @FREESPACE  metafile will cause the client to report back the
amount of free disk space in the primary destination directory.



EXAMPLES

       Starting with the default options:

uftp the_file

The server sends the_file with no encryption at  1000  Kbps,  sending  announcements  over
230.4.4.1  and  later  messages  over 230.5.5.x (x is randomly selected).  Any client that
responds to the announcement will be accepted.  The payload portion of the packets will be
1300 bytes.

To send at 50 Mbps:

uftp -R 50000 the_file

Or to allow the transmission rate to be determined dynamically:

uftp -C tfmcc the_file

To send multiple files:

uftp file_1 file_2 file_3

or:

uftp dir_1 dir_2 file_3

To send multiple files that all land in a certain subdirectory on each client:

uftp -D dest_dir file_1 file_2

To send announcements over multicast address 224.1.2.3 and later messages over 224.4.5.6:

uftp -M 224.1.2.3 -P 224.4.5.6 file

Or for IPv6:

uftp -M ff02::1:2:3 -P ff02::4:5:6 file

Or in unicast mode:

uftp -M host_or_ip file

Where host_or_ip is the hostname or unicast IP address of the host to send to.

To send only to certain hosts:

uftp -H client_id_1,client_id_2,client_id_3 file_to_send

or:

uftp -H @file_containing_list_of_clients file_to_send

If  you  want  to  use jumbo ethernet frames of 9000 bytes (leaving 200 bytes of space for

uftp -b 8800 file_to_send

To  send  /path/to/file1  and  /path/to/file2,  and  have  them  appear  on   clients   as
/remote/dir/to/file1 and /remote/dir/to/file2:

uftp -E /path -D /remote/dir /path/to/file1 /path/to/file2

To  send  a  file  encrypted  with  AES-256-CBC  and SHA-1 hashing, using an autogenerated
512-bit RSA key to negotiate the session:

uftp -Y aes256-cbc -h sha1 file_to_send

To do the above with a previously generated RSA key stored in key_file_or_container (under
Windows,  the  name  of an internal key container, otherwise the name of a file containing
the key in PEM format):

uftp -Y aes256-cbc -h sha1 -k key_file_or_container file_to_send



EXITSTATUS

       The following exit values are returned:

0      The file transfer session finished with at least one client receiving at least  one
file.

1      An invalid command line parameter was specified.

2      An error occurred while attempting to initialize network connections.

3      An error occurred while reading or generating cryptographic key data.

4      An error occurred while opening or rolling the log file.

5      A memory allocation error occurred.

6      The server was interrupted by the user.

7      No client responded to the ANNOUNCE message.

8      No client responded to a FILEINFO message.

9      All  client  either  dropped  out  of the session or aborted.  Also returned if one
client drops out or aborts when -q is specified.

10     The session completed, but none of the specified files were received by any client.



SEEALSO

       uftpd(1), uftpproxyd(1), uftp_keymgt(1).



NOTES

       The latest version of UFTP can be found at http://uftp-multicast.sourceforge.net.  UFTP is
covered  by the GNU General Public License.  Commercial licenses and support are available
from Dennis Bush (bush@tcnj.edu).