Netcat: conexões UDP não terminam?

2

Um exemplo simples, aqui está meu servidor / host:

nc -ul 192.168.0.2 54 

E o cliente:

echo "test" | nc -u 192.168.0.2 54

O servidor interceptará a mensagem "teste", mas nc não será fechado. Apenas permanece aberto até eu pressionar Enter ou Ctrl + c. É possível terminá-lo automaticamente? Ou talvez inclua algo na mensagem do cliente para significar que a transmissão terminou?

nc --version
Ncat: Version 7.70 ( https://nmap.org/ncat )

Estou usando o Debian e o macOS.

    
por user321630 19.11.2018 / 00:07

2 respostas

1

Enquanto o TCP tem um conceito de conexões que têm um começo e um fim, o UDP não tem isso. O UDP é um protocolo sem conexão : um receptor UDP simplesmente espera por pacotes de entrada em uma porta UDP especificada e produz o conteúdo de qualquer pacote UDP que chega.

O recebimento de nc não tem idéia de quantos pacotes podem estar chegando, nem se esses pacotes devem vir do mesmo host ou de vários hosts: ele simplesmente recebe qualquer coisa que chegue à porta UDP especificada e gera o conteúdo dos pacotes UDP na saída padrão sem analisá-lo de qualquer maneira até que o processo nc seja interrompido.

Não há qualquer garantia embutida de que quaisquer pacotes enviados pelo cliente / remetente sejam recebidos na mesma ordem no final do receptor: os pacotes podem ser perdidos ou reordenados no caminho. O UDP não tenta consertar isso: é o trabalho da coisa que está usando o UDP para lidar com todos esses problemas (ou ignorá-los), conforme apropriado para seus propósitos.

Você pode decidir sobre uma sequência específica, fazer com que ela signifique "fim de dados" e organizar outro script na extremidade de escuta para analisar os dados recebidos e eliminar o processo de nc de recebimento quando essa sequência for recebida. Dessa forma, você começará a criar seu próprio protocolo (talvez muito simples) sobre o UDP. E é exatamente para isso que o UDP foi projetado.

Resumindo, a resposta é "É possível ter nc -ul terminado automaticamente?" é "Não, a menos que você faça algo que faça isso".

    
por 19.11.2018 / 09:29
1

netcat tem a opção -W :

-W recvlimit    Terminate after receiving a number of packets

Então:

nc -ulW 1 192.168.0.2 54

Mas você está usando ncat . Você pode usar esta solução alternativa:

nc -ul 192.168.0.2 54 -c 'dd count=1 bs=100000 >&3' 3>&1
    
por 19.11.2018 / 09:54