Eu tenho dois arquivos, client.sh
e server.sh
, todos os dados necessários estão no servidor, que é enviado para o cliente usando o netcat , o cliente apenas pega esses dados e exibe para o usuário final, o problema é quando o servidor envia algum código multilinha, o cliente apenas recebe como texto e exibe na tela
cliente.sh
ip=127.0.0.1
client_port=5678
server_port=8765
while :
do
# Request the menu from the server
echo menu > /dev/tcp/"$ip"/"$server_port"
# Waits the server response
nc -l $porta_cliente
done
server.sh
ip=127.0.0.1
porta_cliente=5678
porta_servidor=8765
while :
do
nc -vv -l $porta_servidor > logservidor
echo "Texto recebido: "`cat logservidor` # LOG
case `cat logservidor` in
"splash")
echo "dialog --stdout --msgbox 'SPLASH' 0 0" > /dev/tcp/"$ip"/"$porta_c$
;;
"menu_inicial")
nc $ip $porta_cliente <<-EOF
dialog --stdout --backtitle 'Bem vindo ao SEPA 0.1' --title 'Me$
Cadastrar 'Criar um novo usuário' \
Entrar 'Fazer login com sua conta' \
Sair 'Encerrar o SEPA'
# Caso o usuário selecione Cancelar, a execução do script será $
if [ $? -eq 0 ]; then
echo SUCESSO
else
rm resposta_servidor dados_digitados 2> /dev/null
clear
exit
fi
EOF
;;
"menu_principal")
echo "dialog --msgbox 'MENU_PRINCIPAL' 0 0" > /dev/tcp/"$ip"/"$porta_cl$
;;
*)
dialog --msgbox 'WTF?!' 0 0 > /dev/tcp/"$ip"/"$porta_cliente"
;;
esac
done
Você pode canalizar a saída do netcat para o shell
no entanto, em um soquete sem nenhuma autenticação, seja extremamente cuidadoso, pois isso pode permitir que qualquer pessoa execute código arbitrário na máquina cliente .
Este método é uma prática extremamente ruim e você deve considerar abordagens diferentes.
Você também pode redirecionar seu texto da conexão netcat para um arquivo e executá-lo como um comando, usando
source
Exemplo: