J'ai un fichier binaire que je peux envoyer avec netcat
:
$ nc -l localhost 8181 < my.dat
Le fichier contient ceci:
$ xxd my.dat
0000000: 0006 3030 3030 4e43 ..0000NC
Ce que je veux vraiment faire, c'est envoyer la chaîne hexagonale directement. J'ai essayé ceci:
$ echo '0006303030304e43' | nc -l localhost 8181
Cependant, la commande ci-dessus envoie simplement la chaîne ascii directement à nc
.
md5sum ../it/manifest.json | awk '{print $1}' | xxd -r -p | hd
Voici une solution sans
xxd
ouperl
:Si le
echo
shell intégré de votre shell le supporte (bash
et lezsh
fait, mais pasdash
), il vous suffit d'utiliser les échappements de barre oblique inverse de droite:Si vous avez
/bin/echo
de GNU coreutils (presque standard sur les systèmes Linux) ou de busybox vous pouvez l' utiliser aussi.Avec
sed
vous pouvez générer un motif échappé:Combiné:
la source
echo
parprintf
supprime le travail de conjecture si l'écho prend en charge les fonctionnalités étendues ou non.printf "$(echo '0006303030304e43' | sed -e 's/../\\x&/g')" | nc -l localhost 8181
.Si vous avez
xxd
, c'est facile: il peut convertir en hexadécimal.Je ne pense pas qu'il existe un moyen raisonnable (et raisonnablement rapide) de convertir hexadécimal en binaire en utilisant uniquement les outils POSIX. Cela peut être fait assez facilement en Perl. Le script suivant convertit hexadécimal en binaire, en ignorant tout caractère saisi qui n'est pas un chiffre hexadécimal. Il se plaint si une ligne d'entrée contient un nombre impair de chiffres hexadécimaux.
Si vous avez vraiment besoin de vous en tenir à POSIX (par exemple, sur un périphérique intégré), je vous recommande d’utiliser Base64 au lieu de hexadécimal. Vous pouvez utiliser uudecode pour décoder Base64. L'entrée doit avoir le format d'en-tête et la ligne de fin produits par uuencode , elle ne peut pas être brute Base64.
la source
Semblable à cela: https://stackoverflow.com/questions/1604765/linux-shell-scripting-hex-string-to-bytes/47253233#47253233
J'ai écrit un outil qui effectue diverses transformations à partir de stdin et crache le résultat sur stdout.
cryptocli dd
ne fera que ces transformations et rien d'autre.Travaillera pour vous.
L'outil est open source, vous pouvez le trouver ici: https://github.com/tehmoon/cryptocli
Modifier:
Vous pouvez aussi encoder directement en hexadécimal en utilisant mon outil:
la source
616263
a à voir avec cette question? Veuillez utiliser les données de la question. (2) Pouvez-vous expliquer comment cela fonctionne? S'il vous plaît ne répondez pas dans les commentaires, modifiez votre réponse pour la rendre plus claire et plus complète.