GNU/Linux >> Tutoriales Linux >  >> Linux

Primeros pasos con socat, una herramienta de retransmisión multipropósito para Linux

La utilidad socat es un relé para transferencias de datos bidireccionales entre dos canales de datos independientes.

Hay muchos tipos diferentes de canales socat puede conectarse, incluyendo:

  • Archivos
  • Tubos
  • Dispositivos (línea serie, pseudo-terminal, etc.)
  • Sockets (UNIX, IP4, IP6 - raw, UDP, TCP)
  • Conectores SSL
  • Conexiones de proxy CONNECT
  • Descriptores de archivos (stdin, etc.)
  • El editor de líneas GNU (readline)
  • Programas
  • Combinaciones de dos de estos

Esta herramienta se considera la versión avanzada de netcat. Hacen cosas similares, pero socat tiene más funciones adicionales, como permitir que varios clientes escuchen en un puerto o reutilizar conexiones.

¿Por qué necesitamos socat?

Hay muchas formas de usar socate efectivamente. Estos son algunos ejemplos:

  • Reenviador de puerto TCP (one-shot o daemon)
  • Socketsificador externo
  • Herramienta para atacar cortafuegos débiles (seguridad y auditoría)
  • Interfaz de shell para sockets Unix
  • Relé IP6
  • Redireccionar programas orientados a TCP a una línea serie
  • Conecte lógicamente líneas seriales en diferentes computadoras
  • Establezca un entorno relativamente seguro (su y chroot ) para ejecutar scripts de shell de cliente o servidor con conexiones de red

¿Cómo usamos socat?

La sintaxis de socat es bastante simple:

socat [options] <address> <address>

Debe proporcionar las direcciones de origen y destino para que funcione. La sintaxis de estas direcciones es:

protocol:ip:port

Ejemplos de uso de socat

Comencemos con algunos ejemplos básicos del uso de socat para varias conexiones.

1. Conéctese al puerto TCP 80 en el sistema local o remoto:

# socat - TCP4:www.example.com:80

En este caso, socat transfiere datos entre STDIO (-) y una conexión TCP4 al puerto 80 en un host llamado www.example.com.

2. Usa socat como reenviador de puertos TCP:

Para una sola conexión, ingrese:

# socat TCP4-LISTEN:81 TCP4:192.168.1.10:80

Para conexiones múltiples, use la fork opción como se usa en los siguientes ejemplos:

# socat TCP4-LISTEN:81,fork,reuseaddr TCP4:TCP4:192.168.1.10:80

Este ejemplo escucha en el puerto 81, acepta conexiones y reenvía las conexiones al puerto 80 en el host remoto.

# socat TCP-LISTEN:3307,reuseaddr,fork UNIX-CONNECT:/var/lib/mysql/mysql.sock 

El ejemplo anterior escucha en el puerto 3307, acepta conexiones y reenvía las conexiones a un socket Unix en el host remoto.

3. Implemente un recopilador de mensajes simple basado en la red:

# socat -u TCP4-LISTEN:3334,reuseaddr,fork OPEN:/tmp/test.log,creat,append

En este ejemplo, cuando un cliente se conecta al puerto 3334, se genera un nuevo proceso secundario. Todos los datos enviados por los clientes se adjuntan al archivo /tmp/test.log . Si el archivo no existe, socat lo crea La opción reuseaddr permite un reinicio inmediato del proceso del servidor.

4. Envía una transmisión a la red local:

# socat - UDP4-DATAGRAM:224.255.0.1:6666,bind=:6666,ip-add-membership=224.255.0.1:eth0

En este caso, socat transfiere datos desde stdin a la dirección de multidifusión especificada usando UDP sobre el puerto 6666 para las conexiones locales y remotas. El comando también le dice a la interfaz eth0 que acepte paquetes de multidifusión para el grupo dado.

Usos prácticos de socat

Socat es una gran herramienta para solucionar problemas. También es útil para realizar fácilmente conexiones remotas. Prácticamente he usado socat para conexiones MySQL remotas. En el siguiente ejemplo, demuestro cómo uso socat para conectar mi aplicación web a un servidor MySQL remoto mediante la conexión a través del socket local.

1. En mi servidor MySQL remoto, ingreso:

# socat TCP-LISTEN:3307,reuseaddr,fork UNIX-CONNECT:/var/lib/mysql/mysql.sock &

Este comando inicia socat y lo configura para escuchar usando el puerto 3307.

2. En mi servidor web, ingreso:

# socat UNIX-LISTEN:/var/lib/mysql/mysql.sock,fork,reuseaddr,unlink-early,user=mysql,group=mysql,mode=777 TCP:192.168.100.5:3307 &

El comando anterior se conecta al servidor remoto 192.168.100.5 mediante el puerto 3307.

Sin embargo, toda la comunicación se realizará en el socket de Unix /var/lib/mysql/mysql.sock , y esto hace que parezca un servidor local.

Resumir

socat es una utilidad sofisticada y, de hecho, una excelente herramienta para que todos los administradores de sistemas hagan las cosas y resuelvan problemas. Siga este enlace para leer más ejemplos del uso de socat.

[ Curso gratuito en línea:Descripción general técnica de Red Hat Enterprise Linux. ]


Linux
  1. Introducción a los cortafuegos de Linux

  2. Primeros pasos con awk, una poderosa herramienta de análisis de texto

  3. 5 consejos para comenzar con la seguridad del servidor Linux

  4. Primeros pasos con Samba para la interoperabilidad

  5. Primeros pasos con PostgreSQL en Linux

Primeros pasos con el sistema operativo Linux

Tutorial de Vagrant:Primeros pasos con Vagrant en Linux

Comenzando con VirtualBox en Linux – Parte 1

Primeros pasos con Flutter en el escritorio de Linux

Primeros pasos con Buildah para administrar contenedores de Linux

Introducción e instalación de Slack para Linux