편집하다:

편집하다:

보낼 수 있는 바이너리 파일이 있습니다 netcat.

$ nc -l localhost 8181 < my.dat

파일에는 다음 내용이 포함되어 있습니다.

$ xxd my.dat
0000000: 0006 3030 3030 4e43                      ..0000NC

내가 정말로 원하는 것은 16진수 문자열을 직접 보내는 것입니다. 나는 이것을 시도했습니다 :

$ echo '0006303030304e43' | nc -l localhost 8181

그러나 위 명령은 ASCII 문자열을 nc.

답변1

내가 사용하는 것은-아르 자형그리고-피스위치xxd:

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

영감을 얻은 @Gilles의 답변 덕분에 Perl 버전은 다음과 같습니다.

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

답변2

xxdor가 없는 솔루션 은 다음과 같습니다 perl.

echo쉘의 내장 기능이 이를 지원하는 경우 ( bash그리고 zsh지원하지만 지원하지 않음)dash), 올바른 백슬래시 이스케이프를 사용해야 합니다.

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

당신 /bin/echo이 가지고 있다면GNU 핵심 도구(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

답변3

가지고 있다면 xxd간단합니다. 16진수 간에 변환할 수 있습니다.

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

POSIX 도구만 사용하여 16진수를 바이너리로 변환하는 합리적이고 빠른 방법은 없다고 생각합니다. Perl에서는 이 작업을 매우 쉽게 수행할 수 있습니다. 다음 스크립트는 16진수가 아닌 입력 문자를 무시하고 16진수를 2진수로 변환합니다. 입력 줄에 홀수의 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를 고수해야 한다면(예: 임베디드 장치에서) 다음을 사용하는 것이 좋습니다.Base6416진수 대신. 당신은 그것을 사용할 수 있습니다우드 코드Base64를 디코딩합니다. 입력에는 헤더 형식과 다음에 의해 생성된 끝 줄이 있어야 합니다.유 인코딩, 원시 Base64일 수 없습니다.

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

답변4

이와 유사합니다: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

관련 정보