쉘 스크립트(netcat)에서 서버에서 클라이언트로 텍스트를 코드로 실행하는 방법

쉘 스크립트(netcat)에서 서버에서 클라이언트로 텍스트를 코드로 실행하는 방법

두 개의 파일이 있고 필요한 모든 데이터가 서버에 있습니다. 이를 사용하여 클라이언트에 보냅니다 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

관련 정보