Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
NC(1)			    General Commands Manual			 NC(1)

NAME
       nc -- arbitrary TCP and UDP connections and listens

SYNOPSIS
       nc  [-46DdEFhklMNnrStUuvz]  [-e IPsec_policy] [-I length] [-i interval]
	  [--no-tcpopt]	  [--sctp]    [-O    length]	[-P    proxy_username]
	  [-p	source_port]   [-s  source]  [-T  toskeyword]  [--tun  tundev]
	  [-V	 rtable]    [-w	   timeout]    [-X     proxy_protocol]	   [-x
	  proxy_address[:port]]	[destination] [port]

DESCRIPTION
       The  nc	(or  netcat) utility is	used for just about anything under the
       sun involving TCP, UDP, or Unix-domain sockets.	It can open  TCP  con-
       nections,  send	UDP packets, listen on arbitrary TCP and UDP ports, do
       port scanning, and deal with both IPv4 and IPv6.	 Unlike	telnet(1),  nc
       scripts	nicely,	 and  separates	error messages onto standard error in-
       stead of	sending	them to	standard output, as telnet(1) does with	some.

       Common uses include:

	     o	 simple	TCP proxies
	     o	 shell-script based HTTP clients and servers
	     o	 network daemon	testing
	     o	 a SOCKS or HTTP ProxyCommand for ssh(1)
	     o	 and much, much	more

       The options are as follows:

       -4      Forces nc to use	IPv4 addresses only.

       -6      Forces nc to use	IPv6 addresses only.

       -D      Enable debugging	on the socket.

       -d      Do not attempt to read from stdin.

       -E      Shortcut	for "-e	 'in  ipsec  esp/transport//require'  -e  'out
	       ipsec  esp/transport//require'",	which enables IPsec ESP	trans-
	       port mode in both directions.

       -e      If IPsec	support	is available, then one can specify  the	 IPsec
	       policies	  to   be   used   using   the	 syntax	 described  in
	       ipsec_set_policy(3).  This flag can  be	specified  up  to  two
	       times, as typically one policy for each direction is needed.

       -F      Pass  the first connected socket	using sendmsg(2) to stdout and
	       exit.  This is useful in	conjunction with -X to have nc perform
	       connection setup	with a proxy but then leave the	 rest  of  the
	       connection   to	 another   program   (e.g.  ssh(1)  using  the
	       ssh_config(5) ProxyUseFdpass option).

       -h      Prints out nc help.

       -I length
	       Specifies the size of the TCP receive buffer.

       -i interval
	       Specifies a delay time interval between lines of	text sent  and
	       received.  Also causes a	delay time between connections to mul-
	       tiple ports.

       -k      Forces  nc  to  stay listening for another connection after its
	       current connection is completed.	 It is an error	 to  use  this
	       option  without	the -l option.	When used together with	the -u
	       option, the server socket is not	connected and it  can  receive
	       UDP datagrams from multiple hosts.

       -l      Used  to	 specify that nc should	listen for an incoming connec-
	       tion rather than	initiate a connection to a remote host.	 It is
	       an error	to use this option in conjunction with the -p, -s,  or
	       -z  options.   Additionally, any	timeouts specified with	the -w
	       option are ignored.

       -M      Collect per-connection TCP statistics using the stats(3)	frame-
	       work and	print them in JSON format to stderr(4) after the  con-
	       nection is closed.

       -N      shutdown(2)  the	 network  socket after EOF on the input.  Some
	       servers require this to finish their work.

       -n      Do not do any DNS or  service  lookups  on  any	specified  ad-
	       dresses,	hostnames or ports.

       --no-tcpopt
	       Disables	 the  use of TCP options on the	socket,	by setting the
	       boolean TCP_NOOPT socket	option.

       --sctp  Use SCTP	instead	of the default option of TCP.

       -O length
	       Specifies the size of the TCP send buffer.

       -P proxy_username
	       Specifies a username to present to a proxy server that requires
	       authentication.	If no username is specified  then  authentica-
	       tion  will not be attempted.  Proxy authentication is only sup-
	       ported for HTTP CONNECT proxies at present.

       -p source_port
	       Specifies the source port nc should use,	subject	 to  privilege
	       restrictions  and availability.	It is an error to use this op-
	       tion in conjunction with	the -l option.

       -r      Specifies that source and/or destination	ports should be	chosen
	       randomly	instead	of sequentially	within a range or in the order
	       that the	system assigns them.

       -S      Enables the RFC 2385 TCP	MD5 signature option.

       -s source
	       Specifies the IP	of the interface which is  used	 to  send  the
	       packets.	 For Unix-domain datagram sockets, specifies the local
	       temporary  socket  file to create and use so that datagrams can
	       be received.  It	is an error to use this	option in  conjunction
	       with the	-l option.

       -T toskeyword
	       Change  IPv4  TOS  value.   toskeyword  may be one of critical,
	       inetcontrol, lowdelay, netcontrol, throughput, reliability,  or
	       one  of	the  DiffServ  Code Points: ef,	af11 ... af43, cs0 ...
	       cs7; or a number	in either hex or decimal.

       -t      Causes nc to send RFC 854 DON'T and WON'T responses to RFC  854
	       DO  and	WILL  requests.	  This	makes it possible to use nc to
	       script telnet sessions.

       --tun tundev
	       Causes nc to use	the  provided  tun(4)  for  input  and	output
	       rather than the default of stdin	and stdout.

       -U      Specifies to use	Unix-domain sockets.

       -u      Use  UDP	instead	of the default option of TCP.  For Unix-domain
	       sockets,	use a datagram socket instead of a stream socket.   If
	       a  Unix-domain  socket is used, a temporary receiving socket is
	       created in /tmp unless the -s flag is given.

       -V rtable
	       Set the routing table ("FIB") to	be used.

       -v      Have nc give more verbose output.

       -w timeout
	       Connections which cannot	be established or are idle timeout af-
	       ter timeout seconds.  The -w flag has no	effect on the  -l  op-
	       tion,  i.e.  nc	will  listen forever for a connection, with or
	       without the -w flag.  The default is no timeout.

       -X proxy_protocol
	       Requests	that nc	should use the specified protocol when talking
	       to the proxy server.  Supported protocols are "4" (SOCKS	 v.4),
	       "5"  (SOCKS  v.5) and "connect" (HTTPS proxy).  If the protocol
	       is not specified, SOCKS version 5 is used.

       -x proxy_address[:port]
	       Requests	that nc	should connect to destination using a proxy at
	       proxy_address and port.	If port	is not	specified,  the	 well-
	       known port for the proxy	protocol is used (1080 for SOCKS, 3128
	       for HTTPS).

       -z      Specifies that nc should	just scan for listening	daemons, with-
	       out  sending  any data to them.	It is an error to use this op-
	       tion in conjunction with	the -l option.

       destination can be a numerical IP address or a symbolic	hostname  (un-
       less the	-n option is given).  In general, a destination	must be	speci-
       fied,  unless  the  -l option is	given (in which	case the local host is
       used).  For Unix-domain sockets,	a destination is required and  is  the
       socket path to connect to (or listen on if the -l option	is given).

       port  can  be  a	single integer or a range of ports.  Ranges are	in the
       form nn-mm.  In general,	a destination port must	be  specified,	unless
       the -U option is	given.

