사용자 정의 시간 초과 기간을 사용하는 telnet 명령

사용자 정의 시간 초과 기간을 사용하는 telnet 명령

Telnet 명령을 실행하고 쉘 스크립트의 출력을 얻으려고 합니다. 그러나 포트가 열려 있지 않거나 IP가 존재하지 않는 경우. 명령이 응답하는 데 너무 많은 시간이 걸립니다. 텔넷의 최대 시도 시간을 제한할 수 있습니까?

telnet host port

답변1

이 작업은 2초 이내에 실행됩니다.

[]# echo quit | timeout --signal=9 2 telnet [SERVER] [PORT]

답변2

nc논의된 것처럼 더 간결한 명령 netcat을 고려해 볼 수 있습니다.여기

echo 'QUIT' | nc -w SECONDS YOUR_HOST PORT; echo $?

답변3

텔넷을 실행해야 합니까? 내 생각에는 timeout(1)이 도움이 될 것 같습니다.

대안 #1: GNU coreutils의 일부인 시간 초과를 사용합니다. 연결을 설정할 수 있는지 여부는 확인되지 않습니다.

TIMEOUT=10 timeout $TIMEOUT telnet <host> <port>

대안 #2: Bash/Perl/Python을 사용하여 어느 정도 세분화하여 동일한 문제를 해결하세요.

몇 가지 예를 들면 다음과 같습니다.

큰 타격: TIMEOUT=10; telnet <host> <port> 2>&1 >/dev/null & WPID=$!; sleep $TIMEOUT && kill $! & KPID=$!; wait $WPID

:perl -e "alarm 10; exec @ARGV" "telnet my.server.com 23"

파이썬: python -c 'import telnetlib;HOST="my.server.com"; PORT=23; TIMEOUT=10; PATTERN="Login: "; t = telnetlib.Telnet (HOST, PORT); t_read = t.read_until(PATTERN, TIMEOUT); print(repr(t_read))'

답변4

호스트에 연결할 수 있는지, 포트에 연결할 수 있는지/거부되었는지 또는 호스트가 작동 중인지 확인하세요.

참고: 이 스크립트는 시각적 피드백만 제공합니다.

BASH v4+를 사용하는 예에서는 목록에서 호스트를 읽고 해당 목록의 포트를 사용합니다. 이 예에서는 포트를 테스트하고 호스트 등에 도달할 수 있는지 테스트합니다.

#!/bin/bash
declare -a remote_hosts=("10.10.236.221:8080" "10.10.236.222:22")
for each in ${remote_hosts[@]} ;do

        ip=$(echo $each | cut -d ':' -f1)
        port=$(echo $each | cut -d ':' -f2)
        echo "Connecting ${ip}:${port} .."
        telnet $ip $port & WPID=$!
        sleep 3

        if ps -p $WPID > /dev/null ;then
            echo "FAILED TO REACH ($WPID is running)"
            kill $! 2>&1 >/dev/null
            wait $WPID 2>&1 >/dev/null
        fi
done

관련 정보