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