netcat 监听器中的 Shell 脚本与客户端对话

netcat 监听器中的 Shell 脚本与客户端对话

我的 netcat 服务器上有这个脚本,它要求提供名称和其他一些信息:

*echo "Tell me your name"                                                    
 read $ln                                                                    
 echo "I got '$ln'"                                                          
 echo "Tell me something more"                                              
 while read ln; do                                                           
    echo "I got '$ln'"                                                       
    echo "Tell me something more"                                           
 done*

当客户端连接到该服务器时,我希望脚本直接与客户端通信。在服务器端我这样做:while true; do nc -l -p port-no | ./My-script-file ; done

while 循环只是为了让服务器在一个客户端关闭连接后继续监听,而没有其他任何事情。但不知何故,我无法让查询出现在客户端。

在客户端我这样做:nc server-ip port-no

我希望“告诉我你的名字”、“我得到...”和“告诉我其他内容”这几行出现在客户端屏幕上,并将来自客户端的输入输入到脚本中。

我也尝试过像--exec, -eand之类的选项--sh-exec,并且我收到的错误类似于

nc: invalid option -- '-'
usage: nc [-46CDdFhklNnrStUuvZz] [-I length] [-i interval] [-M ttl]
      [-m minttl] [-O length] [-P proxy_username] [-p source_port]
      [-q seconds] [-s source] [-T keyword] [-V rtable] [-W recvlimit] [-w timeout]
      [-X proxy_protocol] [-x proxy_address[:port]]       [destination] [port]

答案1

好的,我在这里设置了一个小例子:

#!/bin/bash

while read -p 'Tell me your name: ' ln;
  do 
    echo "I got $ln";
  done

因此,您保存脚本使其可执行并运行它,如下所示:

在服务器上

nc -l -p 4444 -k --sh-exec ./yourscript

这里-k确实保持连接打开,因此不需要您在那里的循环。

在客户端

nc hostname 4444
foo bar

这应该可以完成工作。

答案2

看来 Open-BSD netcat 不支持-e--exec帮助我们在建立连接后执行文件的命令。由于它可能会导致远程计算机对连接的计算机运行可能有害的命令,因此这些命令被视为危险的。
作为解决方法,我只是按照网站中的解决方案卸载了 Open-BSD netcat 并安装了传统的 netcat 服务器https://stackoverflow.com/questions/10065993/how-to-switch-to-netcat-traditional-in-ubuntu。这使我可以访问 -exec 命令。我在服务器上运行的命令是: nc -l -p 端口号 -e 要执行的文件脚本

相关内容