8 Practical Linux Netcat NC Command Examples

by Himanshu Arora on April 23, 2012

Netcat or nc is a networking utility for debugging and investigating the network.

This utility can be used for creating TCP/UDP connections and investigating them. The biggest use of this utility is in the scripts where we need to deal with TCP/UDP sockets.

In this article we will learn about the netcat command by some practical examples.

1. Netcat in a Server-Client Architecture

The netcat utility can be run in the server mode on a specified port listening for incoming connections.

$ nc -l 2389

Also, it can be used in client mode trying to connect on the port(2389) just opened

$ nc localhost 2389

Now, if we write some text at the client side, it reaches the server side. Here is the proof :

$ nc localhost 2389
HI, server

On the terminal where server is running :

$ nc -l 2389
HI, server

So we see that netcat utility can be used in the client server socket communication.

2. Use Netcat to Transfer Files

The netcat utility can also be used to transfer files. At the client side, suppose we have a file named ‘testfile’ containing :

$ cat testfile
hello test

and at the server side we have an empty file ‘test’

Now, we run the server as :

$ nc -l 2389 > test

and run the client as :

cat testfile | nc localhost 2389

Now, when we see the ‘test’ file at the server end, we see :

$ cat test
hello test

So we see that the file data was transfered from client to server.

3. Netcat Supports Timeouts

There are cases when we do not want a connection to remain open forever. In that case, through ‘-w’ switch we can specify the timeout in a connection. So after the seconds specified along with -w flag, the connection between the client and server is terminated.

Server :

nc -l 2389

Client :

$ nc -w 10 localhost 2389

The connection above would be terminated after 10 seconds.

NOTE : Do not use the -w flag with -l flag at the server side as in that case -w flag causes no effect and hence the connection remains open forever.

4. Netcat Supports IPV6 Connectivity

The flag -4 or -6 specifies that netcat utility should use which type of addresses. -4 forces nc to use IPV4 address while -6 forces nc to use IPV6 address.

Server :

$ nc -4 -l 2389

Client :

$ nc -4 localhost 2389

Now, if we run the netstat command, we see :

$ netstat | grep 2389
tcp        0      0 localhost:2389          localhost:50851         ESTABLISHED
tcp        0      0 localhost:50851         localhost:2389          ESTABLISHED

The first field in the above output would contain a postfix ’6′ in case the IPV6 addresses are being used. Since in this case it is not, so a connection between server and client is established using IPV4 addresses.

Now, If we force nc to use IPV6 addresses

Server :

$ nc -6 -l 2389

Client :

$ nc -6 localhost 2389

Now, if we run the netstat command, we see :

$ netstat | grep 2389
tcp6       0      0 localhost:2389          localhost:33234         ESTABLISHED
tcp6       0      0 localhost:33234         localhost:2389          ESTABLISHED

So now a postfix ’6′ with ‘tcp’ shows that nc is now using IPV6 addresses.

5. Disable Reading from STDIN in Netcat

This functionality can be achieved by using the flag -d. In the following example, we used this flag at the client side.

Server :

$ nc -l 2389

Client :

$ nc -d localhost 2389
Hi

The text ‘Hi’ will not be sent to the server end as using -d option the read from stdin has been disabled.

6. Force Netcat Server to Stay Up

If the netcat client is connected to the server and then after sometime the client is disconnected then normally netcat server also terminates.

Server :

$ nc -l 2389

Client :

$ nc localhost 2389
^C

Server :

$ nc -l 2389
$

So, in the above example we see that as soon as the client got disconnected the server was also terminated.

This behavior can be controlled by using the -k flag at the server side to force the server to stay up even after the client has disconnected.

Server :

$ nc -k -l 2389

Client :

$ nc localhost 2389
^C

Server :

$ nc -k -l 2389

So we see that by using the -k option the server remains up even if the client got disconnected.

7. Configure Netcat Client to Stay Up after EOF

Netcat client can be configured to stay up after EOF is received. In a normal scenario, if the nc client receives an EOF character then it terminates immediately but this behavior can also be controlled if the -q flag is used. This flag expects a number which depicts number of seconds to wait before client terminates (after receiving EOF)

Client should be started like :

nc  -q 5  localhost 2389

Now if the client ever receives an EOF then it will wait for 5 seconds before terminating.