CLIENT/SERVER MODEL
       It  is quite simple to build a very basic client/server model using nc.
       On one console, start nc	listening on a specific	port for a connection.
       For example:

	     $ nc -l 1234

       nc is now listening on port 1234	for a connection.  On a	second console
       (or a second machine), connect to the machine and port  being  listened
       on:

	     $ nc 127.0.0.1 1234

       There  should now be a connection between the ports.  Anything typed at
       the second console will be concatenated to the first,  and  vice-versa.
       After  the  connection  has  been set up, nc does not really care which
       side is being used as a `server'	and which side	is  being  used	 as  a
       `client'.  The connection may be	terminated using an EOF	(`^D').

DATA TRANSFER
       The  example  in	 the previous section can be expanded to build a basic
       data transfer model.  Any information input into	one end	of the connec-
       tion will be output to the other	end, and input and output can be  eas-
       ily captured in order to	emulate	file transfer.

       Start  by  using	 nc to listen on a specific port, with output captured
       into a file:

	     $ nc -l 1234 > filename.out

       Using a second machine, connect to the listening	nc process, feeding it
       the file	which is to be transferred:

	     $ nc -N host.example.com 1234 < filename.in

       After the file has been transferred, the	connection will	close automat-
       ically.

TALKING	TO SERVERS
       It is sometimes useful to talk to servers "by hand" rather than through
       a user interface.  It can aid in	troubleshooting, when it might be nec-
       essary to verify	what data a server is sending in response to  commands
       issued  by the client.  For example, to retrieve	the home page of a web
       site:

	     $ printf "GET / HTTP/1.0\r\n\r\n" | nc host.example.com 80

       Note that this also displays the	headers	sent by	the web	server.	  They
       can be filtered,	using a	tool such as sed(1), if	necessary.

       More  complicated examples can be built up when the user	knows the for-
       mat of requests required	by the server.	As another example,  an	 email
       may be submitted	to an SMTP server using:

	     $ nc localhost 25 << EOF
	     HELO host.example.com
	     MAIL FROM:<user@host.example.com>
	     RCPT TO:<user2@host.example.com>
	     DATA
	     Body of email.
	     .
	     QUIT
	     EOF

