Saya menggunakan -r dan -p beralih ke xxd :
$ echo '0006303030304e43' | xxd -r -p | nc -l localhost 8181
Berkat inspirasi dari jawaban @Gilles, inilah versi perl:
$ echo '0006303030304e43' | perl -e 'print pack "H*", <STDIN>' | nc -l localhost 8181
Berikut solusi tanpa xxd
atau perl
:
Jika echo
bawaan shell Anda mendukungnya (bash
dan zsh
lakukan, tapi bukan dash
), Anda hanya perlu menggunakan tanda garis miring terbalik yang tepat:
echo -ne '\x00\x06\x30\x30\x30\x30\x4e\x43' | nc -l localhost 8181
Jika Anda memiliki /bin/echo
dari GNU coreutils (hampir standar pada sistem Linux) atau dari busybox Anda juga dapat menggunakannya.
Dengan sed
Anda dapat membuat pola yang diloloskan:
$ echo '0006303030304e43' | sed -e 's/../\\x&/g'
\x00\x06\x30\x30\x30\x30\x4e\x43
Gabungan:
echo -ne "$(echo '0006303030304e43' | sed -e 's/../\\x&/g')" | nc -l localhost 8181
Jika Anda memiliki xxd
, itu mudah:dapat mengonversi ke dan dari heksadesimal.
echo '0006303030304e43' | xxd -r -p | nc -l localhost 8181
Saya rasa tidak ada cara yang masuk akal (dan cukup cepat) untuk mengonversi heksadesimal ke biner hanya dengan menggunakan alat POSIX. Itu bisa dilakukan dengan cukup mudah di Perl. Skrip berikut mengonversi heksadesimal ke biner, mengabaikan karakter input apa pun yang bukan digit heksadesimal. Itu mengeluh jika baris input berisi angka ganjil dari digit heksadesimal.
#!/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"; }
Jika Anda benar-benar harus tetap menggunakan POSIX (mis. Pada perangkat yang disematkan), saya sarankan menggunakan Base64 daripada heksadesimal. Anda dapat menggunakan uudecode untuk mendekode Base64. Input harus memiliki format header dan garis akhir yang dihasilkan oleh uuencode, tidak boleh Base64 mentah.
uudecode <<EOF | nc -l localhost 8181
begin-base64 644 -
AAYwMDAwTkM=
====
EOF