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)