私はtelnetコマンドを実行してシェルスクリプトに出力しようとしています。しかし、ポートが開いていないか、IPが存在しない場合。コマンドが応答するのに時間がかかりすぎます。 Telnetの最大試行時間を制限することは可能ですか?
telnet Host port
これは2秒以内に実行されます。
[]# echo quit | timeout --signal=9 2 telnet [SERVER] [PORT]
Telnetを実行する必要がありますか? timeout(1)が役立つと思います。
代替#1: GNU coreutilsの一部であるタイムアウトを使用します。これは、接続を確立できたかどうかを確認しません。
_TIMEOUT=10 timeout $TIMEOUT telnet <Host> <port>
_
代替#2: Bash/Perl/Pythonを使用して、多少の粒度で同じ問題を解決します。
いくつかの例:
Bash: _TIMEOUT=10; telnet <Host> <port> 2>&1 >/dev/null & WPID=$!; sleep $TIMEOUT && kill $! & KPID=$!; wait $WPID
_
Perl:_Perl -e "alarm 10; exec @ARGV" "telnet my.server.com 23"
_
Python: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))'
スクリプトを使用している場合は、Telnetをバックグラウンドで実行できます。その後、Telnetがまだ実行中の場合は、Telnetを強制終了できます。例:
{ printf "HEAD /\n\n"; sleep 1; } | telnet hostname port & sleep 2 && kill %1 2>/dev/null && echo "timeout"
これは、バックグラウンドのTelnetを強制終了する前に2秒間待機します。
Neatコマンドnetcat aka nc
については、説明したように考えることができます here
echo 'QUIT' | nc -w SECONDS YOUR_Host PORT; echo $?