如何让netcat服务器在n秒后关闭

如何让netcat服务器在n秒后关闭

我需要nc以一种奇怪的方式使用,我希望服务器首先发送文件,然后接收文件,然后重复此过程。我希望服务器的每个实例在几秒钟后关闭。我怎样才能在脚本中做到这一点?我已经有一个可以与服务器交互的客户端。

答案1

某些 netcat 实现具有超时选项。为了在我的系统上,它是-w.因此

$ nc -l -p 2000 -w 5

将侦听端口 2000 并在 5 秒内退出,除非尝试在该端口上建立连接。

答案2

使用 bash 超时:

$ timeout 3s nc -l -p 2000

答案3

由于文档:The -w flag has no effect on the -l option, i.e. nc will listen forever for a connection, with or without the -w flag

我试过了nc ncat socat,没有人可以为服务器模式设置超时。

据我所知,只能在服务器模式下busybox nc遵循选项。-w

所以你必须下载带CONFIG_NC_SERVER=y选项编译的busybox,或者自己编译。

这样你就可以

$busybox nc -w 10 -l -p 9999

但我的系统的busybox没有使用CONFIG_NC_SERVER=y选项编译,我不想编译它。所以我使用这个解决方案:

portnum=9999
(sleep 10 ;echo "T" | nc -w 1 127.0.0.1 $portnum) | nc -N -l -p $portnum 

10秒后,发送“T”到localhost:9999

完整的代码是

#!/bin/sh
portnum=9999
testmsg="Hello_World"
if [ "$( (sleep 10 ;echo "T" | nc -w 1 127.0.0.1 $portnum) | nc -N -l -p $portnum )" = $testmsg ]; then
  echo "Test pass"
else
  echo "Test not pass"
fi

如果服务器Hello_World在 10 秒内收到,它将打印Test pass。否则打印Test not pass

您可以尝试打开另一个控制台,然后输入

echo "Hello_World" | nc -w 1 127.0.0.1 9999

来测试它。

答案4

正如所述彼得夫-w侦听 () 连接时的超时 ( ) -l(仅)适用于传统nc实现。

在Ubuntu上这样的实现可以通过 来安装apt install netcat-traditional和调用nc.traditional

相关内容