从“超时”运行时,如何捕获“nc”的退出状态?

从“超时”运行时,如何捕获“nc”的退出状态?

我想使用 netcat 测试与任意主机的连接。似乎-w参数实际上并没有在 5 秒后关闭连接。(这是在 Ubuntu 14.04 和netcat-traditional1.10-40 上)。它只会继续尝试连接 5 秒钟。我真正想知道的是是否nc能够成功连接到主机(退出状态为 0)。

为了解决这个nc问题,我运行了nctimeout命令。这产生了所需的功能,但是超时总是以 124 状态代码退出。

我真正想要的是 的退出状态nc。运行时如何获取该状态 timeout 5 nc -w 5 bach; echo $?

答案1

来自timeout手册页(GNU coreutils 8.22)...

--preserve-status
以与 COMMAND 相同的状态退出,即使命令超时

所以你的命令就会变成

timeout --preserve-status 5 nc -w 5 bach; echo $?

然而,我刚刚注意到原始nc命令使用的-w选项不是我们想要的。它告诉nc如果连接处于空闲状态则关闭连接不是如果连接时间过长则放弃。

我们真正想要的选项是-G设置 TCP 连接超时。我们-w还希望关闭连接(因为我们没有发送任何内容)。

这给出了一个简单的nc命令

nc -G 5 -w 5 bach; echo $?

另一种方法是将空行回显到nc发送到服务器

echo | nc -G 5 bach; echo $?

相关内容