GNU/Linux >> Belajar Linux >  >> Linux

mengonversi string hex ke biner dan mengirim dengan netcat

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

Linux
  1. Menambal Biner Dengan Dd?

  2. Slash Dan Backslash Di Sed?

  3. Buka, Ekstrak, dan Konversi File ISO, BIN &DAA di Linux atau macOS dengan PowerISO Gratis

  1. Cara Mengirim Email Dengan Lampiran dan Isi dari Linux

  2. Bagaimana cara mengubah karakter hex ke ASCII di shell Linux?

  3. Skrip shell Linux:nomor hex ke string biner

  1. Ubah output menjadi string

  2. Konversikan string teks dalam bash ke array

  3. Bagaimana cara melihat data biner mentah sebagai gambar dengan lebar dan tinggi tertentu?