Difference between revisions of "Linux netcat"

From Ever changing code
Jump to navigation Jump to search
Line 15: Line 15:
== Simple web server ==
== Simple web server ==
This creates a simple web server
This creates a simple web server
  listen@server1# nc -kl 80 < index.html
  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
This is a simple index.html file
<syntaxhighlight lang="bash" line>
<syntaxhighlight lang="bash" line>
Line 34: Line 35:
Please be aware that <tt>nc</tt> 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.
Please be aware that <tt>nc</tt> 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.


Connect using a web browser
client@server2:$ curl -v --noproxy "server1.example.com" http://server1.example.com:8888    #will disable using a proxy for the "server1"
  client@server2 lynx <nowiki>http://server1.example.com:80</nowiki>
  client@server2:$ lynx <nowiki>http://server1.example.com:8080</nowiki>         #

Revision as of 10:25, 29 September 2016

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:8888    #will disable using a proxy for the "server1"
client@server2:$ lynx http://server1.example.com:8080         #