シェル スクリプト内から、リモート サーバー上で特定の TCP ポートが開いているかどうかを適切にテストするための、迅速かつ簡単な方法を探しています。
私は telnet コマンドでそれを実行できましたが、ポートが開いているときは正常に動作しますが、ポートが開いていない場合はタイムアウトせず、そのままハングアップします...
以下にサンプルを示します。
l_TELNET=`echo "quit" | telnet $SERVER $PORT | grep "Escape character is"`
if [ "$?" -ne 0 ]; then
echo "Connection to $SERVER on port $PORT failed"
exit 1
else
echo "Connection to $SERVER on port $PORT succeeded"
exit 0
fi
もっと良い方法、または、たとえば 8 秒以内に接続しない場合に Telnet を強制的にタイムアウトさせ、Shell でキャッチできるもの (戻りコード、または stdout の文字列) を返す方法が必要です。
私は、IO::Socket::INET モジュールを使用する Perl メソッドを知っており、ポートをテストする成功したスクリプトを作成しましたが、可能であれば Perl の使用は避けたいと思っています。
注: これは私のサーバーが実行しているものです (これを実行する必要がある場所)
SunOS 5.10 Generic_139556-08 i86pc i386 i86pc
ベストアンサー1
B.ローズが指摘したように、nc
(netcat
) で十分です。よりコンパクトに使用する方法は次のとおりです。
nc -z <host> <port>
この方法ではnc
、ポートが開いているかどうかのみをチェックし、成功した場合は 0、失敗した場合は 1 で終了します。
簡単なインタラクティブ チェック (5 秒のタイムアウト付き) の場合:
nc -z -v -w5 <host> <port>