GNU/Linux >> Tutoriels Linux >  >> Linux

Premiers pas avec socat, un outil de relais polyvalent pour Linux

L'utilitaire socat est un relais pour les transferts de données bidirectionnels entre deux canaux de données indépendants.

Il existe de nombreux types de canaux différents socat peut se connecter, y compris :

  • Fichiers
  • Tuyaux
  • Appareils (ligne série, pseudo-terminal, etc.)
  • Sockets (UNIX, IP4, IP6 - brut, UDP, TCP)
  • Prises SSL
  • Connexions proxy CONNECT
  • Descripteurs de fichiers (stdin, etc.)
  • L'éditeur de ligne GNU (readline)
  • Programmes
  • Combinaison de deux d'entre eux

Cet outil est considéré comme la version avancée de netcat. Ils font des choses similaires, mais socat a plus de fonctionnalités supplémentaires, telles que permettre à plusieurs clients d'écouter sur un port ou de réutiliser les connexions.

Pourquoi avons-nous besoin de socat ?

Il existe de nombreuses façons d'utiliser socate effectivement. Voici quelques exemples :

  • Redirecteur de port TCP (one-shot ou démon)
  • Sockifier externe
  • Outil pour attaquer les pare-feux faibles (sécurité et audit)
  • Interface shell avec les sockets Unix
  • Relais IP6
  • Rediriger les programmes orientés TCP vers une ligne série
  • Connecter logiquement des lignes série sur différents ordinateurs
  • Mettre en place un environnement relativement sécurisé (su et chroot ) pour exécuter des scripts shell client ou serveur avec des connexions réseau

Comment utilisons-nous socat ?

La syntaxe de socat est assez simple :

socat [options] <address> <address>

Vous devez fournir les adresses source et de destination pour que cela fonctionne. La syntaxe de ces adresses est :

protocol:ip:port

Exemples d'utilisation de socat

Commençons par quelques exemples de base d'utilisation de socat pour diverses connexions.

1. Connectez-vous au port TCP 80 sur le système local ou distant :

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

Dans ce cas, socat transfère les données entre STDIO (-) et une connexion TCP4 vers le port 80 sur un hôte nommé www.example.com.

2. Utilisez socat en tant que redirecteur de port TCP :

Pour une connexion unique, saisissez :

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

Pour plusieurs connexions, utilisez le fork option telle qu'utilisée dans les exemples ci-dessous :

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

Cet exemple écoute sur le port 81, accepte les connexions et transmet les connexions au port 80 sur l'hôte distant.

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

L'exemple ci-dessus écoute sur le port 3307, accepte les connexions et transmet les connexions à un socket Unix sur l'hôte distant.

3. Implémentez un simple collecteur de messages basé sur le réseau :

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

Dans cet exemple, lorsqu'un client se connecte au port 3334, un nouveau processus enfant est généré. Toutes les données envoyées par les clients sont ajoutées au fichier /tmp/test.log . Si le fichier n'existe pas, socat le crée. L'option reuseaddr permet un redémarrage immédiat du processus serveur.

4. Envoyez une diffusion sur le réseau local :

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

Dans ce cas, socat transfère les données de stdin à l'adresse de multidiffusion spécifiée en utilisant UDP sur le port 6666 pour les connexions locales et distantes. La commande indique également à l'interface eth0 d'accepter les paquets multicast pour le groupe donné.

Utilisations pratiques de socat

Socat est un excellent outil de dépannage. Il est également pratique pour établir facilement des connexions à distance. Pratiquement, j'ai utilisé socat pour les connexions MySQL distantes. Dans l'exemple ci-dessous, je montre comment j'utilise socat pour connecter mon application Web à un serveur MySQL distant en me connectant via le socket local.

1. Sur mon serveur MySQL distant, je saisis :

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

Cette commande démarre socat et le configure pour écouter en utilisant le port 3307.

2. Sur mon serveur web, je saisis :

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

La commande ci-dessus se connecte au serveur distant 192.168.100.5 en utilisant le port 3307.

Cependant, toutes les communications se feront sur le socket Unix /var/lib/mysql/mysql.sock , et cela le fait apparaître comme un serveur local.

Récapitulez

socat est un utilitaire sophistiqué et en fait un excellent outil pour chaque administrateur système pour faire avancer les choses et pour le dépannage. Suivez ce lien pour lire d'autres exemples d'utilisation de socat.

[ Cours en ligne gratuit :Présentation technique de Red Hat Enterprise Linux. ]


Linux
  1. Premiers pas avec les pare-feux Linux

  2. Premiers pas avec awk, un puissant outil d'analyse de texte

  3. 5 conseils pour démarrer avec la sécurité des serveurs Linux

  4. Premiers pas avec Samba pour l'interopérabilité

  5. Premiers pas avec PostgreSQL sous Linux

Premiers pas avec le système d'exploitation Linux

Tutoriel Vagrant - Premiers pas avec Vagrant sous Linux

Premiers pas avec VirtualBox sous Linux - Partie 1

Premiers pas avec Flutter sur Linux Desktop

Premiers pas avec Buildah pour la gestion des conteneurs Linux

Prise en main et installation de Slack pour Linux