Here is a quick tutorial on simulating UDP and TCP connections on Linux terminal using Netcat (NCat). Netcat package comes bundled with the famous Linux port scanning tool: NMap.

Setup

  • Get Netcat by installing NMap.
// for RHEL/CentOS
$ sudo yum install nmap -y

// for Ubuntu/Debian
$ sudo apt-get update
$ sudo apt-get install nmap -y
  • Next, you can setup one Netcat instance to listen to a certain port either via TCP/UDP transport protocol and setup another Netcat instance to establish a connection to it. Once the connection is established, both instances can send messages to other instances, which will work like a simple chat server and client.

Netcat options

  • -l: set to listening state which create a simple HTTP server waiting for the incoming connections
  • -p: define local port
  • -u: set the UDP mode

UDP

  • Create a UDP server listening on 30000 port.
$ nc -u -l 30000
  • On a new terminal tab, run below command to create an instant UDP client communicating with the above server. You can input any simple text, click enter, and see it appearing in the server’s output stream.
$ nc -u localhost 30000

Hello world from client!  <--- this appears in server's output stream too.

TCP

  • Create a TCP server listening on 31000 port.
$ nc -l 31000
  • On a new terminal tab, run below command to create an instant TCP client communicating with the above server. You can input any simple text, click enter, and see it appearing in the server’s output stream.
$ nc localhost 31000

Hello world from client!  <--- this appears in server's output stream too.

Verify

  • Run netstat to verify the established connections.
// TCP
$ netstat -nat | grep 31000

// UDP
$ netstat -nau | grep 30000

Netstat options

  • -v: enable verbose logs
  • -n: show numeric host, port or user names
  • -a: show both listening and non-listening (for TCP this means established connections) sockets

✅ Tested OS's : RHEL 7+, CentOS 7+, Ubuntu 18.04+, Debian 8+
✅ Tested Gear : Cloud (AWS EC2), On-Prem (Bare Metal)

👉 Any questions? Please comment below.


Leave a comment