GNU/Linux >> Znalost Linux >  >> Linux

převést hex řetězec na binární a odeslat pomocí netcat

Použil jsem -r a -p přepněte na xxd :

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

Díky inspiraci z odpovědi @Gilles je zde verze perlu:

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

Zde je řešení bez xxd nebo perl :

Pokud echo vestavěný ve vašem shellu to podporuje (bash a zsh ano, ale ne dash ), stačí použít správné zpětné lomítko:

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

Pokud máte /bin/echo z GNU coreutils (téměř standard na systémech Linux) nebo z busybox můžete použít také.

S sed můžete vygenerovat escapovaný vzor:

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

Kombinované:

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

Pokud máte xxd , to je snadné:může se převádět do a z hexadecimální soustavy.

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

Nemyslím si, že existuje rozumný (a přiměřeně rychlý) způsob, jak převést hexadecimální na binární pouze pomocí nástrojů POSIX. V Perlu to lze udělat poměrně snadno. Následující skript převede hexadecimální na binární, ignoruje jakýkoli vstupní znak, který není hexadecimální číslicí. Stěžuje si, pokud vstupní řádek obsahuje lichý počet hexadecimálních číslic.

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

Pokud se opravdu potřebujete držet POSIX (např. na embedded zařízení), doporučuji použít Base64 místo hexadecimálního. K dekódování Base64 můžete použít uudecode. Vstup musí mít formát záhlaví a koncový řádek vytvořený kódem uuencode, nemůže to být raw Base64.

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

Linux
  1. Trim s Lvm a Dm-crypt?

  2. ${!foo} A Zsh?

  3. Shell skript s funkcí a parametrem jako proměnnými?

  1. Otevírejte, extrahujte a převádějte soubory ISO, BIN a DAA v systému Linux nebo macOS pomocí bezplatného PowerISO

  2. Jak převést hex na ASCII znaky v prostředí Linuxu?

  3. Skriptování Linuxu:hexadecimální číslo na binární řetězec

  1. Převeďte výstup na řetězec

  2. Převeďte textový řetězec v bash na pole

  3. Jak zobrazit nezpracovaná binární data jako obrázek s danou šířkou a výškou?