연결을 닫지 않고 "netcat"EOF를 통해 "cat"하는 방법은 무엇입니까?

연결을 닫지 않고 "netcat"EOF를 통해 "cat"하는 방법은 무엇입니까?

문제가 있습니다. 명령이 있는 ncat 서버가 있습니다 ncat -l [port] -k -c "cat > foo; cat > bar". netcat을 통해 이 서버 에 연결하면 파일 에 foobar다음 foo. 이것을 어떻게 우회할 수 있나요? 종료하는 대신 명령을 사용할 수 있는 대안이 있습니까 ?^DbarbarcatEOF

답변1

1개의 연결만 사용하여 2개의 파일을 전송하려는 경우 파일의 끝은 길이가 0인 읽기이므로 netcat이 소켓을 닫는 데 사용하기 때문에 어떻게든 마커를 사용하여 데이터 스트림에서 파일을 분리해야 합니다. .

Control-DControl-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" 줄을 보면 두 번째 파일 이름으로 변경합니다.

관련 정보