![n초 후에 netcat 서버를 종료하는 방법](https://linux55.com/image/80759/n%EC%B4%88%20%ED%9B%84%EC%97%90%20netcat%20%EC%84%9C%EB%B2%84%EB%A5%BC%20%EC%A2%85%EB%A3%8C%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95.png)
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_World
10초 이내에 이를 수신하면 이를 인쇄합니다 Test pass
. 그렇지 않으면 인쇄Test not pass
다른 콘솔을 열고 입력해 보세요.
echo "Hello_World" | nc -w 1 127.0.0.1 9999
그것을 테스트하기 위해.