Frage

Ich versuche, mit netcat zu spielen, um mehr darüber zu erfahren, wie HTTP funktioniert. Ich möchte ein Teil davon in bash oder Perl-Skript, aber ich habe auf einem Stein des Anstoßes früh in meinem Test getroffen.

Wenn ich netcat direkt aus der Eingabeaufforderung und geben Sie eine HEAD-Anfrage laufen, es funktioniert und ich erhalte die Header für den Web-Server ich Sondieren.

Das funktioniert:

    [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 ~]$

Aber wenn ich die gleichen Informationen in eine Textdatei setzen und ihn an netcat durch ein Rohr oder über die Umleitung, in Vorbereitung für das Skripting, ist es nicht die Header zurück.
Die Textdatei besteht aus der HEAD-Anfrage und zwei neuen Zeilen:

HEAD / HTTP/1.0

Senden die gleichen Informationen über echo oder printf funktioniert auch nicht.

$ 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

Alle Ideen, was ich falsch mache? Nicht sicher, ob es sich um ein bash Problem ist, ein Echo-Problem oder ein netcat Problem.

ich überprüft den Datenverkehr über Wireshark und die erfolgreiche Anforderung (manuell eingegeben) sendet die folgende Zeilenschaltung in einem zweiten Paket, während das Echo, printf und Textdatei Methoden im selben Paket die Newline halten, aber ich bin nicht sicher, was bewirkt, dass dieses Verhalten.

War es hilfreich?

Lösung

Sie müssen zwei Lose von „\ r \ n“, und auch netcat sagen, auf eine Antwort zu warten. printf "HEAD / HTTP/1.0\r\n\r\n" |nc -n -i 1 10.1.1.2 80 oder ähnlich funktionieren soll.

Andere Tipps

Eine andere Möglichkeit ist zu verwenden, was das heißt ‚heredoc‘ Konvention.

$ nc -n -i 1 10.1.1.2 80 <<EOF
> HEAD / HTTP/1.0
>
> EOF

Ein weiterer Weg, um nc für die Antwort zu warten, ist einen Schlaf mit dem Eingang hinzuzufügen. z.

(printf 'GET / HTTP/1.0\r\n\r\n'; sleep 1) | nc HOST 80

Sie können unter netcat Befehl verwenden, um die Instanz Webserver zu machen:

MYIP=$(ifconfig eth0|grep 'inet addr'|awk -F: '{print $2}'| awk '{print $1}')
while true; do echo -e "HTTP/1.0 200 OK\r\n\r\nWelcome to $MYIP" | sudo nc -l -p 80 ; done&

Diese Linie wird auch als gleichwertig arbeiten:

echo -e "HEAD / HTTP/1.1\nHost: 10.1.1.2\nConnection: close\n\n\n\n" | netcat 10.1.1.2 80
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top