web-dev-qa-db-ja.com

カスタムタイムアウト期間を指定したtelnetコマンド

私はtelnetコマンドを実行してシェルスクリプトに出力しようとしています。しかし、ポートが開いていないか、IPが存在しない場合。コマンドが応答するのに時間がかかりすぎます。 Telnetの最大試行時間を制限することは可能ですか?

telnet Host port
7
sugunan

これは2秒以内に実行されます。

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

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))'

3
William Sandin

スクリプトを使用している場合は、Telnetをバックグラウンドで実行できます。その後、Telnetがまだ実行中の場合は、Telnetを強制終了できます。例:

{ printf "HEAD /\n\n"; sleep 1; } | telnet hostname port & sleep 2 && kill %1 2>/dev/null && echo "timeout"

これは、バックグラウンドのTelnetを強制終了する前に2秒間待機します。

2
Jez

Neatコマンドnetcat aka ncについては、説明したように考えることができます here

echo 'QUIT' | nc -w SECONDS YOUR_Host PORT; echo $?
1
Nam G VU