Linux
將十六進製字元串轉換為二進制並使用 netcat 發送
我有一個可以發送的二進製文件
netcat
:$ nc -l localhost 8181 < my.dat
該文件包含以下內容:
$ xxd my.dat 0000000: 0006 3030 3030 4e43 ..0000NC
我真正想做的是直接發送十六進製字元串。我試過這個:
$ echo '0006303030304e43' | nc -l localhost 8181
但是,上面的命令只是將 ascii 字元串直接發送到
nc
.
我對xxd使用了-r和**-p**開關:
$ echo '0006303030304e43' | xxd -r -p | nc -l localhost 8181
感謝@Gilles 回答的啟發,這裡有一個 Perl 版本:
$ echo '0006303030304e43' | perl -e 'print pack "H*", <STDIN>' | nc -l localhost 8181
這是一個沒有
xxd
or的解決方案perl
:如果
echo
您的 shell 的內置支持它(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