我的 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
, -e
and之类的选项--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 要执行的文件脚本