8. Use Netcat with UDP Protocol

By default all the sockets that nc utility creates are TCP protocols but this utility also works with UDP protocol. To enable UDP protocol the -u flag is used.

Server :

$ nc -4 -u -l 2389

Client :

$ nc -4 -u localhost 2389

Now, both the server and client are configured to use UDP protocol. This can be confirmed by the following netstat command. So we see that this connection is now using the UDP protocol.

$ netstat | grep 2389
udp        0      0 localhost:42634         localhost:2389          ESTABLISHED

Linux Sysadmin Course Linux provides several powerful administrative tools and utilities which will help you to manage your systems effectively. If you don’t know what these tools are and how to use them, you could be spending lot of time trying to perform even the basic administrative tasks. The focus of this course is to help you understand system administration tools, which will help you to become an effective Linux system administrator.
Get the Linux Sysadmin Course Now!

If you enjoyed this article, you might also like..

  1. 50 Linux Sysadmin Tutorials
  2. 50 Most Frequently Used Linux Commands (With Examples)
  3. Top 25 Best Linux Performance Monitoring and Debugging Tools
  4. Mommy, I found it! – 15 Practical Linux Find Command Examples
  5. Linux 101 Hacks 2nd Edition eBook Linux 101 Hacks Book

Bash 101 Hacks Book Sed and Awk 101 Hacks Book Nagios Core 3 Book Vim 101 Hacks Book

{ 13 comments… read them below or add one }

1 Pierre B. April 23, 2012 at 1:32 am

Thanks for this overview. I just encountered an “nc” snippet in a script i have to debug, and as i never used it myself i guess this page will help me with this task.

Thank you Himanshu

2 Himanshu April 23, 2012 at 2:34 am

@Pierre B
Thanks!!

3 Saurabh April 23, 2012 at 3:31 am

Nice post. Thanks :)

4 rinku April 23, 2012 at 4:26 am

Great ………………….

5 Shaheem April 23, 2012 at 2:11 pm

Always great articles on this site. Is there any way to use netcat for multicasting udp or is there a different util for that? And for either answer if there is, will you be covering examples of it please?

6 shark巨菜 April 24, 2012 at 6:15 am

A good introductory article. :)

7 Mohan April 24, 2012 at 12:45 pm

Thanks, its very useful for me.

8 Anonymous April 26, 2012 at 10:39 am

Typo in section 3:
NOTE : Do not use the -w flag with -l flag at the server side as in that case -w flag causes no AFFECT and hence the connection remains open forever.

should read
NOTE : Do not use the -w flag with -l flag at the server side as in that case -w flag causes no EFFECT and hence the connection remains open forever.

Otherwise, very pleasant read and well structured post. Thx

9 Ramesh Natarajan April 26, 2012 at 11:42 pm

@Anonymous,

Thanks for pointing it out. It is fixed.

10 Tanky Woo January 13, 2013 at 8:04 am

Hello, in the first one : Netcat in a Server-Client Architecture

nc -l a_port doesn’t listen a_port. You should use nc -l -p a_port

11 SomeGuy March 13, 2013 at 7:10 pm

Tanky Woo: There are at least two different versions of netcat around (“traditional” and “openbsd”, both available in Ubuntu etc). The traditional one requires -p to specify the port, while it’s optional in the openbsd version. At some point, some version (some older openbsd version?) complained if you used -p.

12 James May 22, 2013 at 6:25 am

Hi guys,
I’m trying to understand NC a little better and this is a great tutorial! I’m trying to redirect a com port via udp, but starting out, I’m just testing a server that stays alive.

The following works fine, but if I disconnect the client, The server stays live, but when I reconnect again, no data is passed and the client drops back to the shell after attempting to transmit. Any thoughts?

Sever:
nc -k -l -4 -u 2221

Client
nc -4 -u localhost 2221

13 unggul August 11, 2013 at 4:13 am

wow great post !
Hello im new in linux programming..i’m trying to send streaming packet data from my raspberry pi.
My packet data is stored on /home/pi/file , then i want to send that data to my android phone..

here is my code

cat /home/pi/file | awk -F’\t’ ‘END{print}’ | nc -l 8080

is that right ?

because on my android phone when receive the packet data is success,but sometimes jammed .
Thanks for advance !

Leave a Comment

Previous post:

Next post: