Provided by: netcat6_1.0-8_amd64 bug

NAME

       nc6 - network swiss army knife

SYNOPSIS

       nc6 [options...] hostname port
       nc6 -l -p port [-s addr] [options...] [hostname] [port]

DESCRIPTION

       netcat6  is  a simple unix utility which reads and writes data across network connections,
       using the TCP or UDP protocol over IPv4 or IPv6 networks.  It is designed to be a reliable
       "back-end"  tool that can be used directly or easily driven by other programs and scripts.
       At the same time, it is a feature-rich network debugging and exploration  tool,  since  it
       can create almost any kind of connection you would need and has several interesting built-
       in capabilities.  netcat6 , or nc6 as the  actual  program  is  named,  should  have  been
       supplied long ago as another one of those cryptic but standard Unix tools.

       In the simplest usage, " nc6 host port " creates a TCP connection to the given port on the
       given target host.  Your standard input is then sent to the host, and anything that  comes
       back  across the connection is sent to your standard output.  This continues indefinitely,
       until the network side of the connection shuts down.  Note that this behavior is different
       from  most  other applications which shut everything down and exit after an end-of-file on
       the standard input (though this style of operation can easily be enabled).

       netcat6 can also function as a server, by listening for inbound connections  on  arbitrary
       ports  and  then  doing  the  same  reading  and writing.  With minor limitations, netcat6
       doesn't really care if it runs in "client" or "server" mode -- it still shovels data  back
       and  forth  until there isn't any more left.  In this manual page, these two working modes
       are referred as "connect mode" and "listen mode", respectively.

