Esta es la respuesta más válida que te podemos brindar, pero primero mírala pausadamente y valora si se puede adaptar a tu proyecto.
Solución:
usé el -r y -pags cambiar a xd:
$ echo '0006303030304e43' | xxd -r -p | nc -l localhost 8181
Gracias a la inspiración de la respuesta de @Gilles, aquí hay una versión de Perl:
$ echo '0006303030304e43' | perl -e 'print pack "H*", ' | nc -l localhost 8181
Aquí una solución sin xxd
o perl
:
Si el echo
incorporado de su shell lo admite (bash
y zsh
hacer, pero no dash
), solo necesita usar los escapes de barra invertida correctos:
echo -ne 'x00x06x30x30x30x30x4ex43' | nc -l localhost 8181
Si usted tiene /bin/echo
desde GNU coreutils (casi estándar en sistemas Linux) o desde busybox también puede usarlo.
Con sed
puedes generar un patrón escapado:
$ echo '0006303030304e43' | sed -e 's/../\x&/g'
x00x06x30x30x30x30x4ex43
Conjunto:
echo -ne "$(echo '0006303030304e43' | sed -e 's/../\x&/g')" | nc -l localhost 8181
Si usted tiene xxd
eso es fácil: puede convertir ay desde hexadecimal.
echo '0006303030304e43' | xxd -r -p | nc -l localhost 8181
No creo que haya una forma razonable (y razonablemente rápida) de convertir hexadecimal a binario usando solo herramientas POSIX. Se puede hacer bastante fácil en Perl. El siguiente script convierte hexadecimal a binario, ignorando cualquier carácter de entrada que no sea un dígito hexadecimal. Se queja si una línea de entrada contiene un número impar de dígitos hexadecimales.
#!/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 realmente necesita apegarse a POSIX (por ejemplo, en un dispositivo integrado), le recomiendo usar Base64 en lugar de hexadecimal. Puede usar uudecode para decodificar Base64. La entrada debe tener el formato de encabezado y la línea final producidos por uuencode, no puede ser Base64 sin formato.
uudecode <