¿Cómo utilizar nc para escuchar en un puerto TCP de forma indefinida?

¿Cómo utilizar nc para escuchar en un puerto TCP de forma indefinida?

Quiero leer los datos que llegan a un puerto TCP específico de forma indefinida y volcarlos en un archivo. He probado muchas variaciones diferentes ncpero no me funciona. En su mayor parte no recibo ningún error en la consola. A continuación se muestra lo que he probado:

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

Aprecio tu ayuda..

Respuesta1

Quiero leer los datos que llegan a un puerto TCP específico de forma indefinida.

Esto realmente no tiene sentido... si lo que buscaba era que todos los datos llegaran a un puerto UDP, entonces está bien; sin embargo, TCP es un protocolo basado en conexión. Una vez que un cliente se conecta y usted accept()termina con dos sockets: uno escuchando y otro conectado al cliente... nccerrará el socket de escucha original y tratará uno a uno con el cliente.


Si desea poder escuchar la conexión de varios clientes, intente usar socat:

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

Esto configurará un conector de escucha y bifurcará un nuevo proceso en la conexión, manteniendo el conector de escucha escuchando. Todos los datos recibidos se escribirán en stdout (descriptor de archivo 1), al que se redirige ../myfilepara agregarlo.

NOTA: los datos se recibirán de cualquier número de clientes, sin ningún orden garantizado y sin marcos... es decir: será un desastre de datos mezclados si tiene más de un cliente a la vez.


Si desea socatmanejar el archivo por usted, puede usar uno de CREATEo OPEN(consulte lapágina de manual):

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

Si estás contento con un "un cliente a la vez"acercarse, luego poner ncen un bucle:

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

Pruebe esto con nc:

nc localhost 12345

Respuesta2

la pantalla de la izquierda

nc -l 1234 inicia el servidor.

La pantalla de la derecha nc 127.0.0.1 1234se conecta.

Parece que te equivocaste con tus comandos.

Vale la pena saber también si estás usando el gnu o el bsd, el mío es el bsd. man nc muestra "NC(1) Manual de comandos generales BSD". Para iniciar el servidor en gnu, es posible que necesite -l con -p. Para conectar el cliente al servidor en cualquier puerto, nunca usará -p.

ingrese la descripción de la imagen aquí

Puedes usar -v también

ingrese la descripción de la imagen aquí

Su problema inmediato fue que no lo estaba ejecutando en absoluto.

Su pregunta es si es indefinido, y debo señalar que si hace Ctrl-c en el lado del cliente, además de interrumpir la conexión, detiene el servidor. Puedes poner ese servidor escuchando en un bucle. Eso funciona. Entonces el servidor continúa escuchando y todavía está allí si intenta conectarse nuevamente después de presionar Ctrl-c del cliente.

ingrese la descripción de la imagen aquí

información relacionada