GNU/Linux >> Linux Esercitazione >  >> Linux

convertire una stringa esadecimale in binario e inviarla con netcat

Ho usato -r e -p passa a xxd :

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

Grazie all'ispirazione della risposta di @Gilles, ecco una versione perl:

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

Qui una soluzione senza xxd o perl :

Se echo integrato nella tua shell lo supporta (bash e zsh fare, ma non dash ), devi solo usare la barra rovesciata corretta:

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

Se hai /bin/echo da GNU coreutils (quasi standard sui sistemi Linux) o da busybox puoi usarlo anche tu.

Con sed puoi generare uno schema con escape:

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

Combinato:

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

Se hai xxd , è facile:può convertire in e da esadecimale.

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

Non penso che ci sia un modo ragionevole (e ragionevolmente veloce) per convertire esadecimale in binario usando solo strumenti POSIX. Può essere fatto abbastanza facilmente in Perl. Lo script seguente converte l'esadecimale in binario, ignorando qualsiasi carattere di input che non sia una cifra esadecimale. Si lamenta se una riga di input contiene un numero dispari di cifre esadecimali.

#!/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"; }

Se hai davvero bisogno di attenersi a POSIX (ad esempio su un dispositivo integrato), ti consiglio di utilizzare Base64 anziché esadecimale. Puoi usare uudecode per decodificare Base64. L'input deve avere il formato dell'intestazione e la riga finale prodotti da uuencode, non può essere Base64 grezzo.

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

Linux
  1. Taglia con Lvm e Dm-crypt?

  2. ${!foo} E Zsh?

  3. Slash e backslash in Sed?

  4. Script di shell con funzione e parametro come variabili?

  5. Apri, estrai e converti file ISO, BIN e DAA in Linux o macOS con PowerISO gratuito

Comando Echo in Linux (con esempi)

Echo Command in Linux con esempi

Comando Netcat (nc) con esempi

Linux cerca la stringa nelle cartelle e nei file con ack

Come inviare un'e-mail con allegato e corpo da Linux

Converti la modalità binaria in modalità testo e l'opzione inversa