Enviando arquivo via netcat

23

Estou usando algo parecido com isto para enviar arquivos de um computador para outro:

Para servir o arquivo (no computador A):

cat something.zip | nc -l -p 1234

Para receber o arquivo (no computador B):

netcat server.ip.here. 1234 > something.zip

Minha pergunta é ... posso fazer o oposto? Digamos que eu tenho um arquivo no computador B e quero enviá-lo para A, mas não da maneira que escrevi acima, mas fazendo com que o computador que deveria receber o arquivo (A) seja um servidor 'escutando' e conecte o computador que está enviando o arquivo ( B) para o servidor e enviar o arquivo? É possível? Eu acho que pode ser, mas não tenho certeza de como fazer isso.

Caso minha explicação acima seja complicada: Como envio o arquivo PARA 'servidor' em vez de servir o arquivo no servidor e depois retirá-lo (como fiz acima)?

Phil
fonte
Nota: se você estiver usando nc, porque scpé muito lento e você não precisa de criptografia, você pode querer mudar para udpcast: superuser.com/questions/692294/...
unhammer

Respostas:

37

No seu servidor (A):

nc -l -p 1234 -q 1> something.zip </ dev / null
No seu "cliente remetente" (B):
gato something.zip | netcat server.ip.here 1234

martinwguy
fonte
Sim, eu pensei que eu teria que mudar de lado de alguma forma, mas eu não tinha certeza de como :). Obrigado, funciona!
Phil
Esse é um truque fofo de netcat.
precisa saber é o seguinte
2
por que a < /dev/nullparte?
törzsmókus 27/11/2012
7
Como o netcat lê stdin e grava stdout simultaneamente, enviando qualquer coisa lida de stdin para a rede e imprimindo qualquer coisa recebida da rede no stdout. O </ dev / null garante que, quando o arquivo recebido for concluído, o netcat não fique lá indefinidamente aguardando a entrada do console (que não deveria estar lendo de qualquer maneira!) E também garante que ele não devore qualquer entrada que possa estar disponível no terminal, como digitar o próximo comando que você deseja executar.
martinwguy
4
se você tiver pv, sugiro operar o "cliente do servidor" como pv soemthing.zip | ..., que exibirá o progresso da leitura do arquivo no canal.
ThorSummoner
5

Como uma observação, se você também deseja preservar as permissões, a propriedade e os carimbos de data e hora, usamos tar com netcat para fazer transferências de diretórios e arquivos.

No sistema receptor:

nc -l -p 12345 -q 1 | tar xz -C /path/to/root/of/tree

Do sistema de envio:

tar czf - ./directory_tree_to_xfer | nc <host name or IP address of receiving system> 12345 

Espero que ajude.

B.Kaatz
fonte
11
Boa adição à resposta, mas deixe como comentário e não como resposta separada.
agtoever 27/02
2
Não foi possível adicionar um comentário acima devido à falta de pontos de representante nesta sub-placa, então eu tive que oferecê-lo como resposta, embora, aparentemente, você possa comentar suas próprias respostas.
B.Kaatz
2

Computador A: nc -l -p 1234 > filename.txt

Computador B: nc server.com 1234 < filename.txt

Deve funcionar também;)

marca
fonte
0

Inicie outra instância do netcat no computador B. Faça o que você fez no computador A, mas atenda-o em B. Dê ao novo servidor uma nova porta.

DaveParillo
fonte
Não quero fazer o mesmo, quero mudar os comandos para outra coisa (não sei se é possível) ... veja o texto em negrito na minha pergunta. O que quero dizer é que não quero servir de B. Quero que A seja servidor atendendo à entrada ... e depois desejo enviar o conteúdo do arquivo de B não atendido para ouvir A.
Phil
Não é assim que o netcat funciona.
precisa saber é o seguinte
11
Como você pode ver na resposta aceita - sim, é assim que o netcat também pode funcionar.
Phil
Você está certo. Eu aprendo algo novo todos os dias!
precisa saber é o seguinte