Tentando criar um respondedor netcat simples:
O "servidor" seria:
$ 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
E a conexão do cliente:
$ echo "open" | netcat localhost 123
Não está funcionando como esperado. O que pode ser mudado para que isso funcione?
Depois de ler alguns comentários em outro lugar, as seguintes alterações foram sugeridas:
mkfifo /tmp/pipe
while true; do { cat /tmp/pipe | ./secret.sh 2>&1; } | netcat -kv -lp 123 > /tmp/pipe; done
Isso funciona, mas só responde com os resultados da secret.sh
primeira vez. As conexões subsequentes com a string correta não obtêm a resposta esperada. Estou chegando mais perto, no entanto.
Descobri. O problema era que o loop não deveria estar na linha de comando, ele precisa estar dentro do shell script. O comando
read line
bloqueia até receber dados da porta de escuta. Tudo o que precisa é ser envolvido em um loop.Servidor
Roteiro
Cliente
h/t para esta resposta aqui, que eu incorporei ao acima.
https://stackoverflow.com/questions/6269311/emulating-netcat-e