n초 후에 netcat 서버를 종료하는 방법

n초 후에 netcat 서버를 종료하는 방법

nc이상한 방법으로 사용해야 합니다 . 서버가 먼저 파일을 보낸 다음 파일을 받은 다음 프로세스를 반복하기를 원합니다. 몇 초 후에 서버의 각 인스턴스가 종료되기를 원합니다. 스크립트에서 이 작업을 어떻게 수행할 수 있나요? 서버와 상호 작용할 수 있는 클라이언트가 이미 있습니다.

답변1

일부 netcat 구현에는 시간 초과 옵션이 있습니다. ~을 위한하나내 시스템에서는 -w.

$ nc -l -p 2000 -w 5

포트 2000에서 수신 대기하고 해당 포트에서 연결이 시도되지 않는 한 5초 내에 종료됩니다.

답변2

Bash 시간 초과 사용:

$ timeout 3s nc -l -p 2000

답변3

문서 덕분에:The -w flag has no effect on the -l option, i.e. nc will listen forever for a connection, with or without the -w flag

시도했지만 nc ncat socat아무도 서버 모드에 대한 시간 초과를 설정할 수 없습니다.

내가 아는 한, 옵션은 서버 모드에서만 따를 수 있습니다 busybox nc.-w

CONFIG_NC_SERVER=y따라서 옵션으로 컴파일된 busybox를 다운로드하거나 직접 컴파일해야 합니다 .

그래서 당신은 할 수 있습니다

$busybox nc -w 10 -l -p 9999

하지만 내 시스템의 busybox는 CONFIG_NC_SERVER=y옵션으로 컴파일되지 않았으므로 컴파일하고 싶지 않습니다. 그래서 저는 이 솔루션을 사용합니다.

portnum=9999
(sleep 10 ;echo "T" | nc -w 1 127.0.0.1 $portnum) | nc -N -l -p $portnum 

10초 후에 "T"를 localhost:9999로 보냅니다.

완전한 코드는 다음과 같습니다

#!/bin/sh
portnum=9999
testmsg="Hello_World"
if [ "$( (sleep 10 ;echo "T" | nc -w 1 127.0.0.1 $portnum) | nc -N -l -p $portnum )" = $testmsg ]; then
  echo "Test pass"
else
  echo "Test not pass"
fi

서버가 Hello_World10초 이내에 이를 수신하면 이를 인쇄합니다 Test pass. 그렇지 않으면 인쇄Test not pass

다른 콘솔을 열고 입력해 보세요.

echo "Hello_World" | nc -w 1 127.0.0.1 9999

그것을 테스트하기 위해.

답변4

명시된 바와 같이페테브-w연결에 대한 listening() 시 Timeout()은 -l레거시 nc구현에만 적용됩니다.

우분투에서그러한 깨달음를 통해 설치 apt install netcat-traditional하고 호출 할 수 있습니다 nc.traditional.

관련 정보