2016-12-09 87 views
0

我正在運行一個bash腳本,它通過我的遠程服務器IP列表,通過netcat(telnet)爲每一行連接,並運行一些命令。如何終止netcat,以便我的腳本可以再次循環?

問題是我似乎無法弄清楚如何終止netcat,以便腳本可以循環到列表中的下一個IP。

這裏的相關位:

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

遠程服務器不發送EOF,所以是不是我可以echoprintf在netcat來終止的netcat,使該腳本可以遍歷一次?我真的不想爲-w標誌執行超時,因爲我有很多服務器需要這樣做,並且超時會使時間更長。

+0

嗯,只是一個很長的猜測:'printf'echo「QUIT」''? – joaumg

+0

不,這不起作用,因爲它只是將「退出」一詞發送到遠程服務器。我會假設在netcat中有類似於telnet(CTRL +)的某種轉義函數,但我不知道它是什麼。 – Moses

+0

但是,將quit命令發送到活動連接將關閉當前連接...否?無論如何,'printf'echo「^ Z」''IIRC。 – joaumg

回答

1

指定超時後,如果接收到進一步的輸入nc將退出,無論是從遠端或通過標準輸入。

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

取決於您的netcat版本,但-c應該做你想要的。從GNU的netcat的使用說明(這很可能是你在Ubuntu上運行的是什麼):

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

不幸的是,我的版本沒有這個選項。 – Moses

+0

如果在指定的一段時間內沒有從標準輸入接收到任何內容,是否有'-w'選項超時? – chepner

+0

@chepner是如何工作的?我認爲這是一個過程本身的超時,即,定時器在連接上啓動,並在這段時間後斷開連接,無論輸入如何。 – Moses

相關問題