¿Enviar contenido de archivo de texto al servidor usando netcat?

13

Hay un proceso demonio escuchando en el puerto 5144, que no puedo modificar.

Quiero usar netcat para enviar el contenido de un archivo de texto al servidor, pero esto hace netcatque se cuelgue el terminal hasta que presione Ctrl+ C:

cat file.txt | nc -u 127.0.0.1 5144

La única forma en que puedo hacer que funcione es ejecutando nc -u 127.0.0.1 5144y copiando / pegando el contenido del archivo manualmente.

¿Algunas ideas?


También tenga en cuenta:

  1. cat file.txt | ...conduce bash: ...: command not foundy puedo seguir usando el terminal
  2. usar nc -u 127.0.0.1 5144 < file.txtconduce al mismo comportamiento que usar | encima
Amil
fuente
¿Qué pasa cuando dices cat file.txt | …? ¿Qué tal nc -u 127.0.0.1 5144 < file.txt?
Scott
necesitas usar -u? Además, ¿intentaste por el otro lado, nc -l -p? e intentaste nc -p? (hay un nc que usa -l -p, y creo que usa -p sin -l). Solo ha mostrado un lado, el lado cliente / iniciador. ¿Qué haces para el lado del servidor? Intente como prueba, haciendo que nc escuche en el puerto 1234 y vea si cat ... | nc ... funciona para eso. Nunca lo había visto antes, así que quizás sea un punto débil, pero tal vez sea algo peculiar de este demonio en particular que no acepta cosas atrapadas.
barlop
No puedo modificar el demonio. @Scott: bash: ...: command not foundy usar "<file.txt" hace lo mismo que | operador (netcat simplemente se cuelga)
Amil
¿Puedes por favor ser más preciso? ¿Dice " bash: ...: command not found"? ¿O dice " bash: cat: command not found" o " bash: nc: command not found"? ¿Y luego sale a un indicador de shell o se cuelga? (Os animo a editar la pregunta para añadir estos datos, para que la gente en Australia que apenas están despertando no tienen que leer todos estos comentarios para averiguar cuáles son sus síntomas.)
de Scott
@Scott: Gracias, integré mis respuestas a sus preguntas en la pregunta original. ¿Algunas ideas?
Amil

Respuestas:

7

Si está utilizando la versión GNU de netcat, puede usar el indicador -c para cerrar la conexión en EOF.

-c, --cierra la conexión cercana en EOF desde stdin

Si está utilizando la versión original de la herramienta, puede utilizar el indicador -q.

-q segundos se cierra después de EOF en stdin y retraso de segundos

Un ejemplo para la versión original es:

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

He agregado "-q 0" a su comando original. Esto cierra la conexión después de que se haya enviado el archivo.

Kaplaa
fuente
Para distinguir: la versión original es la que requiere especificar -l -p <port>para escuchar. La versión de GNU simplemente toma -l <port>.
martes
1

Suponiendo que después de enviar la conexión EOF permanecerá inactiva, puede usar la -w timeoutopción, que funciona para timeoutser igual a cero (a diferencia de la -qopción estúpida ...)

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

Si está transfiriendo de FreeBSD a Windows:

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

-N apagará el socket de red después de EOF

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

-ldejará de escuchar cuando la conexión esté cerrada (a diferencia -L)

Eugene Petrov
fuente