回答:
-rおよび-pスイッチをxxdに使用しました。
$ echo '0006303030304e43' | xxd -r -p | nc -l localhost 8181
@Gillesからのインスピレーションのおかげで、perlバージョンがあります:
$ echo '0006303030304e43' | perl -e 'print pack "H*", <STDIN>' | nc -l localhost 8181
md5sum ../it/manifest.json | awk '{print $1}' | xxd -r -p | hd
ここではない溶液xxd
またはperl
:
echo
シェルのビルトインがサポートしている場合(bash
およびサポートしているが、サポートしてzsh
いない場合dash
)、正しいバックスラッシュエスケープを使用する必要があります。
echo -ne '\x00\x06\x30\x30\x30\x30\x4e\x43' | nc -l localhost 8181
あなたがお持ちの場合/bin/echo
からのGNU coreutilsの(ほぼ標準的なLinuxシステムの場合)またはbusyboxのからあなたも、それを使用することができます。
ではsed
、あなたは脱出したパターンを生成することができます。
$ echo '0006303030304e43' | sed -e 's/../\\x&/g'
\x00\x06\x30\x30\x30\x30\x4e\x43
組み合わせ:
echo -ne "$(echo '0006303030304e43' | sed -e 's/../\\x&/g')" | nc -l localhost 8181
echo
とprintf
、エコーが拡張機能をサポートするかどうかの推測作業が削除されます。printf "$(echo '0006303030304e43' | sed -e 's/../\\x&/g')" | nc -l localhost 8181
。
があればxxd
、それは簡単です。16進数との間で変換できます。
echo '0006303030304e43' | xxd -r -p | nc -l localhost 8181
POSIXツールのみを使用して16進数をバイナリに変換するための合理的な(そしてかなり高速な)方法はないと思います。Perlではかなり簡単に行えます。次のスクリプトは、16進数をバイナリに変換し、16進数以外の入力文字を無視します。入力行に16進数の奇数が含まれている場合、エラーが表示されます。
#!/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"; }
POSIXに固執する必要がある場合(組み込みデバイスなど)、16進数の代わりにBase64を使用することをお勧めします。uudecodeを使用してBase64をデコードできます。入力は、ヘッダー形式とuuencodeによって生成された終了行を持っている必要があり、生のBase64にすることはできません。
uudecode <<EOF | nc -l localhost 8181
begin-base64 644 -
AAYwMDAwTkM=
====
EOF
これに似ています:https : //stackoverflow.com/questions/1604765/linux-shell-scripting-hex-string-to-bytes/47253233#47253233
標準入力からさまざまな変換を実行し、その結果を標準出力に出力するツールを作成しました。cryptocli dd
それらの変換のみを行い、それ以外は何もしません。
echo -n 0006303030304e43 | cryptocli dd -decoders hex | nc -l localhost 8081
あなたのために働くでしょう。
このツールはオープンソースです。https://github.com/tehmoon/cryptocliで見つけることができます。
私のツールを使用して16進数に直接エンコードすることもできます。
cat my.dat | cryptocli dd -encoders hex | nc -l localhost 8081
616263
この質問には何が関係しますか?質問のデータを使用してください。(2)これがどのように機能するか説明できますか?コメントでは返信せず、回答を編集してより明確で完全なものにしてください。