' NC'即使使用-k选项也可以停止命令

时间:2014-04-01 10:08:51

标签: linux netcat

我正在尝试连续监听端口5000并打印第一行消息,但程序在一次迭代后停止。我正在使用以下命令 -

nc -k -l 5000 | head -n 1

我在-c选项中使用了nc,但程序在一次迭代后仍然停止。这个命令有什么问题?

1 个答案:

答案 0 :(得分:1)

这不是那么简单。第二个nc只能在之前的完整运行后启动。但它无法完成,因为nc有一个错误:它无法检测远程端是否关闭其套接字。因此,第一个nc永远不会停止,因此第二个nc无法启动。

nc的开发人员说,这是TCP协议的固有问题,我认为他们没有权利[但这只是我的意见]。

如果你想在TCP端口上实际监听一个脚本,那么一个可行的解决方案就是将这个head -1放入一个脚本中,然后从inetd调用这个脚本。

一些棘手的黑客攻击也可以,例如,在第一行之后杀死第一个nc,所以:

nc -k -l 5000|(read;echo $REPLY;killall -9 nc)
虽然它们非常有趣,但这些工具对于高效环境来说还不够稳定。 : - )