Como fechar automaticamente a conexão netcat após o envio dos dados?

22

Estou executando o seguinte comando a partir de um script:

echo '{"hostUp": true}' | sudo /usr/local/bin/netcat localhost 8001

No entanto, o cliente netcat permanece aberto indefinidamente. Como posso fechar a conexão depois que esses dados foram enviados?

Justin Meltzer
fonte

Respostas:

17

As outras respostas -ce as respostas -qdadas estão corretas no contexto certo, mas pode ajudar a resumir por que existem várias respostas e fornecer uma solução mais geral.

Essas opções diferentes fazem a mesma coisa, mas são implementações diferentes do netcat:

  • -c Implementação GNU do netcat
  • -q Implementação de netcat no OpenBSD.
  • -w (other?) Implementação de netcat no OpenBSD.

Algumas versões requerem um int para especificar o número de segundos a aguardar antes de sair para as opções -qe -w. Este int deve ser > 0ou >= 0, dependendo da versão.

Se você estiver implementando algo em várias máquinas e não tiver certeza de que eles usam a mesma implementação do netcat, considere encerrar sua chamada do netcat com o timeoutprograma para eliminar o netcat após alguns segundos.

timeout 5 echo '{"hostUp": true}' | netcat localhost 8001

Essa abordagem é um pouco desajeitada porque coloca um limite superior na execução do netcat, independentemente de o envio ou não de dados ser bem-sucedido, mas se você estiver enviando uma pequena quantidade de dados e tiver alguns segundos de sobra, isso deve funcionar com qualquer implementação netcat.

7yl4r
fonte
5

Você pode usar o -qparâmetro, mas também fará com que o netcatservidor seja fechado.

$ echo '{"hostUp": true}' | sudo /usr/local/bin/netcat -q 5 localhost 8001    
cuonglm
fonte
3

No meu caso, a cópia do netcat que eu estava usando no meu Mac instalado via Homebrew (v 0.7.1) não tinha a opção -q, mas consegui usar a opção -c para fechar no STDIN EOF e colocar o comando inteiro em um loop:

while true ; do printf 'HTTP/1.1 200 OK\r\n\r\ncool, thanks' | netcat -l -c -p 8888 ; done
jmaxyz
fonte
1

No servidor Ubuntu 18.04, tive que usar o seguinte: (encontrado nas páginas do manual)

echo '{"hostUp": true}' | sudo /usr/local/bin/netcat -N localhost 8001

Obviamente, o -Né semelhante a -qou -cem outras distros

Daniel Schoonwinkel
fonte