Wie gebe ich eine mit \r\n beendete Abfrage interaktiv in Netcat ein?

Wie gebe ich eine mit \r\n beendete Abfrage interaktiv in Netcat ein?
$ nc example.com 80
GET / HTTP/1.1
Host: example.com 

HTTP/1.1 200 OK
...

Es funktioniert, der Zeilentrenner steht einfach 0Ahier statt „erforderlich“ 0D0A.

Wie gebe ich eine 0D0Adurch - getrennte Abfrage in Netcat ein?

Es ist einfach, eine einmalige Sache zu erledigen, indem man sie jedes Mal printfmanuell eintippt \r\n, oder einen Perl-ähnlichen Oneliner zu implementieren todosund ihn an weiterzuleiten nc, aber vielleicht gibt es einen einfacheren Weg, den ich übersehen habe?

Antwort1

Meins netcathat eine Option -Czum --crlfErsetzen \ndurch \r\nauf stdin.

Alternativ hängt es davon ab, welches Terminal Sie verwenden. Meine Standardeinstellungen können hier eingesehen werden:

$ stty -a
... lnext = ^V; ...

Dies zeigt diewörtlich-weiterDas Zeichen für die Eingabe ist control-V. Wenn Sie also control-vgefolgt von eingeben control-m, wird ein Wagenrücklauf eingefügt (im Gegensatz zu einem Zeilenumbruch, den Sie erhalten, wenn Sie die Taste returnoder drücken enter).

Antwort2

Sie können eine Zeichenfolge per Pipeline an Folgendes weiterleiten nc:

echo -ne 'GET / HTTP/1.1\r\nHost: example.com\r\n\r\n' | nc example.com 80

Prüfen Sie mit:

$ echo -ne 'GET / HTTP/1.1\r\nHost: example.com\r\n\r\n' | hd
00000000  47 45 54 20 2f 20 48 54  54 50 2f 31 2e 31 0d 0a  |GET / HTTP/1.1..|
00000010  48 6f 73 74 3a 20 65 78  61 6d 70 6c 65 2e 63 6f  |Host: example.co|
00000020  6d 0d 0a 0d 0a                                    |m....|
00000025

Antwort3

Sie können im ungepufferten Modus ( ) eine Pipe sedan senden , um von Ihrer Standardeingabe in Folgendes zu konvertieren :nc-u\n\r\n

sed -u 's/$/\r/g' | nc localhost 6379

Sie können es auch unix2dosmit verwenden stdbuf:

stdbuf -i0 -o0 -e0 unix2dos | nc localhost 6379

verwandte Informationen