2014-06-13 37 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