尝试创建一个简单的 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
第一次的结果。使用正确字符串的后续连接不会得到预期的响应。然而,我越来越近了。
弄清楚了。问题是循环不应该在命令行上,它需要在 shell 脚本中。该命令
read line
会阻塞,直到它从侦听端口接收到数据。它所需要的只是被包裹在一个循环中。服务器
脚本
客户
h/t to this answer here,我将其合并到上述内容中。
https://stackoverflow.com/questions/6269311/emulating-netcat-e