Terminal-Escape-Zeichen für hexadezimale Eingabe


8

In meinem üblichen Gnom-Terminal mache ich eine

netcat -u somewhere 1234

um UDP-Pakete irgendwohin zu senden. Ich muss die folgenden 5 Bytes übertragen, die hexadezimal geschrieben sind: "01 00 af 0f e1". Wie tippe ich nun eine Escape-Sequenz in mein Terminal, die genau diese 5 Bytes an stdin von netcat sendet?

Update: Nur zur Klarstellung. Ich kenne verschiedene Möglichkeiten, die gewünschten Bytes tatsächlich in das Programm einzugeben. Das ist nicht die Frage. Die Frage ist, welche Tastenfolge ich nach dem Start des Programms in mein Terminal eingebe, um ein Hexadezimalzeichen einzugeben, das auf meiner Tastatur nicht anders dargestellt wird. (Wie 0x00, 0x01 oder 0x0f.)

Ich fange an zu denken, dass es einfach nicht möglich ist, aber ich wäre ein bisschen überrascht, wenn das die Schlussfolgerung ist.

Antworten:


8

Sie können verwenden echo -e(was meiner Meinung nach Richard Hoskins bedeutete). So:

/bin/echo -n -e "\x01\x00\xaf\x0f\xe1" | netcat -u somewhere 1234
# -n: no newline at end, -e: interpret escapes

Wenn Ihre Echo-Implementierung alt ist (oder einfach nicht mit GNU verkrustet ist), besteht die alte Methode darin, Oktal zu verwenden:

/bin/echo -n -e "\001\000\257\017\341" | netcat -u somewhere 1234

Ja, Oktal ist so, so altmodisch. Schau dir an ibaseund obasein den Mann für bc. Überprüfen Sie, ob Echo mit od("octal dump") "od -tx1" für hex, "od -to1" für octal das Richtige tut .


3

Ein einfacher Ansatz, aber nicht ganz das, wonach Sie suchen ...

Verwenden Sie einen Hex-Editor, um eine Datei mit den Bytes zu erstellen, die Sie senden möchten (Sie erwähnen gnome, damit Sie möglicherweise bereits Ghex haben, aber jeder Hex-Editor sollte in Ordnung sein). Bei kurzen Hex-Sequenzen füge ich normalerweise das Hex als Teil des Namens hinzu (z. B. test0x0100af0fe1).

Dann leiten Sie den Inhalt einfach weiter in netcatz.

mas@voco:~$ nc -o testout 127.0.1.1 80 < test0x0100af0fe1
^C
mas@voco:~$ cat testout
> 00000000 01 00 af 0e 10                                  # .....
mas@voco:~$ 

Dies hat den Nachteil, dass eine separate Datei vorbereitet werden muss, erleichtert jedoch die Replikation und Dokumentation von Tests.


Ich werde wahrscheinlich eine Lösung wie diese verwenden, aber ich dachte wirklich, es gäbe eine Möglichkeit, Eingaben im Terminal zu entgehen, damit ich die hexadezimale Darstellung eines Zeichens eingeben kann und das Terminal sie übersetzt, bevor ich sie als Eingabe an das Programm sende . Ich mag die Idee, Dateien mit dem Inhalt im Dateinamen zu erstellen. Es sind genau sehr kurze Zeichenfolgen, die ich übertragen muss, danke.
Bjarke Freund-Hansen

1

Sie müssen Perl im Terminal-Beispiel verwenden:

./Programm perl -e' print "\x41\x60\x34\x45"'

Diese Hex-Adresse wird an das Programm gesendet. Es wird häufig bei Pufferüberläufen als Hexa-Adresseneingabe verwendet. Die Seite zeigt nicht alles, was ich eingegeben habe. Suchen Sie auf Google nach Pufferüberlauf. Diese Seiten zeigen Ihnen alles. Hier fehlen einfache Anführungszeichen vor Perl eins und Sekunde am Ende einer ganzen Eingabe.


Schön, Hex zu ASCII Absender.
YumYumYum

0

Hänge \ x an den Anfang des Bytes an. zB "\ x01 \ x00 \ xaf \ x0f \ xe1".


1
Nein, habe es gerade versucht, es entgeht nichts im Terminal. Wenn Sie "0xaf" eingeben, wird "30 78 61 66 0a" als Eingabe für das Programm.
Bjarke Freund-Hansen

Welche Shell benutzt du?
Richard Hoskins

Ich benutze Bash, aber ich würde denken, dass nur das Terminal von Bedeutung ist. Die Eingabe geht direkt an das Programm (netcat).
Bjarke Freund-Hansen

Von 0xHH nach \ xHH bearbeitet.
Richard Hoskins

1
Danke, aber auch hier ist die Eingabe nur "5c 78 61 66 0a". Weder 0x noch \ x entgehen irgendetwas im Terminal. : /
Bjarke Freund-Hansen
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.