Categorías: Tecnología

Cómo leer datos de un socket en Bash en Linux

XYZ/Shutterstock.com

La línea de comandos de Linux le permite recuperar datos escuchando en un socket o conectándose a un socket. Los datos se pueden capturar en un archivo de texto. Te mostramos cómo.

Clientes y servidores de socket

Los sockets permiten que el software en red se comunique. Se implementaron por primera vez en el sistema operativo 4.2BSD Unix , creado en la Universidad de California, Berkeley, en 1983. Rápidamente fueron adoptados por System V Unix y Microsoft Windows.

Un socket es un punto final de una conexión de red de software, abstraído para que pueda tratarse como un identificador de archivo. Eso significa que encaja con el principio de diseño general de Unix y Linux de » todo es un archivo «. No nos referimos al enchufe físico en la pared en el que conectas tu cable de red.

Si un programa se conecta a un socket en otra pieza de software, se considera que es el  cliente  del otro software. El software que permite que otro software solicite conexiones se denomina  servidor . Estos términos se usan independientemente de otros usos de cliente y servidor en el mundo de TI. Para evitar confusiones, a veces se denominan  cliente de socket  y  servidor de socket  para eliminar la ambigüedad. Los llamaremos clientes y servidores.

Los sockets se implementan como una interfaz de programación de aplicaciones (API) , lo que permite a los desarrolladores de software llamar a la funcionalidad del socket desde su código. Eso está bien si eres programador, pero ¿y si no lo eres? ¿O tal vez lo es, pero su caso de uso no justifica escribir una aplicación? Linux proporciona herramientas de línea de comandos que le permiten usar servidores de socket básicos y clientes de socket, según sus necesidades, para recuperar o recibir datos de otros procesos habilitados para socket.

Las relaciones nunca son fáciles

Los programas que vamos a utilizar son ncy ncat. Estas dos utilidades tienen una extraña relación. El ncprograma es una reescritura de ncat, que es mucho más antiguo que nc. Pero ncattambién se ha reescrito, y ahora nos permite hacer algunas cosas ncque no podemos. Y hay muchas implementaciones de ncat, que a su vez es un derivado de una herramienta llamada netcat. Además de eso, en la mayoría de las distribuciones , nchay un enlace simbólico ncaty no un programa separado.

Revisamos las distribuciones recientes de Arch, Manjaro , Fedora y Ubuntu . El único que requirió la instalación de las herramientas fue Manjaro. En Manjaro, necesita instalar el netcatpaquete para obtener nc, pero no obtiene ncat, obtiene netcat. Y en Manjaro, nchay un enlace simbólico a netcat.

sudo pacman -S netcat

La conclusión es, sobre el uso de Manjaro netcatcuando se ve ncaten los ejemplos de este artículo.

Escuchar en un socket

Si el software escucha las conexiones de socket entrantes, está actuando como un servidor.  Se dice que el servidor recibe cualquier dato que llegue a través de la conexión de socket  . Podemos replicar este comportamiento muy fácilmente usando nc. Todos los datos recibidos se muestran en la ventana del terminal.

Necesitamos decirle nca escuchar las conexiones, usando la -lopción (escuchar), y necesitamos especificar el puerto en el que vamos a escuchar las conexiones. Cualquier programa o proceso cliente que intente conectarse a esta instancia ncdebe usar el mismo puerto. Le decimos ncen qué puerto escuchar usando la -popción (puerto).

Este comando comienza nccomo un servidor de socket, escuchando una conexión en el puerto 6566:

nc -l -p 6566

Mientras espera una conexión entrante, ncno produce ningún resultado. Una vez que se establece una conexión, cualquier información recuperada se muestra en la ventana del terminal. Aquí, un programa cliente ha realizado una conexión que se identifica como «cliente 1».

Todo lo que se muestra por ncse recibe del cliente. Este cliente envía su nombre y un mensaje numerado que contiene la hora y la fecha .

Cuando el cliente interrumpe su conexión, ncfinaliza y vuelve al indicador de terminal.

Envío de datos a un archivo

Para capturar los datos del cliente en un archivo, podemos enviar la salida nc a un archivo mediante la redirección. Este comando guarda los datos recibidos en un archivo llamado «logfile.txt».

