Often referred to as the "Swiss Army Knife of networking," netcat is a tool that administrators can use to read and write TCP or UDP data across the network. In addition, it's extremely useful for network debugging and testing.
Netcat offers several interesting uses. For example, you can make it listen to a particular port and run a program. To do so, use the following:
$ netcat -v -l -p 10111 -e "/bin/cat /etc/motd"
This tells netcat to listen to port 10111. When there's a connection, it tells netcat to execute "/bin/cat /etc/motd," which essentially displays the contents of /etc/motd and exits.
You can also set up netcat on a machine to listen for incoming connections and run it on a remote machine to connect to the local machine and serve up a bash shell. For example, on a local machine with an IP address of 192.168.5.10, you would use the following:
$ netcat -v -l -p 10111
On the remote machine, you would use:
$ netcat 192.168.5.10 10111 -e /bin/bash
This tells the netcat instance on the remote machine to connect to the netcat instance listening on 192.168.5.10 and serve up a bash shell from the remote machine, which will then be available on the local machine. Using the netcat instance on 192.168.5.10, you can execute shell commands on the remote host.
To perform some Web debugging, you could use something like the following:
$ netcat www.website.com 80
Then, enter typical HTTP commands to get the unaltered output (e.g., "GET / HTTP 1.0").