尝试创建一个简单的 netcat 响应器:
“服务器”将是:
$ while true; do { ./secret.sh; } | sudo netcat -k -q -1 -l 123; done
secret.sh
是:
#!/bin/bash
read line
if [ "$line" == "open" ]; then
echo "sesame"
fi
以及客户端连接:
$ echo "open" | netcat localhost 123
它没有按预期工作。可以做哪些更改才能使其正常工作?
在阅读了其他地方的一些反馈后,建议进行以下更改:
mkfifo /tmp/pipe
while true; do { cat /tmp/pipe | ./secret.sh 2>&1; } | netcat -kv -lp 123 > /tmp/pipe; done
这有效,但它只会响应secret.sh
第一次的结果。后续使用正确字符串的连接不会获得预期的响应。不过,我越来越接近了。
答案1
搞清楚了。问题是循环不应该在命令行上,它需要在 shell 脚本中。命令read line
会阻塞,直到它从监听端口接收到数据。它只需要被包装在循环中。
服务器
mkfifo pipe
nc -lk 123 0<pipe | ./secret.sh 1>pipe
脚本
#!/bin/bash
while true
do
read line
if [ "$line" == "open" ]; then
echo "sesame"
fi
done
客户
echo "open" | nc localhost 123
这是这里的答案,我将其合并到上面的内容中。
https://stackoverflow.com/questions/6269311/emulating-netcat-e