Como usar o nc para escutar uma porta TCP indefinidamente?

0

Eu quero ler os dados que chegam em uma porta TCP específica indefinidamente e descarregar os dados em um arquivo. Eu tentei muitas variações diferentes de nc , mas não está funcionando para mim. Na maior parte eu não estou recebendo nenhum erro no console. Abaixo está o que eu tentei:

nc -lv 12345 >> ../myfile
nc -v 12345 >> ../myfile
nc -v -p 12345 >> ../myfile
nc -v localhost -p 12345 >> ../myfile

Aprecie sua ajuda.

    
por user422171 06.06.2018 / 17:36

2 respostas

0

I want to read the data arriving on a specific TCP port indefinitely

Isso não faz sentido ... se você estava afinal de contas chegando em uma porta UDP, então tudo bem - o TCP, no entanto, é um protocolo baseado em conexão. Uma vez que um cliente se conecta, e você accept() , você acaba com dois soquetes - um escutando e um conectado ao cliente ... nc fechará o soquete de escuta original e lidará individualmente com o cliente .

Se você quiser ouvir vários clientes se conectando, tente usar socat :

socat TCP-LISTEN:12345,fork FD:1 >> ../myfile

Isto irá configurar um soquete de escuta e bifurcar um novo processo na conexão - mantendo a escuta do soquete de escuta. Todos os dados recebidos serão gravados em stdout (descritor de arquivo 1 ), que é redirecionado para ../myfile para anexação.

NOTA : os dados serão recebidos de qualquer número de clientes, em nenhuma ordem garantida, sem enquadramento ... ou seja: será uma confusão de dados confusos se você tiver mais de um cliente por vez.

Se você quiser que socat cuide do arquivo para você, então você pode usar um dos CREATE ou OPEN (veja o página do manual ):

socat TCP-LISTEN:12345,fork OPEN:../myfile,append

Se você estiver satisfeito com uma abordagem " um cliente por vez ", coloque nc em um loop:

while :; do nc -l 12345; done >> ../myfile

Teste isso com nc :

nc localhost 12345
    
por 06.06.2018 / 17:42
0

a tela à esquerda

nc -l 1234 inicia o servidor.

a tela à direita nc 127.0.0.1 1234 conecta.

parece que você errou seus comandos.

Vale a pena saber também se você está usando o gnu ou o bsd, o meu é o bsd. man nc mostra "NC (1) BSD General Commands Manual". Para iniciar o servidor no gnu, pode ser necessário -l com -p. Para conectar o cliente ao servidor em qualquer porta, nunca use -p.

Vocêpodeusar-vtambém

Seuproblemaimediatoéquevocênãoestavaconseguindofazerisso.

Suaperguntaésobreserindefinida,eeunoteiquesevocêfizerctrl-cnoladodocliente,alémdequebraraconexão,eleirápararoservidor.Vocêpodecolocaresseservidorescutandoemumloop.Issofunciona.Entãooservidorcontinuaescutandoeaindaestálásevocêtentarseconectarnovamentedepoisdeumctrl-cdocliente.

    
por 06.06.2018 / 20:01