telnetリスナーに接続しています。Telnetサーバーは毎秒「1234」を送信します。メッセージ「1234」を読み、telnetセッションを閉じたい。以下は私のコードですが、機能しません。
#!/bin/bash
telnet 192.168.10.24 1234
read $RESPONSE
echo "Response is"$RESPONSE
echo "quit"
telnetメッセージを自動的に読み取るにはどうすればよいですか?
最も簡単で簡単な方法を以下に示します。
sleep <n> | telnet <server> <port>
n-自動終了までの待機時間(秒単位)。0.5のように分数になる可能性があります。一部の必要な出力は、指定された待機時間内に返されない場合があることに注意してください。したがって、それに応じて増やす必要があるかもしれません。
server-ターゲットサーバーのIPまたはホスト名。
port-ターゲットサービスのポート番号。
次のように、出力をファイルにリダイレクトすることもできます。
sleep 1 | telnet <server> <port> > output.log
アップデート1#: リモートホストが接続要求を受け入れないかドロップしない場合、上記の方法が機能しない可能性があります。そのような場合、次の方法が機能します。
RESPONSE=$(timeout 5 telnet 192.168.10.24 1234)
内部TCPメカニズムを使用できます。
#!/bin/bash
exec 3<>/dev/tcp/127.0.0.1/80
# echo -en "eventualy send something to the server\n" >&3
RESPONSE="`cat <&3`"
echo "Response is: $RESPONSE"
または、nc(netcat)を使用することもできますが、telnetは使用しないでください。
出力をファイルにリダイレクトし、ファイルから読み取ります
telnet [ip-address] > /tmp/tempfile.txt
すでに回答済みですが、curlを使用した別の観点があり、クイックチェック(つまり、サービスがアクティブかどうか)に役立ちます。「スクリプト」と「期待」の解決策を避けるのに少し苦労しなければなりませんでした。
POP3チェックの可能性のあるスタブ:
echo "quit" | curl telnet://localhost:110 > /tmp/telnet_session.txt
if grep "POP3 ready" /tmp/telnet_session.txt; then
echo "POP3 OK"
else
echo "POP3 KO"
fi