NC가 파일 전송을 완료했는지 확인하는 방법

NC가 파일 전송을 완료했는지 확인하는 방법

netcat이 컴퓨터 간 파일 전송을 완료했는지 알 수 있는 방법이 있습니까?

현재 명령:

기계 #2:nc -lp 5555 > test.txt

기계 #1:nc MachineIP Port < test.txt

전송이 발생하지만 완료되었다는 시각적 표시가 없습니다.

답변1

먼저 몇 가지 배경

다양한 버전이 있습니다 nc.nc(1) - Linux 매뉴얼 페이지또는nc(1) BSD 공통 명령 매뉴얼전송 후 즉시 연결을 닫아야 합니다. 연결된 두 사이트 모두에 예가 나와 있습니다.

먼저 nc를 사용하여 특정 포트를 수신하고 출력을 파일로 캡처합니다.

$ nc -l 1234 > filename.out

두 번째 머신을 사용하여 수신 대기 중인 nc 프로세스에 연결하고 전송할 파일을 제공합니다.

$ nc host.example.com 1234 < filename.in

파일 전송이 완료되면 연결이 자동으로 종료됩니다.

netcat전송 후 연결을 닫지 않으므로 위에서 설명한 것과 동일하지 않습니다 . Debian Jessie의 Netcat 1.10과 똑같이 동작합니다. 이 동작은 /usr/share/doc/netcat-traditional/README.gz내 컴퓨터에 문서화되어 있으며 굵은 글씨는 내 것입니다.

가장 간단한 사용법에서 "nc 호스트 포트"는 지정된 대상 호스트의 지정된 포트에 대한 TCP 연결을 생성합니다. 그러면 표준 입력이 호스트로 전송되고 연결을 통해 반환된 모든 내용이 표준 출력으로 전송됩니다. 이 상황은 연결의 네트워크 측이 닫힐 때까지 무기한 계속됩니다. 이 동작은 표준 입력의 파일이 끝난 후 모든 것을 닫고 종료하는 대부분의 다른 응용 프로그램과 다릅니다.

이 동작의 이유는 다음과 같습니다.

"왜 그냥 텔넷을 사용하여 포트에 연결하면 안 되나요?"라고 물을 수 있습니다. 이것은 유효한 질문이며 그 이유는 다음과 같습니다. Telnet에는 "표준 입력 EOF" 문제가 있으므로 네트워크 출력이 완료될 수 있도록 드라이버 스크립트에 계산된 지연을 도입해야 합니다. 이것은 netcat이 될 때까지 계속 실행됩니다.회로망측면 폐쇄.

위키피디아에는다양한 구현 요약. 하지만 차이점을 알 수 없습니다. 어쩌면 다른 사람도 그럴 수 있지 않을까?


이제 해결책은

1

nc파일을 읽은 후 종료하도록 지시할 수 있습니다. 이 옵션은 다음과 같이 유용합니다.

-q seconds   after EOF on stdin, wait the specified number  of  seconds
             and then quit. If seconds is negative, wait forever.

송신 측에서 이 명령을 사용하는 경우:

nc -q 0 MachineIP Port < test.txt

ncEOF를 읽은 후, 즉 파일 끝 후 0초 후에 종료됩니다. 그런 다음 종료되고 수신 측도 종료됩니다 nc.

패킷이 통과하지 못하면 어떻게 되는지 궁금하다면 Juraj의 설명을 참조하세요.

모든 패킷이 도착하지 않은 경우 시스템은 이를 감지하고 애플리케이션에 알리지 않고 이를 재전송합니다(또는 이것이 가능하지 않은 경우 애플리케이션은 시간 초과 오류를 수신합니다). 안정적인 전송은 운영 체제 커널에서 제공하는 TCP 프로토콜의 목적이며, 이를 nc사용합니다. 이를 수행하지 않는 UDP 프로토콜을 사용하여 요청할 수 있지만 nc -u그렇지 않습니다.

2

README.gz제한 시간을 기반으로 하며 구현에 해당 옵션이 -w필요하지 않은 앞서 언급한 기본 예제가 있습니다 .-q

Netcat은 간단한 데이터 전송 프록시로 사용될 수 있으며, 어느 쪽이 리스너이고 어느 쪽이 클라이언트인지는 중요하지 않습니다. 한 쪽의 입력은 다른 쪽의 출력으로 전달됩니다. 시간 초과를 지정하지 않고 수신측에서 리스너를 시작한 다음 송신측에 약간의 시간 초과를 제공하는 것이 도움이 됩니다. 이렇게 하면 리스너는 사용자가 연결할 때까지 청취하고 데이터 흐름이 중지된 후 클라이언트는 시간 초과되어 리스너를 닫고 다른 곳으로 이동하게 됩니다. 개입하는 네트워크에 문제가 없는 한 이는 완전히 신뢰할 수 있어야 하며 언제든지 시간 초과를 늘릴 수 있습니다. "rsh"의 일반적인 예는 다음과 같은 경우에 자주 사용됩니다.

nc -l -p 1234 | uncompress -c | tar xvfp -

그럼 반대편에서

tar cfp - /some/dir | compress -c | nc -w 3 othermachine 1234

한쪽 끝의 .rhosts 파일, 사용자 계정 또는 inetd 구성에 대해 걱정하지 않고 한 컴퓨터에서 다른 컴퓨터로 디렉터리 내용을 전송할 수 있습니다.

관련 정보