Skip to content

The nc command

The nc (or netcat) command is used to perform any operation involving TCP (Transmission Control Protocol, connection oriented), UDP (User Datagram Protocol, connection-less, no guarantee of data delivery) or UNIX-domain sockets. It can be thought of as swiss-army knife for communication protocol utilities.

Syntax:

nc [options] [ip] [port]

Examples:

1. Open a TCP connection to port 80 of host, using port 1337 as source port with timeout of 5s:

bash $ nc -p 1337 -w 5 host.ip 80

2. Open a UDP connection to port 80 on host:

bash $ nc -u host.ip 80

3. Create and listen on UNIX-domain stream socket:

bash $ nc -lU /var/tmp/dsocket

4. Create a basic server/client model:

This creates a connection, with no specific server/client sides with respect to nc, once the connection is established.

```bash $ nc -l 1234 # in one console

$ nc 127.0.0.1 1234 # in another console ```

5. Build a basic data transfer model:

After the file has been transferred, sequentially, the connection closes automatically

```bash $ nc -l 1234 > filename.out # to start listening in one console and collect data

$ nc host.ip 1234 < filename.in ```

6. Talk to servers:

Basic example of retrieving the homepage of the host, along with headers.

bash $ printf "GET / HTTP/1.0\r\n\r\n" | nc host.ip 80

7. Port scanning:

Checking which ports are open and running services on target machines. -z flag commands to inform about those rather than initiate a connection.

bash $ nc -zv host.ip 20-2000 # range of ports to check for

Flags and their Functionalities:

Short Flag Description
-4 Forces nc to use IPv4 addresses
-6 Forces nc to use IPv6 addresses
-b Allow broadcast
-D Enable debugging on the socket
-i Specify time interval delay between lines sent and received
-k Stay listening for another connection after current is over
-l Listen for incoming connection instead of initiate one to remote
-T Specify length of TCP
-p Specify source port to be used
-r Specify source and/or destination ports randomly
-s Specify IP of interface which is used to send the packets
-U Use UNIX-domain sockets
-u Use UDP instead of TCP as protocol
-w Declare a timeout threshold for idle or unestablished connections
-x Should use specified protocol when talking to proxy server
-z Specify to scan for listening daemons, without sending any data

Last update: 2022-05-12
Back to top