Shell-Script
如何在 shell 腳本(netcat)上將文本作為程式碼從伺服器執行到客戶端
我有兩個文件,
client.sh
所有server.sh
必要的數據都在伺服器上,使用netcat發送到客戶端,客戶端只是獲取這些數據並將其顯示給最終使用者,問題是當伺服器發送一些多行程式碼時,客戶只是將其作為文本接收並顯示在螢幕上client.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
您可以將 netcat 的輸出通過管道傳輸到 shell
nc -l $porta_cliente | sh
但是,在沒有任何身份驗證的套接字上,要格外小心,因為這可能允許任何人在客戶端電腦上執行任意程式碼。
這種方法是非常糟糕的做法,您應該考慮不同的方法。
您還可以將您的文本從 netcat 連接重定向到文件,然後將其作為命令執行,使用
source
例子:
nc -l 8765 > command source command