Imprime a entrada netcat no terminal

1

Eu estou tentando escrever um script onde eu cato o conteúdo de um arquivo e canalizo em nc :

$cat somefile.txt | nc server port

O conteúdo do arquivo é enviado para o servidor conforme o esperado, mas no terminal eu vejo apenas a resposta do servidor.

O que preciso fazer para que eu também veja o que enviei.

Eu recebo uma resposta diferente para cada linha de somefile.txt e gostaria de ter tudo junto.

    
por user2294018 21.09.2018 / 15:25

2 respostas

2

Você pode usar tee e aproveitar a substituição do processo:

$ cat somefile.txt | tee >(nc server port)

tee simplesmente copia sua entrada para o arquivo stdout e .

Com <() ( bash processo de substituição) você está dizendo bash para gravar na entrada de um comando em vez de um arquivo.

    
por 21.09.2018 / 15:33
0

Você pode usar tee e evitar a substituição do processo:

$ ( cat somefile.txt | tee /dev/fd/3 | nc host port ) 3>&1

O benefício disso é que nc será executado de forma síncrona. Veja um exemplo de comportamento de substituição de processo assíncrono:

user@hostname $ cat somefile.txt
GET / HTTP/1.0
Host: StackOverflow.com

user@hostname $ cat somefile.txt | tee >(nc stackoverflow.com 80); echo "DONE"
GET / HTTP/1.0
Host: StackOverflow.com

DONE
user@hostname $ HTTP/1.1 301 Moved Permanently
Content-Type: text/html; charset=utf-8
Location: https://stackoverflow.com/
[...]

Observe que ele diz "DONE" e desenha um prompt no meio da saída. Isso não é um problema se nc for executado de forma síncrona:

user@hostname $ ( cat somefile.txt | tee /dev/fd/3 | nc stackoverflow.com 80 ) 3>&1; echo "DONE"
GET / HTTP/1.0
Host: StackOverflow.com

HTTP/1.1 301 Moved Permanently
Content-Type: text/html; charset=utf-8
Location: https://stackoverflow.com/
[...]
DONE
    
por 21.09.2018 / 18:58