높은 문자의 경우 복사/붙여 넣기가 가능합니다.
echo -ne "\x84" | xclip -i
바탕 화면에 Linux가 실행중인 경우 터미널 에뮬레이터에서 마우스 가운데 버튼을 클릭하십시오. (이거나 아닐 수도 있습니다. 아래 참조). 또는 echo ... | ssh [email protected]
이 작동 할 수 있습니다.
ssh -T
또는 다른 터미널 에뮬레이터의 해당 옵션도 "의사 터미널 할당 비활성화"옵션이 될 수 있으므로 원격 측의 프로그램은 stdin
이 pseudo-terminal 할당이 아닌 sshd의 파이프가되도록합니다. 터미널이라고 생각합니다. 이것은 ^s
과 ^v
과 같은 것들을 사용하지 못하게 할 것이라고 나는 생각한다.
반대로, echo foo | ssh -tt
은 ssh에 내용을 넣고 있어도 리모트 쪽에서 tty를 요구하게됩니다.
SSH는 TTY 층을 통해 수신 프로그램의 stdin
에 도달을 통해 확인 바이너리 데이터를 만들기 위해 덜 침입 방법은 제어 - v
(16 진수의 0 * 16)와 함께 모든 바이트를 선행하는 것입니다.
Barmar는 문자 그대로 다음 문자 (lnext
in stty -a
출력)를 가리 킵니다. 전에 사용하면 페이로드의 모든 바이트를 사용할 수 있습니다. 그것은 평범한 캐릭터보다 훨씬 앞선 수신자의 TTY 레이어에 의해 제거됩니다.
# LANG=C sed to replace every byte with ^V byte
# using bash $'' to put a literal control-V on sed's command line
echo "hello" | LANG=C sed $'s/./\x16&/g' | hd
16 68 16 65 16 6c 16 6c 16 6f 0a |.h.e.l.l.o.|
당신은 hexdump -C
(일명 hd
)에 입력하여 로컬로이 모든 것을 테스트 할 수 있습니다. 터미널에서 실행하고 몇 가지 물건을 입력하거나 붙여 넣은 다음 종료 할 때까지 control-D를 누릅니다.
$ echo -ne "\x01\xff\x99" | LANG=C sed $'s/./\x16&/g' | hd
00000000 16 01 16 ff 16 99 |......|
00000006
# yup, correct bytes from sed
$ echo -ne "\x01\xff\x99" | LANG=C sed $'s/./\x16&/g' | xclip -i
$ LANG=C hd
^A�� (middle click, return, control-d)
00000000 01 ef bf bd ef bf bd 0a |........|
# nope, that munged my data :/
$ xclip -o | hd
00000000 16 01 16 ff 16 99 |......|
는 그래서 X 선택 자체는 정확하지만, 내가 붙여 넣기로 Konsole을가하거나 munged, 또는 hexdump
에 Konsole을에서 길에 TTY 층에 의해 점점? 후자가있을 것 같지 않습니다; 아마 그것은 붙여 넣기 문제입니다. Konsole의 "인코딩"설정은 UTF-8입니다. 일반 ASCII 설정이없는 것 같습니다.
LANG=C xterm
또는 그 밖의 문자로 시도하거나 문자 expect
을 올바르게 입력하면 실제로 이진 데이터를 이스케이프 코드가 아닌 ssh
으로 보낼 수 있습니다. 더 이상 strcpy
는 것 이스케이프 시퀀스를 처리하지 않습니다 물론
fgets
. 일반적으로 C 함수는 그렇지 않습니다. 그러나 C에서 컴파일러은 컴파일시에문자열 리터럴 내에서 이스케이프 시퀀스를 처리합니다.
귀하의 질문에 혼란이 있습니다. 터미널에 제어 문자를 입력하는 방법이나 C 프로그램이 읽은 것을 메모리에 쓰는 방법을 묻고 있습니까? – Barmar
바이너리 데이터로 작업하고 있다면,'fgets()'와 친구들을 사용해서는 안됩니다. 그것은 텍스트 데이터를 읽기위한 것입니다. –
죄송합니다, 지금 전화하고 있습니다. 아마 전. 내가 AAAA를 작성하면 x41x41x41x41 등이 메모리에 저장됩니다. 필자가 \ x84를 쓰면 x78x38x34 등으로 기록됩니다. fgets가 ascii로 모든 것을 해석하고 이스케이프 시퀀스를 허용하지 않는 것처럼 16 진수 값을 쓰는 데 문제가 있습니다. – GhostSparkles