
Wenn ich versuche, den folgenden Befehl auszuführen:
echo -e "GET / HTTP/1.1\n\n" | /dev/tcp/74.125.225.19/80
Ich erhalte folgende Fehlermeldung:
bash: /dev/tcp/74.125.225.19/80: No such file or directory
Der folgende Befehl funktioniert einwandfrei. Das Problem liegt also in meiner Verwendungsweise /dev/tcp
:
echo -e "GET / HTTP/1.1\n\n" | nc 74.125.225.19 80
Ich verwende Ubuntu 13.04, daher die Fähigkeitsollenauf meinem System sein. Was mache ich falsch? Welche Regeln gelten für die /dev/tcp
ordnungsgemäße Verwendung?
Antwort1
Man muss es verwenden inUmleitungen:
Bash behandelt mehrere Dateinamen speziell, wenn sie in Umleitungen verwendet werden, wie in der folgenden Tabelle beschrieben:
...
/dev/tcp/host/port
Wenn „Host“ ein gültiger Hostname oder eine gültige Internetadresse und „Port“ eine ganzzahlige Portnummer oder ein Dienstname ist, versucht Bash, den entsprechenden TCP-Socket zu öffnen.
Also:
printf "GET / HTTP/1.1\n\n" > /dev/tcp/74.125.225.19/80
ist die richtige Art, es zu verwenden.
Bei der Verwendung /dev/tcp/74.125.225.19/80
in einer Pipe bash
wurde versucht, einen Befehl mit dem Namen auszuführen /dev/tcp/74.125.225.19/80
, und es wurde ein Fehler gemeldet, weil die Datei nicht vorhanden war.
Die Möglichkeit zur Handhabung /dev/tcp/host/port
und /dev/udp/host/port
Umleitung wurde bash
in Version 2.04 hinzugefügt.
Sie müssen bash
mit --enable-net-redirections
Option kompiliert werden.