Enviando conteúdo do arquivo de texto para o servidor usando o netcat?

13

Há um processo daemon atendendo na porta 5144, que não posso modificar.

Eu quero usar o netcat para enviar o conteúdo de um arquivo de texto para o servidor, mas isso faz netcatcom que o terminal seja interrompido até que eu pressione Ctrl+ C:

cat file.txt | nc -u 127.0.0.1 5144

A única maneira de fazê-lo funcionar é executando nc -u 127.0.0.1 5144e copiando / colando o conteúdo do arquivo manualmente.

Alguma ideia?


Observe também:

  1. cat file.txt | ...leva ae bash: ...: command not foundeu posso continuar usando o terminal
  2. usando nc -u 127.0.0.1 5144 < file.txtleva ao mesmo comportamento que usar | acima
Amil
fonte
O que acontece quando você diz cat file.txt | …? Que tal nc -u 127.0.0.1 5144 < file.txt?
Scott
você precisa usar -u? Além disso, você tentou pelo outro lado, nc -l -p? e você tentou nc -p? (há um nc que usa -l -p, e outro que acho que usa -p sem -l). Você mostrou apenas um lado, o cliente / lado inicial. O que você está fazendo pelo lado do servidor? Tente como um teste, fazendo o nc escutar na porta 1234 e ver se o gato ... | nc ... trabalha para isso. Eu nunca vi isso antes, então isso é um fraco, talvez, mas talvez seja algo peculiar a esse daemon em particular que não está aceitando as coisas que são falsas.
barlop
Não consigo modificar o daemon. @ Scott: bash: ...: command not founde usar "<file.txt" faz o mesmo que o | operador (netcat apenas trava)
Amil
Você pode, por favor, ser mais preciso? Diz " bash: ...: command not found"? Ou diz " bash: cat: command not found" ou " bash: nc: command not found"? E então ele sai para um prompt de shell ou trava? (Encorajo-vos a editar a questão para adicionar esses detalhes, para que as pessoas na Austrália, que só agora estão acordando não tem que ler todos estes comentários para descobrir o que seus sintomas são.)
Scott
@ Scott: Obrigado, integrei minhas respostas às suas perguntas na pergunta original. Alguma ideia?
Amil

Respostas:

7

Se você estiver usando a versão GNU do netcat, poderá usar o sinalizador -c para fechar a conexão no EOF.

-c, - feche a conexão estreita no EOF do stdin

Se você estiver usando a versão original da ferramenta, poderá usar o sinalizador -q.

-q segundos são encerrados após o EOF em stdin e atraso de segundos

Um exemplo para a versão original é:

cat file.txt | nc -u -q 0 127.0.0.1 5144

Eu adicionei "-q 0" ao seu comando original. Isso fecha a conexão após o envio do arquivo.

Kaplaa
fonte
Para distinguir: a versão original é a que requer especificação -l -p <port>para ouvir. A versão GNU apenas leva -l <port>.
tueftl
1

Supondo que após o envio da conexão EOF permaneça ocioso, você pode usar a -w timeoutopção, que funciona por timeoutser igual a zero (ao contrário da -qopção estúpida ...)

cat file.text | nc -u localhost 4300 -w0
Bora M. Alper
fonte
0

Se você estiver transferindo do FreeBSD para o Windows:

FreeBSD: cat file.txt | nc -N 10.0.0.5 5144

-N desligará o soquete de rede após o EOF

Janelas: nc -l -p 5144 > output.txt

-lparará de ouvir na conexão fechada (ao contrário -L)

Eugene Petrov
fonte