PORT SCANNING
       It may be useful	to know	which ports are	open and running services on a
       target  machine.	  The  -z  flag	 can be	used to	tell nc	to report open
       ports, rather than initiate a connection.  For example:

	     $ nc -z host.example.com 20-30
	     Connection	to host.example.com 22 port [tcp/ssh] succeeded!
	     Connection	to host.example.com 25 port [tcp/smtp] succeeded!

       The port	range was specified to limit the search	to ports 20 - 30.

       Alternatively, it might be useful to know which server software is run-
       ning, and which versions.  This information is often  contained	within
       the  greeting  banners.	In order to retrieve these, it is necessary to
       first make a connection,	and then break the connection when the	banner
       has  been  retrieved.   This  can be accomplished by specifying a small
       timeout with the	-w flag, or perhaps by issuing a "QUIT"	command	to the
       server:

	     $ echo "QUIT" | nc	host.example.com 20-30
	     SSH-1.99-OpenSSH_3.6.1p2
	     Protocol mismatch.
	     220 host.example.com IMS SMTP Receiver Version 0.84 Ready

EXAMPLES
       Open a TCP connection to	port 42	of host.example.com, using port	 31337
       as the source port, with	a timeout of 5 seconds:

	     $ nc -p 31337 -w 5	host.example.com 42

       Open a UDP connection to	port 53	of host.example.com:

	     $ nc -u host.example.com 53

       Open  a TCP connection to port 42 of host.example.com using 10.1.2.3 as
       the IP for the local end	of the connection:

	     $ nc -s 10.1.2.3 host.example.com 42

       Open a TCP connection to	port 42	of host.example.com  using  IPsec  ESP
       for incoming and	outgoing traffic.

	     $ nc -E host.example.com 42

       Open  a	TCP  connection	to port	42 of host.example.com using IPsec ESP
       for outgoing traffic only.

	     $ nc -e 'out ipsec	esp/transport//require'	host.example.com 42

       Create and listen on a Unix-domain stream socket:

	     $ nc -lU /var/tmp/dsocket

       Connect to port 42 of host.example.com via an HTTP proxy	 at  10.2.3.4,
       port  8080.   This  example  could  also	 be  used  by  ssh(1); see the
       ProxyCommand directive in ssh_config(5) for more	information.

	     $ nc -x10.2.3.4:8080 -Xconnect host.example.com 42

       The same	example	again, this time enabling  proxy  authentication  with
       username	"ruser"	if the proxy requires it:

	     $ nc -x10.2.3.4:8080 -Xconnect -Pruser host.example.com 42

EXIT STATUS
       The nc utility exits 0 on success, and >0 if an error occurs.

SEE ALSO
       cat(1), setfib(1), ssh(1), tcp(4)

AUTHORS
       Original	implementation by *Hobbit* <hobbit@avian.org>.
       Rewritten with IPv6 support by Eric Jackson <ericj@monkey.org>.

CAVEATS
       UDP  port  scans	 using the -uz combination of flags will always	report
       success irrespective of the target machine's state.  However,  in  con-
       junction	 with a	traffic	sniffer	either on the target machine or	an in-
       termediary device, the -uz combination could be useful  for  communica-
       tions  diagnostics.   Note that the amount of UDP traffic generated may
       be limited either due to	hardware resources and/or  configuration  set-
       tings.

FreeBSD	13.2		       January 17, 2023				 NC(1)

NAME | SYNOPSIS | DESCRIPTION | CLIENT/SERVER MODEL | DATA TRANSFER | TALKING TO SERVERS | PORT SCANNING | EXAMPLES | EXIT STATUS | SEE ALSO | AUTHORS | CAVEATS

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=nc&sektion=1&manpath=FreeBSD+14.0-RELEASE+and+Ports>

home | help