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
ychroot
) 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. ]