1行コマンドを実行して、Telnetを使用してリモートTCPポートをテストします。

1行コマンドを実行して、Telnetを使用してリモートTCPポートをテストします。

コマンドとディスク容量が非常に制限されているLinuxシステムがたくさんあります。しかし、コマンドがありますtelnet

各プローブにリモートで(プログラム的に)接続し、SSHを介して1行のLinuxコマンドを実行しました。

特定のコンピュータに接続するには、Telnetを使用して単一のコマンドを実行する必要があります。その後すぐに切断します。

できますが、今すぐ切断部分。 Telnet は、コンソールや端末の種類を開いていますが、Telnet コマンドを実行してすぐに切断することを知ることはできません。

これにより、テキスト出力を簡単に解析して、指定されたポートのコンピュータに接続できないというエラーメッセージを表示できます。これが私が探しているものです。

それでは、Telnetを使用してコンピュータに接続した後に切断するために1行のコマンドをどのように実行しますか?

答え1

exit次のコマンドをパイプで接続できる必要がありますtelnet

echo 'exit' | telnet {site} {port}

動作していることを確認してください。 (私のWebサーバーでは動作しているようですが、YMMV)。

答え2

最も簡単で簡単な方法は次のとおりです。

 sleep <n> | telnet <server> <port>
  • n- 自動的に終了する前に待機する秒数。 0.5のような素数にすることができます。一部の必須出力は、指定された待機時間内に返されない場合があります。したがって、それに応じて増加する必要があるかもしれません。

  • server– 宛先サーバーの IP またはホスト名。

  • port- 宛先サービスのポート番号。

次のように出力をファイルにリダイレクトすることもできます。

sleep 1 | telnet <server> <port> > output.log

答え3

私の場合、これはうまくいきます。 (セントOS 7):

while read host port; do
r=$(bash -c 'exec 3<> /dev/tcp/'$host'/'$port';echo $?' 2>/dev/null)
if [ "$r" = "0" ]; then
     echo "$host $port is open"
else
     echo "$host $port is closed"
     exit 1 # To force fail result in ShellScript
fi
done

答え4

これは別のバージョンです上記で回答しましたこれは「一般的な」Telnet構文と同様に機能します。私の答えが好きなら、この答えではなく元の答えを提供してください。

#!/bin/bash
if [ "$2" == "" ]; then
 echo "Syntax: $0 <host> <port>"
 exit;
fi

host=$1
port=$2

r=$(bash -c 'exec 3<> /dev/tcp/'$host'/'$port';echo $?' 2>/dev/null)
if [ "$r" = "0" ]; then
     echo "$host $port is open"
else
     echo "$host $port is closed"
     exit 1 # To force fail result in ShellScript
fi

関連情報