netcat: envie texto para o serviço de eco, leia a resposta e saia

4

Eu gostaria de usar netcat para enviar um pedaço de texto para o serviço de eco no meu servidor, obter a resposta e sair, para que eu saiba que a conexão ainda é boa. até agora eu tentei:

 echo 'test' | netcat server 7 

desta forma, o netcat esperaria por mais entradas do que por saídas.

Como posso fazer netcat sair depois de receber a resposta do serviço de eco?

    
por David Dai 22.12.2016 / 14:10

5 respostas

5

Seu comando deve funcionar. É muito semelhante a alguns dos exemplos na% man_de% manpage.

É exatamente assim que netcat deve operar: uma vez que tenha atingido EOF em stdin, ele (unidirecional) fecha a conexão / para / o servidor e aguarda os dados vindos do servidor. Quando o último fecha a conexão (a outra maneira: servidor- > cliente), então netcat pára.

Se o comando netcat não terminar, suponho que há algo estranho acontecendo no nível da rede que mantém o servidor netcat aguardando informações adicionais.

Você pode testar a opção echo para forçar o -q a parar N segundos após o EOF ser encontrado no stdin:

netcat -q1 server echo <<< "test"

( netcat é <<< "test" ism, use sua sintaxe bash se você não usa echo ... | )

    
por 22.12.2016 / 14:45
3

Apenas tentei - um comportamento ligeiramente diferente entre netcat-openbsd e netcat-traditional (ubuntu 16.4). A variante do OpenBSD faz o que você espera, enquanto que com o tradicional netcat eu preciso adicionar o -q 1 para evitar esperar por mais entradas.

echo 'test' | netcat -q 1 server 7
    
por 22.12.2016 / 14:46
2

Eu não entendi sua pergunta corretamente?

O ouvinte padrão do netcat deve sair ao receber a entrada (nesse caso, seu eco o canaliza para o netcat, que o encaminha para o ouvinte).

Se você quiser que o serviço NetCatch de escuta permaneça escutando após receber a entrada:

nc -lk 12345
  • em que 12345 é o número da porta

O mais importante, por favor, verifique as man pages do netcat .. elas são incrivelmente úteis para todos os comandos ...

man nc
    
por 22.12.2016 / 14:42
1

Use isto:

cat <(echo command) - | nc host port

O problema é que nc fechará a conexão imediatamente após stdin ser fechado, o que é muito rápido para uma simples string my_command , e assim nunca terá a chance de receber uma resposta. (Se você enviar um arquivo muito grande, verá que ele pode receber uma resposta antes de enviar o arquivo).

Digite cat com - como segundo argumento: Faz com que cat ouça em stdin para mais conteúdo no canal após enviar o conteúdo do primeiro argumento. O primeiro argumento é apenas pegar o comando echo através de cat - ele também pode ser um arquivo com seus comandos a la cat < file - | ... .

A desvantagem disso é que ele permanece aberto até você atingir ^C ou ^D no shell. Adicionar um tempo limite usando -w 1 (OSX netcat) ou -i 1 (nmap's ncat) faz com que feche a conexão após 1 segundo, mas não sairá do processo até que você digite algum caractere.

Esta resposta é baseada nesta esta resposta a uma pergunta de superusuário idêntica .

    
por 07.12.2017 / 02:38
0

enviando um ping para o Redis e grep o PONG:

echo 'PING' | nc -w 1 server 6379 | grep PONG

Funciona como comando Ansible.

    
por 17.04.2018 / 09:21

Tags