2つのファイルがあり、必要なデータはすべてサーバーにあります。これを使用してクライアントに送信しますclient.sh
。server.sh
インターネット猫、クライアントはこのデータを取得してエンドユーザーに表示します。問題は、サーバーが複数行のコードを送信すると、クライアントがそれをテキストとして受け取り、画面に表示することです。
クライアント.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
サーバー.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
答え1
netcatの出力をシェルにパイプできます
nc -l $porta_cliente | sh
ただし、認証のないソケットでは誰でもクライアントコンピュータで任意のコードを実行できるので、非常に注意してください。。
このアプローチは非常に悪い習慣なので、他のアプローチを検討する必要があります。
答え2
netcat接続のテキストをファイルにリダイレクトし、次のコマンドを使用してコマンドを実行することもできます。source
例:
nc -l 8765 > command
source command