nc -l -p 6566 > archivo de registro.txt

No verá ningún resultado (va al archivo) y, paradójicamente, no sabrá si se ha producido una conexión hasta que ncfinalice. Volver al símbolo del sistema indica que se ha producido una conexión y que el cliente la ha terminado.

Podemos usarless para revisar el contenido del archivo “logfile.txt”.

menos logile.txt

Luego puede desplazarse por los datos y buscar usando las funciones integradas de less.

Envío de datos a un archivo y la ventana de terminal

Si desea ver los datos desplazándose por la ventana del terminal y enviarlos a un archivo al mismo tiempo, canalice la salida desde nca tee.

nc -l -p 6566 | tee logfile.txt

Aceptar múltiples conexiones

Todo eso está bien, pero tiene limitaciones. Solo podemos aceptar una conexión. Estamos limitados a recibir datos de un solo cliente. Además, cuando ese cliente pierde la conexión, nuestro servidor de socket nc finaliza.

Si necesita aceptar varias conexiones, debemos usar ncat. tendremos que indicarle ncatque escuche y que use un puerto en particular, tal como lo hicimos con nc. Pero también usaremos la -kopción (mantener vivo). Esto le indica ncatque siga ejecutándose y aceptando conexiones de clientes incluso cuando se cae la última conexión activa.

Este medio ncatse ejecutará hasta que decidamos terminarlo con “Ctrl-C”. Se aceptarán nuevas conexiones ya sea que ncatesté conectado actualmente a algún cliente o no.

ncat -k -l -p 6566

Podemos ver los datos de los diferentes clientes que aparecen en la salida a ncatmedida que se conectan.

Conexión a un servidor

También podemos usarlo nccomo cliente de socket y conectarnos a otro programa que esté aceptando conexiones, y esté actuando como servidor. En este escenario, nces el cliente de socket. Para hacer esto, necesitamos indicar ncdónde se encuentra el software del servidor en la red.

Una forma de hacerlo es proporcionar una dirección IP y un número de puerto. Si el servidor está en la misma PC en la que estamos ejecutando nc, podemos usar la dirección IP de bucle invertido de 127.0.0.1. No es que no se utilicen banderas para indicar la dirección del servidor y el número de puerto. Solo proporcionamos los valores apropiados.

Para conectarnos a un servidor en la misma PC y usando el puerto 6566, podríamos usar la dirección IP de loopback. El comando a utilizar es:

nc 127.0.0.1 6566

Los datos que ncse recuperan del servidor se desplazan por la ventana del terminal.

Si conoce el nombre de red de la computadora que ejecuta el software del servidor, puede usarlo en lugar de la dirección IP.

nc sulaco 6566

Utilice «Ctrl+C» para romper una conexión.

Rapido y Facil

ncy ncatse ajusta a la factura cuando no desea escribir un controlador de socket personalizado, pero necesita recopilar datos de alguna fuente habilitada para socket. Redirigir la salida a un archivo le permite revisar la salida usando lessy analizar el archivo usando utilidades como grep.

responroot

Compartir
Publicado por
responroot

Entradas recientes

Steamlytics: La nueva herramienta imprescindible para los gamers de Steam

  El mundo del gaming ha experimentado un crecimiento exponencial en los últimos años. La…

1 año hace

Cuándo reemplazar su antigua unidad flash USB

Stokkete/Shutterstock.com ¿Sigue utilizando una unidad flash USB obsoleta para almacenar sus archivos? ¿Por qué no…

3 años hace

¿Qué es una pantalla Nano IPS?

LG Los fabricantes siempre intentan mejorar el rendimiento de imagen de los monitores. Como resultado,…

3 años hace

10 formas de jugar con un presupuesto bajo (o nulo)

Patty Chan/Shutterstock.com Si cree en lo que ve en las redes sociales, puede pensar en…

3 años hace

¿Demasiadas suscripciones? Aquí está cómo empezar a cortarlos

Seksan.TH/Shutterstock.com Los servicios de suscripción como Netflix, Game Pass y Spotify nos permiten consumir tantas…

3 años hace

Cómo configurar la puerta de enlace predeterminada en Linux

fatmawati achmad zaenuri/Shutterstock El acceso a Internet, oa cualquier otra red, se rige por la…

3 años hace