sh 스크립트에서 함수를 호출하는 데 사용되는 netcat 데몬

sh 스크립트에서 함수를 호출하는 데 사용되는 netcat 데몬

저는 쉘 프로그래밍이 처음이고 서버에 대한 연결을 여는 스크립트를 만들었습니다. 이 스크립트가 클라이언트 노드의 입력을 수신하고 이를 사용하여 함수를 실행하기를 원합니다.

이것이 나의 과정입니다. 스크립트 실행 > 리스너 열기 > 두 번째 컴퓨터에서 netcat을 사용하여 연결 > 서버의 스크립트에서 nodefunction이라는 함수 실행

server_port를 "4444"로 인코딩했습니다.

파일명 : run_hangman

nc -l -k -v -p 4444 | bash hangman

파일명 : 처형자

#!/bin/bash

msg_timeout=0
host_ows=1
server_port=4444
dubOws=xxx.xxx.xxx.xxx

initServer() {
    hostIP=`ip -o addr show dev "eth0" | awk '$3 == "inet" {print $4}' | sed -r 's!/.*!!; s!.*\.!!'`
    hostOws=`echo $hostIP | cut -d . -f 4`
} 
servermsg(){ #message    //if = --n, echos on same line
    if [ "$1" != "--n" ]
    then
        echo `date +"%T"` "[SERVER] "$1
    else
        echo -n `date +"%T"` "[SERVER] "
    fi
}
owsmsg(){    #message    //if = --n, echos on same line
    if [ "$1" != "--n" ]
    then
        echo `date +"%T"` "[OWS]    "$1
    else
        echo -n `date +"%T"` "[OWS]    "
    fi
}
playermsg() {
    if [ "$1" != "--n" ]
    then
        echo `date +"%T"` "[PLAYER]    "$1
    else
        echo -n `date +"%T"` "[PLAYER]    "
    fi
}
question(){  #question, read, example
    servermsg "$1"
    if [ -n "$3" ]
    then
        servermsg "$3"
    fi
    read $2
    echo ""
}
owsArray(){   #
    for targetOws in $player_list
    do
        owsArray+=("OWS"$targetOws)
    done
    echo -n ${owsArray[*]}
    echo
}
openSocket() {
    servermsg "Starting the Game Listener"
    servermsg "Opening Listener on port "$server_port
    #nc -k -l $server_port |bash    
    #nc -kl -q 1 -p $server_port # This should create the listener & This is where everything stops.
    servermsg "Now listening on port "$server_port
}

initServer
owsmsg "Starting server on OWS"$hostOws"..."

question "Enter all the OWSs that will play:" player_list "Example: 1 9 14 23"
echo $player_list
question "Type a category hint:" game_cat "Example: Type of Animal"
question "Type your word:" game_word "Example: zebra"
question "How many guesses:" game_guesses "Example: 7"

servermsg "OWS"$host_ows "has created a Hangman session"
servermsg "Players are:"; servermsg --n; owsArray
servermsg "Your word is "${#game_word}" letters long and players have "$game_guesses" guesses"
question "If this is all correct press enter, or CTRL+C to cancel"

openSocket

# I think I need a While script here to read the RAW input and run the playermsg function with the input?

run_hangman 파일을 실행한 다음 노드 머신을 통해 연결합니다. 다음 줄을 입력하면 "1 2 3"이 표시됩니다. 이것이 제가 필요하기 때문입니다. 또한 "run_hangman"을 실행하는 창에 "1 2 3"을 직접 입력할 수 없습니다. Enter 키를 누르면 새 줄로 이동하는 것과 같습니다.

echo "1 2 3" >/dev/tcp/xxx.xxx.xxx.xxx/4444

서버가 연결된 것으로 표시됩니다.

Listening on [0.0.0.0] (family 0, port 4444)
14:52:24 [OWS]    Starting server on OWS225...
14:52:24 [SERVER] Enter all the OWSs that will play:
14:52:24 [SERVER] Example: 1 9 14 23
Connection from [xxx.xxx.xxx.xxx] port 4444 [tcp/*] accepted (family 2, sport 41564)
Connection closed, listening again.

1 2 3

이제 openSocket에 도달하면 에코를 한 번 더 보낸 다음 서버에서 닫힙니다. 나는 while 문이라고 생각하는 것을 가져와서 "playermsg '게임 시작됨'"과 같은 입력을 수신하고 실제로 서버에서 함수를 실행하도록 해야 합니다.

백그라운드에서 실행되는 것처럼 보이도록 실행되도록 할 수 있나요? 나는 사용해왔다CNC(1)참고로 일부 사이트에서는 시도해 볼 수 있다고 하는데 -d그것도 작동하지 않습니다.

답변1

알겠어요. 잠시 동안 성명이 필요합니다.

openSocket
while read -r value; do
    val=${value:10}
    if [[ "$value" == playermsg* ]]; then 
        val=${value:10}
        playermsg $val
    elif [[ "$value" == servermsg* ]]; then 
        val=${value:10}
        servermsg $val
    else
        echo "Returned "$value
        echo "Value was "$val
    fi
done

이제 두 번째 컴퓨터에서 방금 실행한

echo "playermsg testing" >/dev/tcp/xxx.xxx.xxx.xxx/4444

그러면 서버는 다음을 표시합니다.

15:29:36 [SERVER] Starting the Game Listener
15:29:36 [SERVER] Opening Listener on port 4440
15:29:36 [SERVER] Now listening on port 4440
15:29:37 [PLAYER] testing

관련 정보