문제가 있습니다. 명령이 있는 ncat 서버가 있습니다 ncat -l [port] -k -c "cat > foo; cat > bar"
. netcat을 통해 이 서버 에 연결하면 파일 에 foo
쓴 bar
다음 foo
. 이것을 어떻게 우회할 수 있나요? 종료하는 대신 명령을 사용할 수 있는 대안이 있습니까 ?^D
bar
bar
cat
EOF
답변1
1개의 연결만 사용하여 2개의 파일을 전송하려는 경우 파일의 끝은 길이가 0인 읽기이므로 netcat이 소켓을 닫는 데 사용하기 때문에 어떻게든 마커를 사용하여 데이터 스트림에서 파일을 분리해야 합니다. .
Control-D
Control-D
파일의 끝을 나타내기 위해 터미널에 무언가를 입력할 수 있지만 문자가 생성되지 않고 길이가 0인 읽기가 종료됩니다. 데이터 스트림에는 없습니다.
단순히 2개의 파일을 전송하려면 기존 pack 명령을 수신자 및 발신자 tar
로 사용할 수 있습니다 . (파일명은 보낸 사람이 보낸 것이므로 보낸 사람을 신뢰해야 합니다.)nc -k -l 4458 -v -c 'tar xf - >&2'
tar cf - foo bar
또는 파일이 단순한 텍스트인 경우 특수 줄을 삽입하여 두 파일을 구분할 수 있습니다. 예를 들어, 발신자 측 cat foo; echo bye; cat bar
과 수신자 측에서 다음과 같습니다.
nc -k -l 4458 -v -c 'awk -v file=foo '\''/^bye$/{ file="bar";next }{print >file}'\'
이 GNU awk 스크립트는 첫 번째 파일 이름을 변수에 저장한 file
다음 "bye" 줄을 보면 두 번째 파일 이름으로 변경합니다.