GNU/Linux >> Tutoriels Linux >  >> Linux

convertir une chaîne hexadécimale en binaire et l'envoyer avec netcat

J'ai utilisé le -r et -p passer à xxd :

$ echo '0006303030304e43' | xxd -r -p | nc -l localhost 8181

Grâce à l'inspiration de la réponse de @Gilles, voici une version perl :

$ echo '0006303030304e43' | perl -e 'print pack "H*", <STDIN>' | nc -l localhost 8181

Ici une solution sans xxd ou perl :

Si le echo intégré de votre shell le prend en charge (bash et zsh faire, mais pas dash ), il vous suffit d'utiliser les bons échappements antislash :

echo -ne '\x00\x06\x30\x30\x30\x30\x4e\x43' | nc -l localhost 8181

Si vous avez /bin/echo à partir de GNU coreutils (presque standard sur les systèmes Linux) ou de busybox, vous pouvez également l'utiliser.

Avec sed vous pouvez générer un motif échappé :

$ echo '0006303030304e43' | sed -e 's/../\\x&/g'
\x00\x06\x30\x30\x30\x30\x4e\x43

Combiné :

echo -ne "$(echo '0006303030304e43' | sed -e 's/../\\x&/g')" | nc -l localhost 8181

Si vous avez xxd , c'est facile :il peut convertir vers et depuis l'hexadécimal.

echo '0006303030304e43' | xxd -r -p | nc -l localhost 8181

Je ne pense pas qu'il existe un moyen raisonnable (et raisonnablement rapide) de convertir l'hexadécimal en binaire en utilisant uniquement les outils POSIX. Cela peut être fait assez facilement en Perl. Le script suivant convertit l'hexadécimal en binaire, en ignorant tout caractère d'entrée 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.

#!/usr/bin/env perl
$^W = 1;
$c = undef;
while (<>) {
    tr/0-9A-Fa-f//cd;
    if (defined $c) { warn "Consuming $c"; $_ = $c . $_; $c = undef; }
    if (length($_) & 1) { s/(.)$//; $c = $1; }
    print pack "H*", $_;
}
if (!eof) { die "$!"; }
if (defined $c) { warn "Odd number of hexadecimal digits"; }

Si vous avez vraiment besoin de vous en tenir à POSIX (par exemple sur un appareil intégré), je vous recommande d'utiliser Base64 au lieu de l'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 produite par uuencode, elle ne peut pas être brute Base64.

uudecode <<EOF | nc -l localhost 8181
begin-base64 644 -
AAYwMDAwTkM=
====
EOF

Linux
  1. ${!foo} Et Zsh ?

  2. Barre oblique et barre oblique inverse dans Sed ?

  3. Ouvrez, extrayez et convertissez des fichiers ISO, BIN et DAA sous Linux ou macOS avec Free PowerISO

  4. Comment envoyer un e-mail avec pièce jointe et corps à partir de Linux

  5. Comment convertir les caractères hexadécimaux en caractères ASCII dans le shell Linux ?

Commande Echo sous Linux (avec exemples)

Commande Echo sous Linux avec exemples

Commande Netcat (nc) avec exemples

Linux recherche une chaîne dans des dossiers et des fichiers avec ack

Convertir une chaîne de texte en bash en tableau

Comment diviser une chaîne avec des guillemets (comme des arguments de commande) dans bash ?