2014-06-13 60 views
9

有一個簡單的問題。netcat超時不工作?

如果連接嘗試時間超過3秒(即:端口未打開時),爲什麼以下netcat命令不超時?我認爲-w標誌將是我所需要的。 OS是OSX 10.9。

nc -v -z -w 3 127.0.0.1 5050

假設工作,我計劃實施這樣的(不能確定這是否會工作,總的bash小白)

nc -v -z -w 3 127.0.0.1 5050 | /dev/null && echo "Online" || echo "Offline"

乾杯任何幫助!

+0

當我嘗試它時,我立即得到錯誤響應,因爲端口未打開。你確定它沒有在你的主機上打開嗎?如果是這樣,那就是爲什麼它沒有超時,因爲它實際上連接了。 – CDahn

+0

奇怪的是,它似乎只在特定的端口上發生......我試圖用它來監視某個特定服務是否正在遠程位置或網絡上運行在我的機器上。該服務目前沒有運行,但netcat似乎沒有超時,該過程只是掛起。有什麼想法嗎? – anditpainsme

+0

你正在運行任何類型的防火牆? 「iptables -L」顯示了什麼? – CDahn

回答

15

您需要重定向到/ dev/null,而不是管道。請嘗試以下操作:

nc -v -z -w 3 127.0.0.1 5050 &> /dev/null && echo "Online" || echo "Offline" 

在我的機器,端口5050是不公開的,我得到如下:

$ nc -v -z -w 3 localhost 5050 &> /dev/null && echo "Online" || echo "Offline" 
Offline 
+1

謝謝!出於好奇,爲什麼重定向時需要? – anditpainsme

+1

nc將詳細輸出轉儲到stderr,因此如果您只想查看「Online」和「Offline」,則需要使用&>來告訴bash將stdout和stderr重定向到/ dev/null。如果你擺脫了-v,你可以說nc -z -w 3 localhost 5050 && echo「Online」||回聲「離線」 – CDahn

+0

很酷,很高興知道。謝謝。 – anditpainsme

3

有關於這在Debian(https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=97583)舊的錯誤報告,仍然具有的Debian GNU/Linux的相同的行爲7.7(喘息)

我發現了一個 「解決方案」,以這樣的:安裝NC的OpenBSD的版本:

apt-get install netcat-openbsd