简单的 netcat 响应器

简单的 netcat 响应器

尝试创建一个简单的 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

相关内容