シェルスクリプトからリモートTCPポートが開いているかどうかをテストする 質問する

シェルスクリプトからリモートTCPポートが開いているかどうかをテストする 質問する

シェル スクリプト内から、リモート サーバー上で特定の 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.ローズが指摘したように、ncnetcat) で十分です。よりコンパクトに使用する方法は次のとおりです。

nc -z <host> <port>

この方法ではnc、ポートが開いているかどうかのみをチェックし、成功した場合は 0、失敗した場合は 1 で終了します。

簡単なインタラクティブ チェック (5 秒のタイムアウト付き) の場合:

nc -z -v -w5 <host> <port>

おすすめ記事