it-swarm.com.de

Scripting einer HTTP-Headeranforderung mit netcat

Ich versuche mit netcat herumzuspielen, um mehr über die Funktionsweise von HTTP zu erfahren. Ich würde gerne einiges davon in bash oder Perl schreiben, aber ich bin schon früh in meinem Test auf einen Stolperstein gestoßen.

Wenn ich netcat direkt von der Eingabeaufforderung aus ausführe und eine HEAD -Anforderung eingebe, funktioniert es und ich erhalte die Header für den zu prüfenden Webserver.

Das funktioniert: 

     [romandas @ localhost ~] $ nc 10.1.1.2 80 
 HEAD/HTTP/1.0 
 
 HTTP/1.1 200 OK 
 MIME- Version: 1.0 
 Server: Herausgegeben 
 Inhaltslänge: 0 
 Cache-Control: public 
 Läuft aus: Sa, 01. Januar 2050 18:00:00 GMT 
 
 [romandas @ localhost ~] $

Wenn ich jedoch die gleichen Informationen in eine Textdatei stecke und sie über eine Pipe oder über eine Umleitung an netcat weiterführe, werden die Header in Vorbereitung auf das Scripting nicht zurückgegeben.
Die Textdatei besteht aus der Anforderung HEAD und zwei Zeilenumbrüchen: 

HEAD/HTTP/1.0 
 

Das Senden derselben Informationen über echo oder printf funktioniert ebenfalls 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

Irgendwelche Ideen, was ich falsch mache? Nicht sicher, ob es sich um ein Bash-Problem, ein Echo-Problem oder ein Netcat-Problem handelt. 

Ich habe den Datenverkehr über Wireshark überprüft, und die erfolgreiche Anforderung (manuell eingegeben) sendet die nachgestellte Zeile in einem zweiten Paket, während die Methoden Echo, Printf und Text die Zeile in demselben Paket enthalten, aber ich bin nicht sicher, was die Ursachen sind Dieses Verhalten.

17
romandas

Sie benötigen zwei Lots von "\ r\n" und um netcat anzuweisen, auf eine Antwort zu warten. printf "HEAD / HTTP/1.0\r\n\r\n" |nc -n -i 1 10.1.1.2 80 oder ähnliches sollte funktionieren.

24
moonshadow

Eine andere Möglichkeit ist die Verwendung der sogenannten Heredoc-Konvention.

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

Eine weitere Möglichkeit, nc auf die Antwort zu warten, besteht darin, der Eingabe einen Ruhezustand hinzuzufügen. z.B.

(printf 'GET / HTTP/1.0\r\n\r\n'; sleep 1) | nc Host 80
2
Jay Soffian

Sie können den Befehl netcat verwenden, um Ihren Instanz-Webserver zu erstellen:

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&
0
Prashant Shetty

Diese Zeile funktioniert auch als gleichwertig:

echo -e "HEAD / HTTP/1.1\nHost: 10.1.1.2\nConnection: close\n\n\n\n" | netcat 10.1.1.2 80
0
Deming