Enviando o conteúdo do arquivo de texto para o servidor usando o netcat?

12

Existe um processo daemon escutando na porta 5144, que não posso modificar.

Eu quero usar o netcat para enviar o conteúdo de um arquivo de texto para o servidor, mas isso faz o netcat travar o terminal até que eu pressione Ctrl + C :

cat file.txt | nc -u 127.0.0.1 5144

A única maneira de fazer isso funcionar é executar nc -u 127.0.0.1 5144 e copiar / colar o conteúdo do arquivo manualmente.

Alguma idéia?

Observe também:

  1. cat file.txt | ... leva a bash: ...: command not found e eu posso continuar usando o terminal
  2. usando nc -u 127.0.0.1 5144 < file.txt leva ao mesmo comportamento do uso | acima
por Amil 05.11.2012 / 22:58

3 respostas

6

Se você estiver usando a versão GNU do netcat, então você pode usar o sinalizador -c para fechar a conexão no EOF.

-c, --close close connection on EOF from stdin

Se você estiver usando a versão original da ferramenta, poderá usar o sinalizador -q.

-q secs quit after EOF on stdin and delay of secs

Um exemplo para a versão original é:

cat file.txt | nc -u -q 0 127.0.0.1 5144

Eu adicionei "-q 0" ao seu comando original. Isso fecha a conexão após o envio do arquivo.

    
por 17.11.2012 / 19:35
1

Supondo que após o envio da conexão EOF permanecerá ocioso, você pode usar a opção -w timeout , que funciona para timeout sendo igual a zero (diferentemente da opção estúpida -q ...)

cat file.text | nc -u localhost 4300 -w0
    
por 22.11.2016 / 07:41
0

Se você está transferindo do FreeBSD para o Windows:

FreeBSD: cat file.txt | nc -N 10.0.0.5 5144

-N desligará o soquete de rede após o EOF

Windows: nc -l -p 5144 > output.txt

-l deixará de ouvir na conexão fechada (ao contrário de -L )

    
por 31.10.2016 / 02:21