У меня есть двоичный файл, который я могу отправить с netcat
:
$ nc -l localhost 8181 < my.dat
Файл содержит это:
$ xxd my.dat
0000000: 0006 3030 3030 4e43 ..0000NC
То, что я действительно хочу сделать, это отправить шестнадцатеричную строку напрямую. Я пробовал это:
$ echo '0006303030304e43' | nc -l localhost 8181
Однако вышеприведенная команда просто отправляет строку ascii напрямую nc
.
md5sum ../it/manifest.json | awk '{print $1}' | xxd -r -p | hd
Здесь решение без
xxd
илиperl
:Если
echo
встроенная программа вашей оболочки поддерживает ее (bash
иzsh
делает, но не делаетdash
), вам просто нужно использовать правильные экранированные символы обратной косой черты:Если у вас есть
/bin/echo
от GNU Coreutils (почти стандартных систем Linux) или BusyBox вы можете использовать его, тоже.С помощью
sed
вы можете сгенерировать экранированный шаблон:Комбинированный:
источник
echo
наprintf
удаляет работу догадки, если echo поддерживает расширенные функции или нет.printf "$(echo '0006303030304e43' | sed -e 's/../\\x&/g')" | nc -l localhost 8181
,Если у вас есть
xxd
, это легко: он может конвертировать в и из шестнадцатеричного.Я не думаю, что есть разумный (и достаточно быстрый) способ преобразования шестнадцатеричного числа в двоичное с использованием только инструментов POSIX. Это может быть сделано довольно легко в Perl. Следующий скрипт преобразует шестнадцатеричное в двоичное, игнорируя любой входной символ, который не является шестнадцатеричной цифрой. Он жалуется, если строка ввода содержит нечетное число шестнадцатеричных цифр.
Если вам действительно нужно придерживаться POSIX (например, на встроенном устройстве), я рекомендую использовать Base64 вместо шестнадцатеричного. Вы можете использовать uudecode для декодирования Base64. Входные данные должны иметь формат заголовка и конечную строку, создаваемую uuencode , это не может быть необработанный Base64.
источник
Аналогично этому: https://stackoverflow.com/questions/1604765/linux-shell-scripting-hex-string-to-bytes/47253233#47253233
Я написал инструмент, который выполняет различные преобразования из стандартного ввода и выводит результат в стандартный вывод.
cryptocli dd
будет делать только эти преобразования и ничего больше.Будет работать на вас.
Инструмент с открытым исходным кодом, вы можете найти его здесь: https://github.com/tehmoon/cryptocli
Редактировать:
Вы также можете закодировать непосредственно в шестнадцатеричный код, используя мой инструмент:
источник
616263
имеет этот вопрос? Пожалуйста, используйте данные из вопроса. (2) Можете ли вы объяснить, как это работает? Пожалуйста, не отвечайте в комментариях, отредактируйте свой ответ, чтобы сделать его более понятным и полным.