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)