Mac OS X 10.8.4上的nc(netcat)卡住了

时间:2013-09-02 17:55:00

标签: bash networking osx-mountain-lion sshd netcat

在Mac OS X上使用nc实用程序时遇到了一个小问题,我经常使用这个实用程序作为快速而脏的解决方案来检查端口是否打开以及守护程序运行的版本。

我们前几天部署了一套新计算机,我想验证它们运行的​​sshd版本,而不必离开我的椅子。

这是我跑的命令和结果输出:

$ for i in {183..200}; do echo "hello" | nc -n -w 2 -v 10.120.113.$i 22; done
Connection to 10.120.113.183 22 port [tcp/*] succeeded!
SSH-2.0-OpenSSH_5.9
Protocol mismatch.
nc: connect to 10.120.113.184 port 22 (tcp) failed: Connection refused
^C
$

它在183上找到第一台机器并返回守护程序版本,它看起来不像sshd在184上运行,但是当它达到185时它就会停止,我必须用ctrl + c杀死它。

由于我已经理解了nc的手册页,因此在使用'-w'开关时会超时,但事实并非如此。它来自多台机器也是同样的问题。

这只是我误解了手册页的情况吗? 如果没有收到任何回复,还有其他方法可以在X秒后使nc超时吗? 有没有其他方法可以使用Mac OS X中的内置工具?

我也尝试使用'-z'开关运行nc并获得相同的结果。 这些机器都放在我们的生产中,因此我不允许安装任何第三方应用程序,如nmap。

Platform: Mac OS X 10.8.4
Executable: /usr/bin/nc

很抱歉,如果这个问题得到了解答,我搜索了但找不到任何解决方案。

2 个答案:

答案 0 :(得分:9)

我相信您正在寻找-G选项。从手册页:

  

-G conntimeout               TCP连接超时(以秒为单位)。

-w用于在连接后设置超时-G选项用于在连接之前设置超时。这应该给你你想要的东西

nc -n -G 2 -v xxx.xxx.xxx.xxx 22

答案 1 :(得分:2)

我在运行10.8.4的Mac上尝试了这个,大约6分钟之后看起来像是:

andys-MacBook-Pro:EquipDB uw$ for i in {183..200}; do echo "hello" | nc -n -w 2 -v 10.120.113.$i 22; done
nc: connect to 10.120.113.183 port 22 (tcp) failed: Operation timed out
nc: connect to 10.120.113.184 port 22 (tcp) failed: Operation timed out
nc: connect to 10.120.113.185 port 22 (tcp) failed: Operation timed out
nc: connect to 10.120.113.185 port 22 (tcp) failed: Operation timed out

因此,我的时机已经超时,但需要一段时间。

嗯...我认为我的测试毫无意义,因为我不会真正连接到某些东西,因为我不在你的网络上。但我确实看到了这个:

  

-w#=> #秒后超时

     

请注意,-w还会设置网络不活动超时。这在标准输入关闭之前没有任何影响,但是如果在接下来的几秒钟内没有任何进一步从网络到达的话,netcat会尝试再次读取网络以获得良好的测量值,然后关闭并退出。现在有很多网络服务接受少量输入并返回大量输出,例如Gopher和Web服务器,这是netcat被写入网络中“阻塞”的主要原因。比标准输入。以这种方式处理超时会为网络服务器提供统一的行为,这些服务器在被告知之前自己关闭。

     

这适用于最终的网络读取,但不适用于连接。

如果我理解这一点,它只会在连接时超时,因为我从不连接它只是内置超时与-w无关? 找到here,有帮助吗?