Zom*_*ate 3 bash networking sshd netcat osx-mountain-lion
我在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
$
Run Code Online (Sandbox Code Playgroud)
它找到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
Run Code Online (Sandbox Code Playgroud)
对不起,如果这个问题已经被回答,我搜索但找不到任何解决方案.
我相信你正在寻找-G选择.从手册页:
-G conntimeout TCP连接超时,以秒为单位.
-w用于在连接后设置超时.-G选项用于在连接之前设置超时.这应该给你你想要的
nc -n -G 2 -v xxx.xxx.xxx.xxx 22
Run Code Online (Sandbox Code Playgroud)
我在运行 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
Run Code Online (Sandbox Code Playgroud)
所以我的超时了,但需要相当长的时间。
嗯...我认为我的测试毫无意义,因为我永远不会真正连接到某些东西,因为我不在您的网络上。但我确实看到了这个:
-w # => # 秒后超时
请注意,-w 还设置网络不活动超时。在标准输入关闭之前,这不会产生任何影响,但如果在接下来的几秒钟内没有进一步从网络到达,netcat 会尝试再次读取网络以进行良好的测量,然后关闭并退出。现在有很多网络服务接受少量输入并返回大量输出,例如 Gopher 和 Web 服务器,这是 netcat 被写入“阻止”网络而不是保持开放的主要原因比标准输入。以这种方式处理超时可以为不这样做的网络服务器提供统一的行为在被告知之前
这适用于最终的网络读取,但不适用于连接。
如果我理解正确的话,它只会在连接后超时,因为我的从未连接过,它只是有一个内置的超时,与 -w? 无关。在这里找到,有帮助吗?
| 归档时间: |
|
| 查看次数: |
9266 次 |
| 最近记录: |