OPTIONS

       -4           Forces the use of IPv4.

       -6           Forces the use of IPv6 and inhibits the use IPV4-mapped addresses.

       -b, --bluetooth
                    With this option set, netcat6 will use bluetooth  to  establish  connections.
                    By default the L2CAP protocol will be used (also see '--sco').

       --buffer-size=BYTES
                    Set  the  buffer  size  for the local and remote endpoints.  netcat6 does all
                    reads into these  buffers,  so  they  should  be  large  enough  to  minimize
                    excessive  reads from the socket and in UDP mode it should be large enough to
                    receive an entire datagram (also see '--nru').  By default, the  buffer  size
                    is 8 kilobytes for TCP connections and 128 kilobytes for UDP.

       --continuous Enable  continuous accepting of connections in listen mode, like inetd.  Must
                    be used with  --exec  to  specify  the  command  to  run  locally  (try  'nc6
                    --continuous --exec cat -l -p <port>' to make a simple echo server).

       --disable-nagle
                    Disable  the  use  of  the  Nagle  algorithm  for TCP connections (see "NAGLE
                    ALGORITHM").

       -e, --exec=CMD
                    Exec the listed CMD after a connect  is  established.   All  input  from  the
                    remote  client will be available on stdin to the command, and all output from
                    the command will be sent back to the remote client.

       -h, --help   Display a brief help listing.

       --half-close Properly handle (and send) TCP half closes for protocols  that  support  them
                    (eg. TCP).  See "HALF CLOSE".

       -l, --listen Selects listen mode (for inbound connects).

       --mtu=BYTES  Set   the   Maximum  Transmission  Unit  for  the  remote  endpoint  (network
                    transmits).  This is only really useful for datagram protocols like UDP.  For
                    TCP  the MTU is determined by the kernel and this will only affect the amount
                    that is passed to the kernel at any one time.  There is no  default  MTU  for
                    TCP  connections (and there should be no need to change this), and for UDP it
                    is 8 kilobytes.

       -n           Disables DNS queries - you'll have to  use  numeric  IP  address  instead  of
                    hostnames.

       --no-reuseaddr
                    Disables the SO_REUSEADDR socket option (this is only useful in listen mode).

       -T, --ttl=TTL
                    Set's  the  IP  TTL  of  the  packets leaving (this is only useful in connect
                    mode).  This is mainly useful for multicast,  otherwise  packets  will  often
                    leave with the OS default of 1, making it rarely useful.

       --nru=BYTES  Set  the  miNimum  Receive  Unit  for the remote endpoint (network receives).
                    Note that this does not mean that every network read will get  the  specified
                    number  of  bytes, only that nc6 MUST be able to receive at least that amount
                    of data when a read is  done.   This  is  only  really  useful  for  datagram
                    protocols  like UDP where the entire datagram must be received in one call or
                    it is truncated.  The default NRU for TCP connections is 1  byte,  and  65536
                    bytes for UDP.

       -p, --port=PORT
                    Sets the port number for the local endpoint of the connection.

       -q, --hold-timeout=SEC1[:SEC2]
                    Sets  the  hold  timeout(s) (see "TIMEOUTS").  Specifying just one value will
                    set the hold timeout on the local endpoint, specifying a  second  value  will
                    set the hold timeout on the remote endpoint as well.  Either value can be '0'
                    (for instant timeout) or '-' (for no hold timeout, eg. infinite hold).

       -t, --idle-timeout=SEC
                    Sets the idle timeout (see "TIMEOUTS").

       --rcvbuf-size=SIZE
                    Specify the size to be  used  for  the  kernel  receive  buffer  for  network
                    sockets.

       --recv-only  Only receive data, don't transmit.  This also disables any hold timeouts.

       -s, --address=ADDRESS
                    Sets the source address for the local endpoint of the connection.

       --sco        With  this option set, netcat6 with use SCO over bluetooth (note that '-b' or
                    '--bluetooth' must also be specified).

       --send-only  Only send data, don't receive.  This also disables any hold timeouts.

       --sndbuf-size=SIZE
                    Specify the size to be used for the kernel send buffer for network sockets.

       -u, --udp    With this option set, netcat6 will use UDP as the transport protocol (TCP  is
                    the default).

       -v           Enable verbose mode.  This gives some basic information about what netcat6 is
                    doing.  Use it twice for extra verbosity.

       --version    Print netcat6 version and exit.

       -w, --timeout=SECONDS
                    Timeout for network connects and accepts (see "TIMEOUTS").

       -C           Send CRLF as line-ending

       -x, --transfer
                    File transfer mode (see "FILE TRANSFER").  If listen mode is specified,  this
                    is equivalent to "--recv-only --buffer-size=65536" otherwise it is equivalent
                    to  "--send-only  --buffer-size=65536".   -X,  --rev-transfer  Reverse   file
                    transfer  mode  (see  "FILE  TRANSFER").   This  transfers  in  the  opposite
                    direction  to  normal  transfer.   If  listen  mode  is  specified,  this  is
                    equivalent to "--send-only --buffer-size=65536" otherwise it is equivalent to
                    "--recv-only --buffer-size=65536".

       -z           Don't send any data (scanning mode).

UDP

       UDP support in netcat6 works very well in both connect and in listen mode.  When using UDP
       in  listen  mode  netcat6  accepts  UDP  packets from any source that matches the optional
       address and/or port specified (if it was specified).  However, once the  first  packet  is
       received,  netcat6  will only receive packets from that client in future.  This is done by
       putting the UDP socket into "connected" state (see udp(4) and connect(2)).   Packets  from
       other sources are discarded by the kernel and an ICMP unreachable response is sent.

       When  connecting  to  a remote host using UDP, nc6 will report that the connection is open
       regardless  of  whether  a  remote  server  is  listening.   This  is  because  UDP  is  a
       connectionless  protocol,  and  hence  no  connection  establishment is actually required.
       However, after sending the first  packet  of  data,  a  server  may  reply  with  an  ICMP
       unreachable response causing nc6 to exit with a 'Connection refused' error message.

       netcat6 allows for fine control over the buffer sizes, MTU's and NRU's for the connection,
       which is especially useful for UDP connections.  See the --buffer-size,  --mtu  and  --nru
       options.

TIMEOUTS

       netcat6 currently implements a connect/accept timeout, and idle timeout, and hold timeouts
       on both the remote and local endpoints.

       •   The connect/accept timeout is optional and is  specified  with  the  -w  or  --timeout
           option.   If  a  connection  cannot be established within the specified time, nc6 will
           exit with a non-zero exit status.  If the option  is  not  specified,  nc6  will  wait
           forever when listening for new connections (in listen mode), and will use the standard
           operating system timeout when trying to connect to  remote  systems.   Note  that  the
           connect  timeout  is  essentially  ignored  when  creating UDP connections to a remote
           server, as UDP is a connectionless protocol.

       •   The idle timeout is optional and is specified with the -t  or  --idle-timeout  option.
           If  no  data  is sent or received from the remote host in the specified time, nc6 will
           exit with a non-zero exit status.  The default is to not timeout idle connections.

       •   The hold timeouts specify how long the connection should be held open  after  a  given
           endpoint can no longer be read from (because EOF was received).  When the hold timeout
           occurs for a given endpoint, no more data is read from the opposite  endpoint.   After
           data read from the timed out endpoint has been sent, then the connection is closed and
           nc6 exits.

           For example, setting the hold time of the local endpoint to 5 would cause reading from
           the  remote  system  to  stop 5 seconds after stdin is closed (eg. by using ^D to send
           EOF).  All buffered data to be sent to the remote system is then sent, after which nc6
           exits successfully (if no errors occurred).

           By  default,  the  hold  timeout  is  disabled  for the local endpoint (essentially an
           'infinite' timeout), and the hold timeout is set to 0  for  the  remote  endpoint  (an
           'instant'  timeout).   This means that nc6 effectively exits immediately when the read
           from the remote server is closed.

           In half close mode (see "HALF CLOSE") all hold timeouts are disabled by default.

FILE TRANSFER

       netcat6 can be used to transfer files and data streams  efficiently,  using  the  ´-x'  or
       '--transfer'  command  line  option  (or  the  '-X'  and  '--rev-transfer' equivalents for
       transfer in the opposite direction).

       For  example,  to  transfer   a   file   from   machine   'foo.example.com'   to   machine
       ´bar.example.com', one would use the following technique.

       On 'bar', set up a listening nc6 on any local port:

              bar$ nc6 -x -l -p 7676 > targetfile

       Then on 'foo', use nc6 to send the file to the listening nc6:

              foo$ nc6 -x bar.example.com 7676 < sourcefile

       You  can  also  use  file transfer mode to pipe the output of programs over networks.  For
       example, you can use tar with nc6 to copy entire directories:

              bar$ nc6 -x -l -p 7676 | tar xpzf -

              foo$ tar cpzf - /home | nc6 -x bar.example.com 7676

       The '-x' or '--transfer' option is just an alias for various other options which  set  the
       direction  of  transfer  and  increase  the  buffer  sizes  used.   In  listen mode, it is
       equivalent to "--recv-only --buffer-size=65536" otherwise it is equivalent to "--send-only
       --buffer-size=65536".

       The  normal file transfer mode options assume the file will be sent TO the netcat6 process
       that is in listen mode, FROM the netcat6 process that is connecting to  it.   To  transfer
       the other way use the -X or --rev-transfer options.

HALF CLOSE

       Stream  based  data  transfers, such as TCP, have 2 separate streams - the receive and the
       transmit stream.  Contrary to common belief, the streams can be  closed  independently  of
       each other - in TCP this is called a half-close.

       In  standard  mode,  netcat6  closes the entire remote connection when it detects that the
       remote receive stream  has  been  closed.   This  is  a  common  operation  for  most  TCP
       applications,  because  it  is unusual that a server will keep accepting data after it has
       indicated that it will no longer  send  any.   netcat6  also  doesn't  close  it's  remote
       transmit when it has no more data to send (eg. when EOF has been received on stdin), so as
       not to confuse remote servers by making them think that netcat6 isn't listening  for  data
       any more.

       However,  some servers do make active use of TCP half-closes, and the default operation of
       netcat6 doesn't work well with  these  services.   For  example,  when  using  netcat6  to
       simulate  a  HTTP  server,  some  HTTP clients close their transmit stream after they send
       their request.  In default mode, netcat6 will close the entire connection  before  sending
       the response back to the client.

       However, by specifying the "--half-close" option, netcat6 will keep trying to send data to
       the remote server after the receive stream has closed.  It  will  also  close  the  remote
       transmit stream when there is no more data to send (EOF has been received on stdin).

NAGLE ALGORITHM

       Named after its creator, John Nagle, the Nagle algorithm is used to combine together small
       writes to a TCP stream and thus decrease the number of packets that must be  sent  out  on
       the network.

       This  was designed as a means for dealing with what Nagle called the small packet problem,
       created when an application generates data one byte at a time, causing the network  to  be
       overloaded  with  packets.  A single character originating from a keyboard could result in
       the an entire packet (the single byte plus packet headers) being sent onto the network.

       The algorithm can, under some situations, add a small delay before the data is sent out on
       the  wire  -  so  as to allow for this concatenation to occur.  This is done in such a way
       that  it  is  generally  unnoticeable  for  normal  applications,  including   interactive
       applications.

       There  are some situations, such as real-time protocols, that can be adversely affected by
       this small delay, which is why it is possible to  disable  the  Nagle  algorithm  on  most
       systems, using the TCP_NODELAY socket option.

       netcat6  provides the '--disable-nagle' command line option to disable the Nagle algorithm
       for the connection.

ERRORS

       netcat6 attempts to exit cleanly (exit value  0)  when  all  data  was  sent  or  received
       successfully, and to exit with an error value otherwise.  However, the specific definition
       of successfully varies depending on the way nc6 is run.

       In normal mode, nc6 exits successfully when all data from  the  remote  machine  has  been
       received  (up to and including an EOF), and the data has been output to the stdout without
       any errors.  It DOES NOT indicate whether all data read from stdin has  been  successfully
       sent to the remote machine.

       In  --half-close mode, nc6 exists successfully when an EOF has been received from both the
       remote machine AND from stdin, and all data has been successfully  sent.   Thus  the  exit
       status indicates that all data was transfered successfully.

       If  hold  timeouts (see "TIMEOUTS") have been set for either the remote or local endpoint,
       nc6 will exit successfully if all buffered data  from  the  endpoint  that  timed  out  is
       successfully  sent.   It DOES NOT indicate whether all data from the opposite endpoint was
       sent (or even read).

       For connectionless protocols like UDP there is no way of determining  whether  the  remote
       system  has stopped sending data, or if it will accept further data sent.  So in UDP mode,
       nc6 will either never exit (until interrupted via ctrl-C) or will exit after an error when
       sending  data  to  the remote system, in which case the exit code is a failure (exit value
       1).

VERSION

       This man page is current for version 1.0 of netcat6

COPYRIGHT

       GPL.

AUTHORS

        Mauro Tortonesi <mauro@deepspace6.net>
        Chris Leishman <chris@leishman.org>

       The original netcat was written by a guy we know as the Hobbit <hobbit@avian.org>.

                                                                                           NC6(1)