Use xargs para enviar solicitações para o mesmo servidor em paralelo com o netcat

3

Eu estou tentando inventar um one-liner para enviar texto para um simples servidor de eco - mas várias conexões em paralelo. É isso que estou tentando:

echo -e  A,B,C,D | xargs -d, -i -P 4 echo {} |  nc localhost 7000

No entanto, não funciona bem. O servidor recebe quatro conexões, mas nenhum dado ("nulo").

Qual é o comando xargs e netcat correto aqui?

    
por noahz 19.04.2013 / 07:36

4 respostas

1

A resposta é usar sh -c para lançar xargs :

echo 'A,B,C,D' | xargs -d, -i -P 4 sh -c 'echo "{}" | nc localhost 7000'

Veja: link

    
por 20.04.2013 / 13:04
1

Isso pode ser um pouco mais conciso (e mais fácil eu digo) se você gosta de usar o Paralelo GNU :

parallel 'echo {} | nc localhost 7000' ::: A B C D

Ou até mesmo:

parallel 'echo {} | nc localhost 7000' ::: {A..D}
    
por 20.11.2017 / 21:42
0

Use echo -n ou você terá 5 conexões em vez de quatro, uma delas sem dados. Se no servidor isso não estiver marcado, talvez esteja causando o seu problema.

echo -n A,B,C,D | xargs -d, -I{} -P 4 -n 1 echo {} | nc localhost 7000

Além disso, usando um netcat como servidor de escuta, parece funcionar corretamente:

zhen@sydow:~$ nc -l 7000
A
D
B
C

E também parece ser paralelo, vejo eco fora de ordem.

    
por 19.04.2013 / 09:27
0

Você não precisa repetir o eco, é a ação padrão do xargs. Este one-liner serve como um teste auto-contido rápido, mas você pode remover o ouvinte de teste configurado antes do &

nc -l 7001 & echo  A B C D | xargs -P4 -n1 | nc localhost 7001

Resultados:

amit@deimos:~$ nc -l 7001 & echo A B C D | xargs -P4 -n1 | nc localhost 7001
[6] 7115
D
B
C
A
[6]   Done                    nc -l 7001
    
por 20.06.2013 / 12:02