Linux netcat

From Ever changing code
Jump to navigation Jump to search

Netcat in slow translation is the network version of cat command.

Send a string over a network

Start listening for a connection. The command below listen on TCP port 4444 for a new connections and displays any incoming data to a screen (default STDOUT) then it stops when the connection closes. Use -k to continue listening after a transfer completes.

listen@server1# nc -l 4444 

Send string to the listening server by redirecting the string(data) into nc

send@server2# echo "Hello Tom!" | nc server1.example.com 4444

Send Files through Netcat

This example will redirect any incoming data to a file

listen@server1# nc -l 4444 > file1.txt

Simple web server

This creates a simple web server

listen@server1:$ nc -kl 8080 < index.html #works in Chrome
listen@server1:$ { echo -ne "HTTP/1.0 200 OK\r\n\r\n"; cat index.html; } | nc -l -p 8080     #improved version to correctly respond to a single HTTP1.1 request

This is a simple index.html file

cat index.html
<html>
        <head>
                <title>Test Page</title>
        </head>
        <body>
                <h1>Level 1 header</h1>
                <h2>Subheading</h2>
                <p>Normal text here</p>
        </body>
</html>

Please be aware that nc is not aware of HTTP1.1 specification and is not sending 200 Ok, therefore it will not work out of box in curl, wget or lynx. Therefore please try this in a full flagged web browser like Chrome.

client@server2:$ curl -v --noproxy "server1.example.com" http://server1.example.com:8080    #will disable using a proxy for the "server1"
client@server2:$ lynx http://server1.example.com:8080