Linux

將十六進製字元串轉換為二進制並使用 netcat 發送

  • June 27, 2021

我有一個可以發送的二進製文件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

這是一個沒有xxdor的解決方案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

引用自:https://unix.stackexchange.com/questions/82561