Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Scripting an HTTP header request with netcat

Tags:

I'm trying to play around with netcat to learn more about how HTTP works. I'd like to script some of it in bash or Perl, but I've hit upon a stumbling block early on in my testing.

If I run netcat straight from the prompt and type in a HEAD request, it works and I receive the headers for the web server I'm probing.

This works:

    [romandas@localhost ~]$ nc 10.1.1.2 80
    HEAD / HTTP/1.0

    HTTP/1.1 200 OK
    MIME-Version: 1.0
    Server: Edited out
    Content-length: 0
    Cache-Control: public
    Expires: Sat, 01 Jan 2050 18:00:00 GMT

    [romandas@localhost ~]$

But when I put the same information into a text file and feed it to netcat through a pipe or via redirection, in preparation for scripting, it doesn't return the headers.
The text file consists of the HEAD request and two newlines:

HEAD / HTTP/1.0

Sending the same information via echo or printf doesn't work either.

$ printf "HEAD / HTTP/1.0\r\n"; |nc -n 10.1.1.2 80
$ /bin/echo -ne 'HEAD / HTTP/1.0\n\n' |nc 10.1.1.2 80

Any ideas what I'm doing wrong? Not sure if it's a bash problem, an echo problem, or a netcat problem.

I checked the traffic via Wireshark, and the successful request (manually typed) sends the trailing newline in a second packet, whereas the echo, printf, and text file methods keep the newline in the same packet, but I'm not sure what causes this behavior.

like image 975
romandas Avatar asked Mar 13 '09 13:03

romandas


People also ask

Does Netcat use HTTP?

The netcat tool nc can operate as a TCP client. Because HTTP works over TCP, nc can be used as an HTTP server!

What is request header syntax structure?

It is a request type header. The Accept header is used to inform the server by the client that which content type is understandable by the client expressed as MIME-types. Accept-charset. It is a request type header. This header is used to indicate what character set are acceptable for the response from the server.

What is @requestheader?

A request header is an HTTP header that can be used in an HTTP request to provide information about the request context, so that the server can tailor the response.


1 Answers

You need two lots of "\r\n", and also to tell netcat to wait for a response. printf "HEAD / HTTP/1.0\r\n\r\n" |nc -n -i 1 10.1.1.2 80 or similar should work.

like image 189
moonshadow Avatar answered Oct 24 '22 23:10

moonshadow