Servidor / cliente Netcat para um encadeamento social

1

Eu tenho aprendido nc por um tempo agora, e decidi criar um servidor de thread social para ele no bash. Surpreendentemente, eu consegui trabalhar, mas tenho alguns problemas com isso. Meu principal problema que quero resolver aqui é como permitir apenas uma conexão de cada vez, enviando o segmento e recebendo comentários para o segmento. Desde que eu tenho que adicionar um atraso entre o envio do segmento e receber comentários, dois ou mais clientes podem tentar receber e enviar ao mesmo tempo, e isso quebra o servidor. Eu gostaria de permitir que, quando um cliente solicitar o encadeamento, ele o envie sem permitir que qualquer outra pessoa possa se conectar. Outro problema é a compatibilidade, porque existem versões diferentes do netcat. Eu desenvolvi isso no meu laptop que tinha BSD nc , e quando eu testei no meu pc, ele não funcionou da mesma forma que no meu laptop por causa de ter uma versão diferente do 'nc', e fez o servidor ficar preso. Se houver alguma maneira de consertar isso, ou quaisquer maneiras alternativas de conseguir o que eu quero, seria muito útil para mim.

Código para o cliente:

#!/bin/bash

if [ "$1" == "" ]
    then
    echo "No IP selected."
    exit 0
fi

if [ "$2" == "" ]
then
        echo "No port selected."
        exit 0
fi

if [ ! -e ~/.netthread ]
then
    mkdir ~/.netthread
    mkdir ~/.netthread/threads/
    touch ~/.netthread/config
    echo -n "Username: "
    read name
    echo $name >~/.netthread/config
fi

export ip=$1

export port=$2

getthread ()
{
    echo "Getting thread..."
    nc $ip $port >~/.netthread/threads/$ip:$port
    sleep 1
    nc $ip $port </dev/null
    echo "Thread obtained!"
}

readthread ()
{
    cat -s ~/.netthread/threads/$ip:$port | less +G
}

writethread ()
{
    wow="$(cat ~/.netthread/config)"
    touch /tmp/thread$$
    chmod 700 /tmp/thread$$
    echo "==============================" >> /tmp/thread$$
    echo "User: $wow" >> /tmp/thread$$
    echo -n "Date: " >> /tmp/thread$$
    date >> /tmp/thread$$
    echo "Press Ctrl-D to stop writing"
    cat -s >> /tmp/thread$$
    echo -e "\n" >> /tmp/thread$$
    echo "==============================" >> /tmp/thread$$
    echo "Sending comment..."
    nc $ip $port >/dev/null
    sleep 1
    nc $ip $port </tmp/thread$$
    echo "Comment sent!"
}

getthread
readthread

echo -n "Would you like to add a comment?(y/n): "
read lolz

if [ "$lolz" == "n" ]
then
    exit 0
else
    writethread
    echo -n "Would you like to overview?(y/n): "
    read over
    if [ "$over" == "y" ]
    then
        getthread
        readthread
    fi
    rm /tmp/thread$$
    exit 0
fi

Código para o servidor (sim, é estúpido):

#!/bin/bash

while [ 1 ]
do
    echo "send state"
    sudo nc -l 22 < thread
    echo "recive state"
    sudo nc -l 22 >> thread
done
    
por SpecialBomb 11.01.2016 / 23:11

0 respostas