내 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 파일 실행할 스크립트