명령을 사용하는 ncat 서버에서 문제가 발생했습니다 ncat -l [port] -k -c "cat > foo; cat > bar"
. netcat을 통해 이 서버에 연결하면 파일에 쓸 수 있고 foo
그 후에는 bar
. 문제는 연결 중인 클라이언트가 foo
를 전송하여 쓰기를 중지하려고 할 때 에 ^D
쓰기로 이동하는 대신 클라이언트를 닫으므로 절대 쓰지 않는다는 것입니다 bar
. bar
이것을 어떻게 우회할 수 있나요? cat
대신 명령을 사용하여 종료할 수 있는 대안은 무엇입니까 EOF
?
답변1
1개의 연결만으로 2개의 파일을 전송하려는 경우 어떻게든 마커를 사용하여 데이터 스트림에서 파일을 분리해야 합니다. 파일 끝은 netcat이 닫는 데 사용할 길이 0의 읽기이기 때문입니다. 소켓.
Control-D
Control-D
파일 끝을 나타내기 위해 터미널에 입력할 수 있지만 문자를 생성하지 않고 길이 0으로 읽기를 종료합니다. 데이터 스트림에는 없습니다 .
2개의 파일을 간단히 전송하려면 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" 줄을 보면 두 번째 파일 이름으로 변경됩니다.