【发布时间】:2013-09-05 21:04:49
【问题描述】:
我在 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”开关时应该会超时,但事实并非如此。多台机器出现同样的问题。
这仅仅是我误解手册页的情况吗? 如果没有收到任何响应,还有其他方法可以让 nc 在 X 秒后超时吗? 有没有其他方法可以使用 Mac OS X 中的内置工具来做到这一点?
我也尝试过仅使用“-z”开关运行 nc,结果相同。 这些机器被放置在我们的生产中,所以我不允许安装任何第三方应用程序,如 nmap。
Platform: Mac OS X 10.8.4
Executable: /usr/bin/nc
对不起,如果这个问题已经得到解答,我搜索了但找不到任何解决方案。
【问题讨论】:
-
我认为 Mac 上的 nc 存在错误。我有优胜美地。当我在 Linux 上比较相同的命令以进行 DNS 代理时,Linux 会一遍又一遍地返回响应。在 Mac 上,它返回第一个响应然后卡住,因为我认为它没有看到传输结束。使用
mkfifo /tmp/fifo; nc -lu 127.0.0.1 53 < /tmp/fifo | nc -u 8.8.4.4 53 > /tmp/fifo亲自查看,然后在另一个终端窗口中,多次执行nslookup example.com 127.0.0.1。
标签: bash networking osx-mountain-lion sshd netcat