2016-12-09 3 views
0

私はリモートサーバIPのリストを通り、各行のnetcat(telnet)で接続し、いくつかのコマンドを実行するbashスクリプトを実行しています。私のスクリプトが再びループするようにnetcatを終了するには?

問題は、リスト内の次のIPにループするようにnetcatを終了させる方法がわからないことです。

#!/bin/bash 
while ISF= read -r line;do 
(
sleep 3 
printf 'command1' 
sleep 3 
printf 'command2' 
sleep 3 
) | nc $line 
done < ~/servers.txt 

リモートサーバはEOFを送信しない何かが、スクリプトが再びループスルーをすることができますので、私はnetcatをでechoまたはprintfはnetcatをを終了させることが可能であるので、そこに:

ここでは、関連するビットですか?私は実際には、タイムアウトのために-wフラグを実行しません。なぜなら、私はこれを行う必要があるサーバーがかなりありますし、タイムアウトは時間がかかるからです。

+0

Hmmm、ただ一つの長い推測: 'printf 'echo" QUIT "''? – joaumg

+0

いいえ、「QUIT」という単語をリモートサーバーに送信するだけで動作しません。 telnet(CTRL +)と同様のnetcatにはある種のエスケープ機能があると思いますが、それは何か分かりません。 – Moses

+0

しかし、アクティブな接続にquitコマンドを送信すると、現在の接続が閉じられます...いいえ?とにかく 'printf 'echo"^Z "'' IIRC。 – joaumg

答えて

1

がリモートエンドからまたは標準のいずれかを介して、それはそれ以上の入力を受信しない場合ncが終了するまでのタイムアウトを指定します(あなたがUbuntuの上で動作しているものと思われる)のGNU netcatをの使用法ステートメントから入力。

... | nc "$line" -w 10 # Choose a value for -w as appropriate 
0

あなたのバージョンのnetcatによって異なりますが、-cはあなたの探していることを行うはずです。

-c, --close    close connection on EOF from stdin 
+0

残念ながら私のバージョンではそのオプションはありません。 – Moses

+0

指定された期間、標準入力から何も受信されない場合、タイムアウトするための '-w'オプションがありますか? – chepner

+0

@chepnerはその仕組みですか?私はそれがプロセス自体のタイムアウトだと思った。タイマーは、入力に関係なく、その長さの後に接続と切断を開始する。 – Moses

関連する問題