发送数据后如何自动关闭netcat连接?


22

我正在从脚本执行以下命令:

echo '{"hostUp": true}' | sudo /usr/local/bin/netcat localhost 8001

但是,netcat客户端无限期保持打开状态。发送此数据后,如何关闭连接?

Answers:


17

其他两个答案-c-q给出的答案在正确的上下文中都是正确的,但这可能有助于总结为什么存在多个答案并给出更通用的解决方案。

这些不同的选项执行相同的操作,但是是netcat的不同实现:

  • -c netcat的GNU实现
  • -q netcat的OpenBSD实现。
  • -w (其他?)OpenBSD实现的netcat。

某些版本需要一个int来指定退出-qand -w选项之前要等待的秒数。此int必须为> 0>= 0,具体取决于版本。

如果要在多台计算机上实施某些操作,并且不确定它们是否使用相同的netcat实施,则可以考虑将netcat调用与timeout程序包装在一起,以在几秒钟后终止netcat。

timeout 5 echo '{"hostUp": true}' | netcat localhost 8001

这种方法有点笨拙,因为无论是否成功发送数据,它都会对netcat的执行设置上限,但是如果发送少量数据并且有几秒钟的空闲时间,则此方法应该起作用与任何netcat实现。


5

您可以使用-q参数,但是也会导致netcat服务器关闭。

$ echo '{"hostUp": true}' | sudo /usr/local/bin/netcat -q 5 localhost 8001    

3

就我而言,我在通过Homebrew(v.0.7.1)安装的Mac上使用的netcat副本没有-q选项,但是我可以使用-c选项在STDIN EOF上将其关闭并放入整个命令循环执行:

while true ; do printf 'HTTP/1.1 200 OK\r\n\r\ncool, thanks' | netcat -l -c -p 8888 ; done

1

在Ubuntu 18.04服务器上,我必须使用以下命令:(在手册页中找到)

echo '{"hostUp": true}' | sudo /usr/local/bin/netcat -N localhost 8001

显然,-N它与其他发行版相似-q-c在其他发行版上

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.