ti-enxame.com

Como criar um servidor Echo com Bash?

Como escrever um script bash do servidor de eco usando ferramentas como nc, eco, xargs, etc, capazes de processar simultaneamente solicitações de vários clientes, cada um com uma conexão durável?

O melhor que eu vim até agora é

nc -l -p 2000 -c 'xargs -n1 echo'

mas permite apenas uma única conexão.

40
Roskoto

Se você usar ncat em vez de nc, sua linha de comando funcionará bem com várias conexões, mas (como você apontou) sem -p.

ncat -l 2000 -k -c 'xargs -n1 echo'

o ncat está disponível em http://nmap.org/ncat/ .

P.S. com o original o netcat do Hobbit (nc), o sinalizador -c não é suportado.

Atualização: -k (--keep-open) agora é necessária para lidar com várias conexões.

43
David Costa

Aqui estão alguns exemplos. serviços simples da ncat

Servidor de eco TCP

ncat -l 2000 --keep-open --exec "/bin/cat"

Servidor de eco UDP

ncat -l 2000 --keep-open --udp --exec "/bin/cat"
22
douyw

Caso ncat não seja uma opção, o socat também funcionará:

socat TCP4-LISTEN:2000,fork EXEC:cat

O fork é necessário para que várias conexões possam ser aceitas. Adicionando reuseaddr a TCP4-LISTEN pode ser conveniente.

9
Caesar

netcat solução pré-instalada no Ubunut

O netcat pré-instalado no Ubuntu 16.04 vem de netcat-openbsd e não tem -c opção, mas o manual fornece uma solução:

Sudo mknod -m 777 fifo p
cat fifo | netcat -l -k localhost 8000 > fifo

Exemplo de cliente:

echo abc | netcat localhost 8000

TODO: como modificar o valor da string de entrada? O seguinte não retorna nenhuma resposta:

cat fifo | tr 'a' 'b' | netcat -l -k localhost 8000 > fifo

O exemplo remoto do Shell, no entanto, funciona:

cat fifo | /bin/sh -i 2>&1 | netcat -l -k localhost 8000 > fifo

No entanto, não sei como lidar com solicitações simultâneas.

sobre o quê...

#! /bin/sh

while :; do
/bin/nc.traditional -k -l -p 3342 -c 'xargs -n1 echo'
done
0
Mohan Nbs