Fechar automaticamente a conexão do netcat

12

Estou executando o seguinte comando em 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 quando esses dados forem enviados?

    
por Justin Meltzer 03.06.2013 / 04:58

3 respostas

8

As outras respostas -c e -q fornecidas 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 diferentes opções fazem a mesma coisa, mas são implementações diferentes do netcat:

  • -c implementação do GNU do netcat
  • -q Implementação do OpenBSD do netcat.
  • -w (outro?) Implementação do Netcat no OpenBSD.

Algumas versões exigem um int para especificar o número de segundos a aguardar antes de sair para as opções -q e -w . Esse int deve ser > 0 ou >= 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, você pode considerar agrupar sua chamada de netcat com o programa timeout para eliminar o netcat após alguns segundos.

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

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

    
por 25.10.2017 / 20:57
4

Você pode usar o parâmetro -q , mas isso fará com que o servidor netcat também seja fechado.

$ echo '{"hostUp": true}' | sudo /usr/local/bin/netcat -q localhost 8001
5
    
por 03.06.2013 / 05:43
2

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 uma opção -q, mas eu pude usar a opção -c para fechar em STDIN EOF e coloque todo o comando em um loop:

while true ; do printf 'HTTP/1.1 200 OK\r\n\r\ncool, thanks' | netcat -l -c -p 8888 ; done
    
por 12.01.2016 / 16:11