netcat 리스너의 쉘 스크립트는 클라이언트와 통신합니다.

netcat 리스너의 쉘 스크립트는 클라이언트와 통신합니다.

내 netcat 서버에 이름과 기타 정보를 요청하는 다음 스크립트가 있습니다.

*echo "Tell me your name"                                                    
 read $ln                                                                    
 echo "I got '$ln'"                                                          
 echo "Tell me something more"                                              
 while read ln; do                                                           
    echo "I got '$ln'"                                                       
    echo "Tell me something more"                                           
 done*

클라이언트가 이 서버에 연결되면 스크립트가 클라이언트와 직접 통신하기를 원합니다. 서버 측에서는 다음을 수행합니다.while true; do nc -l -p port-no | ./My-script-file ; done

while 루프는 한 클라이언트가 연결을 닫은 후에도 서버가 계속 수신 대기하기 위한 것입니다. 하지만 왠지 클라이언트 측에 쿼리가 표시되도록 할 수 없습니다.

클라이언트 측에서는 다음을 수행합니다.nc server-ip port-no

"Tell me your name", "I got..." 및 "Tell me another 뭔가"라는 줄을 클라이언트 화면에 표시하고 클라이언트의 입력을 스크립트로 가져오길 원합니다.

와 같은 옵션 도 시도했는데 --exec, 나타나는 오류는 다음과 비슷합니다.-e--sh-exec

nc: invalid option -- '-'
usage: nc [-46CDdFhklNnrStUuvZz] [-I length] [-i interval] [-M ttl]
      [-m minttl] [-O length] [-P proxy_username] [-p source_port]
      [-q seconds] [-s source] [-T keyword] [-V rtable] [-W recvlimit] [-w timeout]
      [-X proxy_protocol] [-x proxy_address[:port]]       [destination] [port]

답변1

좋습니다. 여기에 작은 예를 설정했습니다.

#!/bin/bash

while read -p 'Tell me your name: ' ln;
  do 
    echo "I got $ln";
  done

따라서 스크립트를 저장하여 실행 가능하게 만들고 다음과 같이 실행합니다.

서버에서

nc -l -p 4444 -k --sh-exec ./yourscript

이렇게 하면 -k연결이 열린 상태로 유지되므로 루프가 필요하지 않습니다.

클라이언트에서

nc hostname 4444
foo bar

이 작업을 수행해야 합니다.

답변2

Open-BSD netcat은 연결 설정 후 파일 명령 실행을 지원 -e하거나 도와 주지 않는 것 같습니다 . --exec이러한 명령은 원격 컴퓨터가 연결된 컴퓨터에 대해 잠재적으로 유해한 명령을 실행할 수 있기 때문에 위험한 것으로 간주됩니다.
해결 방법으로 방금 Open-BSD netcat을 제거하고 웹 사이트의 솔루션에 따라 기존 netcat 서버를 설치했습니다.https://stackoverflow.com/questions/10065993/how-to-switch-to-netcat-traditional-in-ubuntu. 그러면 -exec 명령에 액세스할 수 있습니다. 서버에서 실행하는 명령은 다음과 같습니다. nc -l -p 포트 번호 -e 파일 실행할 스크립트

관련 정보