Linux

timeout執行時如何擷取nc的退出狀態?

  • March 21, 2019

我想使用 netcat 測試與任意主機的連接。似乎該-w參數實際上並未在 5 秒後關閉連接。(這是在 Ubuntu 14.04 和netcat-traditional1.10-40 上)。它只會繼續嘗試連接 5 秒鐘。我真正想知道的是是否nc能夠成功連接到主機(退出狀態為0)。

為了解決這個nc問題,我已經通過命令執行nctimeout。這會產生所需的功能,但超時總是以 124 狀態碼退出。

我真正想要的是nc. 跑步時我怎麼能得到它 timeout 5 nc -w 5 bach; echo $?

timeout手冊頁(GNU coreutils 8.22)…

–preserve-status

以與命令相同的狀態退出,即使命令超時

所以你的命令會變成

timeout --preserve-status 5 nc -w 5 bach; echo $?

但是,我剛剛注意到原始nc命令使用的-w選項不是我們想要的。如果連接時間過長,這會告訴nc它在空閒時關閉連接,不要放棄。

我們真正想要的選項是-G設置 TCP 連接超時。我們-w也想要關閉連接(因為我們沒有發送任何東西)。

這給出了一個簡單nc的命令

nc -G 5 -w 5 bach; echo $?

另一種方法是將空行回nc顯到發送到伺服器

echo | nc -G 5 bach; echo $?

引用自:https://serverfault.com/questions/853037